前言

今天继续从经典的 ADI 《MT-001》说起,通常情况下量化噪声是白噪声,但如果量化噪声与输入信号之间存在相关性,就不能被当做白噪声对待。

文中举了一个有意思的例子:理想 ADC 的采样频率为 80 MSPS ,一种情况输入信号频率为 2MHz,采样频率与其相除正好是 40 倍;另一种情况输入信号频率稍微偏一点,为 2.111MHz,采样频率不能与其整除。那么两种情况的量化噪声分别什么样?

量化噪声 FFT 频谱图

图1 量化噪声 FFT 频谱图:(A) 输入信号为 2MHz; (B) 输入信号为 2.111MHz;[1]

可以看到,图 (A) 中量化噪声中有明显的谐波,且 FFT 底噪较低;图 (B) 中没有明显的谐波,且 FFT 底噪较高。

文中告诉我们,两种情况下理想 ADC 的 SNR 都是 74 dBc(噪声总能量一样),但图 (A) 中 SFDR 是 77dBc(谐波较大),图 (B) 中 SFDR 是 92dBc(谐波较小)。

解释原因,文中强调了“相关性”,摘录如下:

Under certain conditions where the sampling clock and the signal are harmonically related, the quantization noise becomes correlated, and the energy is concentrated in the harmonics of the signal—however, the RMS value remains approximately q/√12.

Quite often, the assumption is made that the theoretical quantization noise appears as white noise, spread uniformly over the Nyquist bandwidth DC to Fs/2. Unfortunately, this is not true in all cases. In the case of strong correlation, the quantization noise appears concentrated at the various harmonics of the input signal, just where you don’t want them.

你理解了吗?下文是我的理解。

为什么量化噪声会产生谐波?

我们可以把 ADC 看成是一种非线性设备,输入一个连续的信号,输出一个离散的(有台阶)的量化信号,比如:

ADC 量化信号与量化噪声

图2 ADC 量化信号与量化噪声[2]

量化信号与输入信号之间的差距,就是量化噪声。

如果采样时钟频率是输入信号的整数倍(比如以 80MHz 采样 2MHz 的正弦波),在每个周期内,采集到的样本数量是一样的,并且这些“样本值”也是固定的。对于不同周期的采样,只是在一遍一遍的重复这些样本值。

然后,将量化信号与输入信号相减,得到的量化噪声也是一些固定的样本值,重复出现的样本值具有周期性,这种周期性与输入信号相关。图2 就是这样一个例子。

如果采样时钟频率不是输入信号的整数倍(比如以 80MHz 时钟采样 2.111 MHz 的正弦波),只要采样的样本数量够多,几乎能覆盖正弦波所有可能的值(因为每个周期内采样的位置不同),样本值的合集非常丰富。将两者相减,得到的量化噪声是相对随机的,这使得量化噪声与输入信号不相关。

总之,如果量化噪声在周期上与输入信号具有相关性,会出现谐波,使得 SFDR 不佳。但就 SNR 来说,因为只影响噪声能量密度的分布,总能量没有变化,所以 SNR 一样(理想 SNR 只由 bit 位数决定,详情请见上一篇)。

为什么只有奇数谐波?

另外一个问题,在图1 (A) 中,为何量化噪声的频谱只有输入信号的奇数谐波?如 3rd(6MHz)、 5th(10MHz)、 7th(14MHz)……

对于这个问题,回顾一下傅里叶变换的基本图示,比如下面这种可以帮助理解:

FFT奇数谐波对应的信号

图3 FFT奇数谐波对应的信号[3]

FFT偶数谐波对应的信号

图4 FFT偶数谐波对应的信号[3]

也就是,如果信号在正半周期与负半周期是对称的,频谱上只有奇数谐波;如果正半周期与负半周期不对称,则有偶数谐波。图1 (A) 的量化噪声属于前者的情况。

如何模拟量化噪声?

我看了几篇用 Python 模拟量化噪声的案例,类似步骤如下,完整代码见[4]:

1
2
3
signal = np.sin(2*np.pi*f0*t) #原始输入信号
quantized = quantize(signal, threshold) #量化信号
qnoise = quantized - signal #量化噪声

做出时域图和频谱图的示例分别如下:

Python模拟的量化噪声

图5 Python模拟的量化噪声[4]

图中,蓝色是原始输入信号,红色是量化后信号(2 bit 量化),绿色是量化噪声。

但在实际开发中,我们是对 ADC 之后的量化信号做 FFT,也就是对上图的红色信号直接做 FFT,那么想象一下其频谱图会是什么样?

如何破除相关性 —— Dither(抖动)

为了避免图1 (A) 中的情况,现代化 ADC 内部具有 Dither,这是一种对信号施加抖动的技术,可以破除量化噪声相关性,虽然会略微增加底噪,但可以改善 SFDR 。

一般 SPEC 上也会标注 Dither 开启后的 SFDR 差异,举例如下:

ADC内部 Dither 对 SFDR 的提升

图6 ADC ltc2208 内部 Dither 对 SFDR 的提升[5]

小结

今天我们从 ADI 《MT-001》的例子出发,解释了当量化噪声与输入信号具有周期相关性时会产生谐波,通过 Dither 可以破除相关性,提升 SFDR。

顺便说一下 ADI MT 系列非常经典,值得细品,作者 Walt Kester 介绍如下,在 ADI 工作了 47 年:

Walt Kester的介绍

图7 Walt Kester的介绍

有网友整理了他的著作全集,有兴趣查阅的话详见[6]。

参考资料

主要来自以下内容,都可以通过搜索关键词获取:

  1. ADI MT-001 by Walt Kester: Taking the Mystery out of the Infamous Formula, “SNR = 6.02N + 1.76dB” and Why You Should Care
  2. https://www.researchgate.net/publication/228855699_Improved_residual_analysis_in_ADC_testing
  3. https://www.quora.com/What-are-even-and-odd-harmonics-in-audio-signals-Why-are-they-important
  4. https://dsp.stackexchange.com/questions/36629/coherent-sampling-and-the-distribution-of-quantization-noise
  5. ADI Linear ltc2208 datasheet
  6. https://tomverbeure.github.io/2021/02/15/Analog-Devices-Tutorials.html

欢迎关注我的微信公众号“疯狂的运放”,及时收到最新的推文。