理解ADC:为什么量化噪声也会产生谐波?附带介绍 Dither(抖动)
理解ADC:为什么量化噪声也会产生谐波?附带介绍 Dither(抖动)
在数字信号处理领域,ADC(模数转换器)是将模拟信号转换为数字信号的关键组件。然而,在这个转换过程中,量化噪声的产生是一个不可避免的问题。本文将深入探讨量化噪声与输入信号相关性导致谐波产生的原理,并介绍如何通过Dither(抖动)技术来改善信号质量。
前言
让我们从ADI的经典文献《MT-001》开始讨论。通常情况下,量化噪声被视为白噪声,但如果量化噪声与输入信号之间存在相关性,就不能简单地将其视为白噪声。
举一个具体的例子:假设理想ADC的采样频率为80 MHz,输入信号频率分别为2 MHz和2.111 MHz。这两种情况下,量化噪声的FFT频谱图有何不同?
图1 量化噪声FFT频谱图:(A) 输入信号为2 MHz;(B) 输入信号为2.111 MHz;[1]
从图1中可以看到,当输入信号为2 MHz时(图A),量化噪声中出现了明显的谐波,且FFT底噪较低;而当输入信号为2.111 MHz时(图B),没有明显的谐波,但FFT底噪较高。
文中提到,两种情况下理想ADC的SNR都是74 dBc(噪声总能量相同),但SFDR(无寄生动态范围)却有很大差异:图A中SFDR为77 dBc,图B中SFDR为92 dBc。
原因在于,当采样时钟与信号存在谐波关系时,量化噪声会变得相关,能量集中在信号的谐波上。虽然RMS值保持在q/√12左右,但这种相关性会导致谐波的产生。
为什么量化噪声会产生谐波?
可以将ADC视为一种非线性设备,它将连续的输入信号转换为离散的量化信号。例如:
图2 ADC量化信号与量化噪声[2]
量化信号与输入信号之间的差异就是量化噪声。
如果采样时钟频率是输入信号的整数倍(如80 MHz采样2 MHz的正弦波),每个周期内的采样点数相同,且这些样本值在不同周期间重复出现。这种周期性与输入信号相关,导致量化噪声也呈现周期性。
反之,如果采样时钟频率不是输入信号的整数倍(如80 MHz采样2.111 MHz的正弦波),每个周期内的采样位置不同,样本值的集合更加丰富。这种情况下,量化噪声相对随机,与输入信号不相关。
为什么只有奇数谐波?
观察图1(A)中的量化噪声频谱,可以发现只有输入信号的奇数谐波(如3rd、5th、7th等)。
回顾傅里叶变换的基本原理:
图3 FFT奇数谐波对应的信号[3]
图4 FFT偶数谐波对应的信号[3]
如果信号在正半周期与负半周期是对称的,频谱上只有奇数谐波;如果正负半周期不对称,则会有偶数谐波。图1(A)中的量化噪声属于前者的情况。
如何模拟量化噪声?
通过Python可以模拟量化噪声的过程:
signal = np.sin(2 * np.pi * f0 * t) # 原始输入信号
quantized = quantize(signal, threshold) # 量化信号
qnoise = quantized - signal # 量化噪声
模拟结果如下:
图5 Python模拟的量化噪声[4]
图中,蓝色是原始输入信号,红色是量化后信号(2 bit量化),绿色是量化噪声。
但在实际开发中,我们是对ADC之后的量化信号做FFT,也就是对上图的红色信号直接做FFT,那么想象一下其频谱图会是什么样?
如何破除相关性 —— Dither(抖动)
为了避免图1(A)中的情况,现代化ADC内部通常具有Dither功能。这是一种对信号施加抖动的技术,可以破除量化噪声的相关性,虽然会略微增加底噪,但可以显著改善SFDR。
例如,LTC2208 ADC的内部Dither对SFDR的提升效果:
图6 LTC2208 ADC内部Dither对SFDR的提升[5]
小结
本文从ADI《MT-001》的例子出发,解释了当量化噪声与输入信号具有周期相关性时会产生谐波,通过Dither可以破除相关性,提升SFDR。
ADI的MT系列文档非常经典,值得深入研究。作者Walt Kester在ADI工作了47年,其著作全集可以在相关网站查阅。