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 非线性量化:把资源用在刀刃上

既然均匀量化对小信号不友好,那能不能换个思路?小信号用更小的量化步长,大信号用更大的量化步长。这就是非线性量化的核心思想。

常见的非线性量化策略有两种:

  1. 对数量化:输入信号先经过对数压缩,再进行均匀量化。A 律和 μ 律是典型代表,广泛应用于语音通信。
  2. 浮点量化:用指数和尾数的方式表示信号,动态范围极大。比如 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 知识体系:量化失真分析框架

下面这张图总结了量化失真分析的核心逻辑,我建议你保存下来,做项目时对照着看。

量化失真分析框架 量化策略选择 均匀量化 非线性量化 量化步长 Δ = 2V / 2^N 量化层数 M = 2^N 压缩特性(A律/μ律) 量化噪声模型:σ²_e = Δ² / 12 信噪比:SNR = 6.02N + 1.76 + 20log₁₀(A) dB 实际影响因素:信号幅度、ADC非理想特性(INL/DNL/时钟抖动) 注意

3.6 实际排查中的常见问题

做量化失真排查时,我总结了几条经验:

现象 可能原因 排查方法
信噪比远低于理论值 信号幅度太小,或 ADC 存在较大 DNL 检查信号幅度,测量 ADC 的 DNL 曲线
量化噪声不是白噪声 信号变化缓慢,或存在周期性成分 观察频谱,看是否有明显的谐波分量
小信号失真明显 均匀量化对小信号不友好 考虑改用非线性量化,或增加信号增益
信噪比随温度变化 ADC 的量化特性受温度影响 做温度循环测试,查看数据手册的温度系数

我的个人习惯:每次做量化分析时,我都会先算一下理论 SNR,然后实测对比。如果差距超过 5 dB,我就会怀疑 ADC 的非理想特性或者前端电路有问题。这个习惯帮我发现过好几次设计隐患。

量化失真分析,说白了就是搞清楚“误差从哪里来,有多大,怎么减小”。均匀量化简单但效率低,非线性量化复杂但效果好。选哪种,取决于你的信号特性和系统要求。记住那个 SNR 公式,做项目时随时可以拿出来估算一下。