ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

FMCW雷达测距原理详解:从线性调频、拍频信号到距离FFT的完整工程实践

FMCW雷达测距原理详解:从线性调频、拍频信号到距离FFT的完整工程实践 FMCW 雷达这两年是真的火。车载毫米波雷达、工业测距传感器、人体存在检测、生命体征监测几乎每个方向都会遇到 FMCW 这个词。不少朋友拿着 AWR2243 或者类似的毫米波雷达开发板看到原始数据是一堆复数 IQ 样本脑子里第一个问题就是——这堆数怎么变成距离的其实答案就藏在“线性调频”和“拍频信号”这两个词里。这篇文章不打算堆公式吓人而是尽量把 FMCW 雷达从发射线性调频信号到回波混频产生拍频信号再到 FFT 解出距离的完整链路讲清楚同时结合我在实际调试毫米波雷达时踩过的一些坑给你一条可以直接照着上手的路径。1. 从线性调频到拍频FMCW 测距的整体思路1.1 为什么 FMCW 不直接测时间延迟传统脉冲雷达测距的思路非常直观发射一个窄脉冲等它碰到目标反射回来量一下发射和接收之间的时间差 Δt距离就是 R c·Δt/2。这个思路在原理上没有任何问题但工程实现上很吃亏。脉冲越窄距离分辨率越高但窄脉冲意味着极高峰值功率对发射器件和电源的要求都很苛刻。而且窄脉冲在时域上不好采样硬件成本直线上升。FMCW 换了一个角度我不去精确测量一个短脉冲的飞行时间而是把一个“频率会变化的连续波”发出去然后通过比较发射信号和回波信号的频率差反推出时间延迟。这个频率差就是拍频信号。因为发射信号的频率在已知地线性变化所以频率差和时间延迟之间是简单的正比关系而时间延迟又正比于目标距离。这样一来FMCW 雷达就能以较低的峰值功率和普通采样率的 ADC实现和脉冲雷达相近甚至更好的距离分辨率。打个比方。你在一条匀速前进的传送带上往前走身后放了一个标记物。传送带本身的速度在已知地增加那么你和标记物之间的“相对速度差”就对应着你们之间的距离差。FMCW 里的发射信号就是这个不断变速的传送带回波信号就是那个滞后了 τ 的标记物测出的拍频就是你们之间的“速度差”。1.2 线性调频信号Chirp的数学模型典型 FMCW 雷达发射的是锯齿波线性调频信号也叫 Chirp。它的频率从起始频率 fc 开始以斜率 S 线性增加到 fc B持续时间为 T_chirp然后瞬间跳回起始频率开始下一个周期。B 是扫频带宽T_chirp 是单个 Chirp 的持续时间。发射信号的数学形式可以写成s_tx(t) cos(2π fc t π S t²)0 ≤ t ≤ T_chirp其中 S B / T_chirp单位是 Hz/s叫调频斜率。这看起来有点抽象其实它的物理含义很直接S 决定了频率变化的快慢而频率变化的快慢直接决定了“同样的时间延迟能产生多大的频率差”。S 越大同样的目标距离对应的拍频频率就越高。这里有个关键点需要理解FMCW 发射信号虽然是连续波但因为它做了频率调制实际上把一个很宽的频带 B 摊开在时间轴上了。距离分辨率最终由带宽 B 决定公式是 ΔR c/(2B)。这句话后面还会反复提到因为它是整个 FMCW 测距体系里最核心的设计依据。2. 回波混频与拍频信号频率差是怎么被提取出来的2.1 混频器到底在做什么雷达天线收到目标反射回来的信号后这个回波信号本质上就是发射信号延迟了 τ 之后的一个复制版本s_rx(t) cos(2π fc(t-τ) π S(t-τ)²)这里 τ 2R/c也就是电磁波从雷达跑到目标再返回来的双程时延。如果目标是静止的回波波形和发射波形是完全一样的只是时间上晚到了 τ。接下来就是 FMCW 雷达最核心的模拟处理环节混频。接收信号和发射信号同时送入混频器混频器把两个信号相乘然后经过低通滤波器。学过通信原理的朋友都知道两个余弦相乘会产生“和频”和“差频”两个分量。和频分量频率大约在二倍载频附近直接被低通滤波器滤掉剩下的差频分量才是我们要的东西——拍频信号。可以这么理解混频器它是一台模拟域的减法器把发射信号的瞬时频率减去回波信号的瞬时频率。因为发射和回波的频率都在线性增长减法操作就自动把“时间延迟τ”转换成了“频率差fb”也就是拍频。2.2 拍频信号为什么是单频固定频率初学者最容易卡在这里发射信号频率明明一直在变为什么拍频是固定频率关键在于回波信号和发射信号的调频斜率是完全相同的两者在时间-频率图上就是两条平行线。发射信号的频率在t时刻是 fc S·t回波信号的频率是 fc S·(t-τ)两者相减fb fc S·t - [fc S·(t-τ)] S·τ (B / T_chirp)·(2R/c)结果里根本没有 t说明这个差值不随时间变化。两个频率“平行”地增长差值恒定。就像两辆并排同速行驶的汽车虽然绝对速度都很快但相对速度为零保持固定间距。最后整理一下拍频信号与目标距离的关系式fb (2B·R) / (c·T_chirp)或者反过来测出拍频就能算出距离R fb·c·T_chirp / (2B)如果目标在运动回波信号还会额外叠加一个多普勒频移拍频会变成 S·τ ± fd。这也是后面做测速的基础。但在只讨论测距时我们先把多普勒放在一边专注理解静止目标的单频拍频。3. 从拍频到距离数字域信号处理链路完整拆解3.1 距离维 FFT 与频点提取得到拍频信号后工作重心从模拟域转到数字域。雷达的 ADC 会以采样率 fs 对拍频信号采样一个 Chirp 内采 N 个点。这些点通常是 IQ 复数格式的因为 IQ 采样可以区分正负频率为后续多普勒处理保留方向信息。然后对每个 Chirp 的采样点做 FFT这就是常说的距离维 FFT。FFT 的横轴是频率对应拍频 fb纵轴是幅度代表该频率分量的强度。在频谱上找到峰值对应的频率 fb套用上面的公式就能得到目标的距离。实际操作中FFT 之前加窗函数几乎是必须的。我用的最多的是汉宁窗它能把旁瓣压到 -40dB 左右在检测多个目标时能有效避免强目标旁边出现假峰。代价是主瓣略微变宽导致弱目标的分辨能力下降。如果检测场景里目标间距很近可以换布莱克曼-哈里斯窗压旁瓣效果更好但主瓣更宽需要根据具体场景权衡。FFT 频率分辨率的物理极限是 Δf 1/T_chirp代入距离公式ΔR Δf·c·T_chirp / (2B) c/(2B)这个式子再次确认了距离分辨率只和扫频带宽 B 有关和 Chirp 周期、调频斜率都没关系。想提高距离分辨率就去加大带宽。3.2 最大测距范围与 ADC 采样率的约束拍频信号的频率不能无限高它受两个因素限制中频链路的带宽和 ADC 采样率。根据奈奎斯特采样定理ADC 能采到的最高拍频频率是 fs/2所以最大无模糊拍频为 fb_max fs/2。代入距离公式得到最大测距范围R_max (fs/2)·c·T_chirp / (2B) fs·c·T_chirp / (4B)这里有一个新手极容易误解的地方FMCW 雷达的 ADC 采样率并不需要覆盖射频带宽 B因为目标信号已经被混频搬移到了低频。比如 77GHz 车载雷达有 4GHz 的射频带宽但中频拍频信号通常只有几十 MHz用 10~20MHz 的 ADC 采样就足够了。这就是 FMCW 相对脉冲雷达的一大优势——不用去采 GHz 级的信号硬件成本大幅降低。还有一个容易忽略的约束中频信号链路上会有一个抗混叠低通滤波器它的截止频率必须大于最大可能拍频。如果滤波器带宽设置得太窄远距离目标的拍频会被滤掉导致远距离目标检测不到设置太宽又会引入带外噪声。所以中频带宽、ADC 采样率、最大测距范围这三个参数是绑在一起设计的不能单独调一个。3.3 从距离维到距离-速度热图多 Chirp 积累单靠一个 Chirp 的 FFT 只能得到距离信息而且单帧信号往往淹没在噪声里所以实际雷达不会只发一个 Chirp。一帧数据里会包含 M 个 Chirp每个 Chirp 做距离维 FFT 后得到一个 M×N 的矩阵横轴是距离 bin纵轴是慢时间维。对同一个距离 bin 上的 M 个点再做一次 FFT就是速度维 FFT。因为运动目标在不同 Chirp 之间会产生相位变化这个相位变化率对应的就是多普勒频率 fd代入公式 v λ·fd/2就可以得到目标速度。两次 FFT 之后得到的就是雷达领域常用的距离-速度热力图。在距离-速度热力图上静止目标只出现在零多普勒附近运动目标会偏到相应的速度通道里。所以即使目标距离很近只要它存在相对径向速度通过 2D FFT 就能把它和静止杂波分离开来。这也是 FMCW 雷达在车载场景中如此好用的核心原因之一。得到热力图后还需要做 CFAR 检测也就是恒虚警率检测。CFAR 的作用是在不知道噪声功率的情况下自适应地计算检测门限。CA-CFAR 是最常用的取目标 bin 周围一圈参考单元的平均功率乘以一个门限因子作为检测阈值。门限因子通常取 12~15dB太小的话虚警率飙高太大的话弱目标直接被吞掉。我调参时的方法是先看热力图的整体底噪水平再反向推算门限因子比拍脑袋调要快很多。4. 工程落地从原始数据到稳定测距的实操细节4.1 AWR2243 原始数据读取的常见坑TI 的 AWR2243 是我用的比较多的毫米波雷达方案。它的原始数据格式是复数 IQ每个采样点包含实部I和虚部Q通常按 16 位有符号整数处理。DCA1000 采集卡导出的数据流一般按 I0, Q0, I1, Q1... 的顺序交织排列解析时最典型的错误就是把 IQ 顺序弄反或者把交织数据当成连续实数读。我第一次用 AWR2243 时距离谱上出现一串莫名其妙的幽灵峰排查了整整一个下午。最后发现问题出在读取时把 IQ 数据顺序搞反了。修正之后就正常了。所以拿到原始数据的第一步一定要先验证格式排列而不是直接往算法里灌数据。还有一个坑是帧结构解析。一帧数据包含多个 Chirp每个 Chirp 包含多个 ADC 采样点采集卡可能还会在数据流里插入状态字头。解析时必须先根据雷达配置参数算出每个 Chirp 的采样点数、每个帧的 Chirp 数再按这个结构去 reshape 数据矩阵。差一位字节都不行否则后面所有 FFT 结果全是乱的。字节序问题也需要注意。不同采集工具导出的数据可能是 little-endian 或 big-endian可以用 Python 的 struct 模块检查前几个采样点的数值范围如果幅度明显不对大概率是字节序反了用 byteswap 就能解决。这种问题通常会直接表现为 FFT 结果非常杂乱而不是完全无信号。4.2 LFMCW 和 FMCW 的关系以及锯齿波与三角波的选择很多文章把 FMCW 和 LFMCW 混着用严格讲有区别。FMCWFrequency Modulated Continuous Wave是频率调制连续波的统称调制波形可以是线性的、正弦的、阶梯的。LFMCWLinear Frequency Modulated Continuous Wave则是特指线性调频是 FMCW 中最常见、最成熟的一种形式。工程上绝大多数场景直接说 LFMCW 就是指 FMCW日常沟通不用太纠结但概念上要清楚。在波形设计上最常用的是锯齿波和三角波两种。锯齿波的优点是每次扫频都是单调上升频率和时间的对应关系简洁配合多 Chirp 序列做 2D FFT距离和速度的提取链路非常成熟。TI 毫米波雷达默认就是锯齿波加多 Chirp 帧结构。三角波则利用上扫频和下扫频得到的两个拍频通过联立方程同时解出距离和速度。实际项目中我基本默认选锯齿波因为处理链路成熟、多目标检测时计算简单。三角波在多目标场景里会出现上下扫频配对错误的问题处理起来很麻烦。只有在必须用单个 Chirp 解距离和速度的场合才会考虑三角波。4.3 中频带宽、采样率与最大距离的匹配关系实际配置 FMCW 雷达参数时最需要想清楚的一组变量是调频斜率 S、ADC 采样率 fs 和中频带宽。最大拍频由最大测距范围决定也就是 S·τ_max。如果同步叠加多普勒还要加上多普勒频移。中频链路必须能通过这个最大拍频ADC 采样率必须大于两倍的最大拍频。假设雷达扫频带宽 B4GHzChirp 周期 T100μs那么 S 4e9/100e-6 4e13 Hz/s。想要最大测距范围 100 米代入公式得到最大拍频 fb_max S·2R_max/c ≈ 2.67MHz。中频带宽给到 5MHzADC 采样率至少 10MSPS留出余量后实际用 12.5MSPS。这就是完整的参数计算过程每一步都有明确依据而不是拿现成例程里的配置一抄了之。值得提醒的是调频斜率 S 如果太大即使目标距离不远拍频也会很高导致 ADC 采样率要求上升、数据量增大。所以在满足距离分辨率和最大测距范围的前提下尽量把 S 调小一点能够缓解采样和存储压力。4.4 相位噪声、DC 偏移和系统延时校准工程调试中很多测距异常并不是算法问题而是模拟前端的非理想特性。相位噪声是最常见的隐性杀手。本振或锁相环的相位噪声会直接抬高拍频信号的噪声底目标越远越明显表现是距离谱底噪升高、谱峰展宽。改善手段包括选用相位噪声更低的本振源、优化电源去耦、或者在中频链路加窄带滤波器。DC 偏移也经常被忽略。混频器输出端会有一个直流分量映射到距离零频附近因为 0Hz 频率就对应零距离。如果直接看距离谱这个直流峰会盖住近距离目标信号。业内处理方式一般是距离维 FFT 之前先把 ADC 数据的平均值减掉或者在信号链路中加高通滤波器。CFAR 检测时前几个距离 bin 通常也直接屏蔽掉。系统延时校准是提高绝对测距精度的关键。实际雷达存在器件延时、线缆延时等不可避免的系统时延 τ0公式里的 τ 应该是 2R/c τ0。我通常会在已知距离位置放一个角反射器实测拍频反推 τ0然后把补偿值固化到软件里。这个操作能显著提升距离测量的线性度和绝对精度尤其在工业测距场景下几乎是必须步骤。5. 常见问题速查从原理到现象到解决思路5.1 典型故障排查速查表实际调试中遇到的距离测量问题绝大多数可以归为表里的这几类现象可能原因处理方向距离谱出现大量假峰天线收发隔离度不足、混频器非线性、电源干扰检查天线布局增加隔离优化电源去耦目标距离数值跳变SNR 过低、CFAR 门限因子不当、窗函数旁瓣抬升增加积累帧数调整 CFAR 因子加窗抑制旁瓣近距离目标检测不到混频器 DC 偏移、收发泄漏抬高零频底噪时域去均值、屏蔽零频 bin改善收发隔离远距离目标丢失发射功率不足、目标 RCS 太小、中频带宽过窄提高 chirp 数量增加多帧积累放宽中频带宽拍频频谱出现镜频IQ 两路幅度相位失衡做 IQ 校准提取镜频抑制参数温度漂移导致距离偏移晶振频率漂移、B或S 变化增加温度补偿定期用参考目标校准这张表本质上覆盖了 FMCW 雷达从射频前端到数字信号处理的全链路问题。多数情况下先按照“模拟前端—中频采样—数字处理”的顺序逐层排查能节省大量时间。我最常犯的错误是一上来就怀疑算法结果锅全在硬件端。5.2 实测中最容易忽视的两个细节第一个是窗函数的选择会直接影响目标检测效果。矩形窗旁瓣只有约 -13dB如果一个强目标旁边有弱目标强目标的旁瓣就会把弱目标完全淹没。我习惯默认加汉宁窗因为它主瓣宽度和旁瓣抑制之间比较均衡。如果两个目标距离差距很小需要更高分辨率再换回矩形窗并配合 CFAR 屏蔽策略而不是盲目牺牲检测能力。第二个是速度维 FFT 和数据排列的配合。做速度维 FFT 时要确保每个距离 bin 上的慢时间数据是等间隔采集的也就是各个 Chirp 之间时间间隔均匀。如果一帧里因为丢包或数据解析错误导致某个 Chirp 缺失整体相位序列会断裂速度谱上一片噪声。解析时要做好数据完整性校验宁可丢掉当前帧也不能把错位数据送进 FFT。5.3 距离精度和分辨率的验证方法拿到了一组能跑的测距结果后强烈建议用可控实验验证一下系统性能。最简单有效的方式是用角反射器或者金属板放置在多个已知距离处比如 1m、3m、5m、10m分别记录测量值。把测量距离作为纵轴、真实距离作为横轴画出来线性拟合后能看到系统的比例误差和偏移量。比例误差通常来自晶振偏差偏移量则来自系统延时。距离分辨率的验证则要准备两个间距较小的目标逐步缩小间距观察距离维 FFT 上是否能形成两个清晰峰。当两个峰刚好合拢的时候这个间距就是当前系统实测的距离分辨率。这一步能直观验证 B 的设计是否满足预期也能发现天线波束宽度是否有额外限制。实测中如果分辨率远差于理论值先查扫频带宽的配置是否正确再查中频链路带宽会不会限住了拍频信号。最后说个我自己养成的习惯。拿到一块新的雷达板我不会直接跑应用代码而是先做三件事读原始数据验证 IQ 格式和帧结构、放一个角反验证距离公式、做一次线性度标定。这三件事做完雷达基本处于“可用状态”后面再写业务逻辑才有底气。很多人一上来就调 CFAR、调聚类参数却连距离公式对应的常数都没有校准确最后问题永远说不清。FMCW 测距这件事原理搞懂了参数设计就有了直觉而这个直觉才是真正值钱的东西。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进