MCU信号处理PDM至PCM

时间:2018-10-01 12:14:17

标签: audio embedded signal-processing pcm

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

现在,我将1000个样本读取到一个缓冲区阵列中(这非常费钱,因为我将某些位存储为uint8),然后使用二阶IIR Butterworth(切割频率为20kHz)。然后,我通过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的正确方法是什么?

0 个答案:

没有答案