3. 量化失真分析:均匀量化与非线性量化、量化噪声模型、信噪比计算
量化,说白了就是把连续信号变成离散数值的过程。你想想看,ADC 的位数是有限的,它不可能表示无限多个电平。所以,真实值和量化值之间必然存在误差——这个误差,就是我们常说的量化失真。
我刚开始做信号采集时,总觉得量化误差是 ADC 自身的问题,选个好芯片就行了。后来发现,量化策略的选择,对最终信噪比的影响非常大。今天我们就来把这件事彻底讲清楚。
3.1 均匀量化:最直观,但不一定最优
均匀量化,就是把信号的动态范围等分成若干层。每一层的宽度都一样,叫量化步长 Δ。
假设输入信号范围是 [-V, V],用 N 位 ADC 量化,那么量化层数 M = 2^N,步长 Δ = 2V / M。
举个例子:
V = 5V,N = 8 位
M = 256 层
Δ = 10V / 256 ≈ 39.06 mV
每个采样值都会被就近映射到最近的量化电平上。映射规则很简单:
- 如果输入值落在某个量化区间内,就输出该区间的中心电平
- 最大量化误差为 Δ/2
均匀量化的核心特点:
- 实现简单,硬件开销小
- 对小信号和大信号的量化误差相同
- 信号幅度较小时,信噪比会明显下降
我在项目中遇到过一个问题:用 12 位 ADC 采集振动信号,信号本身只有满量程的 10%。结果信噪比远低于理论值。原因就是均匀量化对小信号不友好——量化噪声是固定的,信号小了,信噪比自然就差了。
3.2 非线性量化:把资源用在刀刃上
既然均匀量化对小信号不友好,那能不能换个思路?小信号用更小的量化步长,大信号用更大的量化步长。这就是非线性量化的核心思想。
常见的非线性量化策略有两种:
- 对数量化:输入信号先经过对数压缩,再进行均匀量化。A 律和 μ 律是典型代表,广泛应用于语音通信。
- 浮点量化:用指数和尾数的方式表示信号,动态范围极大。比如 DSP 中的浮点格式。
为什么语音通信要用对数量化?因为人耳对声音的感知是对数级的。小声音的细微变化我们很敏感,大声音的波动反而没那么在意。对数量化正好匹配了人耳的听觉特性。
避坑指南:
我曾经在一个音频采集项目中直接用了均匀量化,结果低音量时底噪明显。后来换成 μ 律压缩,同样的 16 位 ADC,低音量信噪比提升了约 12 dB。所以,选量化策略前,一定要先搞清楚信号的统计特性。
3.3 量化噪声模型:数学上怎么描述?
量化误差 e = x - x_q,其中 x 是真实值,x_q 是量化值。在均匀量化且信号足够复杂的情况下,量化误差可以近似为:
- 在 [-Δ/2, Δ/2] 上均匀分布
- 与输入信号不相关
- 功率谱密度平坦(白噪声特性)
量化噪声的功率(方差)为:
σ²_e = Δ² / 12
这个公式怎么来的?均匀分布的概率密度函数是 1/Δ,方差积分一下就出来了。我建议你记住这个结论,后面信噪比计算会反复用到。
注意:量化噪声模型成立的前提是信号足够“活跃”,即信号在量化区间内快速变化。如果信号是直流或缓慢变化的,量化误差会呈现周期性,噪声模型就不准了。这种情况下,量化失真表现为谐波,而不是白噪声。
3.4 信噪比计算:理论值与实际值的差距
对于满量程正弦信号,均匀量化的理论信噪比公式为:
SNR = 6.02N + 1.76 dB
其中 N 是 ADC 的位数。这个公式是量化信噪比的上限,实际应用中很难达到。
为什么?因为公式假设:
- 信号是满量程的正弦波
- 量化噪声是理想的白噪声
- ADC 没有其他非理想特性(如 INL、DNL、时钟抖动等)
实际信噪比通常会比理论值低 3~6 dB。我做过一个测试:16 位 ADC,理论 SNR 应为 98.08 dB,实测只有 92.3 dB。差了将近 6 dB,主要原因是 ADC 的微分非线性(DNL)和时钟抖动。
对于非满量程信号,信噪比会进一步下降。假设信号幅度只有满量程的 A 倍(0 < A ≤ 1),则:
SNR = 6.02N + 1.76 + 20log₁₀(A) dB
当 A = 0.5 时,信噪比下降 6 dB。所以,尽量让信号接近满量程,是提高信噪比最直接的方法。
3.5 知识体系:量化失真分析框架
下面这张图总结了量化失真分析的核心逻辑,我建议你保存下来,做项目时对照着看。
3.6 实际排查中的常见问题
做量化失真排查时,我总结了几条经验:
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 信噪比远低于理论值 | 信号幅度太小,或 ADC 存在较大 DNL | 检查信号幅度,测量 ADC 的 DNL 曲线 |
| 量化噪声不是白噪声 | 信号变化缓慢,或存在周期性成分 | 观察频谱,看是否有明显的谐波分量 |
| 小信号失真明显 | 均匀量化对小信号不友好 | 考虑改用非线性量化,或增加信号增益 |
| 信噪比随温度变化 | ADC 的量化特性受温度影响 | 做温度循环测试,查看数据手册的温度系数 |
我的个人习惯:每次做量化分析时,我都会先算一下理论 SNR,然后实测对比。如果差距超过 5 dB,我就会怀疑 ADC 的非理想特性或者前端电路有问题。这个习惯帮我发现过好几次设计隐患。
量化失真分析,说白了就是搞清楚“误差从哪里来,有多大,怎么减小”。均匀量化简单但效率低,非线性量化复杂但效果好。选哪种,取决于你的信号特性和系统要求。记住那个 SNR 公式,做项目时随时可以拿出来估算一下。