语音信号处理基础与特征提取
语音信号的非平稳性是其处理的核心挑战:语音由声带振动产生,其频谱特性随发音内容、说话人状态、声道形状动态变化,无法直接用平稳信号的分析方法建模。20世纪中期提出的短时平稳假设成为语音信号处理的基石——该假设认为语音信号在10~30ms的时间窗口内可近似为平稳信号,这一窗口长度既远大于声带振动的基音周期(通常2~10ms),又能有效捕捉声道共振峰的时变特性。基于这一假设,语音预处理与特征提取的全流程均围绕“将长时非平稳语音拆解为多个短时平稳帧,再提取每帧的 discriminative 特征”这一核心逻辑展开。
分帧与加窗的工程实践细节
分帧是语音预处理的第一个关键步骤,其核心目标是将连续语音信号拆分为重叠的短时帧,既满足短时平稳假设,又保留帧间的时序关联。实际工程中,分帧参数的选择直接决定后续特征的性能:以16kHz采样率的语音为例,行业通用参数为帧长25ms、帧移10ms、重叠率60%,对应每帧400个采样点,相邻帧重叠240个采样点。
这一参数选择有明确的物理依据:25ms的帧长约为语音基音周期的2~3倍,既能保证频谱分辨率(频率分辨率约为40Hz,可准确捕捉声道共振峰),又不会因帧长过长引入非平稳性误差;10ms的帧移保证相邻帧有足够的重叠,避免帧边界处的信号突变导致的信息丢失,同时不会过度增加计算量。若帧长缩短至10ms,频率分辨率降至100Hz,会模糊低频共振峰的细节;若帧长延长至50ms,帧内非平稳性误差会显著提升,尤其对辅音、塞音等瞬态语音的建模效果会大幅下降。
分帧后的信号需经过加窗处理,其核心原理是时域乘积对应频域卷积:通过将帧信号与窗函数相乘,抑制帧边界处的信号突变,减少频谱泄漏。常用的窗函数包括矩形窗、汉明窗、汉宁窗,三者的性能对比如下: ```mermaid graph TD A[窗函数选择] --> B[矩形窗] A --> C[汉明窗] A --> D[汉宁窗] B --> E[主瓣窄、旁瓣高<br>频谱泄漏严重<br>仅用于对泄漏不敏感的场景] C --> F[主瓣宽、旁瓣衰减高<br>频谱泄漏最小<br>语音处理通用选择] D --> G[主瓣宽、旁瓣衰减中等<br>适用于对频率分辨率要求高的场景] ``` 从数学表达来看,长度为$N$的汉明窗的时域表达式为: $$w(n) = 0.54 - 0.46 \cos\left(\frac{2\pi n}{N-1}\right), \quad n = 0,1,\dots,N-1$$ 其频域响应的主瓣宽度为$8\pi/N$,旁瓣峰值衰减达-42dB,远优于矩形窗的-13dB旁瓣衰减。尽管汉明窗的主瓣宽度是矩形窗的2倍,会导致频率分辨率略有下降,但语音信号的频谱是连续的共振峰结构,对频率分辨率的要求不高,而频谱泄漏会直接导致共振峰参数估计偏差,因此汉明窗成为语音预处理的默认选择。
端点检测的算法演进与性能对比
端点检测(Voice Activity Detection, VAD)的目标是从连续语音中分割出有效语音段,剔除静音、噪声段,减少后续处理的计算量,同时避免噪声对特征提取的干扰。传统VAD算法主要基于语音与噪声的时域、频域差异,其中双门限法是最具代表性的经典算法,其实现流程如下: 1. 计算每帧语音的短时能量$E_n$和短时过零率$Z_n$,两者的数学表达式分别为: $$E_n = \sum_{m=0}^{N-1} x^2(n+m)w(m)$$ $$Z_n = \frac{1}{2}\sum_{m=0}^{N-2} |sgn[x(n+m)] - sgn[x(n+m+1)]|$$ 其中$sgn(\cdot)$为符号函数,短时能量反映语音的响度,浊音段的能量远高于噪声段;过零率反映语音的频率特性,清音段(如/s/、/f/)的频率高、过零率高,浊音段(如元音)的频率低、过零率低。 2. 设置高门限$T_h$和低门限$T_l$(通常$T_h = 2T_l$),从语音起始端搜索,找到第一个超过$T_h$的帧作为候选语音起点; 3. 从候选起点向前搜索,找到第一个低于$T_l$的帧作为精确语音起点; 4. 从精确起点向后搜索,找到最后一个超过$T_l$的帧,再向后找到第一个低于$T_l$的帧作为语音终点。
双门限法的实现简单、计算效率高,在信噪比高于10dB的干净环境下,帧级错误率可低于5%。但在低信噪比环境下,噪声的能量和过零率会干扰门限判决,错误率会升至20%以上。针对这一问题,后续出现了多种改进方案:基于统计模型的VAD假设语音段和噪声段服从高斯分布,通过贝叶斯决策实现自适应门限调整,在0dB信噪比下的错误率可降至12%左右;基于深度学习的VAD(如DNN、CRF、Transformer-based VAD)通过大量标注数据学习语音与噪声的差异特征,在CHiME4 noisy 语音数据集上的帧错误率仅为8.2%,比双门限法低35%以上,已成为当前工业界的主流方案。
传统语音特征的原理与局限
传统语音特征的核心目标是通过人工设计的方式,提取对发音内容敏感、对说话人、信道、噪声不敏感的参数,其中线性预测倒谱系数(LPCC)和梅尔频率倒谱系数(MFCC)是应用最广泛的两类特征。
线性预测倒谱系数(LPCC)
LPCC基于线性预测(Linear Prediction, LP) 分析理论,其核心假设是语音信号的当前采样值可由过去$p$个采样值的线性组合预测,数学表达式为: $$x(n) = \sum_{k=1}^p a_k x(n-k) + e(n)$$ 其中$a_k$为线性预测系数,$e(n)$为预测误差(即激励信号)。该假设的物理意义是:语音信号由声道滤波和声带激励两部分组成,声道可近似为$p$阶全极点滤波器,预测误差即为经过反滤波后的激励信号。
LPCC的提取流程为:首先通过线性预测分析得到预测系数$\{a_k\}$,再通过倒谱分析将预测系数转换为倒谱系数。倒谱的本质是信号频谱的对数再做逆傅里叶变换,可分离出语音的激励分量和声道分量,其数学定义为: $$c_n = \mathcal{F}^{-1}\left\{\log \mathcal{F}\{x(n)\}\right\}$$ 其中$\mathcal{F}$表示傅里叶变换。LPCC的优点是计算量极小、对声道共振峰参数的描述非常准确,非常适合语音合成中的声道参数提取;缺点是受线性预测的声道模型假设限制,对噪声非常敏感——噪声会直接干扰预测系数的估计,导致共振峰参数偏差,在TIMIT标准语音识别数据集上,基于LPCC的GMM-HMM系统的字正确率仅为75.2%,远低于MFCC。
梅尔频率倒谱系数(MFCC)
MFCC是目前传统语音识别系统中最常用的特征,其核心设计思路是模拟人耳的听觉感知特性:人耳对频率的感知是对数关系,对低频部分的频率分辨率高,对高频部分的频率分辨率低,且对频率的感知符合梅尔刻度(Mel Scale) 规律,其数学表达式为: $$Mel(f) = 2595 \log_{10}\left(1 + \frac{f}{700}\right)$$ 其中$f$为线性频率(单位Hz),$Mel(f)$为对应的梅尔频率(单位Mel)。当$f=1000Hz$时,$Mel(f)=1000Mel$,即1000Hz的纯音的音高感知对应1000Mel,这是梅尔刻度的标定基准。
MFCC的提取流程分为5个步骤,以16kHz采样率、25ms帧长、10ms帧移的常用参数为例: 1. 预加重:对原始语音信号通过一阶高通滤波器,补偿声门激励和口鼻辐射造成的高频衰减(约6dB/倍频程),预加重滤波器的传递函数为$H(z) = 1 - \alpha z^{-1}$,其中$\alpha$通常取0.97。 2. 分帧加窗:将语音拆分为重叠的短时帧,每帧乘以汉明窗抑制
> 标签:`#语音信号处理` `#预处理` `#特征提取` `#MFCC` `#LPCC` `#语谱图` `#端点检测`
汉明窗的旁瓣抑制效果虽优,但帧边界处的信号突变仍会引入少量频谱泄漏,尤其对辅音、塞音等瞬态信号的频谱影响更为显著。为解决这一问题,工业界常采用重叠保留法对分帧后的信号做二次处理:在帧长25ms的基础上,将前后各扩展10ms的重叠区域,仅取中间25ms的有效信号作为当前帧,进一步消除帧边界处的截断效应,经该处理后,瞬态信号的频谱估计误差可降低15%以上。
预加重与分帧加窗的协同优化
预加重是语音预处理中常被忽略但效果显著的一步,其核心目标是补偿语音产生过程中声带激励与口鼻辐射引入的高频衰减:声带振动产生的基音信号频谱随频率升高呈6dB/倍频程的衰减趋势,经声道滤波和口鼻辐射后,高频部分(4kHz以上)的衰减可达20dB以上,若不经过补偿,高频共振峰和摩擦音的特征会被噪声淹没。预加重通过一阶高通滤波器实现,其传递函数为: $$H(z) = 1 - \alpha z^{-1}$$ 其中$\alpha$为预加重系数,通常取0.94~0.97,对应的高频提升幅度为6~8dB/倍频程,刚好抵消声门和口鼻的衰减,使语音频谱的整体幅度趋于平坦,提升后续特征提取的准确性。预加重属于线性相位滤波,不会引入相位失真,对语音识别和合成的性能均无负面影响,在0dB信噪比的噪声环境下,加入预加重步骤的MFCC系统字错误率(WER)比未加入的低12.3个百分点,这一增益在所有预处理步骤中最高。
分帧加窗的参数选择需结合具体任务调整:对于语音识别任务,通常采用25ms帧长、10ms帧移、汉明窗的配置,平衡频率分辨率与时序平滑度;对于基音提取、共振峰跟踪等需要高时间分辨率的任务,可缩短帧长至10~15ms、帧移至5ms,提升时序精度;对于长语音的说话人识别任务,可延长帧长至30~50ms、帧移至15ms,提升频率分辨率,更好捕捉声道的长时共振特性。
```mermaid graph LR A[原始语音信号] --> B[预加重] B --> C[分帧] C --> D[加窗] D --> E[端点检测] E --> F[有效语音帧] F --> G[特征提取] G --> G1[LPCC] G --> G2[MFCC] G --> G3[FBANK] G --> G4[梅尔语谱图] ```
端点检测的算法演进与性能边界
端点检测(VAD)的性能直接决定后续特征的有效性:若将噪声帧判定为语音帧,会引入无关特征干扰模型;若将有效语音帧判定为静音帧,会丢失关键发音信息。传统双门限法在干净环境下(信噪比>10dB)的帧级错误率可低于5%,但其核心缺陷是门限固定,无法适应噪声的能量和频谱变化。针对这一问题,学术界和工业界提出了多类改进方案:
基于统计模型的VAD假设语音段和噪声段分别服从不同的概率分布,通过贝叶斯最大后验概率(MAP)准则自适应调整门限:首先通过噪声段样本估计噪声的均值和协方差矩阵,再计算每帧信号属于语音段的概率,当概率超过阈值时判定为语音帧。该方法在0dB信噪比下的错误率约为12%,比双门限法低8个百分点,但需要提前估计噪声分布,对非平稳噪声(如突发噪声、多人交谈的背景音)的适应性较差。
基于深度学习的VAD通过神经网络直接学习语音与噪声的时频差异特征,当前主流的方案是基于CRF或Transformer的帧级分类模型,在CHiME4 noisy语音数据集上的帧错误率仅为8.2%,比双门限法低35%以上,且对非平稳噪声的适应性极强。谷歌的WebRTC开源VAD库是工业界应用最广的轻量级VAD方案,其基于GRU的模型仅1.2M参数,在移动设备上的推理延迟低于1ms,帧错误率仅为9.7%,是目前端侧设备的主流选择。
> 💡 工业实践提示:在实际语音识别系统中,VAD通常不会完全剔除静音段,而是保留语音段前后各100~200ms的上下文,避免语音首尾部的截断导致的发音不完整,同时为声学模型提供上下文信息。
线性预测倒谱系数(LPCC)的适用场景与性能边界
LPCC基于声道滤波的物理模型,其核心假设是语音信号的声道可近似为$p$阶全极点滤波器,当前采样值可由过去$p$个采样值的线性组合预测,预测误差对应声带激励信号。LPCC的提取流程分为三步:首先通过线性预测分析得到预测系数$\{a_k\}$,再通过倒谱分析将预测系数转换为倒谱系数,最后取前12~16维作为最终特征。倒谱的本质是信号频谱的对数再做逆傅里叶变换,可分离出语音的激励分量(基音、清浊音信息)和声道分量(共振峰信息),其数学定义为: $$c_n = \mathcal{F}^{-1}\left\{\log \mathcal{F}\{x(n)\}\right\}$$ 其中$\mathcal{F}$表示傅里叶变换,$c_n$为第$n$阶倒谱系数。
LPCC的核心优势是计算量极低:16kHz采样率下,提取16维LPCC的计算量仅为提取39维MFCC的1/3,且对声道共振峰参数的描述精度极高,非常适合低资源场景。例如早期的嵌入式语音助手、智能家居的本地语音识别,均采用LPCC作为输入特征,其功耗比采用MFCC的方案低30%左右,在低信噪比环境下,LPCC的识别率虽低于MFCC,但可通过模型压缩、量化等技术弥补性能差距。
LPCC的缺陷同样明显:其基于全极点滤波器的声道假设,无法描述摩擦音、爆破音等瞬态信号的频谱特性,且对噪声非常敏感——噪声会直接干扰预测系数的估计,导致共振峰参数偏差。在TIMIT标准语音识别数据集上,基于LPCC的GMM-HMM系统字正确率仅为75.2%,比基于MFCC的系统低11.5个百分点,因此LPCC目前已较少用于高精度语音识别场景,仅在低资源语音合成、嵌入式语音处理等场景保留应用价值。
> 💡 学术背景:LPCC最早由Itakura和Saito在1968年提出,是早期语音识别系统的核心特征,其提出的线性预测分析理论至今仍是语音信号处理的基石,2012年深度学习爆发前,90%以上的商用语音识别系统均采用LPCC或MFCC作为输入特征。
梅尔频率倒谱系数(MFCC)的设计逻辑与工程优化
MFCC是目前应用最广泛的传统语音特征,其核心设计思路是模拟人耳的听觉感知特性:人耳对频率的感知并非线性关系,而是符合梅尔刻度(Mel Scale) 规律,对低频部分的频率分辨率高,对高频部分的频率分辨率低,且对声音强度的感知为对数关系。梅尔刻度的数学表达式为: $$Mel(f) = 2595 \log_{10}\left(1 + \frac{f}{700}\right)$$ 其中$f$为线性频率(单位Hz),$Mel(f)$为对应的梅尔频率(单位Mel)。当$f=1000Hz$时,$Mel(f)=1000Mel$,即1000Hz纯音的音高感知对应1000Mel,这是梅尔刻度的标定基准。例如,人耳对100Hz到200Hz的频率差(100Hz)的感知,与对1000Hz到1100Hz的频率差(100Hz)的感知差异极大:前者对应的梅尔差为159Mel,后者仅为159Mel?不,算一下:Mel(100)=2595*log10(1+100/700)=2595*log10(1.1429)=2595*0.058=约150Mel,Mel(200)=2595*log10(1+200/700)=2595*log10(1.2857)=2595*0.109=约283Mel,差133Mel;Mel(1000)=1000Mel,Mel(1100)=2595*log10(1+1100/700)=2595*log10(2.571)=2595*0.410=约1064Mel,差64Mel,所以人耳对低频的频率差更敏感,对高频的不敏感,MFCC通过梅尔滤波器组模拟这一特性,将线性频率转换为梅尔频率,更符合人耳的感知规律。
MFCC的提取流程分为6个步骤,以16kHz采样率、25ms帧长、10ms帧移的常用参数为例: 1. 预加重:通过一阶高通滤波器补偿高频衰减,系数$\alpha$取0.97; 2. 分帧加窗:将语音拆分为400采样点/帧的重叠帧,每帧乘以汉明窗抑制频谱泄漏; 3. 快速傅里叶变换(FFT):将时域帧信号转换为频域功率谱,FFT点数通常取512,对应频率分辨率为16kHz/512=31.25Hz,可准确捕捉共振峰信息; 4. 梅尔滤波器组滤波:将功率谱通过80个三角滤波器组,每个滤波器的中心频率均匀分布在梅尔刻度上,滤波后的输出为每个梅尔频带的能量; 5. 对数运算:对每个滤波器的输出取对数,压缩动态范围,模拟人耳的对数感知特性; 6. 离散余弦变换(DCT):对对数能量做DCT变换,得到倒谱系数,通常取前13维作为静态MFCC特征。
DCT步骤的核心目的是去除MFCC特征之间的相关性:梅尔滤波器组的输出是高度相关的,相邻滤波器的能量变化趋势一致,DCT可以将相关特征转换为不相关的倒谱系数,同时将能量集中在低阶系数上,方便后续模型处理。此外,静态MFCC仅包含单帧的发音信息,而语音是时序信号,发音单元(音素)的持续时间为30~100ms,因此工业界通常会在静态MFCC的基础上拼接一阶差分(对应速度特征)和二阶差分(对应加速度特征),形成39维的MFCC特征,其中一阶差分的数学表达式为: $$\Delta c_n(t) = \frac{\sum_{k=1}^{K} k \cdot (c_n(t+k) - c_n(t-k))}{2\sum_{k=1}^{K} k^2}$$ 通常取$K=2$,即用当前帧前后各2帧的静态系数计算差分,覆盖50ms的上下文信息。
MFCC的局限在于DCT步骤会丢失部分相位和频谱细节信息,且人工设计的梅尔滤波器组无法完全匹配人耳的复杂感知模型。在深度学习时代,模型的自动特征提取能力已经可以替代人工设计的DCT去相关步骤,因此MFCC已逐渐被FBANK和语谱图替代,但在传统GMM-HMM、DNN-HMM等非端到端系统中,MFCC仍是主流的输入特征。
滤波器组特征(FBANK)与深度学习时代的输入范式
滤波器组特征(Filter Bank, FBANK)是深度学习时代最常用的语音输入特征,其提取流程与MFCC完全一致,仅删除了DCT步骤,直接输出梅尔滤波器组的对数能量。FBANK的核心优势是保留了完整的频谱细节信息,没有DCT带来的信息损失,更适合深度学习模型的自动特征提取:CNN、Transformer等模型可以通过卷积、自注意力等操作自动学习时频特征的映射关系,无需人工设计的去相关步骤。
在LibriSpeech英文语音识别数据集上,基于80维FBANK输入的Conformer模型词错误率(WER)为2.1%,比基于39维MFCC输入的模型低0.8个百分点,这一增益主要来自高频共振峰和瞬态信号的细节保留:MFCC的13维静态特征仅能描述低频的共振峰结构,高频部分的细节在DCT后几乎完全丢失,而FBANK的80维特征覆盖了0~8kHz的全频带信息,尤其是4kHz以上的摩擦音、塞音特征,对区分相似发音(如/s/和