语音识别基础:语音信号处理与声学特征核心概念
语音识别系统的第一步,是将连续变化的空气压力波转换为机器可理解的数值序列。这一过程涉及采样、量化、分帧、加窗、特征提取等多个环节。本章将围绕语音信号处理基础、声学特征(MFCC、Fbank)、采样率、帧移、窗函数等核心概念展开,帮助学员建立从物理声波到特征矩阵的完整认知链路。理解这些基础概念,是后续搭建端到端ASR模型、调试识别效果、优化训练效率的前提。
语音信号数字化:采样率与量化精度
语音信号本质上是连续变化的模拟量,必须经过采样和量化才能被计算机处理。采样率决定了每秒采集的样本点数,直接影响频率分辨率的上限。根据奈奎斯特采样定理,采样率必须至少为信号最高频率的两倍,才能无失真地重建原始信号。对于语音识别任务,人类语音的主要能量集中在300Hz-3400Hz之间,因此16kHz采样率成为ASR领域的默认标准——它既能覆盖语音的有效频带,又不会产生过多冗余数据。
量化精度则决定了每个采样点的幅度分辨率。16bit量化(即每个样本用16位二进制数表示)可提供约96dB的动态范围,足以满足语音信号从轻声细语到大声呼喊的幅度变化。若量化位数过低(如8bit),则会产生明显的量化噪声,影响后续特征提取的准确性。
| 采样率 | 适用场景 | 频率范围 | 数据量(1秒) |
|---|---|---|---|
| 8kHz | 电话语音、传统IVR | 0-4kHz | 16KB(16bit单声道) |
| 16kHz | 标准ASR、语音助手 | 0-8kHz | 32KB |
| 44.1kHz | 音乐、高保真录音 | 0-22.05kHz | 88.2KB |
分帧与加窗:将连续语音切分为短时平稳片段
语音信号具有短时平稳性——在10-30ms的时间尺度内,声道的形状和激励源特性可以认为是近似不变的。因此,我们需要将长时语音切分为若干短帧,每帧独立提取特征。分帧操作涉及两个关键参数:帧长和帧移。帧长通常取25ms(在16kHz采样率下对应400个采样点),帧移取10ms(160个采样点),相邻帧之间有15ms的重叠,以保证特征序列的平滑过渡。
直接对原始信号截取矩形帧会导致频谱泄漏——帧边界处的突变会在频域产生虚假的高频分量。为解决这一问题,需要对每帧信号乘以窗函数,使帧两端平滑衰减到零。最常用的窗函数是汉明窗(Hamming Window),其表达式为:
w[n] = 0.54 - 0.46 × cos(2πn / (N-1)), 0 ≤ n ≤ N-1
其中N为帧长。汉明窗的主瓣宽度适中,旁瓣衰减约-43dB,能在频率分辨率和频谱泄漏之间取得良好平衡。相比之下,矩形窗旁瓣衰减仅-13dB,而汉宁窗(Hanning Window)旁瓣衰减可达-31dB,但主瓣稍宽。
声学特征提取:从Fbank到MFCC
分帧加窗后,每帧信号需转换为声学特征向量。最基础的操作是计算功率谱:对每帧信号做FFT(快速傅里叶变换),取幅度平方得到频谱能量分布。然而,人耳对频率的感知是非线性的——对低频变化更敏感,对高频变化较迟钝。因此,需要将线性频率映射到Mel刻度(梅尔刻度),模拟人耳的听觉特性。
Fbank(Filter Bank)特征是端到端ASR中最常用的输入特征。其提取流程为:功率谱 → Mel滤波器组(通常40或80个三角滤波器)→ 取对数。Fbank保留了频谱的原始能量分布信息,维度适中(40-80维),非常适合作为DNN或Transformer的直接输入。由于未做离散余弦变换(DCT),Fbank各维度之间存在一定相关性,但现代神经网络能够自动学习这些相关性。
MFCC(Mel-Frequency Cepstral Coefficients)在Fbank基础上增加了DCT步骤,将滤波器组输出变换到倒谱域,取前13个系数(通常加上一阶差分和二阶差分共39维)。DCT起到了去相关的作用,使得各维度独立性强,更适合传统GMM-HMM模型的高斯假设。但DCT是有损变换,会丢失部分频谱细节,因此在端到端ASR中,Fbank逐渐取代MFCC成为首选。
| 特征类型 | 维度 | 提取步骤 | 适用模型 | 信息保留度 |
|---|---|---|---|---|
| Fbank | 40/80 | FFT → Mel滤波 → log | 端到端ASR(RNN/Transformer) | 高 |
| MFCC | 13/39 | FFT → Mel滤波 → log → DCT | GMM-HMM、传统HMM-DNN | 中(去相关但有损) |
| 原始波形 | 16000 | 直接采样 | 端到端(如wav2vec 2.0) | 最高(但需大量数据) |
案例拆解:16kHz语音的Fbank特征生成全流程
假设我们有一段5秒的普通话录音,采样率16kHz,量化16bit。目标是为端到端ASR模型生成Fbank特征。以下是完整操作流程:
- 预加重:使用一阶高通滤波器 y[n] = x[n] - 0.97x[n-1],提升高频分量,补偿语音信号的高频衰减。
- 分帧:帧长25ms(400点),帧移10ms(160点)。5秒语音共产生 (5000-25)/10 + 1 ≈ 498帧。
- 加窗:对每帧乘以汉明窗,减少频谱泄漏。
- FFT:对每帧做512点FFT(补零至512点),得到256个频点的幅度谱。
- Mel滤波:使用80个Mel三角滤波器,将256个频点映射到80个Mel频带,计算每个频带的能量。
- 取对数:对80个能量值取自然对数,得到80维Fbank特征。
- 归一化:对整个特征矩阵做均值方差归一化(CMVN),消除说话人差异和信道影响。
最终得到维度为 [498, 80] 的特征矩阵,作为模型的输入。若使用MFCC,则在第6步后增加DCT取前13维,再拼接一阶、二阶差分得到39维特征。
常见误区与工程复盘
误区一:采样率越高越好。虽然高采样率保留更多高频信息,但语音识别所需的有效频带有限,过高的采样率只会增加计算负担和存储开销。16kHz是ASR的黄金标准,除非处理特殊语音(如超声检测),否则无需提升。
误区二:帧移越小越好。帧移过小(如5ms)虽然提高了时间分辨率,但相邻帧高度相关,不仅增加计算量,还可能让模型过拟合帧间冗余信息。10ms帧移在精度和效率之间取得了最佳平衡。
误区三:MFCC一定优于Fbank。在端到端ASR时代,Fbank因保留更多原始信息而表现更好。MFCC的DCT去相关优势在神经网络面前已不再重要,反而因信息损失限制了模型上限。
误区四:忽略窗函数的影响。矩形窗虽然实现简单,但频谱泄漏严重,会导致特征在帧边界处出现虚假波动。汉明窗是工程默认选择,若需更平滑的频谱,可尝试汉宁窗或布莱克曼窗。
理解语音信号处理基础是构建ASR系统的基石。采样率决定了信号的频率上限,分帧加窗保证了短时平稳性,Fbank/MFCC则将原始波形转化为模型可学习的紧凑表示。在实际工程中,建议从16kHz/16bit/25ms帧长/10ms帧移/80维Fbank这一标准配置出发,再根据具体任务和算力条件进行调优。