详细总结毫米波雷达FMCW的工作原理与计算过程
- 01 Jul, 2026
在 一文搞懂mmWave Sensing雷达技术的工作原理一文中,对雷达以及毫米波雷达mmWave的基本工作原理和两种工作模式的计算过程进行了简要的总结。本文主要针对mmWave Sensing的FMCW模式的工作原理以及距离和速度的计算流程进行详细的整理,从而对该工作模式雷达的概念和工作过程建立更深刻的理解。
FMCW模式发射信号的组织与结构
如一文搞懂mmWave Sensing雷达技术的工作原理一文所总结,在毫米波雷达的FMCW(Frequency Modulated Continuous Wave)模式下,雷达不发射传统的离散脉冲,而是发射一种频率随时间线性增加的连续正弦波,这就是 Chirp 信号。

一个 Chirp 的核心物理特征可以通过以下几个参数来定义:
- 起始频率 ($f_c$):例如 77 GHz。
- 带宽 ($B$):频率扫过范围,例如 4 GHz。带宽决定了雷达的距离分辨率(Range Resolution),带宽越高,距离分辨率越精细,更容易分辨距离靠近的两个物体。
- 持续时间 ($T_c$):频率从 $f_c$ 扫描到 $f_c + B$ 所花费的时间,例如 40 µs。
- 频率斜率 ($S$):频率变化的速率,公式为$S = \frac{B}{T_c}$。
如果只是要测量静态物体的距离的话,用一个Chirp就足够了,但是如果还要测试物体的运动速度,就需要连续的多个Chirp。因此,雷达的数据是按帧(Frame)进行组织的,每个Frame包含有连续的多个Chirp信号,以便于后续的 NPU 或 DSP 进行周期性的数据吞吐和目标检测。
对于一个 Chirp 信号而言,其完整的微观时间轴主要包含以下两个阶段:
- Inter Chirp Idle Time:发射机不发射有效信号,频率合成器迅速回落到起始频率 $f_c$ 并锁定。
- Tx Start:发射机开启,频率开始线性上升,频率从 $f_c$ 上升到 $f_c + B$ 。
一个Frame则包含有一组连续的相同Chirp信号,Frame 的关键参数如下:
- Number of Chirps(每帧所包含的 Chirp 数量):例如一帧包含 128 个 Chirp。这个数值决定了雷达的速度分辨率。
- Frame Periodicity(帧周期):例如 33 ms(相当于约 30 FPS)。
- Active Frame Time(有效帧时间):128 个 Chirp 连续发射所占用的时间。
- Inter-Frame Time(帧间间隙):一帧发射完毕后到下一帧开始前的时间。雷达的射频前端在这段时间通常进入低功耗状态,后端芯片(如 DSP、ARM 或 NPU)利用这个时间段全速处理当前帧所生成的 ADC 原始数据。
下图是一个包含有连续Chirp信号的Frame的时间轴结构:

下面使用一个例子,来对雷达发射的Chirp和Frame信号的时间轴进行说明:
- Chirp 持续时间 ($T_c$):50 µs
- Chirp 空闲时间 (Idle Time):10 µs (因此,发射一个完整 Chirp 的周期是 60 µs)
- 每帧 Chirp 数量:128
- 有效发射时间:$60 , \mu s \times 128 = 7.68$ ms
- 帧周期:33 ms
因此,按照以上的参数,整个雷达系统的发射机运行流程为:发射机在每 33 ms 的周期内,只有前 7.68 ms 是在以极快的时间间隔(60 µs)连续不断地发射 128 个 Chirp 信号。剩下的约 25 ms 时间内,发射机关断,等待下一帧触发。
雷达的系统结构与中频信号
FMCW毫米波雷达系统的结构如下图所示:

该框图中混频器Mixer的作用,是对当前时刻的发射信号与接收机接收到的回波信号混频相乘,对混频后的信号做低通处理,得到一个用于进行后续计算的中频信号。
假设当前时刻的发射信号为$S_{TX} = \cos(2\pi f_{TX} t+\phi_{TX})$,当前时刻的接收回波信号为$S_{RX} = \cos(2\pi f_{RX} t+\phi_{RX})$。
那么通过混频器处理并经过低通滤波后得到的中频信号是:
$$ S_{out} = \cos(2\pi (f_{TX} - f_{RX}) t+(\phi_{TX}-\phi_{RX})) $$
后续对于距离、速度和角度的计算,都是在这个中频信号的基础上进行计算。
距离的计算流程
理解距离计算的关键在于:接收器受到的RX 信号在时间上是 TX 信号的延迟版本 。

假设雷达信号从发射机发出到接收到收到回波的电磁波信号飞行时间为 $\tau$,那么信号往返目标的时间延迟公式就是 $\tau = \frac{2d}{c}$ ,其中 $d$ 是物体距离,$c$ 是光速。
因为 TX 信号的频率是随时间线性增加的,所以延迟了 $\tau$ 时间的 RX 信号在任意时刻与 TX 信号相减,都会得到一个恒定的频率差,这个频率差就是中频信号的频率。
根据几何相似性,中频信号的频率 $f_0$ 等于斜率 $S$ 乘以时间延迟 $\tau$ ,再结合上面的时间延迟公式,就可以得到距离的最终计算公式:
$$ f_0 = \frac{S \cdot 2d}{c} $$
因此只要得到中频信号的频率 $f_0$,系统就能直接反推出目标的距离 $d$。
DSP的计算流程
对于雷达系统的DSP而言,计算流程如下:
- ADC 采样:雷达的模拟混频器输出的是一个模拟中频(IF)正弦波,DSP 首先要通过 ADC(模数转换器)对其进行采样。设定 ADC 的采样率 $F_s$(例如 6.4 Msps)和每个 Chirp 采样的点数 $N$(例如 256 点),经过这个采样步骤后得到一个长度为 $N$ 的数组。
- 信号加窗:在直接做 FFT 之前,为了应对 FFT 对固定长度数组计算中存在的频谱泄露问题,通常会把 $N$ 个采样点与一个相同长度的窗函数(如 Hanning 窗或 Blackman 窗)相乘。
- 执行FFT计算: DSP 的硬件加速器(HWA)或 DSP 核对 $N$ 个加窗后的时域数据点执行离散傅里叶变换,计算结果是一个包含 $N$ 个复数(实部+虚部)的频域数组。根据奈奎斯特定理,通常只需要看前 $N/2$ 个点。这 $N/2$ 个点在雷达术语中被称为 Range Bins(距离单元) 或 Index $k$。
- 幅度计算与寻峰:FFT 的输出是复数域的,代表相位和幅度。 DSP 遍历这 $N/2$ 个 Range Bin,计算每个点的幅度 $A = \sqrt{I^2 + Q^2}$。在只有一个检测目标的简化情况下,DSP 只需要简单地找出这 $N/2$ 个点中数值最大(能量最高)的那个点,并记录下它的索引号,记为 Index $k$。
- 如果是有多个检测目标,那么在遍历 FFT 的输出幅度时就会找到多个峰值,记录下这些峰值点的index即可。
- 物理量换算:这一步的作用就是要把上一步得到的 index 转换成实际的距离单位 m,按照以下流程进行转换即可。

每一个 Bin 代表的频率跨度(频率分辨率 $\Delta f$)由 ADC 决定:$\Delta f = \frac{F_s}{N}$,这里的 $F_s$ 为 ADC 的采样率。
因此,峰值(所在Range Bins的index为 $k$ )所在的中频频率就是:$f_{IF} = k \times \Delta f = k \times \frac{F_s}{N}$。
再结合上面的雷达距离计算公式: $f_{IF} = \frac{S \cdot 2d}{c}$,稍作变换得出距离 $d$:$d = \frac{c \cdot f_{IF}}{2S}$。
最终得到的距离计算公式为:
$$ Distance = k \times \left( \frac{c \cdot F_s}{2 \cdot S \cdot N} \right) $$
公式括号里的部分 $\frac{c \cdot F_s}{2 \cdot S \cdot N}$,在雷达初始化时就是一个常数,这个常数实际上就是雷达的单 Bin 距离分辨率($\Delta d$)。
速度的计算流程
既然基于单个 Chirp 的测量,就可以得到物体的距离,那么如果对多个 Chirp 的距离进行对比,是不是就可以很容易的计算出来物体的运动速度?答案是否定的。
假设目标在以速度 $v$ 移动,雷达连续发射了两个间隔为 $T_c$(Chirp 周期)的相同 Chirp 信号。在发射第一个 Chirp 和第二个 Chirp 的极短间隔内(例如 60 µs),目标只移动了极其微小的距离:$\Delta d = v \cdot T_c$,这个距离对于普通运动物体而言只是微米级别,这么微小的距离差在 FFT 的频谱图上根本看不出位置(频率)的变化,两个 Chirp 在 FFT 后的峰值依然出现在同一个距离 Bin 里。
但是,由于毫米波的波长 $\lambda$ 极短(77GHz 的波长大约只有 3.9 mm),这个微小的距离差会导致两个 Chirp 的中频信号在复数域产生明显的相位差 $\Delta \phi$。
电磁波在空间中每往前走一段物理距离 $d$,它所走过的距离相位的变化为:
$$ 2\pi \times \frac{d}{\lambda} $$
假设雷达与目标之间的距离是 $d$。但是,雷达发射的 Chirp 信号需要先飞到目标,再从目标反射飞回接收天线。因此,电磁波在空气中实际飞行的总路程是 $2d$。
我们将总路程 $2d$ 代入第一步的公式中,而目标移动的微小距离 $\Delta d = v \times T_c$ ,就得到了雷达接收信号相位差的物理公式推导为:
$$ \Delta \phi = \frac{4\pi \Delta d}{\lambda} = \frac{4\pi v T_c}{\lambda} $$
通过以上这个公式,可以反推出目标的速度 $v$:
$$ v = \frac{\lambda \Delta\Phi}{4\pi T_c} $$
基于以上公式,只要得到了两个Chirp信号的相位差,就可以计算出目标的运动速度。

💡 这里有个最大不模糊速度 ($v_{max}$)的概念。由于相位是通过三角函数计算的,三角函数具有周期性。为了保证速度测量的唯一性(不产生模糊),两次采样间的相位差绝对值必须小于 $\pi$ 。由此可以推导出雷达能测量的最大相对速度:$v_{max} = \frac{\lambda}{4T_c}$。这说明:Chirp 周期 $T_c$ 越短(发射越密集),能测量的最大速度就越高 。
DSP的计算流程
雷达系统的DSP计算速度的流程如下:
- 构建雷达数据阵列:在一帧内,ADC 采集了 $M$ 个 Chirp(例如 128 个),每个 Chirp 采样 $N$ 个点(例如 256 点)。DSP 首先对每一个 Chirp 的 256 个时域采样点进行 FFT 计算(距离 FFT)。 每个 Chirp 采样信号的 FFT 复数输出结果(包含幅度和相位)会被写入内存,拼成一个 $M \times (N/2)$ 的二维矩阵阵列。
- 距离门锁定与数据抽取:在短短一帧数据时间(实际上只有几毫秒)内,普通运动目标的物理位移非常小,一般不会跨越雷达的距离分辨率单元。假设在每个 Chirp 信号的FFT结果序列中,都是在第 $k$ 个距离 Bin 找到了目标的能量峰值。这一步,就是要将所有 $M$ 个 Chirp 在第 $k$ 个 Bin 上的复数数据(包含有幅度和相位信息)抽取出来,从而组成一个全新的、长度为 $M$ 的一维复数数组。
- 加窗:与距离计算的逻辑相同,为避免后续进行2D FFT计算时频谱泄露,DSP 将这个长度为 $M$ 的一维复数数组中的每一个元素,与一个一维窗函数(如 Hanning 窗)的系数相乘。
- 执行 2D FFT(Doppler FFT):DSP 的傅里叶变换单元对这个加窗后的长度为 $M$ 的复数数组执行一次 $M$ 点的 FFT 计算(这个FFT计算也就是所谓的2D FFT计算),其计算结果是一个长度同样为 $M$ 的复数数组。这个数组的每一项代表一个特定的多普勒频率单元(Doppler Bin)。
- 寻峰与速度物理量换算:DSP 计算 2D FFT 输出数组中每个元素的模值(幅度 $A = \sqrt{I^2 + Q^2}$),得到速度能量谱,从中找出能量最大的那个多普勒 Bin 的索引号,记为 Index $m$。
以上通过2D FFT计算出来的这个速度能量谱,总共有$M$ 个 ,实际上也就意味着把整个圆周期对应的 $2\pi$ 分为 $M$ 份,以上的相位差公式计算每一份相位差的等式为:
$$ \Delta \phi = \frac{4\pi v T_c}{\lambda} = \frac{2\pi}{M} $$
因此最后得到的速度分辨率(实际上也就是速度能量谱中每个bin对应的速度单位值)就是:
$$ \Delta v = \frac{\lambda}{2 \cdot M \cdot T_c} $$
既然上面计算得到的速度能量谱中峰值位于第 $m $个bin,那么其对应的速度就是:
$$ Velocity = m \times \Delta v = m \times \left( \frac{\lambda}{2 \cdot M \cdot T_c} \right) $$
如果有多个目标怎么办?
以上对于检测目标的距离和速度计算流程的总结,主要考虑的是针对检测场景中只有一个目标的简化情况。那么如果检测场景中同时存在多个目标怎么办呢?
在这种情况,测试待检目标的距离相对比较容易。
如果检测场景中有多个目标的话,经过信号反射回波、ADC采样以及在DSP中进行 FFT 计算后,最终会在 FFT 的距离谱(Range Bins)上会出现多个不同 index 的尖峰,每个尖峰对应于一个检测目标的距离。
当然在这种情况下,如果两个物体之间的距离过近,小于这个雷达的距离分辨率的话,在距离谱上就出现在相同的Bin Index,雷达就没办法识别开了,只能显示为一个目标。

那么两个相同距离的目标速度不同的话,会发生什么情况呢?此时,由于这一个距离 Bin 里面混合了两个目标的相位,提取出来的相位序列将是一个混乱的叠加态,这会导致雷达无法正确识别和分辨两个目标的速度。
所以在这种情况要测量速度的话,就不能先在距离谱中找到目标,然后只针对这个目标在所有Chirp上的数据去计算2D FFT。而应该是:
- 先对整个 Frame 中所有 $M$ 个 Chirp 执行一次 1D FFT,把计算结果拼接在一起,得到二维的 Radar Data Matrix(行是距离 Bin,列是 Chirp)。
- 这个二维矩阵中的每一列,对应的都是一个距离 Bin 中检测目标的幅度和相位在一个 Frame 中连续 N 个Chirp的变化情况。其中,因为一个Frame的时间很短,所以这个序列中的幅度变化会非常小,但是相位则会根据检测目标的速度情况有显著的变化。
- 如果一个距离bin中有多个目标的话,这个序列中反映的幅度和相位就是两个目标的叠加影响结果。
- 直接对 Data Matrix 的每一行(每一个距离 Bin)都执行一次 2D FFT(Doppler FFT)。
- 如果一个距离bin中有一个目标的话,这个2D FFT的结果就是能够根据序列中数据相位变化的情况找到与之对应的距离。
- 而如果一个距离bin中有多个目标的话,这个2D FFT不仅能够找到距离,还能够区分把不同速度所引起的相位差异找出来。
- 经过全矩阵的 2D FFT,DSP 会在内存中生成一张二维的热力图。横轴是距离,纵轴是速度,颜色深浅代表能量(幅值)。
- 接下来就是直接在这张二维热力图上寻找二维尖峰的,每个尖峰对应于一个检测目标的速度数据。
可以看到,在这个热力图上,两个处于相同距离Bin、不同速度的物体可以清楚的识别出来。

参考资料
- The fundamentals of millimeter wave radar sensors, Texas Instruments.