1. 课程导入

做音频算法这些年,我最大的体会是:所有声学特征提取的根,都扎在声学基础里。你想想看,无论是做语音识别、声纹识别,还是音乐信息检索,最终都是在跟声音的三个物理属性打交道——频率、振幅、相位。这一章,我们就从最底层把这些概念捋清楚。

1.1 声音的三个物理属性

声音的本质是什么?说白了,就是空气分子在介质中传播的机械振动。这个振动可以用三个维度来描述:

属性 物理含义 人耳感知 我在项目中踩过的坑
频率 每秒振动的次数(Hz) 音调高低 采样率不够时,高频成分直接混叠,听感像「嘶嘶声」
振幅 振动的最大偏移量 响度大小 归一化时忘记考虑直流偏置,导致静音段被放大
相位 振动起始点的角度(°或rad) 空间定位(双耳差) 做波束成形时,相位校准偏差1°就导致指向性偏移

核心记忆点:频率决定「是什么音」,振幅决定「有多响」,相位决定「从哪来」。特征提取时,我们最常用的是频率和振幅,相位往往在空间音频场景才重点处理。

1.2 时域与频域:同一枚硬币的两面

我刚入行时,总觉得时域和频域是两个世界的东西。后来带我的老工程师说了一句话,我记到现在:「时域是声音的日记,频域是声音的族谱」。

  • 时域(Time Domain):横轴是时间,纵轴是振幅。你录一段语音,波形图就是时域表示。它直观,但信息冗余大——你看不出这段声音里有哪些频率成分。
  • 频域(Frequency Domain):横轴是频率,纵轴是能量(或幅度/相位)。它告诉你「这个声音里有哪些频率,各自多强」。但你看不到时间变化。

举个例子:一段钢琴的C4音(约262Hz)和一段小提琴的C4音,时域波形完全不同,但频域谱线的主峰都在262Hz。频域帮你抓住了本质特征,过滤掉了演奏方式、乐器音色等「干扰信息」。

我的习惯:做特征提取前,先看一眼时域波形,确认有没有削波、直流偏置、突发噪声。然后再切到频域看能量分布。两个视角互补,缺一不可。

1.3 傅里叶变换:从时域到频域的桥梁

傅里叶变换(Fourier Transform, FT)是声学特征提取的第一块基石。它的数学形式长这样:

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

别被积分符号吓到。我换个说法你就懂了:傅里叶变换就是「用一堆不同频率的正弦波,去拟合原始信号」。每个正弦波对应一个频率,它的系数(幅度和相位)就是频域里的值。

为什么会这样?因为正弦波是「正交基函数」——它们之间互不干扰,可以独立地表示信号中的各个频率成分。你想想看,这就像用红绿蓝三原色去分解一幅彩色照片,每种颜色独立存在。

离散傅里叶变换(DFT)与快速傅里叶变换(FFT)

实际音频信号是离散的采样点,所以我们用离散傅里叶变换:

X[k] = Σ_{n=0}^{N-1} x[n] · e^{-j2πkn/N},  k = 0, 1, ..., N-1

直接算DFT,复杂度是O(N²)。N=1024时,要算100多万次乘法。而FFT(Cooley-Tukey算法)把复杂度降到O(N log₂N),N=1024时只需约1万次。我在嵌入式设备上做实时特征提取时,FFT是必选项,否则CPU直接跑满。

我曾经踩过的坑:FFT的点数N必须满足2的幂次(如512、1024、2048)。有一次我图省事用了N=1000,结果FFT库直接报错,查了半天才发现是点数不对。另外,N越大频率分辨率越高(Δf = fs/N),但时间分辨率会下降——这是经典的「不确定性原理」在信号处理中的体现。

1.4 核心知识体系:一张图看懂

下面这张SVG图,把本章的核心逻辑串起来了。我建议你把它存下来,后面每学一章都回来对照一下。

声学基础与傅里叶变换知识体系 声学基础与傅里叶变换知识体系 声音物理属性 时域 vs 频域 傅里叶变换 频率 (Hz) 振幅 相位 时域波形 频域谱线 DFT/FFT 采样率 fs 频率分辨率 Δf 时间分辨率 不确定性原理 应用:声学特征提取(MFCC / Fbank / 频谱图) 📌 说明 • 频率、振幅、相位是声音的「三原色」,所有特征提取都基于它们 • 时域和频域是同一信号的不同视角,傅里叶变换是转换工具 • FFT 是 DFT 的快速实现,是实时音频系统的标配

1.5 几个必须记住的工程参数

做特征提取时,这几个参数你几乎每天都会碰到。我列了个速查表:

参数 公式 典型值 我的建议
频率分辨率 Δf = fs / N fs=16000, N=512 → 31.25 Hz 语音用20~50Hz,音乐用5~10Hz
时间分辨率 Δt = N / fs N=512, fs=16000 → 32 ms 语音帧长一般20~30ms
奈奎斯特频率 f_max = fs / 2 fs=16000 → 8000 Hz 语音信号带宽通常限制在4~8kHz
FFT点数 N = 2^k 512 / 1024 / 2048 根据频率分辨率需求反推

一个小技巧:如果你不确定选多少点,先定帧长(比如25ms),再算N = round(fs × 0.025),然后向上取整到最近的2的幂。比如fs=16000时,25ms对应400个点,向上取整到512。这样既保证时间分辨率,又满足FFT要求。

1.6 本章小结

嗯,到这里,声学基础的第一块砖就砌好了。我们理清了:

  • 声音的三个物理属性——频率、振幅、相位,各自对应什么感知和工程意义
  • 时域和频域是同一信号的两个视角,没有高低之分,只有适用场景不同
  • 傅里叶变换(尤其是FFT)是连接时域和频域的桥梁,也是后续所有特征提取的起点