语音信号与数字处理基础
人类语音的产生是一个涉及呼吸系统、声带振动和声道共鸣的复杂生理过程。声门处的周期性气流激发声道的共振特性,形成具有个体差异的频谱包络,而声带的振动速率则决定了语音的基音频率。要数字化这一过程,我们需要从信号处理的角度理解语音的物理属性,并将其转换为离散的数值序列,以便机器进行后续分析。本章将系统阐述语音信号处理的基础理论,涵盖从语音产生机制到数字特征提取的完整链条。我们将从声源-滤波器模型出发,深入探讨采样与量化理论、短时平稳假设下的预处理技术、时频分析工具(如短时傅里叶变换)、符合人耳感知特性的梅尔频率分析,以及基音周期与共振峰等关键声学参数的提取原理。通过Python代码示例,我们将演示如何使用librosa库实现从原始音频到特征矩阵的完整流程。这些经典特征提取方法虽在端到端深度学习时代部分被替代,但其背后的物理意义和数学原理仍是理解现代语音AI系统不可或缺的基石。
语音产生与感知的生理基础
要处理语音信号,首先必须理解它的来源——人类发声与听觉系统的生理机制。语音产生可抽象为经典的声源-滤波器模型(Source-Filter Model),由Fant于1960年提出。该模型将声道视为一个时变的声学滤波器,而声带振动或湍流噪声作为激励源。在生理层面,肺部提供气流动能,通过气管到达喉部(larynx)。喉部包含声带(vocal folds),当声带适度收紧并受到气流冲击时,会产生周期性开闭,形成基音脉冲(pitch pulse),对应语音中的浊音(voiced sound),如元音或浊辅音。声带振动的频率即基音频率(pitch),成人男性平均约120 Hz,女性约210 Hz,儿童更高。当声带不振动、气流通过狭窄通道产生湍流时,形成清音(unvoiced sound),如/s/、/f/等擦音,其激励为宽带噪声。
声带产生的激励信号进入声道(vocal tract),包括咽腔、口腔和鼻腔。声道是一个非均匀的声学管,其横截面积随发音位置变化,形成不同的共振特性。声波在声道中传播时,某些频率成分会被增强,这些频率称为共振峰(formants),通常用前三个共振峰F1、F2、F3来描述元音特性。例如,英语元音/ɑ/(如“father”)的F1约700 Hz,F2约1100 Hz;而/i/(如“see”)的F1约300 Hz,F2约2300 Hz。声道形状由舌位、唇形等 articulators 决定,因此共振峰携带了音素(phoneme)信息。此外,鼻腔通过软腭(velum)与口腔连通,产生鼻腔共鸣,影响低频共振峰,如鼻音/m/、/n/。
在感知端,人耳是一个精密的频率分析仪器。声波经外耳道传至鼓膜,通过听小骨放大后进入耳蜗(cochlea)。耳蜗内充满淋巴液,基底膜(basilar membrane)上有约15000根毛细胞,对不同频率的声波产生位置响应:高频声在耳蜗入口(卵圆窗)附近引起最大振动,低频声在顶端(蜗顶)引起最大振动,这种行波理论(traveling wave theory)实现了频率的机械分解。毛细胞将机械振动转换为神经电信号,经听神经传至大脑听觉皮层。人耳对频率的感知并非线性,在低频区更敏感,这导致了梅尔刻度(Mel scale)的提出,它建立了物理频率与主观感知音高的非线性映射关系。心理声学实验表明,1000 Hz的音高差对应约100梅尔,而频率每增加一倍,梅尔值仅增加约1000。这种非线性压缩使得语音处理中更关注低频细节。
值得注意的是,语音产生与感知并非完全对应。声道滤波器的输出是声压波形,而人耳感知的是频谱包络和精细结构的综合效果。此外,语音信号具有时变性:发音时声道形状不断变化,导致共振峰轨迹漂移;但在一段极短时间(10-30毫秒)内,声道可视为稳态,这构成了短时平稳假设(short-time stationarity assumption)的生理基础,也是后续分帧处理的理论依据。
语音信号的物理特性
从物理角度看,语音是一种声压波,由空气分子的疏密交替传播形成。其核心参数包括频率(Hz)、振幅(声压级,dB)和周期。语音信号在时域表现为连续波形,可分解为两个主要成分:频谱包络(spectral envelope)和声源细节(source detail)。频谱包络由声道共振特性决定,表现为缓慢变化的幅度轮廓,主要承载音素信息;声源细节由声带激励或噪声产生,表现为快速振荡的波形结构,携带基音周期或擦音噪声特性。
语音的时域波形呈现明显的准周期性:浊音段具有大致固定的周期(基音周期),波形重复;清音段类似随机噪声,无周期性。一个实用的时域指标是短时能量(short-time energy),用于区分浊音/清音/静音;另一指标是过零率(zero-crossing rate),表示信号穿越零轴的频率,清音过零率通常高于浊音。频域上,语音的功率谱在低频区(0-4 kHz)集中了大部分能量,符合人耳敏感区;男性基音频率较低,谐波结构密集;女性基音较高,谐波稀疏。
语音的另一个关键特性是动态范围。正常对话的声压级约40-60 dB SPL,但突发性声音可达90 dB以上。这种动态范围要求数字系统具备足够的信噪比。此外,语音信号在传输中会受到环境噪声、房间混响等干扰,导致信号失真。因此,语音信号处理往往需要在增强信号与抑制噪声之间取得平衡。
数字表示:采样与量化理论
将连续的模拟语音信号转换为数字序列,需经过采样(sampling)和量化(quantization)两个步骤。根据奈奎斯特-香农采样定理,若一个带限信号的最高频率为 $f_{\text{max}}$,则只需以不低于 $2f_{\text{max}}$ 的速率进行等间隔采样,即可从采样值无失真地重建原信号。这一最低采样率称为奈奎斯特速率。语音信号的能量主要分布在0-4 kHz(电话带宽300-3400 Hz),因此电话系统采用8 kHz采样率;高保真语音与音乐通常采用16 kHz或44.1 kHz采样率,以覆盖更宽频带。
实际采样中,需在模数转换器(ADC)前加入抗混叠滤波器(anti-aliasing filter),一个低通滤波器,严格限制输入信号带宽至 $f_s/2$ 以下,防止高频成分折叠至低频造成混叠。理想低通滤波器无法实现,实际滤波器过渡带的存在要求采样率留有裕量,例如电话语音虽带宽4 kHz,但采样率设为8 kHz,实际抗混叠截止频率约3.4 kHz。
量化是将采样得到的连续幅度值映射为有限个离散电平的过程。设量化级数为 $L = 2^N$,$N$ 为量化位数。常见语音编码使用16位线性量化($L=65536$),动态范围约96 dB。量化过程引入误差,称为量化噪声,假设输入信号均匀分布且量化步长 $\Delta$,量化噪声功率为 $\Delta^2/12$。信噪比(SNR)可近似为:
$$ \text{SNR}_{\text{dB}} \approx 6.02N + 1.76 $$
因此,每增加1位量化,SNR提升约6 dB。实际语音信号分布不均匀,动态范围有限,常采用非均匀量化,如μ-law或A-law压缩,在低幅度区域使用更细量化步长,提升小信号SNR,广泛应用于电话网络。
预处理:预加重、分帧与加窗
原始语音信号在数字化后,通常需进行三项预处理操作,以满足短时分析的前提并改善特征质量。
预加重(pre-emphasis)是一阶高通滤波,用于补偿声道辐射导致的高频衰减(约6 dB/倍频程)。其传递函数为:
$$ H(z) = 1 - \alpha z^{-1}, \quad \alpha \in [0.9, 0.97] $$
时域实现为 $y[n] = x[n] - \alpha x[n-1]$。预加重后,高频能量提升,频谱包轮廓更平坦,有利于后续谱分析。但过度预加重会放大高频噪声,需权衡。
分帧(framing)基于短时平稳假设,将连续语音截分为重叠的短段(帧)。典型帧长20-30毫秒(对应采样率16 kHz时为320-480点),帧移(帧移)10毫秒。分帧时采用重叠,通常50%重叠,以确保帧间平滑过渡并减少信息丢失。例如,16 kHz采样率下,帧长256点(16 ms),帧移128点(8 ms)。分帧操作通过移位窗口实现,需注意边界处理。
加窗(windowing)是对每帧信号乘以窗函数,以减少帧边缘的不连续性,避免频谱泄露(spectral leakage)。频谱泄露源于信号截断产生的能量扩散:时域有限支撑的信号在频域无限延伸,截断相当于乘以矩形窗,其频谱为sinc函数,导致能量从真实频率点扩散至邻近频率。常用窗函数包括:
- 矩形窗(Rectangular):主瓣窄,旁瓣高,泄露严重,一般不用。
- 汉明窗(Hamming):$w(n) = 0.54 - 0.46 \cos\left(\frac{2\pi n}{N-1}\right)$,旁瓣衰减约42 dB,主瓣较宽,是语音处理常用选择。
- 汉宁窗(Hann):$w(n) = 0.5 - 0.5 \cos\left(\frac{2\pi n}{N-1}\right)$,旁瓣衰减约31 dB。
- 布莱克曼窗(Blackman):旁瓣衰减约58 dB,主瓣更宽,适用于要求高动态范围的场景。
窗函数选择需权衡主瓣宽度(频率分辨率)与旁瓣高度(泄露抑制)。汉明窗在语音特征提取中常作为默认选择。加窗后帧能量会衰减,通常需进行能量归一化补偿。
短时傅里叶变换(STFT)
短时傅里叶变换是语音时频分析的核心工具。对每一帧加窗后的信号 $x_w(t)$,STFT定义为:
$$ X(t, f) = \int_{-\infty}^{\infty} x_w(\tau) e^{-j2\pi f \tau} d\tau $$
离散实现中,对第 $m$ 帧信号 $x_m[n] = x[n]w[n-mR]$,其中 $R$ 为帧移,计算其离散傅里叶变换(DFT):
$$ X_m[k] = \sum_{n=0}^{N-1} x_m[n] e^{-j2\pi kn/N}, \quad k=0,1,\dots,N-1 $$
$N$ 通常为帧长,或补零至2的幂次以加速FFT计算。STFT输出复数矩阵,其幅度谱 $|X_m[k]|$ 表示该帧在频率索引 $k$ 处的能量,相位谱 $\angle X_m[k]$ 包含相位信息(常用于语音合成)。将幅度谱沿时间轴堆叠,可形成频谱图(spectrogram),一种直观的时频表示。
STFT受海森堡不确定性原理约束:时间分辨率与频率分辨率不可兼得。窗长 $N$ 决定了分辨率的权衡:长窗(如40 ms)提供精细频率分辨率(窄主瓣),但时间模糊大;短窗(如10 ms)时间定位准,但频率分辨率低(宽主瓣)。语音处理中,通常折中采用20-30 ms窗长,以平衡共振峰跟踪与瞬态捕捉。此外,窗函数形状影响主瓣宽度和旁瓣高度,进而影响频率泄漏和分辨率。
实际应用中,STFT结果常取平方得到功率谱,并可能进行对数压缩以匹配人耳感知(见后文梅尔分析)。STFT是后续梅尔滤波器组、MFCC提取等步骤的输入。
梅尔频率分析与滤波器组设计
人耳对频率的感知是非线性的,在低频区更为敏感。梅尔刻度(Mel scale)是一种经验性映射,将物理频率 $f$(Hz)转换为感知频率 $m$(Mel):
$$ m = 2595 \log_{10}\left(1 + \frac{f}{700}\right) $$
逆变换为 $f = 700(10^{m/259
$$f = 700(10^{m/2595} - 1)$$
该非线性映射使得在低频区(0-1000 Hz)有更高的频率分辨率,而在高频区(>3000 Hz)分辨率降低,这与人类听觉系统的临界带宽变化一致。基于梅尔刻度,可设计一组三角形滤波器,覆盖0到采样率一半的频率范围,构成梅尔滤波器组(Mel filterbank)。其设计步骤如下:
1. 确定参数:设采样率为 $f_s$,FFT点数为 $N$,则最高分析频率为 $f_s/2$。将 $0$ 到 $f_s/2$ 线性映射至梅尔刻度,得到端点 $m_{\text{min}}=0$、$m_{\text{max}} = 2595 \log_{10}(1 + f_s/(2 \times 700))$。选择滤波器数量 $K$(通常为20-40,电话语音常用24,高保真常用40-80)。将梅尔轴等分为 $K+1$ 个点,得到边界梅尔值 $m_k$,$k=0,1,\dots,K+1$。
2. 转换回频率:将每个 $m_k$ 通过逆梅尔公式转换为实际频率 $f_k$: $$ f_k = 700(10^{m_k/2595} - 1) $$ 这些 $f_k$ 即为滤波器的中心频率边界。相邻两个边界 $f_k$ 与 $f_{k+1}$ 定义第 $k$ 个三角形滤波器的支撑区间,其峰值位于 $f_{k+1}$(或取几何中心),形成重叠的三角滤波器序列。
3. 构造滤波器:第 $k$ 个三角形滤波器($k=0,\dots,K-1$)的传递函数 $H_k(f)$ 在频率索引 $i$(对应FFT bin)处的值为: $$ H_k(i) = \begin{cases} 0, & f(i) \le f_k \\ \dfrac{f(i) - f_k}{f_{k+1} - f_k}, & f_k < f(i) \le f_{k+1} \\ \dfrac{f_{k+2} - f(i)}{f_{k+2} - f_{k+1}}, & f_{k+1} < f(i) < f_{k+2} \\ 0, & f(i) \ge f_{k+2} \end{cases} $$ 其中 $f(i) = i \cdot f_s / N$ 为第 $i$ 个FFT bin对应的频率。滤波器在 $[f_k, f_{k+1}]$ 上升,在 $[f_{k+1}, f_{k+2}]$ 下降,峰值在 $f_{k+1}$ 处为1。相邻滤波器在边界处重叠约50%,确保频谱包络的平滑覆盖。
4. 归一化:为使每个滤波器的输出能量不受带宽影响,常对滤波器系数进行归一化,使其面积和为1: $$ \tilde{H}_k(i) = \frac{H_k(i)}{\sum_{i=0}^{N/2} H_k(i)} $$ 归一化后,滤波器组对平坦谱产生平坦响应,有利于提取相对谱包络。
设计示例:设 $f_s = 16000$ Hz,$N = 512$,$K = 26$。则最高频率8000 Hz对应梅尔值约 $m_{\text{max}} \approx 2595 \log_{10}(1 + 8000/700) \approx 2595 \log_{10}(12.4286) \approx 2595 \times 1.0945 \approx 2840$ Mel。将 $[0, 2840]$ 等分为27个点($K+1$),得到边界梅尔值 $m_k = k \times (2840/26)$,$k=0,\dots,26$。转换回频率后,低频滤波器间隔较窄(如0-1000 Hz区间有较多滤波器),高频间隔较宽。将这些频率映射到FFT bin索引($i = f \cdot N / f_s$),即可构造26个三角形滤波器。
滤波器组的作用:将线性频谱 $|X_m[k]|$ 通过滤波器组加权求和,得到每帧的梅尔频谱(Mel spectrogram): $$ E_m[k] = \sum_{i=0}^{N/2} |X_m[i]| \cdot H_k(i), \quad k=0,1,\dots,K-1 $$ 这相当于对频谱进行非线性频率轴压缩和粗略平滑,提取符合人耳感知的谱包络特征。梅尔频谱仍具有较大的动态范围,且人耳对强度的感知近似对数,故常进一步取对数: $$ C_m[k] = \log(E_m[k] + \epsilon) $$ 其中 $\epsilon$ 为小常数(如$10^{-10}$)防止除零。对数压缩后,特征更符合心理声学规律,并降低动态范围。
梅尔频率倒谱系数(MFCC)提取
梅尔频率倒谱系数(Mel-Frequency Cepstral Coefficients, MFCC)是语音识别中最经典的特征之一,由Davis和Mermelstein于1980年提出。MFCC通过模拟人耳听觉特性,提取语音的谱包络信息,对音色、音素等具有良好区分性。其完整提取流程如下:
1. 预处理:对原始语音进行预加重、分帧、加窗(通常汉明窗)。 2. STFT:对每帧计算FFT,得到幅度谱 $|X_m[k]|$。 3. 梅尔滤波器组:将幅度谱通过 $K$ 个三角梅尔滤波器,得到 $K$ 维梅尔频谱向量 $\mathbf{E}_m = [E_m[0], \dots, E_m[K-1]]$。 4. 对数压缩:对每个滤波器输出取对数,得到 $\mathbf{C}_m = [\log E_m[0], \dots, \log E_m[K-1]]$。这一步将乘性关系转为加性,并压缩动态范围。 5. 离散余弦变换(DCT):对对数梅尔频谱向量进行DCT,得到倒谱系数: $$ c_n = \sum_{k=0}^{K-1} \log E_m[k] \cdot \cos\left( \frac{\pi n (2k+1)}{2K} \right), \quad n=0,1,\dots,L-1 $$ 其中 $L$ 为保留的MFCC阶数(通常12-13)。DCT将频谱包络(慢变部分)与声源细节(快变部分)分离:低阶DCT系数($n=0,1,\dots$)主要反映谱包络的总体形状,对应声道共振特性;高阶系数反映细节结构,如基音谐波。因此,通常取前12-13阶系数作为特征,丢弃高阶部分以抑制激励信息。 6. 特征归一化:对MFCC系数进行均值方差归一化(CMVN)或倒谱均值归一化(CMN),以消除信道效应和说话人差异。
倒谱的物理意义:倒谱(cepstrum)是频谱的对数再傅里叶逆变换的结果,其名称由“spectrum”字母重排而来,强调其与频谱的差异。在MFCC中,DCT相当于对对数梅尔频谱进行正交变换,得到的“倒谱域”系数具有明确物理意义:低阶倒谱系数(Liflters) 对应声道共振峰(谱包络),高阶倒谱系数对应声带激励(基音和谐波结构)。因此,MFCC可视为一种“解耦”表示,将音素信息(包络)与发音方式(激励)分离。
**MFCC的