PDM Channel swapping at High PDM clock

Dear Nordic Team, 
I am currently working with 2 Infineon IM73D122V01 PDM Mems microphones to obtain stereo data, One is configured as left and the other is configured as right channel, To achieve better SNR, Infineon recommends using 3.072MHz PDM Clock, I am currently using 3.2Mhz clock with a ratio of 80.
For testing purposes i have covered the left microphone with glue and playing a fix 500hz tone to the mic and checking the output. 

1. For mono recording the setup works I can verify the frequency in STFT graph and i can see that the sensitivity of the left channel is considerable low.

2. For stereo recording i can still verify the frequency on both channels to be correct however the channels have swapped for some reason, left channel is supposed to be less sensitive (low amplitude in time domain plot), however i am getting more sensitivity on left channel as compared to right channel. 

3. I have also checked on 1.28MHz PDM clock and Stereo recording is correct (Channels are NOT swapped), 

4. I have also checked on different set of Microphones (Vesper VM3000) and i am seeing the same behaviour (Mono channel works correctly for both 1.28MHz and 3.2 MHz, stereo works for 1.28MHz but channel swapped for 3.2MHz).

What could be the reason for the channel swapping at 3.2MHz PDM clock and what is he solution to this problem. 

I am using NRF52840 module with NRF5SDK. Any help is greatly appreciated.

Thank you

Parents
  • Hi

    Just letting you know that we're currently looking into this issue. What library/driver are you using for PDM here, and what version of the SDK are you using exactly?

    Best regards,

    Simon

  • Hi Simonr, Thank you for the reply, I am using PDM Library by Nordic, and I am using NRF5SDK v17.1.0
    here is my configuration

    ret_code_t err_code;
    uint32_t clk_freq = 0x19000000;
    nrfx_pdm_config_t config = NRFX_PDM_DEFAULT_CONFIG(PDM_CONFIG_IO_PDM_CLK, PDM_CONFIG_IO_PDM_DATA);
    config.gain_l = rec_config.gain;
    config.gain_r = rec_config.gain;
    config.clock_freq = ( nrf_pdm_freq_t )(clk_freq);
    config.edge = PDM_MODE_EDGE_LeftFalling;
    config.mode = PDM_MODE_OPERATION_Stereo;
    // set ratio to 80x
    NRF_PDM->RATIO = 1;
    
    err_code = nrfx_pdm_init(&config, PDM_drv_pdm_handler);
    APP_ERROR_CHECK(err_code);
    err_code = nrfx_pdm_start();
    APP_ERROR_CHECK(err_code);

Reply
  • Hi Simonr, Thank you for the reply, I am using PDM Library by Nordic, and I am using NRF5SDK v17.1.0
    here is my configuration

    ret_code_t err_code;
    uint32_t clk_freq = 0x19000000;
    nrfx_pdm_config_t config = NRFX_PDM_DEFAULT_CONFIG(PDM_CONFIG_IO_PDM_CLK, PDM_CONFIG_IO_PDM_DATA);
    config.gain_l = rec_config.gain;
    config.gain_r = rec_config.gain;
    config.clock_freq = ( nrf_pdm_freq_t )(clk_freq);
    config.edge = PDM_MODE_EDGE_LeftFalling;
    config.mode = PDM_MODE_OPERATION_Stereo;
    // set ratio to 80x
    NRF_PDM->RATIO = 1;
    
    err_code = nrfx_pdm_init(&config, PDM_drv_pdm_handler);
    APP_ERROR_CHECK(err_code);
    err_code = nrfx_pdm_start();
    APP_ERROR_CHECK(err_code);

Children
No Data
Related