语音信号处理基础 | Fundamentals of Speech Signal Processing
语音信号处理基础
语音产生的生理学与声学原理
语音作为人类最自然、最便捷的交流工具,其产生过程涉及复杂的生理结构和声学机制。要深入理解语音识别技术,首先必须掌握语音信号是如何被产生、传播和感知的。语音的产生是一个从肺部呼出气流、经过声门振动调制、最后由口腔鼻腔声道塑形的完整物理过程。这一过程的每个环节都对最终的语音信号特征产生决定性影响,理解这些原理是构建高效语音识别系统的基础。
人类语音产生系统的核心器官包括肺、气管、声门(vocal folds)、声道(vocal tract)和鼻腔。在正常说话时,肺部收缩产生呼气气流,气流经过气管到达声门。声门位于喉部,由两条弹性的声带组成,声带的张力和间距受喉部肌肉控制。当气流通过声门时,如果声带闭合或靠得足够近,气流会周期性地冲开声带,产生振动,这就是声带振动(glottal vibration)或浊音(voiced sound)产生的机制。声带振动的频率称为基频(fundamental frequency,简称 F0),成年男性的基频通常在 85-180 Hz 之间,成年女性在 165-255 Hz 之间,而儿童则更高,可达 200-400 Hz。基频决定了语音的音高(pitch),是语音韵律特征的核心要素。
当声带完全张开、气流平滑通过时,不会产生声带振动,这便产生了清音(unvoiced sound)。清音的产生位置可以在声门以上的气道任意位置——最典型的是在口腔中通过舌、唇、齿等器官的阻碍和摩擦形成。辅音中的/p/、/t/、/k/、/s/、/f/等都是清音。值得注意的是,许多辅音具有浊音-清音成对的特性,如/b/-/p/、/d/-/t/、/g/-/k/等,它们的主要区别就在于声带是否振动。
声门产生的振动是语音的激励源,但这个原始信号的频谱能量主要集中在低频区域,且相对平坦。要形成具有丰富语言信息的语音,还需要经过声道(vocal tract)的调制。声道是从声门到嘴唇的管道,长度约 17-18 厘米,其形状可以通过舌、唇、下颌、软腭等器官的运动而改变。声道本质上是一个复杂的声学谐振腔,对通过的气流进行频谱整形。不同的声道形状会产生不同的谐振频率,这些频率称为共振峰(formants),记作 F1、F2、F3 等。第一共振峰 F1 主要与舌位高低相关,决定元音的开放程度;第二共振峰 F2 与舌位前后相关;第三共振峰 F3 与圆唇与否相关。英语元音/i/、/ɪ/、/e/、/ɛ/、/æ/分别对应不同的 F1-F2 位置,元音识别很大程度上依赖于对这些共振峰频率的提取。
声道的谐振特性可以用声管模型(acoustic tube model)来数学描述。在简化的模型中,声道被近似为一根截面可变的管子,其声学特性由截面变化决定。对于一段均匀管,其谐振频率由管长决定:$f = \frac{c}{2L}$,其中 $c$ 为声速(约 340 m/s),$L$ 为管长。对于 17 cm 的声道,其基频谐振约为 1000 Hz。实际声道截面是变化的,因此产生多个谐振峰。对于普通话这样的声调语言,除了共振峰信息外,基频的时域变化模式(声调轮廓)也承载着重要的词汇和语法信息。
声波最终从嘴唇或鼻腔辐射到空气中。辐射模型(radiation model)描述了从声道到自由空间的声波传播过程。嘴唇辐射效应相当于一个高通滤波器,对高频有一定的增强作用。在低频区域(远小于 $1/τ$,其中 $τ$ 是辐射时间常数),辐射阻抗近似与频率成正比;在高频区域,辐射阻抗趋于常数。这一辐射特性在语音处理中需要补偿,通常通过预加重(pre-emphasis)来实现。
语音信号的时域分析与频域分析
语音信号既可以在时间域进行分析,也可以在频率域进行分析,两种分析方法各有优势,相互补充。时域分析直接观察信号随时间的振幅变化,优点是直观、计算简单,能够直接看到信号的包络、周期性和能量变化。频域分析则揭示信号中不同频率成分的分布,对于理解语音的共振峰结构、区分浊音与清音具有不可替代的作用。
在时域中,语音信号呈现出明显的非平稳特性。一段语音的不同区段可能具有截然不同的时域特征。浊音段表现出准周期性的振动模式,其周期就是基音周期(pitch period),通常在 2-20 毫秒之间,相当于 50-500 Hz 的基频范围。清音段则呈现类似噪声的随机特性,没有明显的周期性。元音的振幅通常较大且稳定,辅音的振幅则较小且变化剧烈。时域分析中的短时能量(short-time energy)是区分浊音与清音、有声与无声的重要参数。对于一帧语音信号 $x[n]$,其短时能量定义为:
$$E_n = \sum_{m=-\infty}^{\infty} [x[m] \cdot w[n-m]]^2 = \sum_{m} x^2[m] \cdot h[n-m]$$
其中 $w[n]$ 是窗函数,$h[n] = w^2[n]$ 是能量窗。短时能量可以有效地检测语音的起止点(Voice Activity Detection,VAD),也可以用于区分元音与辅音——元音的能量通常显著高于辅音。
短时过零率(short-time zero crossing rate)是另一个重要的时域特征,计算公式为:
$$Z_n = \frac{1}{2} \sum_{m=-\infty}^{\infty} |\text{sgn}[x[m]] - \text{sgn}[x[m-1]]| \cdot w[n-m]$$
其中 $\text{sgn}[x]$ 是符号函数。对于离散信号,过零率反映了信号穿越零电平的频繁程度。清音由于其噪声特性,过零率较高;浊音由于其准周期性,过零率相对较低。过零率与短时能量的结合可以初步区分语音的不同区段:低能量高过零率可能是静音或轻辅音,高能量低过零率是典型的浊音,高能量高过零率可能是清擦音。
频域分析的核心工具是傅里叶变换(Fourier Transform)。对于连续信号,傅里叶变换定义为:
$$X(f) = \int_{-\infty}^{\infty} x(t) e^{-j2\pi ft} dt$$
对于离散信号,使用离散傅里叶变换(Discrete Fourier Transform,DFT):
$$X[k] = \sum_{n=0}^{N-1} x[n] e^{-j\frac{2\pi}{N}kn}, \quad k = 0, 1, \ldots, N-1$$
DFT 的计算复杂度为 $O(N^2)$,但通过快速傅里叶变换(Fast Fourier Transform,FFT)算法,复杂度可以降低到 $O(N \log N)$,这使得大规模频谱分析成为可能。
语音信号的频谱特性与其产生机制密切相关。浊音的频谱呈现谐波结构——基频及其整数倍频率处出现能量峰值,这些谐波叠加在声道谐振形成的包络上。声道作为滤波器,对不同频率成分的响应不同,形成包络中的峰(共振峰)和谷(反共振)。清音的频谱没有谐波结构,呈现类似白色的噪声分布,但由于声道滤波作用,其频谱包络仍有起伏。
语谱图(spectrogram)是语音信号分析中最有力的可视化工具之一,它同时展示了信号的时域和频域信息。语谱图的横轴是时间,纵轴是频率,颜色或灰度表示能量强度。语谱图上有几种典型的视觉模式:横杠(formant bar)表示共振峰的能量轨迹,浊音段会看到沿时间轴延伸的水平横杠;谐波条纹是基频谐波在频域的体现,表现为垂直方向的细密条纹;乱纹(ripple)出现在清擦音区域,呈现为无规的纹理;冲直条(vertical striation)是瞬态成分(如塞音的爆破)在语谱图上的表现。
语谱图有三种主要的窗长设置,产生不同类型的语谱图。窄带语谱图使用较长的窗(通常 20-50 毫秒),频率分辨率高,可以看到清晰的谐波结构,但时间分辨率较低;宽带语谱图使用较短的窗(通常 5-10 毫秒),时间分辨率高,可以看到共振峰的精细变化和语谱的纹理,但频率分辨率较低。实际应用中需要根据分析目的选择合适的窗长。
语音信号的数字化:采样与量化
物理世界的语音信号是连续的模拟信号,而计算机处理的是离散的数字信号。将模拟语音转换为数字信号需要经过模数转换(Analog-to-Digital Conversion,ADC),这个过程包括采样和量化两个核心步骤。此外,为了避免混叠失真,还需要合适的抗混叠滤波器。
采样定理(Nyquist-Shannon Sampling Theorem)是数字信号处理的基石。定理指出:如果一个连续信号的最高频率分量为 $f_{\max}$,那么当采样频率 $f_s$ 大于 $2f_{\max}$ 时,可以无失真地恢复原始信号。最小允许的采样频率 $2f_{\max}$ 称为奈奎斯特频率(Nyquist frequency)。对于语音信号,其频率范围大约在 0-8 kHz(电话语音)或 0-20 kHz(宽带语音)。电话系统的标准采样率是 8 kHz,理论上可以无失真恢复 4 kHz 以下的信号,这对于语音的可懂度是足够的,但会损失高频辅音的自然度。现代语音识别系统通常采用 16 kHz 采样率(宽带语音),能够保留大部分语音频率成分;部分高级系统使用 32 kHz 或 48 kHz 以获取更多细节。
采样过程中,如果信号中含有高于奈奎斯特频率的成分,会产生混叠(aliasing)现象。混叠使得高频信号在数字化后表现为低频的虚假信号,严重影响信号质量。因此,在采样前必须使用抗混叠滤波器(anti-aliasing filter)滤除高于奈奎斯特频率的成分。抗混叠滤波器通常是低通滤波器,其截止频率设置为奈奎斯特频率,并具有一定的过渡带以确保有效抑制混叠风险。
量化(quantization)是将模拟信号的连续振幅值映射为有限数量离散值的过程。量化比特数决定了每个样本的精度。假设量化范围为 $[-A, A]$,使用 $B$ 比特量化,则量化级数为 $2^B$,量化间隔(量化步长)为 $\Delta = 2A/2^B$。量化引入的误差称为量化噪声,其功率与量化间隔的平方成正比:
$$\sigma_q^2 = \frac{\Delta^2}{12} = \frac{A^2}{3 \cdot 4^B}$$
信噪比(SNR)与量化比特数的关系为:
$$\text{SNR} \approx 6.02B + 1.76 \text{ (dB)}$$
这意味着每增加 1 比特,信噪比约提高 6 dB。对于高质量语音,通常使用 16 比特量化(CD 音质标准);对于语音识别前端,16 比特也是标准配置。8 比特量化虽然可以大幅减少存储和传输需求,但量化噪声会显著影响识别性能,特别是在低能量辅音区域。
量化的另一个重要考量是非均匀量化。人耳对声音强弱的感知是对数的——韦伯-费希纳定律指出主观响度与声压级的对数成正比。因此,使用非均匀量化(如 μ -law 或 A-law 压缩)可以在保持相同量化比特数的条件下,提高低振幅区域的量化精度,这对语音这类动态范围大的信号尤为重要。μ-law 压缩定义为:
$$y = \frac{\ln(1 + \mu |x|)}{\ln(1 + \mu)} \cdot \text{sgn}(x)$$
其中 $\mu = 255$ 是北美的标准值。压缩后的信号使用均匀量化,接收端通过扩展恢复原始动态范围。
预加重与分帧处理
语音信号是典型的非平稳信号(non-stationary signal),其统计特性随时间变化。然而,语音信号在短时间尺度上(通常 10-30 毫秒)具有相对平稳的特性,这称为短时平稳性(short-time stationarity)。基于这一假设,语音处理普遍采用分帧(framing)技术,将连续语音切分为短时帧进行分析。
预加重(pre-emphasis)是分帧前的重要预处理步骤。语音信号频谱的高频部分通常能量较低,且声道辐射效应在高频区域有一定的衰减。预加重通过高通滤波器补偿高频衰落,使频谱变得平坦,同时提升信噪比。预加重滤波器的传递函数为:
$$H(z) = 1 - \alpha z^{-1}$$
其中 $\alpha$ 是预加重系数,通常取 0.97 或 0.95。相应的时域实现为:
$$y[n] = x[n] - \alpha x[n-1]$$
预加重还有另一个重要作用:增强语音信号的瞬态特性,使得辅音的能量更突出,有利于后续的特征提取。对于浊音段,预加重还可以减小低频能量,使得共振峰结构更加清晰。在某些实现中,预加重与分帧的顺序可能调整,但效果相近。需要注意的是,预加重是可逆的,在需要时可以通过去加重(de-emphasis)恢复原始频谱。
分帧的核心思想是:将语音信号划分为一系列短时帧,在每帧内应用平稳信号处理技术(如傅里叶变换)提取频谱特征。帧长(frame length)的选择需要在频率分辨率和时间分辨率之间权衡。较长的帧提供更好的频率分辨率,但时间分辨率降低,且更容易违反平稳性假设;较短的帧时间分辨率高,但频率分辨率不足。语音处理中典型的帧长设置为:
- **20-25 毫秒**:常用的折中方案,在大多数情况下能同时保证频率分辨率和时间分辨率
- **30 毫秒**:适用于需要更高频率精度的高级分析
- **10-15 毫秒**:适用于快速变化语音或需要高时间精度的场景
帧移(frame shift)是相邻帧起始点的时间间隔,通常设置为帧长的一半(50% 重叠)。较大的帧移可以提高时间分辨率,但计算量也相应增加。50% 重叠是语音处理中的标准选择,部分系统使用 75% 重叠(帧移为帧长的 1/4)以获得更平滑的时域特征轨迹。帧移的选择还需要考虑特征的时间对齐需求——对于实时语音识别系统,较小的帧移意味着更低的延迟。
分帧过程中需要使用窗函数(window function)减少频谱泄露(spectral leakage)。不加窗的矩形截断相当于信号与矩形窗相乘,其频谱的主瓣较宽,旁瓣较高,导致频谱能量泄露到相邻频率 bins。窗函数在帧的两端逐渐衰减到零,减少了截断处的突变,从而改善频谱质量。几种常用的窗函数包括:
汉明窗(Hamming Window)是语音处理中使用最广泛的窗函数,定义为:
$$w[n] = 0.54 - 0.46 \cos\left(\frac{2\pi n}{N-1}\right), \quad n = 0, 1, \ldots, N-1$$
汉明窗的主瓣宽度适中(约 4 个频率 bins),第一旁瓣衰减约 43 dB,能够有效抑制频谱泄露。对于典型的 25 毫秒帧长(采样率 16 kHz 对应 400 个样本),汉明窗能提供约 100 Hz 的频率分辨率。
汉宁窗(Hanning Window,又称升余弦窗)定义为:
$$w[n] = 0.5 - 0.5 \cos\left(\frac{2\pi n}{N-1}\right)$$
汉宁窗的第一旁瓣衰减约 31 dB,主瓣略宽于汉明窗,频谱泄露稍大,但频谱形状更平滑。
布莱克曼窗(Blackman Window)定义为:
$$w[n] = 0.42 - 0.5 \cos\left(\frac{2\pi n}{N-1}\right) + 0.08 \cos\left(\frac{4\pi n}{N-1}\right)$$
布莱克曼窗具有更深的第一旁瓣衰减(约 58 dB),但主瓣最宽,主要用于需要极低频谱泄露的场景。
凯泽窗(Kaiser Window)是一种参数化窗函数,通过调整参数 β 控制主瓣宽度与旁瓣衰减的权衡:
$$w[n] = \frac{I_0\left(\beta\sqrt{1 - \left(\frac{n - N/2}{N/2}\right)^2}\right)}{I_0(\beta)}$$
其中 $I_0(\cdot)$ 是修正的第一类零阶贝塞尔函数。β 值越大,旁瓣衰减越深,但主瓣越宽。
窗函数的选择需要根据具体应用权衡。对于语音识别,汉明窗通常是首选——它提供了足够的频谱精度,同时对时域信息的保留较为均衡。对于需要精确频率测量的场景,可以考虑布莱克曼窗或凯泽窗。窗函数还会影响信号能量——汉明窗的能量约为矩形窗的 54%,汉宁窗约为 50%,这一衰减在计算短时能量时需要补偿。
短时傅里叶变换与频谱分析
短时傅里叶变换(Short-Time Fourier Transform,STFT)是语音频谱分析的核心方法。STFT 的基本思想是对分帧后的信号分别进行傅里叶变换,从而获得信号频谱的时变特性。STFT 的定义为:
$$X[n, k] = \sum_{m=-\infty}^{\infty} x[m] w[n-m] e^{-j\frac{2\pi}{N}km}$$
其中 $w[n]$ 是窗函数,$N$ 是 DFT 长度,$k$ 是频率 bin 索引。STFT 的结果是一个二维复数矩阵,横轴是帧索引(时间),纵轴是频率 bin(频率)。
STFT 涉及两个关键参数:分析窗长和 DFT 点数。分析窗长决定了时域分辨率和频域分辨率的基本特性,而 DFT 点数则决定了频域采样的精细程度。如果 DFT 点数大于帧长(通过补零实现),可以获得更精细的频率采样,但不会提高实际频率分辨率。频率分辨率由分析窗的有效带宽决定,而不是 DFT 点数。实际应用中,DFT 点数通常设置为 512、1024 或 2048,以覆盖足够的频率范围并获得平滑的频谱。
频率分辨率与时间分辨率之间的不确定性原理(uncertainty principle)是 STFT 分析的根本限制。对于给定的窗长,时间分辨率约为窗长,频率分辨率约为 $f_s / L$(其中 $L$ 是窗长样本数)。这意味着无法同时获得任意高的时间分辨率和频率分辨率。语音处理中的帧长选择正是这一权衡的体现:20-25 毫秒的帧长提供约 100-50 Hz 的频率分辨率,足以区分大部分共振峰,但可能无法精确捕捉快速变化的语音事件。
STFT 的幅度谱($|X[n, k]|$)和功率谱($|X[n, k]|^2$)是语音识别中直接使用的频域表示。幅度谱保留了信号的相位信息(虽然 STFT 的相位在语音识别早期被忽略,但端到端模型通常会保留完整复数谱)。功率谱的对数压缩(对数功率谱,log power spectrum)是许多语音特征的起点,如 MFCC 就是对对数功率谱进行进一步变换得到的。
语谱图是 STFT 的可视化表示。线性频率语谱图直接显示频率与时间的关系,适用于一般性频谱分析;对数频率语谱图(log-frequen