声学基础回顾:声音的物理特性、时域与频域表示、采样定理与量化噪声

做语音算法落地,说白了就是跟声音打交道。但很多人一上来就调模型、跑代码,结果遇到杂音问题就抓瞎。我见过不少团队,模型在实验室跑得挺好,一上设备就崩——根源往往不是算法不行,而是连声音的基本特性都没搞清楚。

这一节,咱们把声学基础过一遍。别嫌基础,这些概念在杂音处理里天天要用到。

声音的物理特性:频率、振幅与相位

声音的本质是什么?是机械振动在介质中的传播。你对着麦克风说话,声带振动,空气分子被推来推去,形成疏密波。麦克风把这种气压变化转成电信号,ADC 再把它变成数字信号。

描述一个声音信号,有三个核心物理量:

  • 频率(Frequency):单位时间内振动的次数,单位 Hz。人耳能听到的大约是 20 Hz 到 20 kHz。语音信号的能量主要集中在 300 Hz 到 3.4 kHz 这个范围——这也是电话语音的带宽由来。
  • 振幅(Amplitude):振动的幅度,决定了声音的响度。在数字信号里,振幅对应采样值的幅度。
  • 相位(Phase):振动在时间轴上的起始位置。很多人觉得相位不重要,其实不然。在波束形成、回声消除这些场景里,相位信息是命根子。

避坑指南:我曾经在一个麦克风阵列项目里,因为忽略了相位一致性校准,导致波束形成算法出来的指向性完全不对。后来花了整整两天排查,才发现是两路 ADC 的采样时钟有微小偏差。所以,做多通道语音处理时,相位对齐是第一道坎。

时域表示:波形图里能看出什么?

时域表示最简单——横轴是时间,纵轴是振幅。你录一段语音,用 Python 的 matplotlib 画出来,就是一条上下起伏的曲线。

时域波形能告诉我们什么?

  • 能量分布:振幅大的地方能量高,比如元音部分;振幅小的地方可能是清辅音或静音段。
  • 周期性:浊音(元音、鼻音)有明显的周期性,周期对应基频(F0)。清音(如 /s/、/ʃ/)则像噪声,没有明显周期。
  • 突发噪声:关门声、敲桌子声,在时域上表现为一个尖锐的脉冲。

但时域有个致命缺点——你看不出频率成分。一个 100 Hz 的正弦波和一个 1000 Hz 的正弦波,在时域上都是正弦曲线,只是疏密不同。人眼很难从波形里分辨出频率信息。这就引出了频域表示。

频域表示:傅里叶变换与频谱

傅里叶变换告诉我们:任何时域信号都可以分解成不同频率的正弦波之和。这个思想太重要了。在杂音处理里,我们经常要把信号从时域变到频域,看看哪些频率上有噪声,然后有针对性地处理。

离散傅里叶变换(DFT)的公式长这样:

X[k] = Σ_{n=0}^{N-1} x[n] · e^{-j·2π·k·n/N}

实际工程里没人手写 DFT,都用快速傅里叶变换(FFT)。Python 里用 numpy.fft.fft 就行。

我的习惯:做语音增强时,我一般用 512 点或 1024 点的 FFT,帧长 20-30 ms,帧移 10 ms。这个参数组合在频域分辨率和时间分辨率之间比较平衡。你想想看,帧太长频域分辨率好,但时域上跟不上语音的快速变化;帧太短又看不清频率细节。

频谱图(Spectrogram)是时频分析的利器。横轴是时间,纵轴是频率,颜色深浅代表能量大小。从频谱图上,你能一眼看出语音的基频谐波结构、共振峰位置,以及噪声分布在哪些频段。

采样定理:奈奎斯特频率与混叠

把模拟信号变成数字信号,第一步就是采样。采样定理(奈奎斯特-香农定理)说:采样频率必须大于信号最高频率的两倍,否则会发生混叠。

用公式表达:

f_s > 2 · f_max

其中 f_s 是采样率,f_max 是信号中的最高频率成分。

混叠是什么?就是高频成分“伪装”成了低频成分,混进你的信号里。一旦混叠发生,就再也分不开了。我见过有人用 8 kHz 采样率去录包含 5 kHz 成分的信号,结果 5 kHz 的信号被“折叠”到了 3 kHz 的位置,听起来完全变味了。

应用场景 常用采样率 有效带宽
电话语音 8 kHz 0 - 3.4 kHz
宽带语音 16 kHz 0 - 7.2 kHz
高保真音频 44.1 kHz / 48 kHz 0 - 20 kHz

注意:采样前必须加抗混叠滤波器(低通滤波器),把高于 f_s/2 的频率成分滤掉。我见过有人为了省成本省掉这个滤波器,结果混叠噪声让整个语音增强系统直接报废。这个钱不能省。

量化噪声:精度与信噪比

采样之后是量化——把连续的振幅值映射到离散的量化电平上。量化会引入误差,这个误差就是量化噪声。

量化噪声的功率跟量化步长有关。对于均匀量化,量化噪声的信噪比(SNR)近似为:

SNR ≈ 6.02 · B + 1.76 dB

其中 B 是量化位数。每增加 1 位,信噪比提升约 6 dB。

常见的量化位数:

  • 8 位:信噪比约 50 dB,用于早期电话或对讲机,音质粗糙。
  • 16 位:信噪比约 98 dB,CD 音质,也是语音处理最常用的格式。
  • 24 位:信噪比约 146 dB,录音棚级别,动态范围极大。

在杂音处理里,量化噪声本身也是一种噪声。如果你的信号动态范围很大(比如安静环境下的微弱语音),量化噪声可能会淹没掉信号的低电平部分。这就是为什么做语音增强时,我建议至少用 16 位量化,条件允许的话用 24 位。

我的经验:有一次做远场语音识别,麦克风离说话人 5 米远,信号非常微弱。用 16 位量化时,量化噪声已经把语音的细节吃掉了。换成 24 位 ADC 后,信噪比明显改善,识别率从 62% 提到了 81%。所以,量化位数不是越高越好,但太低肯定不行。

知识体系总览

下面这张图把这一节的核心概念串起来了。从声音的物理特性出发,经过时域和频域两种表示方式,再到数字化的两个关键步骤——采样和量化。每一步都有对应的工程陷阱和注意事项。

声学基础知识体系 声学基础:从物理到数字化 声音的物理特性 频率(Hz) 振幅 相位 时域表示(波形) 频域表示(频谱) 采样(采样定理) 量化(量化噪声) 抗混叠滤波器 · 奈奎斯特频率 量化位数 · 信噪比 · 动态范围 每个环节都可能引入噪声,理解原理才能对症下药

这张图把整个知识链条理清楚了。从物理特性到两种表示方式,再到数字化的两个关键步骤,最后落到工程要点上。做杂音处理时,你遇到的每一个问题,几乎都能在这个链条上找到根因。