3、时域分析基础:波形表示、短时能量、过零率、时域特征提取方法

时域分析是音频信号处理中最直观、计算开销最低的分析手段。它直接以时间为自变量,观察信号幅度的变化规律,不涉及频域变换,因此特别适合实时性要求高、资源受限的嵌入式系统,以及需要快速判断信号有无、音量大小、静音/有声边界、语音端点检测等场景。本章将系统讲解波形表示的基本概念、短时能量与过零率的数学定义与物理含义,并给出完整的时域特征提取流程与工程注意事项。

时域分析特征提取链路 原始音频信号 x(n), fs=16kHz 预加重 + 分帧 帧长25ms, 帧移10ms 加窗(汉明窗) 短时能量 E(i) E = Σ x²(n)·w(n) 短时过零率 ZCR(i) Z = Σ |sgn(x)-sgn(x-1)| 时域包络 / 峰值 max|x(n)|, RMS 特征向量序列 [E(i), ZCR(i), RMS(i)] 典型应用场景 语音端点检测(VAD) 能量+ZCR双门限法 自动增益控制(AGC) RMS能量估算增益 噪声活动检测 ZCR区分清/浊音 特征组合使用:能量区分有声/无声,ZCR区分清音/浊音,RMS用于响度归一化 计算量小,适合MCU/DSP实时处理,是频域分析的前置步骤

3.1 波形表示与采样基础

音频信号在时域中通常表示为离散时间序列 x(n),其中 n 为采样点索引。采样率 fs 决定了时间分辨率,例如 fs=16000Hz 表示每秒钟采集 16000 个样本点,相邻样本间隔为 1/fs=62.5μs。波形表示的核心价值在于直观展示信号的幅度动态范围、周期性、瞬态冲击和噪声底噪。对于 16-bit 量化系统,幅度范围通常为 -32768 至 +32767,归一化后为 -1.0 至 +1.0。

在实际工程中,波形表示不仅仅是画图观察,更重要的是通过波形特征快速判断信号质量。例如,削波(Clipping)现象表现为波形顶部被平切,说明增益过高;直流偏置表现为波形整体偏离零轴,可能由 ADC 前端耦合电容失效或接地不良引起;间歇性脉冲噪声则表现为波形中随机出现的尖峰。这些判断在调试音频采集链路时非常高效。

经验提醒:在嵌入式系统中,建议将 ADC 采样数据以 int16_t 格式存储,并同时保存一个 float 类型的归一化副本(除以 32768.0),便于后续算法直接处理。波形显示时,应使用短时窗口(如 50ms)滚动刷新,避免一次性绘制大量数据导致 UI 卡顿。

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)),或者减去帧内均值。

风险提示:在低信噪比环境下(SNR < 10dB),ZCR 的判别能力会急剧下降。此时建议使用能量阈值先做粗检测,再用 ZCR 做细分类,避免单独依赖 ZCR 导致误判。

3.4 时域特征提取完整流程

一个完整的时域特征提取流程通常包含以下步骤:

  1. 信号预处理:去除直流偏置(DC Block),可选做预加重(y(n)=x(n)-αx(n-1),α≈0.97)以提升高频分量。
  2. 分帧:按帧长 N 和帧移 M 将连续信号切分为若干帧,帧移通常为帧长的 50%。
  3. 加窗:对每一帧乘以窗函数,减少帧边界处的频谱泄漏。
  4. 特征计算:逐帧计算短时能量、ZCR、RMS、峰值幅度、时域包络等。
  5. 特征平滑:对特征序列做中值滤波或滑动平均,去除毛刺。
  6. 阈值判断与输出:根据应用场景设定阈值,输出检测结果或特征向量。

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 偏移)。
总结:时域分析是音频信号处理的基础工具,短时能量和过零率虽然简单,但组合使用可以解决大部分实时检测问题。在实际工程中,建议先绘制波形和特征曲线,观察数据分布后再设定阈值,避免盲目调参。时域特征提取的计算复杂度为 O(N) 每帧,非常适合在 MCU 或 DSP 上实时运行,是频域分析前的必要前置步骤。