Forums

PDM to PCM

Started by D3dalo 1 month ago2 replieslatest reply 1 month ago145 views

Hi, I have a PDM signal and I wanna convert it to a PCM signal. This signal is sample at 1MHz. This is the process that I am following:

  1. Filter the signal with a FIR filter
  2. Decimating the signal

I know that is possible to implement both 1 and 2 in the same function.

Now what I wanna ask is: since I am filtering using a FIR filter which are the values of the cutoff frequency and sampling frequency that I need to use? Since I am using a decimation factor of 64 I choose to use:

  •  Fs = 1MHz, Fcut = 1MHz / 64

Following this process using the online design tool as TFilter produce a large number of filter coefficient (~1000)

[ - ]
Reply by chalilDecember 30, 2022

Hi, PDM can simply be low pass filtered to get the PCM. Low pass cutoff is decided based on what highest frequency you want to keep in the resulting PCM. In practice, to keep the data rate compact you may also want to perform decimation. 

CIC is a filter structure which will perform FIR + decimation. CIC is efficient as there’s no mult involved in the operation!

CIC has two parameters M and N. N is decimation factor and M is I integration stages.

For you case, pdm rate = 1M

Let the decimation factor be 64

Then the resulting pcm rs = 1024/64 = 16kHz

To make cic filter more accurate CIC + fir is used.

In this case, CIC N = 32

Fir aka cfir will be half band fir for which coefficient is designed to get rid of non ideal cic response. Search for compensation filter for CIC. Since cfir perform additional /2 decimation, the net decimation = 64.

Very often, an additional fir filter is kept after CFIR. This will typically be application specific. For example, in a communication receiver, this may be a band filter. In such cases, the decimation factors cic = 16, cfir = 2, pfir = 2. Net = 64.

Pfir coef are decided based on the application.

Hope it helps.

Regard

Chalil

[ - ]
Reply by Robert WolfeDecember 31, 2022

You want to filter to at least ( 1 MHz / 128 ), which is the Nyquist of your new sample rate, to avoid aliasing.  Yes, it could be a long FIR filter, but you only need/have to calculate every 64th output.  Polyphase methods will distribute that computational load.

Robert