2、语音信号基础:采样、量化、时域/频域表示、短时傅里叶变换(STFT)的基本原理
智能音箱的语音前处理链路中,无论是降噪、回声消除还是唤醒词检测,所有算法都直接作用于麦克风采集到的数字语音信号。理解语音信号从连续声波到离散数字序列的转换过程,以及如何在时域和频域中描述语音特征,是掌握后续所有处理技术的基石。本节将系统梳理采样与量化、时域/频域表示方法,并重点讲解短时傅里叶变换(STFT)的核心原理——这是绝大多数语音增强和特征提取算法的数学基础。
2.1 采样与量化:从连续声波到离散数字序列
2.1.1 采样定理与采样率选择
语音信号本质上是连续变化的声压波,麦克风将其转换为连续电压信号 x(t)。数字信号处理的第一步是采样,即按固定时间间隔 Δt 对连续信号取值,得到离散序列 x[n] = x(n·Δt)。采样率 fs = 1/Δt 的选择必须遵循奈奎斯特采样定理:采样率必须大于信号最高频率成分的两倍,否则会发生频谱混叠(Aliasing),导致高频成分折叠到低频区域,产生不可恢复的失真。
对于智能音箱应用场景,语音信号的频率范围通常集中在 300Hz–3.4kHz(电话语音带宽),但为了保留更多语音细节和泛化能力,主流方案采用以下采样率:
| 采样率 | 频率范围 | 典型应用场景 |
|---|---|---|
| 8 kHz | 0–4 kHz | 传统电话通信、窄带语音识别 |
| 16 kHz | 0–8 kHz | 智能音箱唤醒词、语音识别(主流) |
| 48 kHz | 0–24 kHz | 高保真音频录制、多声道处理 |
智能音箱通常使用 16kHz 采样率,因为唤醒词和语音识别所需的语音细节(如辅音的高频能量)在 8kHz 带宽内已充分保留,同时降低计算量和存储开销。若使用 48kHz 采样,虽然音质更好,但后续 STFT 的 FFT 点数需要翻倍,增加 DSP 负担。
2.1.2 量化与信噪比
采样得到的是连续幅值,量化将其映射到有限个离散电平。量化位数(bit depth)决定了动态范围和量化信噪比(SQNR)。每增加 1 bit,量化信噪比提升约 6.02dB。16bit 量化的理论 SQNR 约为 96dB,足以覆盖语音从轻声到大声的动态范围。
量化过程中会产生量化噪声,其功率与量化步长 Δ 的平方成正比。对于语音信号,量化噪声表现为背景“嘶嘶”声。在智能音箱设计中,若使用 16bit ADC,量化噪声远低于环境噪声(通常 30–50dB SPL),因此不会成为性能瓶颈。但若使用 8bit 量化,量化噪声会明显影响语音清晰度,不适合语音识别场景。
2.2 时域表示与频域表示
2.2.1 时域特征
时域表示直接描述语音信号幅度随时间的变化。常用的时域特征包括:
- 短时能量:反映语音的响度变化,用于 VAD(语音活动检测)的粗判断。清音(辅音)能量低,浊音(元音)能量高。
- 短时过零率:单位时间内信号穿越零轴的次数。清音过零率高(高频成分多),浊音过零率低。
- 短时自相关:用于基音周期估计,在浊音段呈现明显的周期峰值。
时域表示的优点是直观、计算简单,但缺点是无法直接观察语音的频率成分。例如,两个音高不同的元音在时域波形上可能看起来相似,但频谱结构完全不同。
2.2.2 频域表示与傅里叶变换
傅里叶变换将时域信号分解为不同频率的正弦波叠加,得到频谱 X(f)。对于语音信号,频谱揭示了声门激励的谐波结构(基频及其整数倍)和声道滤波特性(共振峰)。语音识别和降噪算法大量依赖频域特征,因为:
- 噪声和语音在频域往往有可区分的分布模式(如噪声集中在低频,语音辅音分布在高频)。
- 人耳对频率的感知是对数刻度(Mel尺度),频域处理更符合听觉特性。
- 频域滤波(如维纳滤波、谱减法)比时域滤波更高效。
然而,标准傅里叶变换假设信号是平稳的(统计特性不随时间变化),而语音信号是典型的非平稳信号——发音过程中声带振动频率、声道形状都在快速变化。直接对整个语音段做一次 FFT 只能得到平均频谱,丢失了时间维度上的变化信息。
2.3 短时傅里叶变换(STFT)
2.3.1 核心原理:分帧、加窗、FFT
STFT 的核心思想是:将长时非平稳语音信号切分为短时平稳片段(帧),对每一帧加窗后做 FFT,从而得到随时间变化的频谱——即时频表示。具体步骤如下:
- 分帧:将信号按帧长 N(通常 20–30ms)切分,帧移 M(通常 10ms,即帧与帧之间重叠 50%–75%)。例如 16kHz 采样下,帧长 25ms = 400 个采样点,帧移 10ms = 160 个采样点。
- 加窗:对每一帧乘以窗函数 w[n],以减小频谱泄漏。常用窗函数包括汉明窗(Hamming)、汉宁窗(Hann)、布莱克曼窗(Blackman)。汉明窗表达式为:w[n] = 0.54 − 0.46·cos(2πn/(N−1))。
- FFT:对加窗后的帧做 N 点 FFT(通常补零到 512 或 1024 点),得到复数频谱 X(m,k),其中 m 为帧索引,k 为频率索引。
STFT 的数学表达式为:
X(m,k) = Σ_{n=0}^{N-1} x[n + m·M] · w[n] · e^{-j2πkn/N}
其中 m 表示第 m 帧,k 表示第 k 个频率点(对应频率 f = k·fs/N)。输出是一个二维复数矩阵,通常取幅度谱 |X(m,k)| 或功率谱 |X(m,k)|² 用于后续处理。
2.3.2 窗函数选择与参数权衡
| 窗类型 | 主瓣宽度 | 旁瓣衰减 | 适用场景 |
|---|---|---|---|
| 矩形窗 | 最窄 | -13dB | 瞬态分析,频谱泄漏严重 |
| 汉宁窗 | 较宽 | -31dB | 通用语音分析,均衡性能 |
| 汉明窗 | 较宽 | -43dB | 语音识别前端(最常用) |
| 布莱克曼窗 | 最宽 | -58dB | 需要极低旁瓣的场景 |
窗函数的选择是主瓣宽度(频率分辨率)与旁瓣衰减(频谱泄漏抑制)之间的权衡。主瓣越窄,频率分辨率越高,能区分相近的频率成分;旁瓣衰减越大,抑制远端频谱泄漏的能力越强。汉明窗在两者之间取得了良好平衡,因此成为语音处理的事实标准。
2.4 案例拆解:16kHz 语音的 STFT 参数配置
假设我们正在设计一个智能音箱的唤醒词检测前端,麦克风采样率为 16kHz,需要配置 STFT 参数以提取用于 VAD 和特征提取的时频表示。
场景约束:
- DSP 芯片算力有限,FFT 点数不宜超过 512 点。
- 唤醒词“小度小度”时长约 0.8s,需要至少 30 帧才能捕捉完整的发音动态。
- 环境噪声主要为低频风扇噪声(100–500Hz)和宽带白噪声。
参数配置过程:
- 帧长选择:取 25ms → N = 0.025 × 16000 = 400 点。为满足 FFT 的 2 的幂次要求,补零到 512 点。
- 帧移选择:取 10ms → M = 160 点,帧间重叠 60%。0.8s 语音共产生 (800−25)/10 + 1 ≈ 78 帧,满足时间分辨率需求。
- 窗函数:选择汉明窗,旁瓣衰减 -43dB,有效抑制帧边界不连续造成的频谱泄漏。
- FFT 点数:512 点 FFT,频率分辨率 Δf = 16000/512 = 31.25Hz,足以分辨基频(男性约 100Hz,女性约 200Hz)的谐波结构。
- 输出:取幅度谱的前 257 个频点(0–8kHz,对应 0–256 索引),用于后续 VAD 和特征提取。
结果验证:使用该配置对一段包含唤醒词的语音进行 STFT 分析,语谱图上可以清晰看到:
- 浊音段(元音)呈现明显的水平条纹(谐波结构),能量集中在 300–3000Hz。
- 清音段(辅音如“d”)呈现垂直条纹(瞬态能量),分布在高频区域。
- 低频风扇噪声表现为 100–500Hz 的持续能量带,与语音谐波重叠,需要后续降噪算法处理。
复盘与代价:若将帧长增加到 40ms(640 点),频率分辨率提升到 25Hz,但帧内语音可能包含多个音素转换,导致频谱“模糊”;若将帧移增加到 20ms,帧数减少到 39 帧,VAD 的响应延迟增加,可能漏检短促的唤醒词。因此 25ms/10ms 是经过验证的折中方案。
2.5 常见误区与总结
本节总结:语音信号数字化的核心是采样和量化,采样率决定频率范围,量化位数决定动态范围。时域表示直观但信息有限,频域表示揭示语音的谐波和共振峰结构,但无法反映时间变化。STFT 通过分帧、加窗、FFT 将一维语音信号映射为二维时频矩阵,是连接时域和频域的桥梁。正确选择帧长、帧移、窗函数和 FFT 点数,是后续降噪、VAD 和特征提取算法性能的基础保障。在智能音箱的实际开发中,建议先在 PC 端用 Python/Matlab 验证参数配置,再移植到 DSP 平台,避免在硬件上反复调试。