1. 音频信号基础:声音的物理特性与数字化
各位同学,咱们今天聊聊音频信号最底层的那些事。声音这东西,说白了就是空气的振动。你对着麦克风说话,振膜一推一拉,就产生了电信号。我刚开始做音频驱动时,总觉得这些基础概念太简单,结果调试Codec时被一个采样率配置坑了一整天——嗯,从那以后我再也不敢小看这些“基础”了。
1.1 声音的三个物理量:频率、振幅、相位
声音的物理特性,核心就三个参数。你搞懂了它们,音频DSP的大门就算推开了一半。
- 频率(Frequency):单位Hz,表示每秒振动多少次。人耳能听到的大约是20Hz到20kHz。低频像鼓声,高频像镲片。我在项目中遇到过,有些廉价麦克风在8kHz以上就开始滚降,录出来的声音“闷”得不行。
- 振幅(Amplitude):表示振动的强弱,直接对应音量。单位可以是dBFS(数字域)或dBSPL(声压级)。注意,振幅不是线性感知的——人耳对响度的感觉是对数的。
- 相位(Phase):表示波形在时间轴上的位置,单位是度(°)或弧度。相位本身不产生声音,但它决定了多个声音叠加后的结果。我曾经调试一个双麦克风降噪算法,就因为两路信号的相位没对齐,结果噪声反而被放大了——避坑指南:相位问题在音频系统中非常隐蔽,一定要用示波器或分析工具确认。
核心记忆点:频率决定音调,振幅决定响度,相位决定叠加效果。三者独立又相互影响。
1.2 模拟信号 vs 数字信号
模拟信号是连续的,像水流一样平滑。数字信号是离散的,像台阶一样一格一格。为什么我们要把模拟信号转成数字?因为数字信号抗干扰、易存储、可计算。
| 特性 | 模拟信号 | 数字信号 |
|---|---|---|
| 连续性 | 连续(时间/幅度都连续) | 离散(时间/幅度都量化) |
| 抗干扰 | 差,噪声会叠加 | 强,只要误码率可控 |
| 存储 | 磁带、唱片 | 文件、内存 |
| 处理 | 模拟电路(运放、滤波器) | DSP、CPU、FPGA |
| 典型设备 | 模拟调音台、黑胶唱机 | 数字音频工作站、手机 |
我个人习惯,在设计音频系统时,先想清楚模拟前端和数字后端的分界线在哪里。Codec就是那个分界点——它负责ADC和DAC。
1.3 采样定理:奈奎斯特频率
这是整个数字音频的基石。奈奎斯特采样定理说:要无失真地重建一个模拟信号,采样频率必须至少是信号最高频率的两倍。
公式很简单:fs ≥ 2 × fmax
举个例子:人耳上限20kHz,所以CD采用44.1kHz采样率(留了一点余量)。如果你用32kHz采样率去采一个18kHz的信号,会发生什么?
答案是:混叠(Aliasing)。高频信号会被“折叠”到低频区域,产生原本不存在的频率成分。我调试过一个语音通信产品,采样率设成了8kHz,结果说话人的齿音全变成了刺耳的“嘶嘶”声——其实就是高频混叠到了中频段。
避坑指南:我曾经在项目里只关注了信号带宽,忽略了带外噪声。结果一个20kHz的超声噪声混叠到了4kHz附近,导致语音质量严重下降。解决办法:ADC之前一定要加抗混叠滤波器(低通滤波器),把高于fs/2的成分滤掉。
1.4 量化与量化噪声
采样是把时间离散化,量化是把幅度离散化。量化位数(bit depth)决定了动态范围。16bit有65536个台阶,24bit有16777216个台阶。
量化误差是不可避免的。你想想看,一个连续值被强行“归”到最近的台阶上,这个误差就是量化噪声。量化噪声的功率与量化步长有关,步长越小,噪声越小。
动态范围的计算公式:DR ≈ 6.02 × N + 1.76 dB(N为量化位数)
- 16bit:约96dB
- 24bit:约144dB
- 32bit浮点:理论无限,但受模拟前端限制
我在项目中遇到过,有人为了省存储空间,把24bit音频强行截成8bit。结果底噪大到离谱,音乐里全是“沙沙”声。量化噪声一旦引入,后续任何处理都无法消除——它就像数字音频的“原罪”。
实用技巧:实际系统中,量化噪声可以通过噪声整形(Noise Shaping)技术推到人耳不敏感的频段。Sigma-Delta ADC就是利用这个原理,用低分辨率高采样率换取高动态范围。Codec芯片里基本都是这种架构。
1.5 知识体系总览
下面这张图把本章的核心逻辑串起来了。从声音的物理特性,到模拟/数字的转换,再到采样和量化——每一步都有坑,每一步都有设计权衡。
这张图里,从物理特性到模拟信号,再到数字信号,中间经过ADC的两个关键步骤:采样和量化。采样定理告诉你该用多快的速度去采,量化噪声告诉你该用多少位去存。这两者共同决定了数字音频的质量上限。
好了,第一章的内容就到这里。记住:音频DSP的根基就是这些概念。后面讲Codec配置、滤波器设计、音频算法时,我们会反复回到这里。你把这些吃透了,后面的路就好走了。