1. 课程导入

各位同学,欢迎来到《音频DSP算法入门到部署》的第一章。我是你们这门课的主讲,一个在音频嵌入式领域摸爬滚打了十几年的老工程师。今天咱们不聊虚的,直接从声音的“根”上说起。

你可能会问:“声音不就是振动吗?有什么好学的?”嗯,我当年也这么想。直到有一次,我在一个降噪项目里,死活滤不掉某个频段的噪声,最后发现是相位问题——那一刻我才意识到,基础不牢,地动山摇。

1.1 声音的物理三要素:频率、振幅、相位

声音的本质是机械振动在介质(空气、水、固体)中的传播。描述一个简谐振动,只需要三个参数:频率、振幅和相位。这三个东西,就是音频DSP世界里最底层的“原子”。

  • 频率(Frequency):单位时间内振动的次数,单位是赫兹(Hz)。人耳能听到的范围大约是20Hz~20kHz。低于20Hz叫次声波,高于20kHz叫超声波。我个人习惯把1kHz以下叫“低频段”,1kHz~4kHz叫“中频段”,4kHz以上叫“高频段”。
  • 振幅(Amplitude):振动的幅度大小,决定了声音的响度。在数字域里,振幅通常用dBFS(分贝满量程)表示。0dBFS是数字系统能表示的最大值,超过就削波——嗯,这个坑我踩过不止一次。
  • 相位(Phase):振动在时间轴上的起始位置,单位是度(°)或弧度(rad)。相位本身不被人耳直接感知,但相位差会严重影响声音的叠加效果。我曾经在调试一个双麦克风阵列时,因为一根信号线焊反了,导致两路信号相位差了180°,结果降噪变成了“增噪”……

核心理解:任何一个复杂的音频信号,都可以分解成无数个不同频率、不同振幅、不同相位的正弦波的叠加。这就是傅里叶变换的物理基础。

1.2 时域与频域:看声音的两种“眼镜”

时域和频域,说白了就是看同一个信号的两副眼镜。时域眼镜看的是“声音随时间怎么变”,频域眼镜看的是“声音里有哪些频率成分”。

举个例子:你听到一个钢琴的中央C(约261.6Hz)。在时域里,你看到的是一个周期约3.8ms的波形;在频域里,你看到的是在261.6Hz处有一个尖峰,以及它的整数倍谐波(523Hz、784Hz……)。

我个人做算法时,90%的调试工作都在频域里完成。为什么?因为人耳对频率的感知是“对数”的,而时域波形往往看不出噪声的具体频段。你想想看,一个50Hz的工频干扰,在时域里可能只是波形上的一点点抖动,但在频域里就是一个刺眼的尖峰。

小技巧:刚开始学DSP的同学,建议养成“时频双看”的习惯。遇到任何音频问题,先看时域波形判断有没有削波或静音,再看频谱判断噪声分布。这个习惯能帮你省下大量调试时间。

下面这张图,是我自己画的一个时频域对应关系,帮你建立直观印象:

时域与频域对应关系 时域波形 横轴:时间 (t) 纵轴:振幅 (A) 看到的是“振动过程” 适合检测:削波、静音、瞬态 频域频谱 横轴:频率 (f) 纵轴:幅度 (dB) 看到的是“频率成分” 适合检测:噪声、谐波、共振 核心关系:傅里叶变换 时域信号 → 傅里叶变换 → 频域频谱 频域频谱 → 逆傅里叶变换 → 时域信号 两者是同一信号的不同“投影”,信息量完全等价

1.3 采样定理与量化:从模拟到数字的“翻译”

要把连续的声音信号变成计算机能处理的离散数据,需要经过两步:采样和量化。这两步做不好,后面所有算法都是白搭。

1.3.1 采样定理(Nyquist-Shannon定理)

这个定理的内容很简单:采样频率必须大于信号最高频率的两倍。用公式说就是:fs > 2 * fmax。

举个例子:人耳能听到20kHz,所以CD的采样率是44.1kHz(略大于2×20kHz)。为什么不是刚好40kHz?因为实际滤波器做不到理想截止,需要留过渡带。我见过有人为了省存储,用32kHz采样率录20kHz的信号,结果回放时全是混叠失真——那声音,怎么说呢,像砂纸在玻璃上刮。

避坑指南:我曾经在一个低功耗项目里,为了降低数据率,把采样率从48kHz降到16kHz,但忘了加抗混叠滤波器。结果采集到的信号里,8kHz以上的成分全部“折叠”到了低频段,怎么滤波都滤不干净。记住:采样前必须加抗混叠低通滤波器,这是铁律。

1.3.2 量化与量化噪声

采样是把时间离散化,量化是把幅度离散化。量化位深(bit depth)决定了幅度被分成多少级:16bit有65536级,24bit有16777216级。

量化必然带来误差,这个误差就是量化噪声。量化噪声的功率只与量化步长有关,与信号本身无关。理论上,每增加1bit,信噪比(SNR)提升约6.02dB。所以16bit的理论SNR是96.3dB,24bit是144.5dB。

我个人的经验是:做语音通信,16bit足够了;做音乐制作或高保真录音,至少24bit。为什么?因为后续的DSP处理(如滤波、增益调整)会放大量化噪声,留点余量总是好的。

参数 典型值 说明
采样率 (fs) 8kHz / 16kHz / 44.1kHz / 48kHz / 96kHz 语音常用8k/16k,音乐常用44.1k/48k,高保真用96k
位深 (bit depth) 8bit / 16bit / 24bit / 32bit float 8bit用于语音质量要求极低场景,16bit是CD标准,24bit是录音室标准
理论SNR 48dB / 96dB / 144dB / ∞ (浮点) 每增加1bit,SNR提升约6.02dB
数据率 fs × bit_depth × channels 例如:44.1kHz × 16bit × 2ch = 1411.2 kbps

1.4 常见音频格式对比:WAV、MP3、AAC

做音频DSP,你一定会跟文件格式打交道。我挑三个最常用的说说:

  • WAV(Waveform Audio File Format):无损格式,本质上是PCM数据的“容器”。优点是没有压缩损失,算法处理时直接读写样本值,非常方便。缺点是文件体积大。我在调试阶段,一律用WAV格式,因为我不想在“数据有没有被压缩破坏”这件事上浪费时间。
  • MP3(MPEG-1 Audio Layer 3):有损压缩格式,利用心理声学模型(掩蔽效应)去掉人耳不敏感的频率成分。压缩比可达10:1以上。但要注意:MP3在低码率(如128kbps以下)时,高频细节损失明显,而且会产生“预回声”伪影。
  • AAC(Advanced Audio Coding):MP3的继任者,同样是有损压缩,但编码效率更高。在相同码率下,AAC的音质通常优于MP3。我个人的建议是:如果项目允许,优先用AAC替代MP3,尤其是在低码率场景(如网络流媒体)。
特性 WAV MP3 AAC
压缩方式 无损(PCM) 有损(心理声学) 有损(心理声学)
典型码率 1411 kbps (CD) 128~320 kbps 64~320 kbps
音质(同码率) 最高(无损失) 一般 较好
编码复杂度 无(直接存储) 中等 较高
适用场景 调试、编辑、存档 音乐分发、兼容性要求高 流媒体、低码率高质量

我的工作流:开发阶段全部用WAV(44.1kHz/16bit/单声道或双声道),方便用Python或MATLAB直接分析。算法定型后,再根据产品需求决定是否转成MP3或AAC。记住:不要在压缩域里做DSP处理——先把数据解压成PCM,处理完再重新编码。这是铁律。

好了,第一章的内容就到这里。音频信号的基础,说白了就是“频率、振幅、相位”这三个物理量,加上“时域/频域”两种观察视角,再加上“采样/量化”两个数字化步骤。这些概念会贯穿整个课程,后面的每一章都会用到它们。

下次见。