1. 毫米波雷达基础
各位同学,欢迎来到这门实战课。我是你们的老朋友,一个在自动驾驶感知领域摸爬滚打了七八年的工程师。今天咱们开篇,聊聊毫米波雷达最核心的基础。
说实话,很多人觉得雷达原理是书本上的东西,跟工程实践离得远。我一开始也这么想,直到有一次在高速上,雷达把路边的广告牌当成了静止车辆,差点触发紧急制动。从那以后,我意识到:不懂原理,你连bug都调不明白。
1.1 雷达是怎么“看”世界的?
雷达的原理,说白了就一句话:发射电磁波,接收回波,算出差值。
你想想看,蝙蝠在黑暗里怎么飞?它发出超声波,听回声。雷达也一样,只不过用的是毫米波(30GHz-300GHz)。这个频段的波,波长在1mm到10mm之间,好处是穿透性强,雨雾天照样干活。
具体到咱们自动驾驶用的毫米波雷达,大多是调频连续波(FMCW)体制。为什么不用脉冲雷达?因为FMCW能同时测距和测速,而且功耗低、体积小。我最早接触FMCW是在一个泊车雷达项目上,当时被它的精度惊艳到了——几厘米的误差,完全够用。
核心要点:FMCW雷达发射的是频率随时间线性变化的信号,也就是“啁啾(chirp)”。回波信号与发射信号混频后,得到中频信号(IF signal)。这个中频信号的频率,直接对应目标的距离。
1.2 FMCW信号模型——数学其实没那么可怕
咱们来看FMCW的数学表达。别怕,我尽量用大白话讲。
发射信号可以写成:
s_tx(t) = A * cos(2π * f_c * t + π * S * t²)
其中:
- f_c:起始频率,比如77GHz
- S:调频斜率,单位是Hz/s。S = B / T_c,B是带宽,T_c是单个chirp的时长
- t:时间变量
回波信号呢,就是发射信号的延迟版本:
s_rx(t) = A' * cos(2π * f_c * (t - τ) + π * S * (t - τ)²)
这里的τ = 2R / c,R是目标距离,c是光速。
把发射和回波信号混频(也就是相乘再低通滤波),得到中频信号:
s_if(t) = (A * A' / 2) * cos(2π * S * τ * t + 2π * f_c * τ)
你看,中频信号的频率是 f_if = S * τ = S * 2R / c。所以,只要测出中频频率,距离R就出来了:
R = (c * f_if) / (2 * S)
嗯,这里要注意:中频频率跟距离是线性关系。这就是FMCW最巧妙的地方——把时间差转换成了频率差,而频率是很容易用FFT测准的。
个人经验:我在做雷达标定时,经常用这个公式反推。比如已知目标距离10米,测出中频频率,就能算出实际的调频斜率S。如果S跟设计值偏差超过1%,那说明发射链路有问题,得查PLL锁相环。
1.3 距离估计——FFT是基本功
中频信号是模拟的,得先ADC采样变成数字信号。采样率要满足奈奎斯特定理,这个大家都懂。
采样后的信号,做一维FFT(也叫距离FFT),就能得到距离-幅度谱。峰值对应的频率,就是目标距离。
举个例子,假设采样率fs=10MHz,FFT点数N=1024,那么频率分辨率Δf = fs / N ≈ 9.77kHz。对应的距离分辨率:
ΔR = (c * Δf) / (2 * S)
如果S=100MHz/μs,那么ΔR ≈ 0.15米。也就是说,两个目标距离差小于15厘米,在频谱上就分不开了。
避坑指南:我曾经在一个项目中,把FFT点数设得太小,导致两个并排的行人(距离差20厘米)被识别成一个目标。后来加了补零(zero-padding)和窗函数(汉宁窗),才勉强分开。记住:距离分辨率由带宽决定,FFT点数只影响频谱的“观感”。
1.4 多普勒估计——速度是怎么来的?
测距靠的是频率差,测速靠的是相位差。
你想想看,如果目标在运动,那么连续两个chirp的回波,相位会发生变化。这个相位变化量Δφ,跟目标速度v的关系是:
Δφ = (4π * v * T_c) / λ
其中λ是波长,T_c是chirp周期。
所以,只要测出相邻chirp之间的相位差,速度就出来了:
v = (λ * Δφ) / (4π * T_c)
实际工程中,我们发射一组chirp(比如128个),对每个chirp做完距离FFT后,再对同一个距离门上的数据做多普勒FFT(也叫二维FFT)。这样就能得到距离-多普勒图(Range-Doppler Map)。
多普勒FFT的频率分辨率:
Δf_doppler = 1 / (N_chirp * T_c)
对应的速度分辨率:
Δv = (λ * Δf_doppler) / 2 = λ / (2 * N_chirp * T_c)
举个例子,λ=4mm(77GHz),T_c=50μs,N_chirp=128,那么Δv ≈ 0.31 m/s。这个精度,对于跟踪一辆时速60km/h的车(约16.7m/s)来说,绰绰有余。
关键点:距离-多普勒估计的核心,就是两次FFT。第一次FFT(距离维)把时间域变到频率域,得到距离信息。第二次FFT(多普勒维)把慢时间域变到频率域,得到速度信息。说白了,就是二维傅里叶变换。
1.5 知识体系总览
为了让大家有个整体印象,我画了一张图。这张图把FMCW雷达从发射到目标检测的整个流程串起来了。
这张图里,从发射到混频是模拟域的事,ADC之后进入数字域。距离FFT和多普勒FFT是核心算法,输出就是咱们常说的“点云”——每个点包含距离、速度、角度信息。
1.6 一些实用技巧
最后,分享几个我在项目中踩过的坑和总结的经验:
- 窗函数的选择:做距离FFT时,我习惯用汉宁窗。它主瓣宽度适中,旁瓣抑制好。如果目标动态范围大(比如近处有强反射),可以考虑布莱克曼窗,旁瓣更低。
- CFAR检测:距离-多普勒图上不是所有峰值都是目标。我一般用CA-CFAR(单元平均恒虚警率)做检测,阈值根据噪声水平自适应调整。有一次在隧道里,多径反射导致虚警率飙升,后来加了OS-CFAR(有序统计量)才压住。
- 相位解缠:多普勒FFT测出的相位差在[-π, π]之间,如果目标速度太快,相位会模糊。我遇到过一辆摩托车时速80km/h,速度模糊了,后来用多帧关联才解出来。记住:最大不模糊速度 v_max = λ / (4 * T_c)。
一句话总结:FMCW雷达的核心就是“发射chirp → 混频得中频 → 两次FFT得距离和速度”。把这个流程刻在脑子里,后面的课程你会越学越顺。