跳转至

处理链路

这一页从原始采样开始,解释数据如何变成可视化结果。

这条链路最适合按“数组形状变化”来理解。最开始,数据是一维采样流或多文件采样流。随后它会变成复数张量。经过 FFT 后,它会变成距离、速度和角度谱。最后再被压缩成热力图,或转换成点云坐标。

1. 原始输入

原始雷达采样还不是图片或点云。它们是 ADC 数值流。第一步是恢复测量数据的结构:

  • 帧索引,
  • chirp 索引,
  • ADC 采样点索引,
  • TX/RX 通道,
  • I/Q 复数采样。

级联路径和单芯片路径的重建方式不同。

原始输入阶段也最容易受文件假设影响。如果文件缺失、帧数不一致,或者 XML 参数和 BIN 文件不匹配,代码会在任何雷达数学开始前就失败。

因此处理代码会先做文件发现和参数解析,而不是直接进入 FFT。

2. 拆帧和通道重建

对 IWR2243 Cascade 来说,同一帧需要从四个设备文件读取,然后沿 RX 维拼接。对 IWR6843 来说,单个 BIN 流需要先拆成帧,再重排成虚拟天线矩阵。

这一阶段主要处理数据布局。如果布局错了,后面的 FFT 和角度估计即使公式正确,结果也会错。

常见布局操作包括:

  • 将交织的 I/Q 整数转换成复数采样,
  • 把一维采样重排成帧、chirp、sample 等维度,
  • 将轴顺序调整为 FFT 代码需要的形式,
  • 将物理通道映射成虚拟天线索引。

这些操作单独看并不复杂,但轴顺序非常关键。代码中 reshape 和 transpose 附近的注释会更详细,就是因为这些位置风险高。

3. 校准

级联路径会在 FFT 前做频率和相位校准。原因是多个芯片需要表现得像一个相干阵列。

校准可以减少通道间不一致,让角度域处理更可靠。

在这个仓库里,校准主要出现在 IWR2243 Cascade 路径。代码使用校准矩阵修正 TX/RX 通道之间的频率和相位差异。

如果校准关闭或校准文件不匹配,距离和速度热力图可能仍然有能量,但角度估计会变得不稳定,因为虚拟阵列失去了可靠的相位参考。

4. Range FFT

Range FFT 把快时间 ADC 采样转换成距离 bin。某个距离上的目标会产生对应拍频,FFT 将这个频率映射到距离位置。

代码在配置允许时会先加窗。加窗可以减少频谱泄漏,让结果更容易观察。

Range FFT 的输出仍然不是最终图片,而是中间频谱。后续步骤会在重复 chirp 上做 Doppler FFT,或者选择距离 bin 用于显示。

读代码时要注意 FFT 作用在哪个轴:

  • Range FFT 应作用在 ADC sample 维。
  • Doppler FFT 应作用在 chirp 或慢时间维。
  • Angle FFT 应作用在天线或虚拟阵列维。

5. Doppler FFT

Doppler FFT 沿 chirp 维执行。它观察多个 chirp 之间的相位变化,并映射成速度 bin。

经过 fftshift 后,零速度位于频谱中心,负速度和正速度分布在两侧,速度热力图更直观。

Doppler 输出可以理解为距离-速度响应。为了可视化,代码通常会把多个天线通道的能量相加,再把幅值转换成更适合显示的尺度。

这一步适合检查运动,但会隐藏单个天线通道的信息。如果目标是角度估计,通道结构必须保留到角度处理阶段。

6. 角度处理

角度处理使用虚拟天线维度。代码会把 TX/RX 通道组织成阵列组,再做角度 FFT 或 AoA 映射。

输出是空间响应:目标出现在什么角度,或者对应到三维点云中的哪个位置。

角度处理非常依赖正确的通道顺序。错误的天线映射可能仍然产生看似正常的能量图,但空间解释会是错的。

对级联路径,ANTENNA_86 定义了如何从 TX/RX 频域张量中抽取虚拟天线。对 IWR6843 路径,radar_matrix 定义了后续 AoA 处理使用的虚拟天线分组。

7. 输出结果

最终输出服务不同用途:

  • H5 保存完整处理结果,便于后续分析。
  • NPZ 保存紧凑数组,适合可视化或脚本复用。
  • PNG 适合快速检查。
  • MP4 适合观察运动和展示。

处理和可视化分开后,修改显示方式不需要重新跑昂贵的信号处理。

常见失败表现

不同问题会出现在不同位置:

  • 输入文件缺失或不匹配,通常会在文件发现或拆帧阶段失败。
  • reshape 或通道顺序错误,常常会产生不空但很奇怪的热力图。
  • 校准问题通常更影响角度稳定性,而不一定让距离能量消失。
  • 点云过滤过强,会导致点云稀疏或重复点很多。
  • 输出路径错误,会让人误以为处理失败,即使数组已经生成。

实用排查顺序

新采集结果不对时,可以按这个顺序排查:

  1. 确认输入文件和帧数。
  2. 确认结构化输出已经写出。
  3. 检查 NPZ/H5 数组形状。
  4. 先看一张静态 PNG,再渲染完整视频。
  5. 最后再调整 FFT 点数、距离范围、聚类阈值或点数。

这样排查会更贴近实际输出,而不是一开始就改复杂参数。