STM32 USB AUDIO 基础篇③——模拟MIC、ECM数字麦克风、MEMS数字麦克风、PDM、PCM的简介与差异

本文介绍了模拟麦克风、ECM数字麦克风和MEMS数字麦克风在音频设备中的应用,强调了数字化趋势。PCM和PDM作为两种不同的数字音频信号表示方式,各有其应用场景。PCM常用于音频播放和录制,而PDM则常见于低功耗音频系统。文中还提到了STM32通过I2S和SAI与音频IC交互的实现方式,以及不同音频处理方案的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、模拟麦克风、ECM数字麦克风、MEMS数字麦克风

麦克风的演变,主要是这几大要求

  • 小型化
  • 抗干扰
  • SMT焊接
  • 抑制和消除环境噪声和通话回声等

这几点要求,就导致麦克风数字化趋势越来越明显。

如今的应用方案中,就算是使用模拟麦克风,也必然会加一个特定的音频芯片。

1.1 模拟麦克风

ECM 模拟麦克风通常是由如下几个部件组成

  • 振膜
  • 背极板
  • 屏蔽外壳
  • 结型场效应管(JFET)

ECM模拟麦克风

1.2 ECM数字麦克风

ECM 数字麦克风通常是由如下几个部件组成

  • 振膜
  • 背极板
  • 屏蔽外壳
  • 数字麦克风芯片
    • BUG缓冲级
    • AMP放大级
    • Filter低通滤波器
    • ADC模数转

在这里插入图片描述

1.3 MEMS数字麦克风

MEMS 数字麦克风主要由如下几个部件组成

  • MEMS传感器
    • 半导体工艺制成的振膜
    • 背极板
    • 支架
  • 充电泵
  • 屏蔽外壳
  • 数字麦克风芯片

在这里插入图片描述

二、PCM和PDM信号

2.1 脉冲编码调制PCM信号

在PCM信号中,具体的幅度值被编码为脉冲。

PCM流有两个基本属性,它们决定了流相对于原始模拟信号的保真度:

  • 采样率
  • 位深

采样率是为了以数字方式表示信号,每秒采集的信号样本数。位深决定了每个样本中信息的位数。
在这里插入图片描述

2.2 脉冲密度调制PDM信号

PDM是一种调制形式,用于表示数字域中的模拟信号。它是1位数字采样的高频数据流。

在PDM信号中,脉冲的相对密度对应于模拟信号的幅度。

  • 大量的1s对应于高(正)幅度值
  • 大量的0s对应于低(负)幅度值
  • 交替的1s和0s对应于幅度值0

在这里插入图片描述

2.3 PDM到PCM的转换

为了将PDM流转换为PCM样本,需要对PDM流进行滤波和抽取。

  • 滤波,低通滤波器,用于避免混叠导致的失真;
  • 抽取,在每M个样本中选择一个,将采样率降低为1/M,M通常处于48至128的范围之内。

STM32CubeExpansion_USBAudioStreaming扩展包中,每64个PDM数据转换成1个PCM数据。

/* PDM buffer input size */
   /*each 64 pdm sample produce 16 PCM sample then required size of buffer in ms is 
   (FREQ*RES*N_CHANNELS/1000)/16*64)*/
#define PDM_BUF_SIZE(freq) ((((int)freq/1000)*64/8)*((DEFAULT_AUDIO_IN_CHANNEL_NBR)))
/* PCM buffer output size */
#define PCM_OUT_SIZE(freq)                        ((freq)/1000*2)

三、PCM和PDM应用

3.1 PCM典型应用

I2S
IIC
DAC驱动
DAC驱动
ADC驱动
STM32
音频IC
喇叭
耳机
模拟麦克风
  • STM32通过IIC对音频IC进行寄存器设置
  • STM32通过I2S与音频IC进行音频数据传输,包括
    • 音频播放,传输PCM数据
    • 音频录制,接收PCM数据

这个方案相对简单,且性能强大,市面上大部分K歌直播麦克风都是这样子做的。
在这里插入图片描述

在这里插入图片描述

3.2 PDM典型应用

SAI音频传输
IIC
I2S音频接收
TIM4 PWM输出
DAC驱动
DAC驱动
STM32
音频IC
MEMS数字麦克风
喇叭
耳机
  • STM32通过IIC对音频IC进行寄存器设置
  • STM32通过SAI传输音频数据给音频IC进行音频播放
  • STM32通过I2S接收音频数据从MEMS数字麦克风的录音数据
  • STM32通过TIM4给MEMS数字麦克风clk信号

STM32F446E-EVALSTM32F769IDISCOVERY这两个开发板是这么做的。

  • 这么做的坏处是,相对复杂!
  • 这么做的好处是,如果不需要音频播放,只要音频录制。就能够省成本了。

在这里插入图片描述

3.3 再多说一点

WM8994也是一款很强大的音频芯片,也能做到PCM音频数据传输,如下。
在这里插入图片描述
在这里插入图片描述

觉得好,就一键三连呗(点赞+收藏+关注)

### STM32 数字麦克风 LDM 使用教程 #### 1. 硬件连接 为了使STM32能够接收来自数字麦克风的数据,硬件连接至关重要。通常情况下,数字麦克风通过I²S接口微控制器通信。确保正确配置SPI/I²S引脚,并按照数据手册中的指导完成物理连接。 对于LDM (Low-Dropout Microphone),其输出通常是PDM (Pulse Density Modulation)格式,在某些应用中可能需要额外的滤波电路来处理这些信号并将其转换为PCM (Pulse Code Modulation)[^1]。 #### 2. 初始化 I²S 接口 初始化过程中需设置I²S参数以匹配所选音频设备的要求: ```c static void MX_I2S_Init(void) { hi2s.Instance = SPIx; hi2s.Init.Mode = I2S_MODE_MASTER_RX; // 主模式接收 hi2s.Init.Standard = I2S_STANDARD_PHILIPS; hi2s.Init.DataFormat = I2S_DATAFORMAT_16B_EXTENDED; hi2s.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; hi2s.Init.AudioFreq = AudioFrequency; hi2s.Init.CPOL = I2S_CPOL_LOW; HAL_I2S_Init(&hi2s); } ``` 此部分代码用于设定I²S的工作模式、标准协议类型、数据宽度以及其他必要选项。 #### 3. 配置 DMA 进行连续传输 DMA允许CPU在后台自动管理大量数据流,从而提高效率。下面是一个简单的例子展示如何启动一个循环读取操作: ```c HAL_DMA_Start_IT(hi2s.hdmarx, (uint32_t)&hi2s.Instance->DR, (uint32_t)pBuffer, BufferSize); __HAL_I2S_ENABLE(hi2s.Instance); HAL_I2S_Receive_DMA(&hi2s, pBuffer, SizeOfDataToRead); ``` 这里`pBuffer`指向存储接收到的声音样本的目标缓冲区;而`BufferSize`定义了一次可以处理的最大样本数量。 #### 4. 数据处理分析 一旦获取到原始声音样本,则可以根据具体应用场景执行进一步的操作,比如特征提取、语音识别或是简单播放回放等功能实现。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小康师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值