3、时域分析基础:波形表示、短时能量、过零率、时域特征提取方法
时域分析是音频信号处理中最直观、计算开销最低的分析手段。它直接以时间为自变量,观察信号幅度的变化规律,不涉及频域变换,因此特别适合实时性要求高、资源受限的嵌入式系统,以及需要快速判断信号有无、音量大小、静音/有声边界、语音端点检测等场景。本章将系统讲解波形表示的基本概念、短时能量与过零率的数学定义与物理含义,并给出完整的时域特征提取流程与工程注意事项。
3.1 波形表示与采样基础
音频信号在时域中通常表示为离散时间序列 x(n),其中 n 为采样点索引。采样率 fs 决定了时间分辨率,例如 fs=16000Hz 表示每秒钟采集 16000 个样本点,相邻样本间隔为 1/fs=62.5μs。波形表示的核心价值在于直观展示信号的幅度动态范围、周期性、瞬态冲击和噪声底噪。对于 16-bit 量化系统,幅度范围通常为 -32768 至 +32767,归一化后为 -1.0 至 +1.0。
在实际工程中,波形表示不仅仅是画图观察,更重要的是通过波形特征快速判断信号质量。例如,削波(Clipping)现象表现为波形顶部被平切,说明增益过高;直流偏置表现为波形整体偏离零轴,可能由 ADC 前端耦合电容失效或接地不良引起;间歇性脉冲噪声则表现为波形中随机出现的尖峰。这些判断在调试音频采集链路时非常高效。
3.2 短时能量(Short-Time Energy)
短时能量反映了信号在某一帧内的平均功率或响度感知。其数学定义为:
E(i) = Σ_{n=0}^{N-1} [x_i(n) · w(n)]²
其中,x_i(n) 为第 i 帧的采样点,w(n) 为窗函数(常用汉明窗或矩形窗),N 为帧长。能量值对幅度变化非常敏感,因此常用于检测语音活动、区分清音与浊音、以及实现自动增益控制(AGC)。
在实际计算中,为了避免数值溢出,通常先对采样值做归一化处理,或者使用对数能量:
E_log(i) = 10 · log10(E(i) + ε)
其中 ε 为极小值(如 1e-10),防止对零取对数。对数能量更符合人耳听觉特性,动态范围更小,便于后续阈值比较。
3.2.1 帧长与窗函数的选择
帧长的选择直接影响时间分辨率与频率分辨率的权衡。对于语音信号,常用帧长为 20-30ms(对应 16kHz 采样率下 320-480 点),帧移为 10ms(160 点),保证相邻帧有 50% 重叠,避免帧边界处的信息丢失。窗函数方面,汉明窗主瓣较宽但旁瓣衰减大,适合语音分析;矩形窗频率分辨率高但频谱泄漏严重,适合瞬态检测。
| 窗类型 | 主瓣宽度 | 旁瓣衰减 | 适用场景 |
|---|---|---|---|
| 矩形窗 | 窄 | -13dB | 瞬态检测、脉冲测量 |
| 汉明窗 | 中等 | -43dB | 语音分析、频谱估计 |
| 汉宁窗 | 中等 | -31dB | 通用音频处理 |
| 布莱克曼窗 | 宽 | -58dB | 高动态范围测量 |
3.3 短时过零率(Zero Crossing Rate, ZCR)
短时过零率表示在一帧内信号波形穿越零轴的次数,其计算公式为:
ZCR(i) = (1/2N) · Σ_{n=1}^{N-1} |sgn[x_i(n)] - sgn[x_i(n-1)]|
其中 sgn 为符号函数。ZCR 在语音信号处理中具有重要物理意义:清音(如 /s/、/f/)频率成分较高,波形振荡剧烈,ZCR 值较大;浊音(如元音)频率较低且具有周期性,ZCR 值较小。因此,ZCR 常与短时能量联合使用,用于语音端点检测和清/浊音分类。
需要注意的是,ZCR 对噪声和直流偏置非常敏感。若信号存在直流偏置,过零率会显著降低甚至变为零。因此,在计算 ZCR 前应首先去除直流分量,常用的方法是对信号做一阶高通滤波(如 y(n) = x(n) - x(n-1)),或者减去帧内均值。
3.4 时域特征提取完整流程
一个完整的时域特征提取流程通常包含以下步骤:
- 信号预处理:去除直流偏置(DC Block),可选做预加重(y(n)=x(n)-αx(n-1),α≈0.97)以提升高频分量。
- 分帧:按帧长 N 和帧移 M 将连续信号切分为若干帧,帧移通常为帧长的 50%。
- 加窗:对每一帧乘以窗函数,减少帧边界处的频谱泄漏。
- 特征计算:逐帧计算短时能量、ZCR、RMS、峰值幅度、时域包络等。
- 特征平滑:对特征序列做中值滤波或滑动平均,去除毛刺。
- 阈值判断与输出:根据应用场景设定阈值,输出检测结果或特征向量。
3.4.1 案例:语音端点检测(VAD)实现
假设我们要在 16kHz 采样率的麦克风信号中检测语音活动,用于唤醒词触发。初始现象是环境噪声约 40dB SPL,语音信号约 65dB SPL,信噪比约 25dB。我们采用双门限法:
第一步:计算每帧的短时能量 E(i) 和 ZCR(i)。帧长 25ms(400点),帧移 10ms(160点),汉明窗。
第二步:设定能量高门限 E_high(如最大能量的 60%)和低门限 E_low(如最大能量的 10%)。当 E(i) > E_high 时,标记为语音起始;当 E(i) < E_low 且持续 5 帧以上时,标记为语音结束。
第三步:在能量低门限附近,使用 ZCR 辅助判断。若 ZCR(i) 连续 3 帧超过平均 ZCR 的 1.5 倍,则认为是清音段,延长语音段。
结果:在安静环境下检测准确率达 98%,在 15dB 信噪比下准确率降至 85%。通过增加 ZCR 辅助后,准确率提升至 91%。
复盘:ZCR 在低信噪比下容易受噪声过零影响,需要结合能量门限做加权。此外,门限值需要根据实际环境自适应调整,建议每 2 秒更新一次噪声底噪估计。
3.5 常见误区与工程建议
在时域特征提取中,工程师常犯以下错误:
- 忽略直流偏置:直接计算 ZCR 会导致结果严重失真,必须先做 DC Block。
- 帧长选择不当:帧长过短(<5ms)导致能量波动剧烈,帧长过长(>50ms)则时间分辨率不足,无法捕捉语音起始点。
- 窗函数使用错误:矩形窗在频谱分析中泄漏严重,但在时域能量计算中影响较小,应根据场景选择。
- 阈值固定不变:环境噪声变化时,固定阈值会导致误检。建议使用自适应阈值(如噪声底噪 + 6dB 偏移)。