2、语音信号基础:采样、量化、时域/频域表示、短时傅里叶变换(STFT)的基本原理

智能音箱的语音前处理链路中,无论是降噪、回声消除还是唤醒词检测,所有算法都直接作用于麦克风采集到的数字语音信号。理解语音信号从连续声波到离散数字序列的转换过程,以及如何在时域和频域中描述语音特征,是掌握后续所有处理技术的基石。本节将系统梳理采样与量化、时域/频域表示方法,并重点讲解短时傅里叶变换(STFT)的核心原理——这是绝大多数语音增强和特征提取算法的数学基础。

语音信号数字化与STFT分析链路 连续语音信号 x(t) 声波→电压 采样 (Sampling) fs = 16kHz / 48kHz 量化 (Quantization) 16bit / 24bit x[n] 离散序列 分帧 + 加窗(帧长25ms,帧移10ms,汉明窗) 将长时非平稳信号切分为短时平稳片段 STFT(短时傅里叶变换) 对每帧做FFT → 得到时频矩阵 X(m,k) 时频表示(语谱图) 用于降噪、VAD、特征提取(MFCC/Fbank) 图:语音信号从模拟域到数字域,再经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 负担。

工程经验:在麦克风阵列设计中,ADC 前必须放置抗混叠滤波器(低通滤波器),截止频率设为 fs/2 的 0.8–0.9 倍。例如 16kHz 采样时,抗混叠滤波器截止频率通常设为 6.4kHz–7.2kHz,以抑制高于 8kHz 的噪声和干扰。

2.1.2 量化与信噪比

采样得到的是连续幅值,量化将其映射到有限个离散电平。量化位数(bit depth)决定了动态范围和量化信噪比(SQNR)。每增加 1 bit,量化信噪比提升约 6.02dB。16bit 量化的理论 SQNR 约为 96dB,足以覆盖语音从轻声到大声的动态范围。

量化过程中会产生量化噪声,其功率与量化步长 Δ 的平方成正比。对于语音信号,量化噪声表现为背景“嘶嘶”声。在智能音箱设计中,若使用 16bit ADC,量化噪声远低于环境噪声(通常 30–50dB SPL),因此不会成为性能瓶颈。但若使用 8bit 量化,量化噪声会明显影响语音清晰度,不适合语音识别场景。

关键公式:量化信噪比 SQNR(dB) = 6.02 × N + 1.76,其中 N 为量化位数。16bit 时 SQNR ≈ 98dB;24bit 时 SQNR ≈ 146dB。实际系统中,ADC 的有效位数(ENOB)通常低于标称位数,需参考数据手册。

2.2 时域表示与频域表示

2.2.1 时域特征

时域表示直接描述语音信号幅度随时间的变化。常用的时域特征包括:

  • 短时能量:反映语音的响度变化,用于 VAD(语音活动检测)的粗判断。清音(辅音)能量低,浊音(元音)能量高。
  • 短时过零率:单位时间内信号穿越零轴的次数。清音过零率高(高频成分多),浊音过零率低。
  • 短时自相关:用于基音周期估计,在浊音段呈现明显的周期峰值。

时域表示的优点是直观、计算简单,但缺点是无法直接观察语音的频率成分。例如,两个音高不同的元音在时域波形上可能看起来相似,但频谱结构完全不同。

2.2.2 频域表示与傅里叶变换

傅里叶变换将时域信号分解为不同频率的正弦波叠加,得到频谱 X(f)。对于语音信号,频谱揭示了声门激励的谐波结构(基频及其整数倍)和声道滤波特性(共振峰)。语音识别和降噪算法大量依赖频域特征,因为:

  1. 噪声和语音在频域往往有可区分的分布模式(如噪声集中在低频,语音辅音分布在高频)。
  2. 人耳对频率的感知是对数刻度(Mel尺度),频域处理更符合听觉特性。
  3. 频域滤波(如维纳滤波、谱减法)比时域滤波更高效。

然而,标准傅里叶变换假设信号是平稳的(统计特性不随时间变化),而语音信号是典型的非平稳信号——发音过程中声带振动频率、声道形状都在快速变化。直接对整个语音段做一次 FFT 只能得到平均频谱,丢失了时间维度上的变化信息。

2.3 短时傅里叶变换(STFT)

2.3.1 核心原理:分帧、加窗、FFT

STFT 的核心思想是:将长时非平稳语音信号切分为短时平稳片段(帧),对每一帧加窗后做 FFT,从而得到随时间变化的频谱——即时频表示。具体步骤如下:

  1. 分帧:将信号按帧长 N(通常 20–30ms)切分,帧移 M(通常 10ms,即帧与帧之间重叠 50%–75%)。例如 16kHz 采样下,帧长 25ms = 400 个采样点,帧移 10ms = 160 个采样点。
  2. 加窗:对每一帧乘以窗函数 w[n],以减小频谱泄漏。常用窗函数包括汉明窗(Hamming)、汉宁窗(Hann)、布莱克曼窗(Blackman)。汉明窗表达式为:w[n] = 0.54 − 0.46·cos(2πn/(N−1))。
  3. 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 需要极低旁瓣的场景

窗函数的选择是主瓣宽度(频率分辨率)与旁瓣衰减(频谱泄漏抑制)之间的权衡。主瓣越窄,频率分辨率越高,能区分相近的频率成分;旁瓣衰减越大,抑制远端频谱泄漏的能力越强。汉明窗在两者之间取得了良好平衡,因此成为语音处理的事实标准。

常见误区:帧长越长,频率分辨率越高(Δf = fs/N),但时间分辨率越低,且帧内语音可能不再平稳。帧长过短(如 5ms)会导致频率分辨率不足(Δf = 200Hz),无法区分基频谐波。工程上推荐帧长 20–30ms,帧移 10ms,兼顾时频分辨率。

2.4 案例拆解:16kHz 语音的 STFT 参数配置

假设我们正在设计一个智能音箱的唤醒词检测前端,麦克风采样率为 16kHz,需要配置 STFT 参数以提取用于 VAD 和特征提取的时频表示。

场景约束:

  • DSP 芯片算力有限,FFT 点数不宜超过 512 点。
  • 唤醒词“小度小度”时长约 0.8s,需要至少 30 帧才能捕捉完整的发音动态。
  • 环境噪声主要为低频风扇噪声(100–500Hz)和宽带白噪声。

参数配置过程:

  1. 帧长选择:取 25ms → N = 0.025 × 16000 = 400 点。为满足 FFT 的 2 的幂次要求,补零到 512 点。
  2. 帧移选择:取 10ms → M = 160 点,帧间重叠 60%。0.8s 语音共产生 (800−25)/10 + 1 ≈ 78 帧,满足时间分辨率需求。
  3. 窗函数:选择汉明窗,旁瓣衰减 -43dB,有效抑制帧边界不连续造成的频谱泄漏。
  4. FFT 点数:512 点 FFT,频率分辨率 Δf = 16000/512 = 31.25Hz,足以分辨基频(男性约 100Hz,女性约 200Hz)的谐波结构。
  5. 输出:取幅度谱的前 257 个频点(0–8kHz,对应 0–256 索引),用于后续 VAD 和特征提取。

结果验证:使用该配置对一段包含唤醒词的语音进行 STFT 分析,语谱图上可以清晰看到:

  • 浊音段(元音)呈现明显的水平条纹(谐波结构),能量集中在 300–3000Hz。
  • 清音段(辅音如“d”)呈现垂直条纹(瞬态能量),分布在高频区域。
  • 低频风扇噪声表现为 100–500Hz 的持续能量带,与语音谐波重叠,需要后续降噪算法处理。

复盘与代价:若将帧长增加到 40ms(640 点),频率分辨率提升到 25Hz,但帧内语音可能包含多个音素转换,导致频谱“模糊”;若将帧移增加到 20ms,帧数减少到 39 帧,VAD 的响应延迟增加,可能漏检短促的唤醒词。因此 25ms/10ms 是经过验证的折中方案。

2.5 常见误区与总结

误区一:采样率越高越好。虽然高采样率保留更多高频信息,但语音识别和唤醒词所需的有效带宽不超过 8kHz。过高的采样率增加 FFT 点数、存储和计算开销,且可能引入更多高频环境噪声。应根据应用场景选择合适采样率。
误区二:忽略预加重处理。语音信号的高频成分(如辅音)能量远低于低频,直接做 STFT 会导致高频特征被淹没。通常在 STFT 之前进行预加重滤波(一阶高通,系数 α=0.97),提升高频分量,使频谱更平坦,便于后续特征提取。
误区三:混淆帧长与 FFT 点数。帧长是实际参与分析的采样点数(如 400 点),FFT 点数可以大于帧长(补零到 512 点)。补零不增加真实频率分辨率,但使频谱更平滑,便于观察峰值位置。

本节总结:语音信号数字化的核心是采样和量化,采样率决定频率范围,量化位数决定动态范围。时域表示直观但信息有限,频域表示揭示语音的谐波和共振峰结构,但无法反映时间变化。STFT 通过分帧、加窗、FFT 将一维语音信号映射为二维时频矩阵,是连接时域和频域的桥梁。正确选择帧长、帧移、窗函数和 FFT 点数,是后续降噪、VAD 和特征提取算法性能的基础保障。在智能音箱的实际开发中,建议先在 PC 端用 Python/Matlab 验证参数配置,再移植到 DSP 平台,避免在硬件上反复调试。