3. 性能指标与度量

做音频DSP,说白了就是跟声音信号打交道。声音在耳朵里是连续的振动,但在计算机里,它是一串离散的数字。这串数字怎么理解?怎么分析?怎么处理?

我个人习惯,拿到一段音频数据,第一件事就是看它的时域波形。为什么?因为直观。你能看到音量大小、有没有削波、有没有静音段。但光看时域,很多信息是藏起来的——比如这段声音里有哪些频率成分,哪个频率能量大,哪个频率有杂音。

这就引出了频域分析。时域和频域,就像一枚硬币的两面。你从时域看,是波形在时间轴上的起伏;从频域看,是不同频率成分的分布。两者之间怎么转换?靠的就是傅里叶变换。

核心观点:时域让你看到“发生了什么”,频域让你看到“是什么组成的”。音频DSP的很多优化,本质上都是在频域里做文章,再转回时域输出。

3.1 时域信号表示

时域信号,就是信号随时间变化的曲线。在数字音频里,我们把它离散化了——每隔一个固定的时间间隔(采样周期)取一个样点。

举个例子,CD音质的采样率是44100Hz,意味着每秒钟采集44100个样点。每个样点用一个16位整数表示,范围是-32768到32767。把这些样点按时间顺序连起来,就是时域波形。

我在项目中遇到过一个问题:一个客户说他的音频播放有“噼啪”声。我让他把时域波形截图发过来,一看,波形顶部和底部被削平了——典型的削波失真。这就是时域分析的价值,一眼就能定位问题。

时域信号有几个关键参数:

  • 幅度:信号的大小,对应音量
  • 周期:信号重复一次的时间,单位秒
  • 频率:每秒重复的次数,单位赫兹(Hz),是周期的倒数
  • 相位:信号在时间轴上的起始位置,单位度或弧度

一个简单的正弦波,在时域里就是一条平滑的波浪线。但实际音频信号复杂得多——人声、乐器、噪声混在一起,时域波形看起来就像一团乱麻。这时候,就需要频域分析来帮忙了。

3.2 傅里叶变换直觉理解

傅里叶变换是什么?说白了,就是把时域信号拆解成不同频率的正弦波和余弦波的组合。

你想想看,一个复杂的音频信号,就像一锅汤。时域波形是整锅汤的味道,而傅里叶变换就是告诉你:这锅汤里放了哪些调料,每种调料放了多少。

数学上,傅里叶变换的公式长这样:

X(f) = ∫ x(t) · e^(-j2πft) dt

别被公式吓到。直觉上,它做了一件事:把信号和不同频率的正弦波做“内积”。如果信号里包含某个频率的成分,内积结果就大;如果不包含,结果就接近零。

我记得刚学DSP时,老师说过一句话让我印象很深:“傅里叶变换不是魔法,它只是把信号投影到频率轴上。” 嗯,就是这个道理。

在数字音频里,我们用的是离散傅里叶变换(DFT),因为信号是离散的。实际计算时,用快速傅里叶变换(FFT)算法,效率高得多。

小技巧:FFT的输入长度通常是2的幂次,比如1024、2048、4096。为什么?因为FFT算法利用了分治思想,2的幂次能最大化计算效率。我一般用2048点FFT做实时分析,平衡了频率分辨率和计算开销。

3.3 频谱与相位

傅里叶变换的输出,是一个复数序列。每个复数对应一个频率分量,包含两个信息:幅度和相位。

幅度谱(也叫频谱)告诉你每个频率的能量大小。横轴是频率,纵轴是幅度。你一眼就能看出,这段音频里低频多还是高频多,有没有某个频率特别突出。

相位谱告诉你每个频率分量的起始位置。相位信息看起来不如幅度直观,但它同样重要——它决定了不同频率之间的相对时间关系,直接影响声音的“质感”。

我在做语音增强时踩过一个坑:只修改幅度谱,不处理相位谱,结果输出声音听起来“空洞”、“不自然”。后来才明白,相位信息虽然人耳不敏感,但完全忽略它,重建的时域信号会丢失很多细节。

参数 含义 对听觉的影响
幅度谱 各频率的能量大小 决定音色、响度分布
相位谱 各频率的起始时间偏移 影响空间感、瞬态特性

注意:相位谱在0到2π之间是周期性的,所以通常显示在-π到π范围内。处理相位时要注意“相位卷绕”问题——相位值跳变超过π时,需要做unwrap处理,否则后续计算会出错。

3.4 窗函数的作用

做FFT时,我们只能取一段有限长度的信号。这就相当于把无限长的信号“截断”了。截断会带来什么问题?

你想想看,如果信号在截断边界处不是连续的,FFT会认为这里有“突变”,从而在频谱里引入额外的频率成分——这就是频谱泄漏。

窗函数就是用来解决这个问题的。它让信号在边界处平滑地衰减到零,减少截断带来的突变。

常见的窗函数有几种:

  • 矩形窗:相当于不加窗,主瓣最窄但旁瓣最高,频谱泄漏最严重
  • 汉宁窗:旁瓣较低,主瓣稍宽,最常用的通用窗
  • 海明窗:类似汉宁窗,但旁瓣更低
  • 布莱克曼窗:旁瓣衰减最快,但主瓣最宽

我曾经在做一个音频分析工具时,发现频谱里总有奇怪的“毛刺”。排查了半天,才发现是默认用了矩形窗,信号边界不连续导致的。换成汉宁窗后,频谱干净多了。

选择窗函数,本质上是在主瓣宽度和旁瓣衰减之间做权衡。主瓣窄,频率分辨力高,但旁瓣泄漏大;主瓣宽,频率分辨力低,但泄漏小。

我的经验:做实时音频分析,汉宁窗是首选。做高精度测量,用布莱克曼窗。做瞬态检测,用矩形窗(因为它不展宽瞬态)。没有万能窗,只有合适的窗。

3.5 知识体系总览

下面这张图,把时域、频域、傅里叶变换、窗函数的关系串起来了。我建议你多看几遍,理解它们之间的转换逻辑。

时域与频域知识体系 时域信号 幅度随时间变化 频域信号 频率成分分布 傅里叶变换 (FFT) 时域 → 频域 的桥梁 窗函数 减少频谱泄漏 核心流程:时域信号 → 加窗 → FFT → 频谱/相位分析 → 频域处理 → IFFT → 时域输出

这张图展示了音频DSP频域分析的标准流程。时域信号先加窗,再通过FFT转到频域,在频域里做分析或处理,最后通过IFFT转回时域。每一步都有它的意义,缺一不可。

嗯,时域和频域的基础就讲到这里。这些概念是后续所有优化工作的基石。你理解了它们,后面讲滤波器设计、降噪算法、实时优化时,就不会觉得云里雾里了。