系列导读:这是雷达信号处理实战系列的第一篇。我们将从一个最基础的问题出发——雷达 SoC 吐出来的(2,64,8)复数立方体,到底是怎么来的?里面每个数字代表什么物理意义?读懂这一篇,后面的距离、速度、角度检测才有根基。
一、先看结论:这个立方体是什么
如果你手上有一块 FMCW 雷达 SoC(比如 TI 的 AWR 系列、NXP 的 TEF810x、或者国产的加特兰),它跑完一帧之后,吐给你的就是这么一个东西:
cube.shape = (2, 64, 8) cube.dtype = complex64这个立方体长什么样子呢?其直观图如下:
但为什么是这个形状?为什么是 2、64、8?要回答这些问题,得从 FMCW 雷达最基本的发射波形讲起。
二、FMCW 雷达发射的是什么
FMCW(Frequency Modulated Continuous Wave,调频连续波)雷达发射的不是脉冲,而是一段频率随时间线性上升的连续波。这段波形有一个专门的名字,叫chirp(啁啾)。
一个 chirp 的时频图:
几个关键参数:
| 参数 | 符号 | 含义 | 典型值 |
|---|---|---|---|
| 起始频率 | f0 | chirp 开始时的频率 | 24 GHz 或 77 GHz |
| 带宽 | B | 频率扫过的范围 | 1~4 GHz |
| chirp 周期 | Tc | 一个 chirp 持续多久 | 50~200 μs |
| 斜率 | S=B/TcS=B/Tc | 频率上升速率 | 10~50 MHz/μs |
关键点:这段波形发射出去,碰到目标反射回来,接收机把它和发射信号混频,得到一个中频信号(IF),频率正比于目标距离。
三、一个 chirp 内发生了什么——测距离
3.1 发射与接收的时间差
具体如下图
3.2 中频频率与距离的关系
FMCW 的核心公式:
IF =S·τ=S· 2R/c
反推距离:
R=c· IF / (2S)
一个 chirp 内的采样点做 FFT,就能把距离读出来。FFT 的每个 bin 对应一个中频频率,也就是一个距离。
3.3 为什么是 8 个 range_bin
SoC 在一个 chirp 内采集 Ns 个采样点,做 Ns点 FFT,得到 Ns个距离单元。代码里 Ns=8,所以有 8 个range_bin。
四、为什么要发多个 chirp——测速度
4.1 单个 chirp 测不了速度
一个 chirp 只有 100 μs,在这段时间内目标几乎没动。相位变化太小,测不出速度。
4.2 多个 chirp 之间的相位变化
要测速度,需要在时间上重复发多个 chirp,观察同一个距离门上、跨 chirp 的相位变化。
4.3 相位与距离的关系
雷达回波的相位与目标距离的关系:
φ= 4πR/λ
为什么是 4π4π 而不是 2π2π?因为信号往返:
雷达 ──→ 目标 ──→ 雷达
去程 R 回程 R
总路径 = 2R
相位 = 2π · (2R)/λ = 4πR/λ
4.4 跨 chirp 的相位变化
目标以径向速度 vv 运动,两个相邻 chirp 之间的时间间隔是 TcTc。
每个 chirp 周期内,目标移动的距离:
ΔR=v⋅TcΔR=v⋅Tc
对应的相位变化:
Δφ= 4πΔR/λ= 4πvTc /λ
跨 chirp 的相位旋转速度正比于目标速度。
对一个距离门上的 64 个 chirp 值做 FFT,就把"相位旋转频率"读出来,也就是速度。这就是多普勒 FFT。
chirp 序列: [5∠0°, 5∠5.6°, 5∠11.3°, ..., 5∠354.4°] ← 相位在旋转
多普勒 FFT 后:
doppler_bin: 0 1 ... 31 32 33 ... 63
小 小 ... 小 小 ┃大┃ ... 小
↑
峰值偏离零多普勒
4.5 为什么是 64 个 chirp
64 是速度分辨率、速度范围、帧率、FFT 效率四者折中的结果。
| 因素 | 公式 | 64 的效果 |
|---|---|---|
| 速度分辨率 | vres=λ/(2NcTc)vres=λ/(2NcTc) | 越高越好 |
| 无模糊速度范围 | vmax=±λ/(4Tc)vmax=±λ/(4Tc) | 与 NcNc 无关 |
| 帧率 | 1/(NcTc)1/(NcTc) | 越低越好 |
| FFT 效率 | — | 2 的幂最快 |
代入 λ=0.0125λ=0.0125 m、Tc=100Tc=100 μs、Nc=64Nc=64:
v_res = 0.0125 / (2 × 64 × 100e-6) = 0.977 m/s
v_max = ± 0.0125 / (4 × 100e-6) = ± 31.25 m/s
T_frame = 64 × 100 μs = 6.4 ms → 帧率约 156 Hz
够用:速度分辨率约 1 m/s,最大速度 ±31 m/s 远超人体速度,帧率 156 Hz 足够捕捉人体动作。
五、为什么要两个 RX——测角度
5.1 两个天线看同一个目标
雷达有两个接收天线,间距 d。目标在某个方向 θ上。
目标
╱
╱ θ╱
RX0 ●───────● RX1
d = λ/2
目标到两个天线的距离不同,存在波程差:
ΔR=d⋅sinθΔR=d⋅sinθ
5.2 波程差导致相位差
Δφ= 2πΔR/λ= 2πd·sinθ/λ
反推角度:
θ=arcsin(λΔϕ2πd)θ=arcsin(2πdλΔϕ)
这就是双阵元比相测角的原理。
5.3 为什么是 2 个 RX
理论上,NN 个 RX 可以测 N−1N−1 个角度信息,形成更复杂的波束。但:2 个 RX 是最简单的配置,能测一个方位角。更多 RX 会增加硬件成本和计算量。对于人体存在检测,一个方位角就够了。
下一篇预告
第二篇:雷达距离检测——power_profiles + find_range_peak
我们会看到:
怎么把
(2, 64, 8)的三维立方体压成两条一维距离谱(power_static和power_mti)。怎么在距离谱上找峰值。
怎么用中位数估计噪声底,算出 SNR。
一个"墙在 bin0、人在 bin3"的具体例子。
本文是雷达信号处理实战系列的第一篇。系列基于一份真实的 FMCW 雷达信号处理代码,逐行拆解距离、速度、角度、强度的提取过程。适合有 Python 基础、对雷达感兴趣的工程师和学生。