处理链路¶
这一页从原始采样开始,解释数据如何变成可视化结果。
这条链路最适合按“数组形状变化”来理解。最开始,数据是一维采样流或多文件采样流。随后它会变成复数张量。经过 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 或通道顺序错误,常常会产生不空但很奇怪的热力图。
- 校准问题通常更影响角度稳定性,而不一定让距离能量消失。
- 点云过滤过强,会导致点云稀疏或重复点很多。
- 输出路径错误,会让人误以为处理失败,即使数组已经生成。
实用排查顺序¶
新采集结果不对时,可以按这个顺序排查:
- 确认输入文件和帧数。
- 确认结构化输出已经写出。
- 检查 NPZ/H5 数组形状。
- 先看一张静态 PNG,再渲染完整视频。
- 最后再调整 FFT 点数、距离范围、聚类阈值或点数。
这样排查会更贴近实际输出,而不是一开始就改复杂参数。