1. 为什么要了解混叠?
最近在做两个5 GS/s ADC 时间交织成 10 GS/s的高速采集项目时,有一个问题很容易把新人绕进去:
明明模拟输入是一个确定频率的正弦波,为什么经过 ADC 采样,再送到 FPGA 做 FFT 后,频谱上看到的却是另一个频率?
比如:
ADC 采样率:5 GS/s
输入信号:3.8 GHz
FPGA 做 FFT 后:可能看到1.2 GHz
3.8 GHz 去哪了?
ADC 把它“变频”了吗?
不是。
这就是数字采样里非常重要的一个概念:混叠(Aliasing)。
如果以后要做高速 ADC、FFT、频谱分析、时间交织 ADC,这个概念一定要真正理解,而不是只记一句“采样率至少是信号频率的两倍”。
2. 混叠到底是什么?
先说人话:
采样以后,不同的模拟频率可能产生完全一样的离散采样点。
一旦两组采样点完全相同,FPGA 后面的数字逻辑就没有办法判断它们原来分别是什么频率。
这就是混叠。
为什么会这样?
ADC 并不是连续观察模拟信号,而是每隔一段时间“看一眼”。
假设采样率为:
[
f_s=5\text{ GS/s}
]
那么采样周期就是:
[
T_s=\frac{1}{f_s}=200\text{ ps}
]
ADC 实际看到的是:
模拟信号:~~~~~~~连续变化~~~~~~~ 采样时刻:● ● ● ● ● 0 200 400 600 800 ps两个不同的模拟正弦波,只要在这些采样时刻上的数值一样,那么数字系统看到的就是同一组数据。
换句话说:
ADC 并不知道两个采样点之间发生了什么。
这就是混叠产生的根本原因。
3. 用一个例子看懂
假设:
[
f_s=5\text{ GHz}
]
输入一个:
[
f_{in}=3.8\text{ GHz}
]
5 GS/s 对应的第一 Nyquist 区间是:
[
0\sim \frac{f_s}{2}=0\sim2.5\text{ GHz}
]
而 3.8 GHz 已经超过 2.5 GHz。
采样之后,它会折叠回第一 Nyquist 区。
此时:
[
f_{alias}=f_s-f_{in}
]
所以:
[
f_{alias}=5-3.8=1.2\text{ GHz}
]
于是 FPGA 做 FFT 时,就会在1.2 GHz附近看到一个峰。
可以简单理解成频谱在 Nyquist 频率处被“折回来”:
频率: 0 2.5 5.0 GHz |---------|----------| ↑ Nyquist 输入: ● 3.8 GHz \ \ ● 1.2 GHz FFT 最终看到: 1.2 GHz所以经常会说:
超过 Nyquist 频率的信号会发生频率折叠。
更一般一点,可以把混叠理解成:
[
f_{alias}=|f_{in}-k f_s|
]
其中:
(f_{in}):模拟输入频率;
(f_s):采样率;
(k):某个整数。
实际观察时,还要继续把频率折叠到:
[
0\sim\frac{f_s}{2}
]
范围内。
新人阶段不需要死记复杂公式,先记住一个方法:
以 (f_s/2) 为边界,频谱会周期重复,并不断折回第一 Nyquist 区。
例如对于 5 GS/s:
| 模拟输入频率 | FFT 中可能看到 |
|---|---|
| 1.0 GHz | 1.0 GHz |
| 2.0 GHz | 2.0 GHz |
| 2.8 GHz | 2.2 GHz |
| 3.8 GHz | 1.2 GHz |
| 4.5 GHz | 0.5 GHz |
| 5.5 GHz | 0.5 GHz |
注意最后两项。
4.5 GHz 和 5.5 GHz 都可能落到 0.5 GHz。
这正是“不同模拟频率产生同一个数字频率”的含义。
所以只看 FFT 上的 0.5 GHz 峰值,你并不能天然知道模拟输入究竟是 0.5 GHz、4.5 GHz,还是 5.5 GHz。
4. 放到 FPGA / ADC 项目里看
再回到两个 5 GS/s ADC 时间交织的项目。
单个 ADC:
采样率:5 GS/s 采样周期:200 ps ADC0:● ● ● ● 0 200 400 600 ps如果 ADC1 理想情况下错开 100 ps:
时间 ─────────────────────────> ADC0:● ● ● ● ADC1: ● ● ● ● 合并:● ● ● ● ● ● ● 0 100 200 300 400 500 600 ps合并之后,每 100 ps 得到一个采样点,因此等效采样率为:
[
f_s=\frac{1}{100\text{ ps}}=10\text{ GS/s}
]
也就是说:
两个 5 GS/s ADC 理想时间交织后,可以得到 10 GS/s 的等效采样率。
此时数字系统第一 Nyquist 区间变成:
[
0\sim5\text{ GHz}
]
所以一个 3.8 GHz 信号:
对单个 5 GS/s ADC 的采样序列来说,位于第一 Nyquist 区之外;
对理想 10 GS/s 交织后的完整采样序列来说,3.8 GHz 位于第一 Nyquist 区内。
这也是提高等效采样率的重要意义之一。
但是这里一定要注意:
10 GS/s 采样率,不代表模拟输入带宽一定有 5 GHz,更不代表 ADC 可以无条件采集 0~5 GHz 的所有信号。
采样率和模拟输入带宽是两个不同指标。
ADC 前端的 Track-and-Hold、输入网络、封装、PCB、巴伦等都会限制模拟带宽。
反过来,有些 ADC 的模拟输入带宽甚至可以高于第一 Nyquist 区,这时还可以利用混叠进行欠采样(Undersampling)或带通采样(Bandpass Sampling)。
也就是说:
混叠并不永远是“错误”。
如果你提前设计好输入频段和抗混叠滤波器,它甚至可以被主动利用。
真正危险的是:
你不知道它发生了。
5. 用 Python 看一下混叠
下面这个例子故意用 5 GHz 采样率采一个 3.8 GHz 正弦波,再做 FFT:
import numpy as np import matplotlib.pyplot as plt fs = 5e9 fin = 3.8e9 N = 1024 t = np.arange(N) / fs x = np.sin(2 * np.pi * fin * t) X = np.fft.rfft(x) f = np.fft.rfftfreq(N, 1 / fs) plt.plot(f / 1e9, np.abs(X)) plt.xlabel("Frequency (GHz)") plt.ylabel("Magnitude") plt.grid() plt.show()运行之后,你会发现:
FFT 峰值并不在 3.8 GHz,而是在大约 1.2 GHz。
因为:
[
5-3.8=1.2\text{ GHz}
]
这里的代码只是帮助理解混叠现象,不是严格的 ADC 性能测试方法。
实际测试 SNR、SNDR、SFDR、THD、ENOB 时,还要考虑相干采样、FFT 点数、窗函数、基波和谐波 bin 的处理方式等问题。
6. 新人容易搞错的地方
误区一:FFT 看到 1.2 GHz,输入就一定是 1.2 GHz
不一定。
在 5 GS/s 系统中,3.8 GHz 同样可能混叠到 1.2 GHz。
因此分析实际 ADC 频谱时,必须同时知道:
采样率、模拟输入频段和 Nyquist 区间。
误区二:超过 (f_s/2) 的信号 ADC 就完全采不到
也不准确。
它可能仍然被 ADC 模拟前端采到,只不过数字域中的频率发生了折叠。
能不能采到,还取决于 ADC 的模拟输入带宽。
误区三:提高采样率就能解决所有高频采集问题
不能。
提高采样率可以扩大 Nyquist 区间,但高速采集还受到模拟带宽、时钟抖动、前端噪声以及时间交织 ADC 的 Gain、Offset、Timing Skew 等误差影响。
所以10 GS/s只说明每秒获得 100 亿个等效采样点,不等于整个采集链路自动拥有理想的 5 GHz 有效带宽。
7. 总结
这一篇最重要的是记住下面几件事:
混叠的本质,是不同模拟频率在采样后产生了无法区分的离散序列。
对采样率 (f_s) 来说,第一 Nyquist 区通常是0~(f_s/2)。
超过第一 Nyquist 区的频率可能折叠回来,所以输入 3.8 GHz,在 5 GS/s 采样下可能表现为 1.2 GHz。
采样率不等于模拟输入带宽,分析 ADC 时一定要把这两个指标分开。
两个 5 GS/s ADC 理想时间交织后可形成10 GS/s 等效采样率,但实际系统还需要解决通道失配和 Timing Skew 等问题。
下一篇继续聊:
《什么是时间交织 ADC?两个 5 GSPS ADC 如何实现 10 GSPS 采样?》
我们会从 200 ps 的单通道采样周期出发,看看两路 ADC 为什么只要错开 100 ps,就能把采样点“插”到一起,以及实际 FPGA 项目里真正麻烦的地方在哪里。
关键词
FPGA、ADC、混叠、Nyquist、FFT、频谱分析、时间交织ADC、高速采集