3、ADC与数据采集:采样定理、选型要点与数字下变频
好,咱们今天聊聊雷达信号处理里最前端的环节——ADC和数据采集。说白了,就是从天线下来的模拟信号,怎么变成我们能用算法处理的数字信号。这一步要是没做好,后面再牛的算法也白搭。我见过不少项目,FPGA逻辑写得飞起,结果ADC选型就栽了跟头,整个系统性能直接拉胯。
3.1 采样定理:奈奎斯特与带通采样
先说说采样定理。这是数字信号处理的基石,绕不开。
3.4.1 奈奎斯特采样定理
教科书上写得很清楚:采样频率 fs 必须大于信号最高频率 fmax 的两倍。也就是 fs > 2fmax。为什么?因为低于这个频率,信号就会发生频谱混叠,你采回来的信号跟原始信号就不是一回事了。
我个人习惯把这个定理理解成「采样就是给信号拍照片」。你拍得够快,才能捕捉到信号的变化细节。拍慢了,信号来回振荡,你看到的却是静止的,甚至方向都反了。
核心公式:
fs ≥ 2 × fmax
其中 fs 是采样率,fmax 是信号最高频率分量。
我在项目中遇到过一件事。有个同事做雷达中频采集,信号中心频率是70MHz,带宽20MHz。他按奈奎斯特定理,觉得采样率至少140MHz,于是选了个160MHz的ADC。结果做出来效果很差。为什么?因为他忽略了信号的实际带宽,而不是最高频率。
3.4.2 带通采样定理
这里就要引出带通采样了。说白了,带通采样就是针对窄带信号的。你想想看,如果信号中心频率很高,但带宽很窄,你非要按两倍最高频率去采样,那ADC的采样率得高到天上去,成本也上去了。
带通采样定理说:对于中心频率为 fc、带宽为 B 的带通信号,采样率 fs 只需要满足:
2fc - B ≤ fs ≤ 2fc + B (且 fs > 2B)
更常用的简化条件是:
fs ≥ 2B
嗯,这里要注意,带通采样是有前提的——信号必须是带限的,而且采样前必须加抗混叠滤波器。我曾经吃过这个亏,有一次做项目,觉得信号带宽窄,直接按2倍带宽采样,结果忘了加带通滤波器,带外噪声全部混叠进来了,数据一塌糊涂。
避坑指南:带通采样后,信号频谱会发生搬移。采样率选得不对,信号可能落在你不想看到的位置。我建议先用仿真工具(比如MATLAB)把频谱搬移情况算清楚,再定采样率。
3.2 ADC选型要点
ADC选型,说白了就是三个核心参数:采样率、位数、动态范围。但实际选型时,坑比想象的多。
3.2.1 采样率
采样率决定了你能处理的信号带宽。对于雷达来说,采样率直接决定了距离分辨率。公式很简单:
ΔR = c / (2 × B)
其中 B 是信号带宽,c 是光速。而 B 又受限于采样率(如果是直接采样的话)。
我个人习惯是先定距离分辨率,反推需要的带宽,再定采样率。比如你要1米的分辨率,那带宽需要150MHz左右,采样率至少300MHz(奈奎斯特采样)。
3.2.2 位数(分辨率)
ADC的位数决定了量化噪声的大小。每增加1位,信噪比提升约6dB。公式是:
SNR = 6.02 × N + 1.76 dB
其中 N 是ADC位数。
但这里有个误区。很多人觉得位数越高越好,其实不然。我在项目中遇到过,选了个16位的ADC,结果实际有效位数(ENOB)只有12位。为什么?因为ADC的线性度、抖动、电源噪声都会吃掉有效位数。你花大价钱买的16位,可能实际效果还不如一个精心设计的12位。
我的建议:选型时不要只看标称位数,要看数据手册里的ENOB(有效位数)。而且要注意,ENOB是随输入频率变化的,高频下ENOB会下降。
3.2.3 动态范围
动态范围,说白了就是ADC能同时处理的最大信号和最小信号之比。雷达信号的特点就是动态范围大——近处目标回波强,远处目标回波弱,可能差个60dB甚至更多。
ADC的动态范围主要由位数决定,但也受无杂散动态范围(SFDR)影响。SFDR指的是ADC能分辨的最大信号和最大杂散分量之间的比值。
| 参数 | 含义 | 选型建议 |
|---|---|---|
| 采样率 | 每秒采样点数 | ≥ 2倍信号带宽 |
| 位数 | 量化精度 | 关注ENOB,而非标称位数 |
| SFDR | 无杂散动态范围 | 雷达应用通常要求 ≥ 80dB |
| 输入带宽 | ADC能处理的最高输入频率 | 带通采样时需重点关注 |
3.3 IQ解调原理
雷达信号处理里,IQ解调是个核心概念。为什么要用IQ?因为单通道采样只能得到信号的幅度信息,丢失了相位信息。而雷达测距、测速、成像,都离不开相位。
IQ解调,说白了就是把信号分解成两路:I路(同相分量)和Q路(正交分量)。这两路相位相差90度,合起来就能完整描述信号的幅度和相位。
s(t) = I(t) × cos(ωt) - Q(t) × sin(ωt)
其中 I(t) 和 Q(t) 就是基带信号。
我在项目中遇到过一种情况:用单通道采样做脉冲压缩,结果距离旁瓣怎么也压不下去。后来换成IQ采样,问题迎刃而解。为什么?因为单通道采样丢失了相位信息,匹配滤波的效果大打折扣。
关键点:IQ解调后,信号的复数形式为:
x(t) = I(t) + j × Q(t)
这个复数信号包含了完整的幅度和相位信息。
3.4 数字下变频(DDC)
DDC,数字下变频,是ADC之后、信号处理之前的关键一步。它的作用是把中频或射频信号搬移到基带,同时降低数据率。
3.4.1 DDC的基本结构
一个典型的DDC包含三个部分:
- 数控振荡器(NCO):产生正交的本振信号 cos(ωt) 和 sin(ωt)
- 混频器:将输入信号与NCO信号相乘,完成频谱搬移
- 抽取滤波器:降低采样率,滤除高频分量
说白了,DDC就是在数字域里做了一次正交解调。模拟域里用混频器、90度移相器做的事,现在用数字电路来完成。
3.4.2 DDC的工程实现
在FPGA里实现DDC,我一般这么干:
// 伪代码示例:DDC实现
// 输入:adc_data (采样率 fs)
// 输出:i_data, q_data (采样率 fs/D)
// 1. NCO产生正交本振
nco_sin = sin(2π × f0 × n / fs)
nco_cos = cos(2π × f0 × n / fs)
// 2. 混频
i_mix = adc_data × nco_cos
q_mix = adc_data × nco_sin
// 3. 低通滤波 + 抽取
i_data = FIR_filter(i_mix, D)
q_data = FIR_filter(q_mix, D)
嗯,这里要注意几个工程细节:
- NCO的相位累加器位宽:我建议至少32位,否则频率分辨率不够
- 滤波器设计:抽取前的低通滤波器要能抑制带外噪声,同时不能破坏带内信号
- 数据位宽:每经过一级处理,位宽都会增长,要注意FPGA资源的消耗
我曾经踩过的坑:有一次做DDC,NCO的频率字算错了,导致本振频率偏了那么一点点。结果基带信号出现了频率偏移,多普勒测速全错了。后来我养成了一个习惯——每次上板前,先用MATLAB把NCO的频率字算好,再跟FPGA仿真结果对比一遍。
3.4.3 多级抽取与CIC滤波器
当抽取倍数很大时(比如从几百MHz降到几十MHz),单级FIR滤波器会非常消耗资源。这时候就要用CIC滤波器(级联积分梳状滤波器)。
CIC滤波器的好处是:不需要乘法器,只需要加法器和寄存器。在FPGA里实现起来非常高效。
我一般这样设计抽取链路:
- 第一级:CIC滤波器,完成大倍数抽取(比如8倍或16倍)
- 第二级:CIC补偿滤波器,补偿CIC的通带衰减
- 第三级:FIR滤波器,完成最后的整形和抽取
这样组合下来,资源消耗小,性能也能满足要求。
我的经验:CIC滤波器的级联数一般选3到5级。级数太少,阻带衰减不够;级数太多,通带衰减太大。我习惯用4级,然后在后面加一个补偿滤波器,效果不错。
小结
ADC和数据采集这块,说白了就是三个字:选对、采好、搬下来。选对采样率和ADC型号,采好信号不混叠,搬下来到基带做处理。每一步都有坑,但每一步也都有成熟的工程方法。
我个人觉得,做雷达信号处理,最怕的就是「纸上谈兵」。理论算得再好,上了板子可能完全不是那么回事。所以我的建议是:多仿真、多测试、多踩坑。踩过的坑多了,经验就来了。
下一章咱们聊聊脉冲压缩和匹配滤波,那是雷达信号处理的另一个核心。到时候再细聊。