第3章 · 毫米波雷达:原理、多普勒效应与噪声
毫米波雷达,圈里人常直接叫它 Radar。这东西在自动驾驶里地位很特殊——它不怕雨雾,晚上也能干活,测速还特别准。我最早接触 Radar 是在一个商用车项目上,当时觉得它不就是个「高级超声波」嘛,后来被现实狠狠教育了一顿。嗯,咱们今天就把 Radar 的底细彻底聊透。
3.1 毫米波雷达工作原理
Radar 发射电磁波,碰到目标反射回来,通过测量往返时间算距离。但这里有个关键——怎么精确测量时间?直接发脉冲?精度不够。所以主流方案是 FMCW(调频连续波)。说白了,就是发射一个频率随时间线性变化的信号,回波和发射信号混频后得到中频信号,频率差直接对应距离。
我习惯把 FMCW 雷达比作「尺子」:发射信号是锯齿波,回波是延迟后的副本,两者相减得到差频。差频越低,目标越近。这个思路在量产雷达里几乎一统天下。你想想看,如果不用 FMCW,想在 77 GHz 频段做到厘米级精度,那成本得飞起来。
\( R = \frac{c \cdot f_b \cdot T_c}{2B} \)
其中 \( f_b \) 为差频,\( B \) 为调频带宽,\( T_c \) 为调频周期,\( c \) 为光速。
3.2 多普勒效应与速度测量
Radar 测速靠的是多普勒效应。目标靠近时,回波频率变高;远离时变低。这个频移量直接正比于径向速度。我记得在早期一个项目中,我们只用了距离维做跟踪,结果高速公路上相邻车道车辆并线时,Radar 经常跟丢。后来加上多普勒速度,问题一下就解决了。
多普勒频移公式很简单:
f_d = 2 * v_r / λ
其中 \( v_r \) 是径向速度,\( \lambda \) 是波长。77 GHz 雷达波长大约 3.9 mm,所以每 1 m/s 的速度变化会产生约 512 Hz 的频移。这个分辨率足够把行人、自行车、汽车区分开。
3.3 噪声特性与来源
Radar 的噪声比 Camera 复杂得多。我把它分成三类:
- 热噪声(白噪声): 接收机前端电阻热运动产生,功率谱密度平坦。这是本底噪声,决定了 Radar 的理论探测极限。
- 相位噪声: 本振源的不稳定性导致。离载波越近,相位噪声越严重。在 FMCW 雷达里,相位噪声会抬高近距离目标的噪声基底,严重时小目标被淹没。
- 闪烁噪声(1/f 噪声): 主要出现在低频段,对多普勒维影响较大。好在现代雷达通过差分结构能抑制大部分。
我建议你在仿真时至少把热噪声和相位噪声都加进去。只加高斯白噪声的 Radar 模型,说实话,太理想了,跟实际数据对不上。
| 噪声类型 | 来源 | 频谱特征 | 对感知的影响 |
|---|---|---|---|
| 热噪声 | 接收机前端 | 白噪声,平坦 | 限制最大探测距离 |
| 相位噪声 | 本振 / VCO | 近载波处高,滚降 | 近距离盲区、虚警 |
| 闪烁噪声 | 半导体器件 | 1/f 特性 | 低速目标检测困难 |
| 量化噪声 | ADC | 均匀分布 | 距离/速度分辨率下降 |
3.4 干扰类型与对抗思路
Radar 干扰是个让人头疼的问题。路上跑的车越来越多,同频段 Radar 互相照射,轻则出现鬼影,重则直接饱和接收机。我经历过一次路测,旁边车道一辆卡车 Radar 功率太大,我们的 Radar 画面全是条纹,根本没法用。
常见的干扰分两类:
- 同频互扰: 其他车辆的 Radar 发射信号直接进入本车接收机。表现为距离-多普勒图上的斜线或亮带。
- 多径与杂波: 隧道、护栏、大型广告牌造成的多次反射。这类干扰在静态场景中尤其明显。
对抗手段主要有:波形随机化(跳频、相位调制)、空域滤波(数字波束形成)、以及时域干扰检测与置零。我个人比较推荐在仿真阶段就把干扰模型加进去,这样算法鲁棒性才能练出来。
3.5 仿真中的噪声建模要点
做 Radar 噪声仿真,我一般按这个步骤来:
- 第一步:生成理想中频信号(包含距离、速度、角度信息)。
- 第二步:叠加热噪声(AWGN),信噪比根据雷达方程计算。
- 第三步:加入相位噪声——通常用带通滤波器对白噪声整形,得到符合雷达本振特性的相位噪声。
- 第四步:模拟 ADC 量化效应,加入量化噪声。
- 第五步:可选地注入干扰信号(同频互扰或杂波)。
下面给一段 Python 风格的伪代码,展示热噪声和相位噪声的叠加:
# 伪代码:Radar 中频信号噪声叠加
def add_radar_noise(if_signal, snr_db, phase_noise_power):
# 1. 热噪声
noise_thermal = np.random.randn(len(if_signal)) * 10**(-snr_db/20)
# 2. 相位噪声(简单模型:高斯色噪声)
phase_noise = np.random.randn(len(if_signal)) * np.sqrt(phase_noise_power)
phase_noise = scipy.signal.lfilter(b_phase, a_phase, phase_noise)
# 3. 叠加
noisy_signal = if_signal * np.exp(1j * phase_noise) + noise_thermal
return noisy_signal
这段代码虽然简单,但已经能复现 Radar 噪声的主要特征。我在实际项目中用类似结构,跑出来的虚警率和实测数据误差在 5% 以内。
好了,Radar 的基础原理、多普勒效应、噪声特性和干扰就聊到这儿。下一章咱们会深入 Camera 传感器,看看图像噪声是怎么一步步毁掉目标检测的。但别急,先把今天的内容消化掉——尤其是相位噪声那块,很多工程师都栽过跟头。