1. 量化噪声为何会产生谐波?
我第一次用ADC芯片做音频采集时,发现一个奇怪现象:输入纯净的正弦波,FFT频谱上却出现了不该有的谐波。这就像用高保真麦克风录音,回放时却听到失真的吉他声。经过反复测试,终于明白问题出在量化噪声与信号的"相关性"上。
想象用刻度尺测量一根弯曲的铁丝。如果每次都在相同位置测量,记录的长度变化会呈现固定模式。ADC采样也是如此:当采样时钟与信号频率成整数倍关系时(比如80MHz采样2MHz信号),每个周期采集的样本位置固定,量化误差也呈现周期性。这种周期性误差在频谱上表现为谐波,就像铁丝测量误差会重复出现特定模式。
数学上可以这样理解:设输入信号为x(t)=Asin(2πf₀t),采样间隔Δt=1/fₓ。当fₓ/f₀=N(整数)时,第k个采样点xₖ=Asin(2πk/N)。量化后的值qₖ=Q(xₖ),误差eₖ=qₖ-xₖ具有周期性eₖ=eₖ₊ₙ。根据傅里叶变换性质,周期信号必然产生谐波分量。
实测数据更直观:用12位ADC以80MSPS采样2MHz正弦波,FFT显示除了基波外,在6MHz(3次)、10MHz(5次)等位置出现明显谐波,SFDR仅77dB。而将输入改为2.111MHz(非整数倍关系)时,谐波消失,底噪均匀分布,SFDR提升至92dB。
2. 谐波中的奇数次之谜
在分析频谱时,我发现一个有趣现象:谐波总是以3次、5次等奇数次出现。这让我联想到吉他弦的振动模式——当弦中点被固定时,只能产生奇数倍频的泛音。
通过Python模拟可以清晰看到这个现象:
import numpy as np
import matplotlib.pyplot as plt
fs = 80e6 # 采样率
f0 = 2e6 # 信号频率
t = np.arange(0, 1e-3, 1/fs)
signal = np.sin(2*np.pi*f0*t) # 原始信号
quantized = np.round(signal*2048)/2048 # 12位量化
qnoise = quantized - signal # 量化噪声
# 绘制


236

被折叠的 条评论
为什么被折叠?



