大家好,这里是 3GPP 仿真实验室。
平时我们聊了太多 5G/6G、空天基网络和信道编解码。今天我们稍微跨个界,来拆解一个在自动驾驶、无人机甚至是智能家居里杀疯了的物理层传感器——毫米波雷达。
你可能会嘀咕,现在满大街都是高清摄像头和动辄上百线的激光雷达(LiDAR),毫米波雷达还有什么戏份?原因很简单:摄像头一到黑夜和雨雪天就容易“致盲”,激光雷达成本高昂且同样怕大雾。而毫米波雷达就像个不挑环境的“全天候战士”,穿透力强、测速极准,更重要的是,硬件成本已经被打下来了。
在当今的毫米波雷达界,绝对的统治者只有一种技术体制:FMCW(Frequency Modulated Continuous Wave,调频连续波)。
今天,我们就撇开那些封装好的 API,直接下沉到信号处理的最底层,硬核拆解 FMCW 雷达是如何利用电磁波,把真实世界的 3D 坐标精准还原出来的。
打破“一问一答”:为什么是 FMCW?
老派的脉冲雷达(Pulse Radar)原理很直白:大吼一声(发射极短的高功率脉冲),然后掐着秒表等回音。算出一来一回的时间差,距离就有了。但这就带来两个致命伤:一是盲区大,吼的时候听不见,离得太近就瞎了;二是瞬时峰值功率极其恐怖,射频前端成本压不住。
FMCW 换了一种极其优雅的降维打击思路。
它不吼,而是像吹滑音笛一样,持续不断地发射一种频率随时间线性攀升的信号——也就是大家常听说的 Chirp(啁啾信号)。
正因为发射频率在均匀增加,当这个信号打到目标弹回来时,我们只要拿“此刻正在发射的频率”去减“刚刚接收到的回波频率”,就能算出这个信号在空中飞了多久,进而推断出距离。
测距:混频器里的降维魔法
我们把这个过程翻译成数学语言。假设发射的一个 Chirp 信号,其频率的爬升斜率为 :
这里面 是扫频带宽, 是一个 Chirp 的持续时间。
雷达发出去的波,飞到目标再弹回来,飞行时间设为 。很显然:
( 是目标距离, 是光速)。
此时,雷达射频链路里的核心器件——混频器(Mixer)登场了。它在模拟域直接把发射信号和接收回波“相乘”,经过低通滤波后,直接拍出了一个差频信号(中频信号 IF)。这个中频信号的频率 就是两者的频率差。
既然频率是线性增加的,那时间差 对应的也就是频率差:
稍微挪一下位置,FMCW 最底层的测距公式就出来了:
在数字信号处理(DSP)流水线中这意味着什么? 意味着距离 和中频频率 是严格绑定的。我们只需要对 ADC 采样后的中频数据跑一次 1D FFT(Range FFT),频谱上哪个频点冒了尖(峰值),目标就在那个距离上!
测速:捕捉相位的微小涟漪
测距搞定了,那速度怎么算?如果只发一个 Chirp,你其实是测不出速度的。
FMCW 的聪明之处在于,它会密集地连发一串(比如 128 或 256 个)一模一样的 Chirp,这就构成了一帧(Frame)。
想象一下,如果目标在动,那么在相邻两个 Chirp 之间,目标的距离 会发生极其微小的位移(通常是毫米级)。这点位移,在刚才的 1D FFT 频谱上根本看不出频偏(频率分辨率不够),但是!它会剧烈地改变回波信号的相位(Phase)。
物理常识告诉我们,微小的距离变化 对应着多大的相位差 呢?
而 不就是速度 乘以两个 Chirp 之间的间隔时间 吗?代入进去,速度 就呼之欲出了:
在算法实现上,这步操作丝滑得让人拍案叫绝:我们在做完 1D FFT 的基础上,沿着 Chirp 索引的维度,再跑一次 2D FFT(Doppler FFT)。
算完之后,你就会得到一张经典的距离-多普勒热力图(Range-Doppler Heatmap)。图上的高亮像素点,直接同时锁死了目标的两个维度:离我多远,以及相对我跑得多快。
测角:天线阵列的几何学
有了距离和速度,最后一块拼图就是角度(方位角与俯仰角)。这就不是单根天线能搞定的了,我们需要请出 MIMO 天线阵列。
测角的底层逻辑依然是“玩弄”相位。
当回波以某个角度 拍到天线阵列时,到达相邻两根接收天线(间距设为 )的路径长度会有微小的波程差,大小为 。
这个多跑的路程,同样会造成两根天线接收信号之间的相位差 :
反解一下,角度 就拿到手了:
在基带处理代码里,我们在 2D FFT 找到目标峰值后,沿着天线维度(Antenna Index)再抡一次 3D FFT(Angle FFT)。至此,FMCW 雷达经典的 3D FFT 处理链路就彻底闭环了。
写在最后:从公式到代码变现的距离
复盘一下,FMCW 雷达的物理机制其实充满了一种对仗的数学美感:
- 距离,映射到了单个 Chirp 内的中频频率上。
- 速度,映射到了多个 Chirp 间的多普勒相位上。
- 角度,映射到了多根天线间的空间相位上。 而这所有的一切,最后都被伟大的 FFT 统一在了矩阵运算里。
不过,推导公式只是键盘侠的狂欢,真正的工程落地才刚刚开始。在实际的物理层仿真和基带芯片开发中,你马上就会被一堆现实问题糊一脸:
- 底噪太高怎么办?怎么手写 CFAR(恒虚警率) 算法从杂波里抠出真实目标?
- 目标跑得太快,相位转了一圈以上,**速度模糊(Velocity Ambiguity)**怎么解?
- 天线阵列太少,角度分辨率不够,怎么利用 MIMO 体制做虚拟孔径合成?
这才是真正拉开算法工程师段位的地方。