2. 雷达信号处理链
各位同学,今天我们来聊聊雷达信号处理链的核心环节。说实话,这部分内容我做了十几年,每次带新人时都会反复强调——这是毫米波雷达的「灵魂」所在。你想想看,天线接收回来的原始信号,就像一团乱麻,我们要通过这四步把它理清楚:ADC采样、距离FFT、多普勒FFT、CFAR检测。
我个人习惯把这四个步骤比作「剥洋葱」。一层层剥开,才能看到真正的目标。好,我们开始。
1. ADC采样:从模拟到数字的第一步
ADC采样,说白了就是把天线接收到的连续模拟信号,变成离散的数字信号。这一步看似简单,但坑特别多。
采样率的选择是个大学问。根据奈奎斯特定理,采样率至少要是信号最高频率的两倍。但实际项目中,我一般会留出20%~30%的余量。为什么?因为滤波器不是理想砖墙,会有过渡带。
关键参数速查表
| 参数 | 典型值 | 说明 |
|---|---|---|
| 采样率 (Fs) | 10~40 MHz | 取决于中频带宽 |
| 采样位数 | 12~16 bit | 越高动态范围越大 |
| 采样点数 | 64~512 | 影响距离分辨率 |
我在项目中遇到过一个问题:采样位数选低了,导致小目标完全淹没在量化噪声里。后来换成14位的ADC,效果立竿见影。嗯,这里要注意——采样位数每增加1位,动态范围提升约6dB。
实战技巧:ADC采样前一定要加抗混叠滤波器。我曾经偷懒没加,结果镜像频率混进来,距离维上出现了「鬼影」目标。排查了整整两天才找到原因。
2. 距离FFT:把时间差变成距离
ADC采样完成后,我们得到的是时域信号。但雷达想知道的是——目标在哪儿?这就需要做距离FFT。
原理其实不复杂。发射信号和回波信号之间存在时间差,这个时间差在频域上表现为一个频率偏移。做一次FFT,就能把这个频率偏移提取出来。
// 距离FFT的典型实现(伪代码)
for each chirp:
// 对每个chirp的采样点做FFT
range_fft(chirp_samples, N_fft)
// 取模得到幅度谱
range_profile = abs(fft_result)
// 存储到距离-多普勒矩阵
rd_matrix[chirp_idx][:] = range_profile
距离分辨率由带宽决定:ΔR = c / (2B)。比如带宽4GHz,分辨率就是3.75cm。这个公式我建议你背下来,面试经常考。
我个人习惯在距离FFT之前先加窗。不加窗的话,旁瓣会很高,强目标旁边的弱目标根本看不见。汉明窗、布莱克曼窗我都试过,汉明窗是性价比最高的选择。
避坑指南:我曾经在项目中直接用原始数据做FFT,结果距离维上出现了很多假峰。后来发现是直流分量没去除。记得先做直流偏置校准,或者用高通滤波器把直流分量滤掉。
3. 多普勒FFT:测速的关键一步
距离FFT做完,我们知道了目标在哪儿。但目标在动吗?速度是多少?这就需要多普勒FFT。
多普勒FFT是在慢时间维上做的。什么意思?你发射了N个chirp,每个chirp做完距离FFT后,在同一个距离门上,沿着chirp方向再做一次FFT。这样就能提取出多普勒频率,进而算出速度。
速度分辨率取决于帧周期:Δv = λ / (2T_frame)。帧周期越长,速度分辨率越好。但帧周期太长,运动目标会跨距离门,这就是所谓的「距离走动」问题。
多普勒FFT的关键参数
- chirp数量:一般64~256个,越多速度分辨率越好
- 最大不模糊速度:v_max = λ / (4T_chirp)
- 速度分辨率:Δv = λ / (2 * N_chirp * T_chirp)
我记得有一次做车载雷达测试,一辆自行车从雷达前面经过,速度显示是负的。一开始以为是代码写错了,后来才意识到——多普勒速度是有正负的,靠近为正,远离为负。自行车是远离雷达的,所以速度是负值。嗯,这个细节容易忽略。
实战技巧:多普勒FFT之前,建议做一次MTI(动目标指示)处理。说白了就是相邻chirp相减,可以滤掉静止杂波。我在做安防雷达时,用这个方法把墙体的强反射抑制掉了,效果非常好。
4. CFAR检测:从噪声中找出目标
距离FFT和多普勒FFT做完,我们得到了一个距离-多普勒矩阵。但这个矩阵里,除了目标,还有噪声、杂波、干扰。怎么把真正的目标挑出来?CFAR(恒虚警率检测)就是干这个的。
CFAR的核心思想很简单:对每个待检测单元,用周围参考单元的噪声水平估计一个自适应阈值。如果待检测单元的能量超过这个阈值,就判为目标。
常见的CFAR算法有三种:
| 算法 | 特点 | 适用场景 |
|---|---|---|
| CA-CFAR | 均值类,计算简单 | 均匀噪声环境 |
| SO-CFAR | 取两侧最小值 | 多目标场景 |
| GO-CFAR | 取两侧最大值 | 杂波边缘场景 |
我个人习惯用CA-CFAR作为默认选项。但如果场景中有多个目标靠得很近,我会换成SO-CFAR。为什么?因为CA-CFAR会把邻近目标也当成噪声,导致漏检。
// CA-CFAR的简化实现
for each cell under test (CUT):
// 计算参考单元的均值
noise_level = mean(reference_cells)
// 计算阈值
threshold = noise_level * alpha
// 判决
if CUT > threshold:
mark as target
else:
mark as noise
alpha(阈值因子)的选择很关键。alpha太大,漏检多;alpha太小,虚警多。我一般根据经验取3~5,然后根据实测数据微调。
避坑指南:我曾经在CFAR检测时忘了加保护单元。结果目标本身泄漏到了参考单元里,导致阈值被抬高,目标自己把自己「屏蔽」了。保护单元一般取3~5个,具体取决于目标在距离维和多普勒维的展宽。
知识体系总览
下面这张图展示了雷达信号处理链的完整流程。你可以看到,每一步的输出都是下一步的输入,环环相扣。
这张图把整个流程串起来了。你从ADC采样开始,一步步往下走,最终得到的就是目标的距离、速度和角度信息。说白了,雷达信号处理链就是「从原始数据到目标信息」的转化过程。
好,这一章的内容就到这里。记住我强调的几个关键点:采样率要留余量、距离FFT前要加窗、多普勒FFT要注意速度正负、CFAR要设保护单元。这些都是我踩过的坑,你记住了就能少走弯路。
本章核心要点:
- ADC采样:采样率≥2倍信号带宽,留20%余量
- 距离FFT:加窗抑制旁瓣,去除直流分量
- 多普勒FFT:慢时间维FFT,注意速度正负
- CFAR检测:选对算法,设好保护单元和阈值因子
可可精品资料库