
1. 为什么雷达测距偏偏选FMCW体制做雷达相关开发的朋友应该都有体会一说到测距测速大家第一反应往往是“那不就是发个脉冲等回波嘛”就像喊一嗓子听回声一样。这个直觉没错脉冲体制确实是雷达最古老也最直观的形态发射一个短促的高功率脉冲记录它碰到目标反射回来的时间距离自然就是光速乘以时间差的一半。但问题出在实际工程里。脉冲体制要测得准发射脉冲就得足够窄窄到纳秒级甚至皮秒级要测得远峰值功率就得足够高高到馈线、天线、发射机都跟着遭殃。更麻烦的是脉冲体制想测速度要靠多普勒频移而多普勒频移在单脉冲里那点微小的频率偏移根本提不出来必须长时间积累。于是早期的测速雷达要么做得很笨重要么精度上不去成本和功耗都相当感人。FMCW全称Frequency Modulated Continuous Wave调频连续波走的完全是另一条路。它不发射那种“咚”的一下的强脉冲而是持续发射一个频率随时间线性变化的连续波业内一般叫chirp也就是“啁啾”信号。频率从f_start线性扫到f_stop扫完一个周期再重来波形看成锯齿状或者三角状。这种体制天生就能把“时间差”转换成“频率差”而频率是连续信号里最容易高精度测量的物理量之一。FMCW最大的优势在于它用极低的峰值功率就能实现厘米级的测距精度。毕竟连续波的平均功率可以做得比较稳发射链路和接收链路都能用固态器件实现成本低、体积小、寿命长。再加上它天然支持同时测距和测速一发一收之间就能把两个维度的信息都解出来这让它在车载雷达、工业物位计、生命体征监测、无人机避障这些场景里几乎成了默认选项。现在市面上的24GHz毫米波雷达模块标称探测距离动不动就是40米甚至更远这个数据背后的体制就是FMCW。很多做嵌入式或者机器人项目的朋友拿到模块看到输出的距离和速度数据觉得“好神奇”实际上这些数值都是芯片内部对你完全不可见的信号做了一连串FFT之后才得到的。理解FMCW的原理不仅是为了知道公式怎么来更是为了将来做应用层开发时知道哪些参数能调、哪些性能是物理决定的、哪些坑是算法绕不过去的。这篇文章就从最底层的信号出发把FMCW雷达测距测速的原理完整推一遍。我用Python做了仿真验证代码和数值结果都贴在对应的章节里方便你对照复现。这篇是原理部分的第一篇重点讲距离和速度的解算测角、CFAR检测、目标聚类这些后续再单独展开。2. FMCW测距的第一性原理从发射波形到中频信号2.1 一个chirp的数学长相先看最基础的发射信号。一个线性调频连续波chirp数学上可以写为[ s_{tx}(t) A_{tx} \cdot \cos\left(2\pi f_c t \pi \frac{B}{T_c} t^2 \varphi_0\right) ]这里面几个参数务必提前搞清楚( f_c )起始频率也就是chirp开始时的瞬时频率。24GHz模块常见的是24.0GHz到24.25GHz这个频段其实是一个典型的ISM频段起始频率一般设在24.00GHz附近。( B )扫频带宽比如200MHz、250MHz。带宽是整个雷达系统里最宝贵的资源之一因为它直接决定距离分辨率后面细说。( T_c )单个chirp的持续时间通常是几十到几百微秒。比如一个chirp扫200MHz用100微秒那么这个chirp的调频斜率S就是B除以Tc也就是2MHz/微秒。( \varphi_0 )初始相位工程上一般不关心绝对初相但在测速时跨chirp的相位差非常关键。瞬时频率是相位的导数[ f_{tx}(t) \frac{1}{2\pi}\frac{d\phi_{tx}(t)}{dt} f_c \frac{B}{T_c}t ]可以看到频率随时间线性上升斜率S B / Tc。这个S就是区别FMCW雷达性能的“灵魂参数”。S越大意味着相同时间内频率变化越剧烈后面的差频信号频率就越高测距精度相对越容易做高。2.2 回波与发射信号混频神奇的差频假设有一个目标距离雷达为R那么发射信号打到目标再反射回来接收到的回波信号相比发射信号有一个时间延迟(\tau 2R / c)其中c是光速。回波信号的表达式[ s_{rx}(t) A_{rx} \cdot \cos\left(2\pi f_c (t-\tau) \pi \frac{B}{T_c} (t-\tau)^2 \varphi_0\right) ]回波和发射信号同时送入混频器混频器输出的是两者频率之差和频率之和两个分量经过低通滤波器滤掉和频分量剩下的差频信号就是核心的中频信号IFIntermediate Frequency。用三角函数积化和差后中频信号的相位为[ \phi_{IF}(t) 2\pi f_c \tau 2\pi \frac{B}{T_c}\tau t - \pi\frac{B}{T_c}\tau^2 ]这里面最后一项(\pi\frac{B}{T_c}\tau^2)非常小因为(\tau)通常远小于(T_c)。比如目标距离10米(\tau2*10/c\approx66.7ns)Tc如果是100μs那这项小到可以忽略。这样中频信号近似是一个单频正弦波频率为[ f_{IF} \frac{B}{T_c}\tau \frac{B}{T_c} \cdot \frac{2R}{c} S \cdot \frac{2R}{c} ]这个式子用一句话概括就是中频频率正比于目标距离。目标越远回波延迟越大差频就越高。这个映射关系是FMCW雷达的基石。打个比方。假设你在山顶大喊一声回声传回来要一段时间。脉冲雷达就像是你掐着秒表测回声时间。而FMCW更像一个不停改变音调的歌手你听到自己歌声的回声时声调已经比当前唱的稍微高/低了一点通过声音的“高低差”来判断墙离你多远。这个类比虽然不严格但直觉上非常好用。2.3 一个关键问题为什么不直接测时间这里值得多花一段解释。你可能已经发现FMCW本质上还是把时间差翻译成了频率差。但为什么要绕这个弯子直接测时间差在工程上是极难做到高精度的。假设目标距离变化了1厘米对应的时间变化是2厘米除以光速大概66.7皮秒。想在示波器上直接测出66.7皮秒的时间差你需要采样率高达15GHz以上的高速ADC而且处理器要以极高的时钟频率处理这些样点功耗和成本都爆炸。但如果把它转换到频率域事情就简单了。一个1GHz左右的中频正弦信号用100MHz采样率的ADC就能采通过FFT在这种数字信号处理算法频率分辨率做到几十kHz甚至几kHz都很容易。而频率每1kHz的变化对应的距离变化就是[ \Delta R \frac{c}{2S} \cdot \Delta f_{IF} ]以S2MHz/μs为例1kHz频率变化对应7.5厘米的距离变化。配合几百个点的FFT插值mm级精度并不是梦。这就是FMCW体制最大的聪明之处。不是它不想直接测时间而是它换了一个更便宜、更精确的度量衡。2.4 用Python模拟一次单目标测距只看公式容易飘我把最基础的单目标场景用Python仿真一遍。假设一个24GHz雷达扫频200MHzTc100微秒目标距离10米。import numpy as np import matplotlib.pyplot as plt c 3e8 fc 24e9 # 起始频率 24GHz B 200e6 # 扫频带宽 200MHz Tc 100e-6 # chirp时长 100us S B / Tc # 调频斜率 fs 10e6 # 采样率 10MHz用于中频信号采样 N int(fs * Tc) # 单个chirp采样点数 t np.arange(N) / fs R 10.0 tau 2 * R / c f_if S * tau # 中频频率 S * 2R/c print(f理论中频频率: {f_if/1e3:.2f} kHz) # 构造中频信号忽略幅度、初相 if_signal np.cos(2 * np.pi * f_if * t) # 加窗后做FFT window np.hanning(N) spectrum np.fft.rfft(if_signal * window) freqs np.fft.rfftfreq(N, 1/fs) # 找峰值 idx np.argmax(np.abs(spectrum)) f_peak freqs[idx] R_est f_peak * c / (2 * S) print(fFFT峰值频率: {f_peak/1e3:.2f} kHz) print(f估计距离: {R_est:.2f} m)运行结果应该是理论中频频率: 13.33 kHz FFT峰值频率: 13.33 kHz 估计距离: 10.00 m这个仿真揭示了整个FMCW测距最原始的链路构造中频信号、采样、做FFT、找峰、换算距离。实际雷达芯片内部做的事情本质就是这个链路的高度工程优化版。后面所有的复杂度——多目标、测速、测角、目标检测——都是在“中频频率到距离”这个基础映射上叠加的。3. 距离维FFT从连续差频到离散距离门3.1 为什么不能把模拟中频信号直接“看懂”上一节的仿真是在理想条件下做的。实际系统里中频信号经过放大、滤波之后进入ADC采样变成一串离散的数值。接下来要处理的就不是连续的模拟信号了而是一个有限长度的离散序列。对这个序列做FFT本质是把时域信号换到频域看它包含哪些频率分量。FFT结果的核心意义在于它能告诉我们中频信号里有几个不同的频率每个频率的强度是多少。对应到物理场景一个频率分量就对应一个目标距离上的反射。多目标场景下中频信号是多个频率正弦波的叠加FFT能把它们分开就像把几个人同时说话的声音按音调高低分开一样。但FFT不是万能的。两个目标的频率差如果小于FFT的频率分辨率它们的频谱峰就会重叠看起来像一个目标。这就引入了距离分辨力的概念。3.2 距离分辨率带宽决定的物理底线FFT的频率分辨率取决于观测时长[ \Delta f \frac{1}{T_c} ]也就是说chirp扫得越久FFT频率分辨率越高。但距离分辨率跟这个没有直接关系把(\Delta f 1/T_c)代入距离映射公式[ \Delta R \frac{c}{2S} \cdot \frac{1}{T_c} \frac{c}{2B} ]因为S B / TcTc正好消掉了。这个结果非常漂亮也非常反直觉距离分辨率只由扫频带宽B决定和chirp时长、采样率都无关。200MHz带宽距离分辨率 3e8 / (2 × 200e6) 0.75米4GHz带宽77GHz车载雷达常见距离分辨率 3e8 / (2 × 4e9) 0.0375米也就是3.75厘米24GHz的模块如果带宽只有200MHz那么区分两个相距0.75米以内的目标就很吃力这也是为什么车载雷达普遍往77GHz频段走的原因之一。77GHz频段可以合法使用更大的扫频带宽距离分辨率做上去才能把汽车、行人、护栏这些紧挨着的目标分开。需要澄清一个常见的误解分辨率和精度是两个概念。分辨率是“两个目标能不能被区分开”的能力物理底线由带宽决定。精度是“单个目标测出来误差有多大”的指标可以通过插值、多次测量平均等方式提高。FFT峰值位置的估计精度可以做到远优于分辨率这就是为什么实际雷达模块能输出厘米级甚至毫米级的距离数据。3.3 实际FFT处理中的注意点做距离维FFT时有几个细节直接影响最终测距表现。用上一节的仿真代码继续说明。第一个是加窗。矩形窗也就是不加窗的好处是没有频谱泄露的“主瓣变宽”问题但旁瓣特别高高达-13dB。在有多目标场景下强目标的旁瓣可能掩盖掉弱目标的峰值导致漏检。实际处理中一般会加汉宁窗或者汉明窗把旁瓣压低到-40dB以下。代价是主瓣变宽两个相近目标更难区分。如果你的场景是单目标测距比如雷达水位计、料位计那直接用矩形窗就行分辨率最好如果是多目标检测比如车载雷达场景汉宁窗是更稳妥的默认选择。第二个是零填充Zero Padding。FFT的频率分辨率是fs/N零填充不会提高物理分辨率但可以让频谱曲线更平滑峰值定位更准确。这是数字信号处理里典型的“知其所以然”零填充是做插值不是做魔法。配合抛物线插值或者chirp-z变换可以实现亚采样级的高精度频率估计。第三个是目标数量的问题。如果两个目标的距离差小于物理分辨率无论怎么加窗、怎么零填充FFT都只能看到一个胖乎乎的峰。这时候唯一的办法是增大扫频带宽。当年我在测试一款24GHz 200MHz带宽的模块时一直纳闷为什么两个相距40厘米的角反射器在距离维上只有一个峰看了带宽才发现这是物理规律决定的。换一款带宽更大的雷达问题立刻消失。3.4 多目标场景的仿真验证把上一节的单目标扩展成两个目标距离分别设在8.0米和8.4米这个间距0.4米小于200MHz带宽对应的0.75米分辨率看看FFT能不能分开。R1, R2 8.0, 8.4 tau1, tau2 2*R1/c, 2*R2/c f_if1, f_if2 S*tau1, S*tau2 if_signal np.cos(2*np.pi*f_if1*t) np.cos(2*np.pi*f_if2*t) spectrum np.fft.rfft(if_signal * window) freqs np.fft.rfftfreq(N, 1/fs) plt.figure(figsize(10, 4)) plt.plot(freqs/1e3, np.abs(spectrum)) plt.xlabel(Frequency (kHz)) plt.ylabel(Magnitude) plt.title(Two targets with spacing below range resolution) plt.grid(True) plt.show()现实中你会看到一个单峰或者一个极不明显的鼓包根本数不出两个目标。如果把两个目标改成8.0米和9.0米间距1米大于0.75米FFT就能清晰地看到两个谱峰。这个实验直观验证了距离分辨率的物理决定性。4. 测速原理跨chirp的相位差与二维FFT4.1 为什么一个chirp测不出速度如果目标在径向方向上运动回波会产生多普勒频移。中频信号的频率也会跟着变化但问题是这个变化量相对于测距的差频来说太小了。举个例子一个目标以10米/秒的速度径向运动在24GHz频段波长约12.5毫米产生的多普勒频率约为[ f_d \frac{2v}{\lambda} \frac{2 \times 10}{0.0125} 1600 \text{ Hz} ]而10米距离目标对应的中频频率是13.33kHz。多普勒频移会改变中频信号频率但如果你只用单个chirp做一次FFT你完全无法区分“这个频率偏移是因为目标远了0.1米造成的”还是“目标以10米/秒的速度运动造成的”。距离和速度在单chirp里是耦合的解不开。这是单chirp原理决定的盲区再好的ADC也救不了。必须从另一个维度寻找速度信息。4.2 速度测量的突破口相位对微小位移的极度敏感虽然一个chirp中的频率变化难以区分多普勒但相位对这个微小变化却极其敏感。再回头看看中频信号的相位表达式。忽略那个极小的二次项中频信号在t0时刻的相位为[ \phi_{IF}(0) 2\pi f_c \tau 2\pi f_c \frac{2R}{c} \frac{4\pi R}{\lambda} ]也就是说目标距离变化半个波长中频信号的初始相位就旋转整整一周。24GHz雷达波长12.5毫米目标移动6.25毫米相位就转了一圈360度。这种灵敏度简直可怕。连续发射两个chirp如果目标在chirp间隔时间内移动了微小距离(\Delta R)那么两个chirp的中频信号之间就有一个相位差[ \Delta \phi \frac{4\pi \Delta R}{\lambda} ]目标径向速度为vchirp间隔为(T_c)在实际系统中chirp间隔时间就是chirp周期因为chirp是一个接一个发的那么(\Delta R v T_c)于是[ \Delta \phi \frac{4\pi v T_c}{\lambda} ]速度v就可以通过相位差除以时间换算出来。但这里有一个容易被忽略的前提这个相位差必须对同一个距离门range bin的中频信号来讲。所以标准做法是先做距离维FFT然后观察同一个距离门在不同chirp之间的相位变化。4.3 二维FFT把每个距离门当做一个慢时间序列假设一帧里发N个chirp。接收到的中频信号采样后整理成一个二维数组行是快时间快时间轴即每个chirp内的采样点列是慢时间慢时间轴即chirp序号。先沿快时间维FFT得到距离维频谱此时每一列是某个chirp对应的距离频谱。再做一次FFT这次沿慢时间维进行就把每个距离门上的相位变化转换成了多普勒频率。多普勒频率和速度的关系[ f_d \frac{2v}{\lambda} ]把多普勒频率和相位差对照起来看慢时间维做FFT的本质就是把跨chirp的相位旋转速度转化为频率峰。这个二维频谱通常叫range-Doppler MapRDM也就是距离-多普勒图。一次完整的处理流程一帧内采集N个chirp每个chirp采样M个点得到N×M矩阵对每一行每个chirp沿快时间做M点FFT得到距离维频谱对距离维频谱的每个距离门沿慢时间做N点FFT得到多普勒频率二维矩阵的每个单元格就代表某个距离和某个速度上的能量看一段仿真代码模拟一个距离10米、速度5米/秒的目标N 128 # chirp数量 M N_fft_time # 每chirp采样点数沿用上一个值 v 5.0 # 目标速度 m/s lambda_ c / fc # 波长 rdm np.zeros((N, M)) for n in range(N): tau_n tau (v * n * Tc) / c # 每次chirp目标距离微变 phi_n 2 * np.pi * fc * tau_n rdm[n, :] np.cos(2 * np.pi * f_if * t phi_n) # 快时间维FFT range_fft np.fft.fft(rdm * window[np.newaxis, :], axis1) # 慢时间维FFT做在目标所在距离门 target_bin np.argmax(np.abs(range_fft[:, :M//2]).sum(axis0)) doppler_fft np.fft.fftshift(np.fft.fft(range_fft[:, target_bin])) doppler_freqs np.fft.fftshift(np.fft.fftfreq(N, Tc)) speed_axis doppler_freqs * lambda_ / 2 peak_idx np.argmax(np.abs(doppler_fft)) v_est speed_axis[peak_idx] print(f估计速度: {v_est:.2f} m/s)输出应该是5.00米/秒左右。这就是二维FFT测速的基本思路。4.4 速度模糊、最大不模糊速度和速度分辨率慢时间FFT直接定义了速度的性能边界。多普勒频率的可见范围由慢时间采样率决定也就是脉冲重复频率PRF这里等于1/Tc[ f_{d,max} \frac{1}{2T_c} ]对应的最大不模糊速度[ v_{max} \frac{\lambda}{4T_c} ]Tc越小能测的速度范围越大。但Tc太小又会限制最大测距因为中频信号的采样需要时间。另外速度分辨率由多普勒FFT的总观测时间决定[ \Delta f_d \frac{1}{N T_c} ][ \Delta v \frac{\lambda}{2 N T_c} ]这就出现一个典型的工程矛盾帧长NTc越长速度分辨率越好但帧率会下降同时跨chirp的相位差如果超过π就会出现速度模糊需要解模糊算法。实际参数设计基本就是在这几个约束之间取折中没有任何一组参数能同时满足所有性能最大值。5. 波形参数设计最大测距、距离分辨率、速度分辨率背后的权衡5.1 参数设计与四个关键指标的硬约束前面推导的公式已经足够支撑一次完整的雷达波形参数设计。设计过程中的核心参数和物理约束汇总如下设计指标决定参数表达式设计偏好距离分辨率扫频带宽Bc / (2B)B越大越好最大测距ADC采样率fs与调频斜率Sc·fs / (2S)fs越大或S越小越好最大不模糊速度chirp周期Tcλ / (4Tc)Tc越小越好速度分辨率chirp数N与Tcλ / (2·N·Tc)N·Tc越大越好这里有一个非常值得注意的连锁关系最大测距公式是R_max c·fs / (2S)而中频频率不能超过ADC采样率的一半奈奎斯特定理。如果调频斜率S太陡同样距离对应的中频频率就高ADC可能采不到。所以设计时往往是先定好最大距离和ADC采样率反推允许的S再根据距离分辨率需求定B然后根据波长和v_max定Tc最后根据速度分辨率需求定N。5.2 一个实际波形参数的完整设计实例以一款24GHz模块宣称的最大测距40米为例试着反推它的设计思路。目标距离40米对应的中频频率f_IF S·2R/c。如果选择100MHz的采样率这是市场上常见工业雷达芯片的典型值那么f_IF必须小于50MHz即S·2·40/c 50MHz可算出S 187.5MHz/μs。工程上留出裕量取S约150MHz/μs。如果带宽B取200MHz那么Tc B/S 1.33μs。这个chirp长度在24GHz应用里偏短但用于40米测距是够用的。24GHz波长约12.5mm最大不模糊速度v_max λ/(4Tc) 12.5mm / (4×1.33μs)约等于58.6m/s也就是211km/h。对于车载场景这个上限足够覆盖绝大多数道路情况但对高速相向行驶的极端场景可能不够。如果一帧发射128个chirp速度分辨率Δv λ / (2·N·Tc) 0.458m/s。这个分辨率对常规交通场景足够把行人、自行车、汽车区分开。换个场景如果同样一个24GHz模块要兼顾生命体征监测那就完全是另一套参数了。人体呼吸引起的胸腔起伏只有几毫米到十几毫米心跳引起的起伏更小0.1~0.5毫米速度极慢每秒几毫米到几厘米但要求相位测量精度极高。这时候需要把chirp做得更短实际上不是——生命体征检测更关注的是长时间相位稳定性和极低噪声所以通常不追求大带宽长chirp的定位精度而是用短距离门内的相位变化连续观测几十秒。这再次说明没有一套波形参数是万能的。做产品定义时先想清楚第一需求是测距、测速还是微动监测再来决定S、B、Tc和N。5.3 24GHz与77GHz的参数差异很多人问同样是FMCW雷达24GHz和77GHz除了频率不同到底差在哪。最大的差异还是带宽。24GHz的ISM频段在中国和欧洲可用带宽只有200MHz左右算出的距离分辨率极限约0.75米。而77GHz频段可用的带宽达到4GHz甚至更大距离分辨率能做到3.75厘米。这让77GHz雷达在车载多目标场景里的优势是降维打击式的。波长也带来了测速上的差异。77GHz波长约3.9mm比24GHz的12.5mm短得多同样速度对应的多普勒频移更大速度分辨率更好但对微小振动的敏感度也更极端——这意味着同样的振动幅度会产生更大的相位变化利于感知微动但也意味着对机械振动、热漂移等干扰更敏感。做4D毫米波雷达、点云成像这类产品77GHz基本上是必然选择做简单的物位计、道闸雷达、区域安防24GHz足够了成本低、开发门槛也低。5.4 天线与射频链路对测距性能的影响波形参数只决定了信号处理的理论极限实际系统的测距精度还受射频前端性能制约。这里把影响链路最终性能的几个因素一并列出来方便你在选型和评估时心里有个数。相位噪声FMCW对相位噪声敏感的原因在于混频后的中频信号来自两个有相位噪声的信号的差。如果本振和回波之间存在时间延迟相位噪声就无法完全对消会在中频上表现为噪声边带。这个噪声边带落在目标峰旁边会抬高噪声底弱目标容易被淹没。VCO的非线性调频斜率理想的chirp是完美的线性扫频实际VCO的调频曲线并不是严格直线会有非线性。非线性会导致中频信号不再是纯的单频频谱会展宽距离维分辨率下降。现代雷达芯片一般内置DLL或PLL来做线性化校正低成本的24GHz模块可能没有这个校正这就是同是“200MHz带宽”不同模块实测距离分辨率差异很大的原因之一。ADC的有效位数中频信号的动态范围由强目标和弱目标的回波强度差决定。如果ADC位数不足弱目标会被量化噪声淹没表现为检测距离缩短。24GHz雷达中频信号不会特别大12位ADC是常规配置16位更好但功耗上去。6. 工程实现时的信号处理链路与后续扩展方向6.1 从原始ADC数据到距离-多普勒图的完整链路把前面的原理串成工程上可落地的信号处理链大致是这样一条流水线混频并滤波得到中频信号ADC以fs采样每个chirp得到M个复数基带采样点IQ两路或者单通道实采样后用希尔伯特变换构造解析信号按帧组织数据一帧包含N个chirp形成N×M矩阵对每个chirp做距离维FFT加上窗函数抑制旁瓣对每个距离门做慢时间维FFT得到RDM后续接入CFAR检测、峰值提取、聚类、跟踪、测角这套链路在几乎所有FMCW雷达芯片上都是标配。如果你用的模块SDK提供了原始adc数据接口你完全可以按这套流程自己实现一版完整的信号处理链路。很多国产24GHz模块和部分77GHz开发板都开放了这种模式适合底层学习和算法验证。实际做嵌入式实现时有两个容易踩的坑。一个是FFT点数与采样点数不一致时距离门对应的物理距离有偏移另一个是窗函数带来的能量缩放会影响后续CFAR阈值的标定。处理这些细节时建议先在PC上用Python或MATLAB完成完整链路仿真确认算法逻辑无误再搬到DSP或FPGA上优化。直接上手硬件调参效率太低而且极难排查问题。6.2 距离-多普勒图上还能做哪些事情RDM生成的频率峰值只是“候选目标”。在实际场景中噪声、杂波、多径、旁瓣都会产生虚假峰。所以CFAR检测几乎是标配后续处理。CFAR的基本思路是在每个距离-多普勒单元周围设置一个保护窗口和一个参考窗口用参考窗口的统计噪声水平动态计算检测门限目标能量必须超过该门限才判定为目标。CFAR算法派生出了很多变体比如CA-CFAR单元平均、GO-CFAR最大选择、OS-CFAR有序统计。车载雷达场景中杂波空间分布不均匀OS-CFAR在防掩膜方面表现更好但计算量更大。24GHz的简单安防雷达用CA-CFAR就够。再往上层走就是对检测出的点云做聚类和跟踪。雷达输出的不是“图像”而是稀疏点云每个点有距离、速度、角度、RCS等信息。经典的处理方式是DBSCAN聚类后再用卡尔曼滤波器做轨迹关联。4D毫米波雷达的火爆本质上是把角度维做精了点云密度提高了使这个链路在自动驾驶场景下更有价值。6.3 FMCW技术在高价值场景中的应用方向热词里有一串和FMCW毫米波雷达强相关的方向简单展开说说。毫米波雷达生命体征监测FMCW的高相位灵敏度让它可以检测到人体胸腔的微米级运动。呼吸频率约0.2~0.5Hz心跳约1~1.7Hz这些极低频率的信号表现为某个距离门相位的缓慢变化。关键不在硬件而在信号处理的稳定性需要长时间连续观测用带通滤波把呼吸和心跳分量分开同时消除身体随机运动的干扰。这项技术现在做跌倒检测、车内儿童存在检测、睡眠监测的产品很多。24GHz毫米波雷达模块40m测距这正是前面参数设计实例里的应用通常做货架检测、道闸触发、水位测量、工业安全防护等。这类场景对距离分辨力要求不高但对成本、功耗、可靠性要求高。选型时重点看S和fs参数是否匹配目标距离以及是否支持多个chirp配置组有的场景一个雷达需要短距离高精度和长距离低精度两套波形轮换工作。4D毫米波雷达在距离、速度、俯仰角、方位角四个维度同时输出目标信息。这需要多收多发天线阵列多通道接收后做数字波束成形或者MIMO虚拟阵列信号处理。原理层面还是FMCW只是把测角提到了和测距测速同等重要的位置。毫米波雷达目标检测与C FFT程序很多工程师拿到雷达模块后第一件事是把ADC数据拉出来自己在C里写FFT。主流的做法是用FFTW库或者CMSIS-DSPCortex-M平台。写这类程序时特别注意定点数转浮点数的效率、FFT输出幅度的归一化、以及双精度/单精度选择。实际测试中发现单精度FFT在大多数场景下完全够用但做相位差分测速时单精度的相位误差可能导致速度抖动需要小心处理。毫米波雷达与摄像头的目标时空同步这是多传感器融合里最头疼的问题之一。雷达输出的是目标级别的稀疏数据摄像头输出的是像素级的稠密数据二者坐标系、时间戳、数据率都不同。工程上需要做外参标定、时间对齐一般以高帧率传感器时间为主低帧率插值、然后做特征级融合。FMCW雷达的好处是目标距离和速度非常准正好补足摄像头在测距和夜间场景的短板。6.4 从原理到产品这一篇之外的东西写完这些回头再看“FMCW毫米波雷达原理一”这个主题其实核心就是把“距离怎么测、速度怎么测”这回事彻底讲清楚。这一篇的侧重点是体制的数学原理和基础信号处理链路很多现实工程问题——天线阵列校准、多径抑制、干扰规避、目标跟踪、传感器融合——都需要在这个基础上逐层展开。我给想深入研究的朋友一个实操建议选一款支持原始ADC输出的评估板不要直接用SDK里的现成算法自己动手写一遍从IF信号到RDM再到CFAR的完整链路。我当年第一次把自写算法的检测结果和模块SDK的输出并排对比时那种“原来信号长这样”的豁然开朗感觉比读十遍论文都管用。这一篇的内容足够支撑你完成第一版原理验证后面的大坑我们下一篇继续填。