3. 数字音频基础:采样定理、量化与信噪比
好,我们进入数字音频的核心地带。说白了,就是把连续的声波,变成一串离散的数字。这个过程,你绕不开三个东西:采样、量化、编码。今天我们先啃前两个,顺便把信噪比和动态范围讲透。
3.1 采样定理(奈奎斯特)
先问个问题:为什么CD要用44.1kHz采样率?为什么不是20kHz?
答案就在奈奎斯特采样定理里。定理说:要无失真地重建一个模拟信号,采样频率必须至少是信号最高频率的两倍。
核心公式:
fs ≥ 2 × fmax
其中 fs 是采样频率,fmax 是信号最高频率。
这个两倍的频率,就叫奈奎斯特频率。低于这个频率的采样,会产生一种叫“混叠”的现象——高频信号会伪装成低频信号混进来,你根本听不出来,但波形已经坏了。
我记得刚做Codec驱动时,遇到一个案子:客户说录音里有“嗡嗡”的低频噪声,查了半天,发现是ADC前端的抗混叠滤波器没做好,一个15kHz的噪声被采样后折叠到了3kHz附近。嗯,这就是典型的混叠。
避坑指南:
我曾经在调试I2S接口时,发现采样率配置错了。Codec的MCLK分频设成了44.1kHz,但实际音频数据是48kHz的。结果就是声音变调,像磁带卡住一样。所以,采样率必须严格匹配,差一点都不行。
常见的采样率有这些:
| 采样率 (kHz) | 奈奎斯特频率 (kHz) | 典型应用 |
|---|---|---|
| 8 | 4 | 电话语音 |
| 44.1 | 22.05 | CD音频 |
| 48 | 24 | DVD、专业音频 |
| 96 | 48 | 高清音频 |
| 192 | 96 | 超高保真录音 |
你想想看,为什么电话只用8kHz?因为人声的主要能量集中在300Hz到3.4kHz,8kHz采样足够覆盖。但你要是拿它放音乐,高频全没了,声音发闷。
3.2 量化与量化噪声
采样把时间轴离散化了,量化则是把幅度轴离散化。每个采样点,我们用一个有限位数的数字来表示它的幅度。
比如16位量化,就是把信号的动态范围分成65536个台阶。每个台阶对应一个数字。台阶越细,精度越高,但代价是数据量更大。
量化误差,就是实际模拟值与量化后的数字值之间的差值。这个差值,在频域上表现为一种噪声——量化噪声。
量化噪声的功率:
Pn = Δ² / 12
其中 Δ 是量化步长(LSB的大小)。
Δ = Vref / 2N
Vref 是参考电压,N 是位数。
量化噪声是均匀分布的,从0到fs/2。所以,采样率越高,噪声被摊开的频带越宽,带内的噪声密度就越低。这就是过采样技术的理论基础。
我个人习惯在设计Codec时,先算一下量化噪声的底噪。比如一个16位ADC,参考电压3.3V,量化步长大约是50μV。量化噪声功率算下来,等效到输入端,大概在-98dBFS左右。这个值,基本决定了ADC的动态范围上限。
小技巧:
实际Codec的量化噪声往往比理论值高3-6dB,因为还有热噪声、电源噪声、时钟抖动等因素。所以,选型时别只看位数,要看实测的SNR和THD+N。
3.3 信噪比(SNR)与动态范围
这两个概念经常被混用,但严格来说,它们不一样。
- 信噪比(SNR): 信号功率与噪声功率的比值。通常用dB表示。对于满幅正弦波输入,理论SNR = 6.02N + 1.76 dB。
- 动态范围(DR): 系统能处理的最大信号与最小信号(通常指噪声底)的比值。对于理想ADC,动态范围等于SNR。
但实际中,动态范围往往比SNR大,因为你可以用更小的信号,只要它还在噪声底之上。比如一个24位Codec,理论SNR约146dB,但实际能做到120dB就算顶级了。
| 位数 (N) | 理论SNR (dB) | 实际典型值 (dB) | 应用场景 |
|---|---|---|---|
| 8 | 49.9 | 40-45 | 低端语音 |
| 16 | 98.1 | 85-95 | CD音质 |
| 24 | 146.2 | 110-125 | 专业录音 |
| 32 | 194.3 | 130-140 | 高端测量 |
为什么会这样?因为实际电路有热噪声、电源纹波、时钟抖动、非线性失真等。你想想看,一个24位ADC的LSB只有几微伏,而电路板上的噪声随便就是几十微伏。所以,高位数Codec的瓶颈往往不在量化器本身,而在模拟前端。
避坑指南:
我曾经调试一个24位Codec,发现SNR始终只有100dB,离手册标称的120dB差很远。查了半天,发现是电源去耦电容没焊好,导致电源噪声耦合进了模拟输入。换了个低ESR的电容,SNR直接提升了15dB。所以,Layout和电源设计,比Codec本身更重要。
3.4 知识体系图
下面这张图,把采样、量化、信噪比的关系串起来了。你可以看到,从模拟信号到数字信号,每一步都有代价。
从图里你可以看到,采样和量化是串联的,但它们的噪声机制不同。采样带来混叠风险,量化带来量化噪声。最终的信噪比,是两者叠加的结果。实际Codec设计时,还要考虑模拟前端的噪声,所以最终SNR往往低于理论值。