PDM数字麦克风 ESP32-S3测试
你好!此文章只是简单测试了PDM麦克风,没有过多深度测试。时间有限!!!为什么讲PDM麦克风,主要还是记录前段时间制作聊天机器人声音采集部分电路时随便测试了一下。PDM麦克风在近距离采集识别还是够用,主要还是便宜!如果要高质量采集,不建议PDM麦克风。个人观点)。希望文章对你有一点点帮助......提示:以下是本篇文章正文内容,下面案例只供参考PDM麦克风在近距离语音采集(如语音指令、简单降噪)中
提示:本文内容仅供学习参考。Author: Jonnie Walker
目录
前言
你好! 此文章只是简单测试了PDM麦克风,没有过多深度测试。时间有限!!!
为什么讲PDM麦克风,主要还是记录前段时间制作聊天机器人声音采集部分电路时随便测试了一下。PDM麦克风在近距离采集识别还是够用,主要还是便宜!如果要高质量采集,不建议PDM麦克风。(注:个人观点)。希望文章对你有一点点帮助......
提示:以下是本篇文章正文内容,下面案例只供参考
一、PDM麦克风?
PDM麦克风(Pulse Density Modulation Microphone)是一种基于脉冲密度调制技术的数字麦克风。与传统的模拟麦克风(输出模拟电压信号)或PCM(脉冲编码调制)数字麦克风不同,PDM麦克风直接将声音信号转换为单比特的数字脉冲序列,通过脉冲密度的高低来表征声音信号的幅度。
PDM麦克风的核心特点:
1.数字信号输出:直接输出数字信号,无需外部模数转换器(ADC)。
2.抗干扰能力强:数字信号传输对电磁噪声不敏感,适合复杂电磁环境。
3.结构简单:仅需时钟(CLK)和数据(DATA)两根信号线即可通信。
4.低功耗:典型功耗在数百微安级别,适合电池供电设备。

1. 工作原理
PDM(Pulse Density Modulation,脉冲密度调制)麦克风是一种直接输出数字信号的麦克风,其核心原理基于 Sigma-Delta(Σ-Δ)调制技术。
1.声电转换:声音通过振膜转换为模拟电信号。
2.过采样与调制:模拟信号经过 高频率过采样(通常为几 MHz),随后由Sigma-Delta调制器将其转换为 1-bit 数字脉冲流。脉冲的密度(单位时间内“1”的数量)与输入信号的幅度成正比。
3.数字输出:最终输出为数字信号(如PDM格式),可直接传输至处理器,无需额外ADC(模数转换器)。
2.优势
1.抗干扰性强:数字信号传输(如PDM或I2S接口)对电磁噪声不敏感,适合长距离布线(如智能家居设备)。
2.高集成度:内置ADC和调制器,简化外围电路设计。
3.低功耗:适合电池供电设备(如TWS耳机、物联网传感器)。
4.高信噪比(SNR):通常可达60-70 dB,适合语音识别等高质量音频采集场景。
5.兼容性:直接对接数字处理器(如DSP、MCU),无需编解码器(Codec)。
3.应用
1.消费电子:智能手机、TWS耳机、智能音箱(如Amazon Echo的麦克风阵列)。
3.语音交互系统:智能助手(Alexa、Siri)、车载语音控制。
4.工业与医疗:噪声环境下的语音采集(如工厂监测)、助听器、听诊设备。
5.IoT设备:低功耗传感器、安防系统中的语音触发功能。
6.增强现实(AR):空间音频采集与定向拾音。
4.选择考虑因素
1.采样率与带宽:
- 语音场景:16-48 kHz(如电话会议);
- 高保真音频:需更高采样率(如96 kHz)。
2.信噪比(SNR):
- 语音识别:至少60 dB;
- 音乐录制:需更高SNR(>65 dB)。
3.功耗:
- 移动设备:选择低功耗模式(如<1 mA)。
4.接口类型:
- PDM接口:节省引脚,适合多麦克风阵列;
- I2S接口:兼容性更广,但需更多引脚。
5.方向性:
- 全向麦克风:360°拾音(如会议设备);
- 单向麦克风:聚焦特定方向(如直播麦克风)。
6.尺寸:
- MEMS(微机电)PDM麦克风:超小体积(如3.5×2.65 mm),适合TWS耳机。
7.多麦克风同步:
- 支持主从模式或同步时钟,用于波束成形(Beamforming)或降噪算法。
8.电源电压:
- 低电压兼容性(如1.8V或3.3V)以适应不同系统。
2. 常用PDM麦克风型号
1. IM69D130
- 特点:高信噪比(69dB)、宽动态范围(130dB SPL),适合高保真录音。
- 应用:专业录音设备、高端会议系统。
2. SPH0641LU4H-1
- 特点:低功耗(< 1mA)、小尺寸(3.76mm × 2.95mm),支持双麦克风波束成形。
- 应用:TWS耳机、智能手机语音助手。
3. ST MP34DT05J
- 特点:集成MEMS传感器与PDM接口,成本低,功耗仅600µA。
- 应用:智能家居(如语音控制音箱)、可穿戴设备。
4.等。
二、测试过程
1.硬件
PDM麦克风的通信原理:
1. 数字输出:脉冲序列通过DATA线输出,CLK线提供同步时钟(典型频率1–3.2MHz)。
通信接口
- 主从模式:多个PDM麦克风可共享同一时钟源,通过DATA线分时传输数据。
- 数据格式:
- 单声道:单根DATA线传输,时钟上升沿或下降沿采样。
- 双声道:两根DATA线(左/右声道)分时复用。
这是本次测试电路:图1
图1

图1我们看到只用了两个引脚:DATA,CLK。图2是实景图
图2

测试使用硬件:
1.ESP32-S3开发板
2.图2中PDM麦克风
2.软件
代码如下(示例):
/**
* @file main.cpp
* @author jonnie Walker
* @brief Ai+ESP32S3_Test
* @version 0.1
* @date 2024-08-31
*
* @copyright Copyright (c) 2024
*
* --------------------------------------------------------------------/
*/
#include <driver/i2s.h>
//PDM麦克风测试
// Configure PDM microphone pins
#define PDM_CLK_PIN 41 // PDM 时钟引脚 (CLK)
#define PDM_DATA_PIN 42 // PDM 数据引脚 (DATA)
//#define I2S_SCK 40
// I2S configuration
#define SAMPLE_RATE 16000 // Sampling rate: 16kHz
#define I2S_BUFFER_SIZE 1024 // I2S DMA buffer size
#define I2S_PORT I2S_NUM_0 // Use I2S port 0
void setup() {
Serial.begin(115200);
// Set I2S parameters
i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX), // Main mode, receive data
.sample_rate = SAMPLE_RATE,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, // Each sample is 16 bits
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT, // Mono
.communication_format = I2S_COMM_FORMAT_I2S, // I2S communication format
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, // Interrupt priority
.dma_buf_count = 4, // Number of DMA buffers
.dma_buf_len = I2S_BUFFER_SIZE, // Length of each DMA buffer
.use_apll = false // Do not use APLL
};
// Set pin parameters for the I2S
i2s_pin_config_t pin_config = {
.bck_io_num = PDM_CLK_PIN, // Clock pin
.ws_io_num = -1, // Do not use WS (LRCLK)
.data_out_num = -1,
.data_in_num = PDM_DATA_PIN // Data entry pin
};
// Install the I2S driver
if (i2s_driver_install(I2S_PORT, &i2s_config, 0, NULL) != ESP_OK) {
Serial.println("Failed to install I2S driver.");
while (true);
}
// Set the I2S pin
if (i2s_set_pin(I2S_PORT, &pin_config) != ESP_OK) {
Serial.println("Failed to set I2S pins.");
while (true);
}
// Clear the DMA buffer
i2s_zero_dma_buffer(I2S_PORT);
Serial.println("PDM Microphone Initialized.");
}
void loop() {
// Create a buffer
int16_t i2s_buffer[I2S_BUFFER_SIZE];
size_t bytes_read;
// Read data from I2S
i2s_read(I2S_PORT, (void*)i2s_buffer, sizeof(i2s_buffer), &bytes_read, portMAX_DELAY);
// Calculate the absolute mean value of the audio signal
int32_t sum = 0;
int sample_count = bytes_read / sizeof(int16_t);
for (int i = 0; i < sample_count; i++) {
sum += abs(i2s_buffer[i]);
}
int average_amplitude = sum / sample_count;
// Print audio signal strength
Serial.print("Average amplitude: ");
Serial.println(average_amplitude);
delay(100);
}
将程序下载到测试电路,以下是串口打印数据:
当我们对着麦克风吹气时就看到图3 打印数据变化了(红色标记部分)!
图3

此时麦克风是正常工作的!
非常感谢你能看到这里。希望以上内容对你有帮助!如果发现内容有不对地方请多多指点,感谢! iTEM
最近小智AI很火他的硬件设计也可以采用PDM麦克风,这个已经验证过了是可行的。我发现使用的比较多是ICS43434, INMP441已经停产不利于大量生产。ICS434可以直接替换INMP441两者通信接口都是I2S,我通过不改变小智软件的情况下测试了完全可行的。
总结
PDM麦克风在近距离语音采集(如语音指令、简单降噪)中性价比突出。 验证了PDM麦克风与ESP32的兼容性,为低成本语音交互设备提供参考方案。(本文为快速验证性测试,未涉及多麦克风阵列、高级降噪算法或功耗优化等进阶内容!)
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)