3. 雷达原始数据获取

雷达感知链路的第一道关口是原始数据获取。XENSIV 系列雷达(如 BGT60TR13C)并不直接输出“有人/无人”或“手势类别”,它输出的是按帧组织的复数采样流。理解这些数据如何从射频前端一步步变成距离-多普勒图(Range-Doppler Map, RDM)和雷达立方体(Radar Cube),是后续做手势识别与微动检测的前提。本节围绕三个核心对象展开:IQ 数据流、RDM、雷达立方体,并给出实时采集接口的实现要点。

一、从射频前端到数字采样:IQ 数据流的形成

FMCW 雷达在一个 chirp 周期内发射线性调频信号,接收端将回波与发射信号混频,得到中频(IF)信号。该信号经正交解调后分成 I(同相)与 Q(正交)两路,再经 ADC 采样,形成复数序列。因此每一帧的原始数据本质上是三维的:

  • 快时间维(Fast-time / Range):单个 chirp 内的采样点,索引为 n,对应距离信息;
  • 慢时间维(Slow-time / Chirp):一帧内的 chirp 序号,索引为 m,对应速度信息;
  • 通道维(Antenna / RX):接收天线序号,索引为 r,对应角度信息。

以 BGT60TR13C 为例,典型配置为 1 个 TX、3 个 RX,单帧 64 个 chirp,每 chirp 64 个采样点。此时一帧原始 IQ 数据量为 3×64×64 = 12288 个复数,若以 int16 存储 I/Q 各占 2 字节,则约 49 KB/帧。这个规模决定了实时接口必须考虑带宽与缓冲策略。

IQ 数据是“未做任何变换”的原始复数流,所有后续的距离、速度、角度信息都蕴含其中。调试阶段建议先保存原始 IQ,再离线做 FFT,便于定位问题出在采集还是处理环节。

二、距离-多普勒图的生成

RDM 是对原始 IQ 数据做二维 FFT 的结果,处理顺序如下:

  1. 距离维 FFT:对每个 chirp 的 n 个采样点做 FFT,得到距离谱。峰值位置 k 对应距离 R = k·c / (2·B·N_fft),其中 B 为扫频带宽,c 为光速。
  2. 多普勒维 FFT:对同一距离单元、跨 chirp 的序列做 FFT,得到速度谱。速度分辨率 Δv = λ / (2·M·T_chirp),λ 为波长,T_chirp 为 chirp 周期。
  3. 取模与对数压缩:对复数结果取模得到幅度,再转 dB 便于显示与动态范围压缩。

以 60 GHz 雷达、带宽 5 GHz、64 chirp、chirp 周期 200 μs 为例:距离分辨率约 3 cm,最大不模糊速度约 ±6.2 m/s,速度分辨率约 0.19 m/s。这些参数直接决定手势识别的可分辨粒度——例如手指微动幅度在毫米级,需要更高的距离分辨率与更短的帧周期。

雷达原始数据获取与雷达立方体生成链路 射频前端 TX 发射 FMCW RX 混频 → IF IQ 采样 正交解调 I/Q ADC 12bit 原始 IQ 数据流 [RX, Chirp, Sample] 复数 int16 交织 距离维 FFT 沿 Sample 轴 → 距离谱 多普勒维 FFT 沿 Chirp 轴 → 速度谱 距离-多普勒图 RDM [Range, Doppler] 取模 + dB 压缩 角度维 FFT 沿 RX 通道轴 → 角度谱 雷达立方体 [Range, Doppler, Angle] 三维复数张量 实时采集接口关键路径 FIFO 中断 / DMA 帧起始触发 双缓冲切换 数据搬运 SPI / USB 读取 按帧打包 实时处理 FFT / 取模 / 压缩 输出 RDM / Cube 监控指标 丢帧率 延迟 / 吞吐

三、雷达立方体的组织与内存布局

雷达立方体是 RDM 在角度维上的扩展,形状为 [Range, Doppler, Angle] 的三维复数张量。实际工程中,它通常以“距离-多普勒-角度”的顺序在内存中连续存放,便于后续做 CFAR 检测、DOA 估计和点云生成。以 64×64×3 的立方体为例,单帧复数数据量为 12288,与原始 IQ 相同,但语义已从“采样”变为“可解释的物理量”。

需要注意两点:其一,角度维 FFT 通常在 RDM 的峰值单元上做,而非全立方体,以降低计算量;其二,若使用虚拟阵列(如 TDM-MIMO),角度维长度会扩展为 N_TX × N_RX,此时需要先做多普勒解模糊再拼接。

四、实时采集接口的实现要点

实时采集的核心矛盾是“数据产生速率”与“处理/传输速率”的匹配。以 64 chirp、200 μs 周期计算,一帧时长约 12.8 ms,帧率约 78 fps。若每帧 49 KB,则数据率约 3.8 MB/s。这个量级下,接口设计需关注以下环节:

  • 触发与同步:利用雷达的帧起始中断或 FIFO 阈值中断,确保每帧数据完整读取,避免半帧拼接;
  • 双缓冲/环形缓冲:采集与处理并行,防止处理耗时导致丢帧;
  • 数据格式转换:原始 int16 交织的 I/Q 需拆分为复数数组,注意字节序与符号扩展;
  • 时间戳:每帧附带采集时刻,便于后续做微动相位对齐与多帧融合。

下面给出一个典型的帧读取伪代码结构,用于说明接口层的处理顺序:

// 每帧采集循环(伪代码)
while (running) {
    wait_for_frame_irq();              // 等待帧起始中断
    read_fifo(raw_buf, FRAME_BYTES);   // 读取原始 IQ 字节流
    unpack_iq(raw_buf, iq_complex);    // int16 交织 → 复数数组
    range_fft(iq_complex, range_spec); // 距离维 FFT
    doppler_fft(range_spec, rdm);      // 多普勒维 FFT
    angle_fft(rdm, cube);              // 角度维 FFT(可选)
    push_to_pipeline(cube, timestamp); // 送入后续处理
}
若发现 RDM 中目标距离或速度出现规律性偏移,优先检查 chirp 周期配置与 FFT 点数是否一致;若出现随机丢帧,优先检查 FIFO 读取是否与中断同步,以及缓冲是否足够容纳一帧完整数据。

五、结果观察与判断依据

采集链路是否正常,可以通过几个直观指标判断:RDM 中静止目标应出现在零多普勒附近,运动目标的多普勒符号与运动方向一致;距离维峰值位置应与实际目标距离吻合(误差在分辨率量级内);连续多帧的同一目标距离单元应保持稳定,若出现跳变则可能是帧同步或缓冲问题。对于微动感知,还需关注相位随时间的连续性——相位跳变往往意味着采集丢帧或时间戳错位。