2、音频基础:声音的数字化表示、采样率、位深、频谱与梅尔频率倒谱系数(MFCC)简介
在进入 TinyML 音频 CNN 模型设计之前,必须先建立对音频数据本身的清晰认知。声音在物理世界是连续变化的空气压力波,而机器学习模型只能处理离散的数值张量。这一从连续到离散的转换过程,决定了后续所有特征工程与模型性能的上限。本章将系统梳理声音数字化的核心参数、频域变换的基本逻辑,以及 TinyML 场景下最常用的特征——梅尔频率倒谱系数(MFCC)的提取原理与工程约束。
2.1 声音的数字化:采样率与位深
声音数字化本质上是将连续时间、连续幅度的声波信号,转换为离散时间、离散幅度的数值序列。这一过程由模数转换器(ADC)完成,涉及两个核心参数:采样率(Sample Rate)和位深(Bit Depth)。采样率决定了每秒钟对模拟信号采样的次数,位深决定了每次采样能够表示的幅度精度。两者共同决定了数字音频的数据量与保真度。
根据奈奎斯特采样定理,采样率必须至少为信号最高频率的两倍,才能无失真地重建原始信号。人耳听觉范围约为 20Hz 至 20kHz,因此 CD 音质采用 44.1kHz 采样率。但在 TinyML 场景中,绝大多数语音命令(如"唤醒词"、"开灯"、"停止")的能量集中在 300Hz 至 4kHz 频段,因此 16kHz 采样率已成为嵌入式语音识别的实际标准。16kHz 采样率可覆盖 8kHz 带宽,足以捕捉语音的绝大部分信息,同时将数据量降至 CD 音质的约三分之一。
位深决定了每个采样点的动态范围。16bit 位深提供 96dB 的信噪比,能够覆盖从耳语到正常对话的幅度变化。8bit 位深虽然动态范围仅 48dB,但在 MCU 上可以使用整数运算加速,且经过适当的增益控制后,对语音识别准确率的影响通常小于 2%。实际工程中,许多 TinyML 平台(如 TensorFlow Lite Micro)默认接受 16bit PCM 输入,但在模型内部使用 8bit 量化权重进行推理。
工程经验:在资源受限的 MCU 上,选择采样率时不要盲目追求高保真。例如,一个 1 秒的音频片段,在 16kHz/16bit 单声道下占用 32KB 内存;若降至 8kHz/16bit,则仅需 16KB。对于关键词识别任务,8kHz 采样率通常已足够,但需注意抗混叠滤波器的设计,避免高频噪声折叠到低频段。
2.2 分帧与加窗:从时间序列到短时频谱
语音信号具有短时平稳性——在 10ms 至 30ms 的时间窗口内,信号的频谱特性可以认为是近似不变的。因此,处理音频时不能直接对整个长序列做傅里叶变换,而需要将信号切分为若干短帧,逐帧提取频谱特征。分帧操作涉及两个参数:帧长(Window Length)和帧移(Hop Length)。典型配置为帧长 30ms、帧移 20ms,即相邻帧之间有 10ms 的重叠,以保证帧间特征的平滑过渡。
分帧后,每一帧信号需要乘以一个窗函数(如汉明窗、汉宁窗),目的是减少帧边界处的频谱泄漏。矩形窗在频域会产生较高的旁瓣,导致频谱能量扩散到相邻频点;汉明窗的旁瓣衰减约 40dB,是语音处理中最常用的选择。加窗后的每一帧信号,通过快速傅里叶变换(FFT)得到该帧的频谱,取幅度平方后得到功率谱。
对于 16kHz 采样率、30ms 帧长,每帧包含 480 个采样点。FFT 点数通常取 512(补零至 2 的幂次),得到 257 个有效频点(0Hz 至 8kHz,频率分辨率为 31.25Hz)。这一频谱向量即为后续梅尔滤波的输入。
2.3 梅尔频率尺度与滤波器组
人耳对频率的感知并非线性,而是近似对数关系:在低频段(如 100Hz 至 1000Hz),人耳能分辨很小的频率差异;在高频段(如 4000Hz 至 8000Hz),频率分辨率显著下降。梅尔频率尺度(Mel Scale)正是模拟这一听觉特性的非线性频率刻度。常用的转换公式为:
mel = 2595 * log10(1 + f / 700)
其中 f 为线性频率(单位 Hz),mel 为梅尔频率。通过这一变换,将线性频谱映射到梅尔频谱后,再使用一组三角滤波器(通常 20 至 40 个)进行滤波。每个滤波器在梅尔刻度上等间距分布,覆盖特定的频率范围,输出为该频带内的能量总和。滤波器组的设计要点包括:
- 滤波器数量:TinyML 场景常用 20 至 26 个滤波器,数量越多特征维度越高,但计算量也越大。
- 频率范围:通常设为 0Hz 至采样率的一半(奈奎斯特频率)。对于 16kHz 采样率,范围为 0 至 8kHz。
- 滤波器形状:三角滤波器在梅尔刻度上等宽,在线性频率上表现为低频窄、高频宽。
梅尔滤波器组输出的能量值取对数后,得到对数梅尔频谱。取对数的目的是压缩动态范围,使特征对幅度变化更鲁棒,同时与人耳对响度的对数感知特性一致。
2.4 MFCC 的提取流程与维度选择
MFCC(梅尔频率倒谱系数)是在对数梅尔频谱基础上,进一步进行离散余弦变换(DCT)得到的倒谱系数。DCT 的作用是去除各维特征之间的相关性,将能量集中到前若干维系数中。完整的 MFCC 提取流程如下:
- 预加重:对原始信号通过一阶高通滤波器(系数通常为 0.97),提升高频分量,补偿语音信号的高频衰减。
- 分帧加窗:按帧长 30ms、帧移 20ms 切分,并乘以汉明窗。
- FFT 与功率谱:对每帧做 512 点 FFT,取幅度平方得到功率谱。
- 梅尔滤波:将功率谱通过 26 个梅尔三角滤波器组,得到 26 个频带能量。
- 取对数:对每个频带能量取自然对数,得到对数梅尔频谱。
- DCT:对 26 维对数能量做 DCT,取前 13 维系数作为 MFCC 特征。
- 动态特征(可选):计算一阶差分(Δ)和二阶差分(ΔΔ),拼接后得到 39 维特征。
在 TinyML 场景中,MFCC 的维度选择直接影响模型输入张量的大小。一个 1 秒的音频,按帧移 20ms 计算,可得到约 49 帧;若每帧提取 13 维 MFCC,则输入张量为 49×13,共 637 个特征值。若使用 39 维(含差分),则输入张量为 49×39,数据量增至三倍。对于 CNN 模型,通常将 MFCC 特征组织为二维矩阵,其中一维是时间帧,另一维是 MFCC 系数维度,类似于图像的高度和宽度。
| 参数项 | 典型值 | TinyML 推荐值 | 影响说明 |
|---|---|---|---|
| 采样率 | 44.1kHz | 16kHz 或 8kHz | 降低采样率可减少数据量,但需保证语音频带覆盖 |
| 位深 | 16bit | 16bit(输入)/ 8bit(量化) | 位深影响动态范围,8bit 量化可加速推理 |
| 帧长 | 25ms | 30ms | 帧长越长频率分辨率越高,但时间分辨率降低 |
| 帧移 | 10ms | 20ms | 帧移越大帧数越少,计算量降低但时间精度下降 |
| 梅尔滤波器数 | 40 | 20-26 | 滤波器数越多特征越丰富,但维度增加 |
| MFCC 维度 | 13+差分 | 13(无差分) | 差分特征提升鲁棒性但增加计算量 |
2.5 案例拆解:关键词识别中的 MFCC 参数选择
假设我们要为一个 Cortex-M4 内核的 MCU(主频 80MHz,RAM 256KB)设计一个唤醒词识别模型,识别"小爱同学"这一关键词。初始方案采用 16kHz/16bit 采样、40 维 MFCC 特征,模型输入为 49×40 矩阵。实测发现,特征提取耗时 85ms,模型推理耗时 120ms,总延迟超过 200ms,且 RAM 占用接近上限。
通过分析定位到瓶颈:40 维 MFCC 导致输入张量过大,模型第一层卷积参数数量激增。优化步骤如下:
- 降低采样率至 12kHz:语音能量集中在 6kHz 以下,12kHz 采样率仍可覆盖,数据量减少 25%。
- 减少梅尔滤波器至 20 个:MFCC 维度从 40 降至 20,输入张量变为 49×20。
- 帧移调整为 30ms:1 秒音频的帧数从 49 降至 33,进一步减少计算量。
- 去掉差分特征:仅保留静态 MFCC,模型输入从 49×40 降至 33×20,数据量减少约 66%。
优化后,特征提取耗时降至 32ms,模型推理耗时降至 58ms,总延迟约 90ms,满足实时性要求。RAM 占用从 210KB 降至 128KB,为其他任务留出空间。准确率从 96.2% 微降至 94.8%,仍在可接受范围内。这一案例说明,在 TinyML 场景中,特征维度的选择往往比模型结构对资源的影响更大。
风险提示:过度降低采样率或 MFCC 维度可能导致高频信息丢失,影响对某些辅音(如"丝"、"吃")的识别。建议在优化过程中保留至少 20 个梅尔滤波器,并验证目标关键词的频谱覆盖范围。若准确率下降超过 3%,应回退部分参数。
2.6 常见误区与总结复盘
在 TinyML 音频项目中,关于音频基础知识的常见误区包括:
- 误区一:采样率越高越好。高采样率带来数据量激增,MCU 的存储和计算资源难以承受。应根据任务频带需求选择最低可行采样率。
- 误区二:MFCC 维度越多识别越准。维度增加会放大模型参数数量,在数据量有限时反而容易过拟合。13 维静态 MFCC 在多数关键词任务中已足够。
- 误区三:忽略预加重和窗函数。这两个步骤看似简单,但对频谱质量影响显著。省略预加重会导致高频特征衰减,影响识别鲁棒性。
- 误区四:在 MCU 上直接使用浮点 FFT。多数 MCU 没有 FPU 或 FPU 性能较弱,应使用定点 FFT 实现(如 Q15 格式),可提升 3 至 5 倍速度。
总结本章核心要点:声音数字化由采样率和位深决定数据量与保真度;分帧加窗是短时频谱分析的基础;梅尔频率尺度模拟人耳听觉特性,滤波器组将线性频谱压缩为低维特征;MFCC 通过 DCT 进一步去相关,得到适合 CNN 输入的二维特征矩阵。在 TinyML 场景中,特征提取的参数选择必须与 MCU 的资源约束协同设计,而非简单套用 PC 端语音识别的默认配置。
实践建议:在开始模型设计前,先用 Python(librosa 或 python_speech_features)离线提取 MFCC 特征,并可视化特征图。观察不同关键词在 MFCC 矩阵上的纹理差异,有助于确定合适的滤波器数量和帧移参数。同时,将特征提取代码移植到 MCU 前,先在 PC 上使用定点数模拟,验证精度损失是否在可接受范围内。