audio - 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 的正确方法是什么?
解决方案
推荐阅读
- hibernate - 如何在 Hibernate Search 中搜索两个或更多术语?
- python - for 循环中的 if 语句 - python-docx-template jinja
- ruby-on-rails - 什么时候需要在 Rails 中使用 JSON Web Token 认证?
- oop - 为什么要将值传递给超类?子类到超级
- windows - 运行 Minikube build-env 后无法构建 docker 镜像
- sql - 从 postgres 的字符串数组列中删除重复的条目
- git - 在 git 中添加“--single-branch”有什么区别?
- php - 无法设置多维数组映射蚂蚁从数组中获取指定的列值
- r - 更新 SQLite 数据库而不在本地下载数据
- angular - 我正在尝试实现材料排序