Page 1 of 1

how extract a single mic signal from c_4x_pdm_mic_0 channel returned by mic_array_pdm_rx()

Posted: Wed Apr 18, 2018 2:49 pm
by Fabrizio
Hi all,
I would like to extract a mic signal from the 4-mic streaming channel "c_4x_pdm_mic_0" outputted by mic_array_pdm_rx().

From pdm_mic.xc :

mic_array_pdm_rx(p_pdm_mics, c_4x_pdm_mic_0, c_4x_pdm_mic_1);
mic_array_decimate_to_pcm_4ch(c_4x_pdm_mic_0, c_ds_output[0], MIC_ARRAY_NO_INTERNAL_CHANS);

I added a task that take c_4x_pdm_mic_0 as an input channel.
I saw that mic_array_pdm_rx returns more or less 1536000 integers per second.
Taking into account that the flow is at 384kHz, this means 384k integers/sec for each mic.

Does anyone know how the 4 mics data are chained in to this streaming channel?
How many bits is the length of each mic sample?
Do you have any example code showing how extract such mics?

Many thanks
Fabrizio

Re: how extract a single mic signal from c_4x_pdm_mic_0 channel returned by mic_array_pdm_rx()

Posted: Mon Apr 23, 2018 2:22 pm
by infiniteimprobability
Just to be clear - you want intercept the 384kHz audio post first stage?

There will be a lot of modulation noise up to the 0.1 * 3.072MHz stopband so you will definitely need subsequent stages of filtering.

The data format is just signed (32b) ints..

Re: how extract a single mic signal from c_4x_pdm_mic_0 channel returned by mic_array_pdm_rx()

Posted: Wed May 02, 2018 4:57 pm
by Fabrizio
Hi,
I should extract one mic signal sampled at 48 kHz (96 kHz also could be fine).
What do you suggest me to do?

I thought about 2 alternatives:

1) extract the 96 kHz signal after the first stage inside mic_array_decimate_to_pcm_4ch() and decimate it.
This requires to change the assembler code and for now I am not able to do it.

2) use the output channel from mic_array_pdm_rx() and decimate it to 48 kHz.

About the data format ... signed 32b for each mic ... therefore each frame is 4 interleaved samples? (mic0, mic1, mic2, mic3 and so on)

Thanks for your help
Fabrizio