首页 > 解决方案 > MCU 信号处理 PDM 到 PCM

问题描述

我想用无线传感器(使用 STM32F1 + wifi 模块)测量背景噪声 - 房间内的语音响度。我买了一个 MEMS 麦克风(MP34DT01)。此麦克风具有 PDM 输出。我为麦克风生成 1.4 MHz 时钟,因此采样率为 1.4 MSample/s。我读了很多关于 PDM 的文章,得出的结论是我只需要使用低通滤波器。

现在我将 1000 个样本读入一个缓冲区数组(巨大的开销,因为我将一些存储为 uint8)然后我使用具有 20kHz 切割频率的二阶 IIR Butterworth。然后我通过 TCP 将数据发送到我的 PC 并绘制实时图表。处理示例代码:

#define NZEROS 2
#define NPOLES 2
#define GAIN   5.282971791e+02

float filtered[1000] = {0}; 
uint8_t buffer[1000] = {0};
static float xv[NZEROS+1], yv[NPOLES+1];

while(1){
    //Read data from microphone
    MP34DT01_Listen(buffer);

    for(int i = 0, i<1000; i++){
       { xv[0] = xv[1]; xv[1] = xv[2]; 
         xv[2] = buffer[i] / GAIN;
         yv[0] = yv[1]; yv[1] = yv[2]; 
         yv[2] =   (xv[0] + xv[2]) + 2 * xv[1]
         + ( -0.8807871294 * yv[0]) + (  1.8732156333 * yv[1]);
         filtered[i] = yv[2];
              }
        }

    //Send data over TCP to python client
    WifiSend(filtered);
}

输出数据与噪音无关,我对着麦克风说话,敲了敲它,但似乎我处理了噪音,它们都没有出现在图表上。我尝试使用具有 16 个窗口的移动平均滤波器,我尝试了另一个低通滤波器,我尝试了 64 抽取而不是滤波器和滤波器而不是抽取。

将 PDM 转换为 PCM 的正确方法是什么?

标签: audioembeddedsignal-processingpcm

解决方案


推荐阅读