2. 雷达原始数据与距离-多普勒处理

在 S32R 平台上做目标检测,第一步不是写检测算法,而是把雷达前端送来的 ADC 原始数据“翻译”成一张可解释的距离-多普勒图(Range-Doppler Map,RDM)。这张图是后续 CFAR、DOA 估计和跟踪的输入,它的质量直接决定整条链路的性能上限。本节围绕 ADC 数据格式、距离 FFT、多普勒 FFT、RDM 生成以及 S32R 加速器映射展开。

一、ADC 数据格式:先看清“原料”长什么样

FMCW 雷达每个 chirp 发射一段线性调频信号,接收端与发射信号混频后得到中频(IF)信号,经 ADC 采样后形成复数样本。S32R 系列(如 S32R45、S32R294)通常通过 MIPI-CSI2 或 LVDS 接口接收前端(如 TEF82xx)输出的 ADC 数据,典型格式为复数交织的 16 位定点:I 路和 Q 路各占 16 bit,按 I0, Q0, I1, Q1, ... 顺序排列。部分配置也支持实数采样或 12 位压缩格式,但复数 16 位是工程中最常见的默认选择。

理解数据布局的关键是三个维度:快时间(fast-time)——单个 chirp 内的采样点,对应距离;慢时间(slow-time)——跨 chirp 的采样,对应多普勒;通道维——多个 RX 天线,对应角度。以典型配置为例:每帧 128 个 chirp,每 chirp 256 个采样点,4 个 RX 通道,则一帧原始数据量为 128×256×4×4 Byte ≈ 512 KB。这个规模决定了后续 FFT 必须依赖硬件加速器,而非纯 CPU 处理。

ADC 样本是复数,I/Q 两路缺一不可。若前端只输出实数,需在距离 FFT 前做 Hilbert 变换或采用实数 FFT 的对称性处理,否则无法区分正负多普勒。

二、距离 FFT:把快时间变成距离

距离维处理对每个 chirp 的 256 个采样点做 FFT。其物理依据是:目标距离 R 与 IF 频率 fIF 成正比,fIF = 2·S·R/c,其中 S 为调频斜率,c 为光速。因此 FFT 的频点索引 k 直接映射为距离 bin:R = k·c/(2·S·NFFT·Ts),Ts 为采样周期。

工程上通常做 256 点复数 FFT,并在 FFT 前加窗(如 Hann 窗)抑制旁瓣。加窗会带来约 1.5 倍的主瓣展宽和轻微 SNR 损失,但能显著降低强目标对邻近弱目标的遮蔽。S32R 的 BBE32 或 LAU(Linear Algebra Unit)可高效执行定点复数 FFT,典型 256 点 FFT 在数十个周期内完成。

三、多普勒 FFT:把慢时间变成速度

距离 FFT 完成后,数据组织为“距离 bin × chirp”的二维矩阵。对每个距离 bin 沿 chirp 方向做第二次 FFT,即多普勒 FFT,长度等于 chirp 数(如 128 点)。多普勒频率 fD 与目标径向速度 v 的关系为 fD = 2·v/λ,λ 为波长。多普勒 bin 索引 m 对应速度 v = m·λ/(2·Nchirp·Tc),Tc 为 chirp 周期。

这里有一个容易出错的细节:多普勒 FFT 的输出需要做 fftshift,把零多普勒移到中心,否则静止目标会出现在第 0 个 bin 而非中心 bin,导致速度符号判断混乱。S32R 的 DMA 和 BBE32 支持在搬运或计算中完成重排,减少额外开销。

四、距离-多普勒图生成与加速器映射

两次 FFT 完成后,对每个 RX 通道得到一个 Nrange × Ndoppler 的复数矩阵,取模平方即得 RDM。多通道 RDM 可先做非相干积累(各通道功率相加)用于检测,或保留复数用于后续 DOA。RDM 中每个峰值对应一个潜在目标,其坐标给出距离和速度,幅度用于 CFAR 判决。

S32R 的典型处理链映射如下:ADC 数据经 DMA 搬入 SPU(Signal Processing Unit)本地内存;BBE32 执行距离 FFT 和加窗;结果写回后由 BBE32 或 LAU 执行多普勒 FFT;最后经 DMA 输出到 CPU 或硬件 CFAR 模块。整个链路的瓶颈通常在内存带宽和 FFT 吞吐,而非计算本身。合理配置 DMA 描述符和双缓冲,可让 FFT 与数据搬运重叠,显著提升帧率。

S32R 雷达距离-多普勒处理链与加速器映射 ADC 原始数据 I/Q 16bit 交织 128 chirp × 256 点 4 RX 通道 DMA 搬运 双缓冲 距离 FFT BBE32 · 256 点复数 Hann 窗 + 定点 输出:距离 bin 多普勒 FFT BBE32 / LAU · 128 点 fftshift 重排 输出:速度 bin RDM 取模平方 多通道积累 数据维度与内存布局 快时间 (Fast-time) 256 采样点 / chirp → 距离 慢时间 (Slow-time) 128 chirp → 多普勒 通道维 (Channel) 4 RX → 角度 帧缓冲 512 KB 关键参数映射关系 距离分辨率 ΔR = c / (2·B) B = 调频带宽 速度分辨率 Δv = λ / (2·N·Tc) N = chirp 数 最大不模糊速度 vmax = ± λ / (4·Tc) 由 chirp 周期决定 距离 bin 索引 k = round(2·S·R·Ts·NFFT/c) S = 调频斜率 BBE32 加速 BBE32 / LAU 加速 DMA 引擎

五、工程实现中的关键判断

在实际调试中,判断 RDM 是否正确的依据很直接:在空旷场景下,静止目标(如墙角、护栏)应出现在零多普勒中心列,距离位置与实测一致;运动目标的多普勒符号应与靠近/远离方向对应。若发现所有目标都挤在零多普勒附近,通常是多普勒 FFT 未做 fftshift 或 chirp 间相位未正确累积;若距离维出现镜像,则可能是 I/Q 通道顺序颠倒或实数 FFT 未做对称处理。

另一个常见问题是定点溢出。距离 FFT 后幅度可能增长 N 倍,若不做缩放,16 位定点会饱和。S32R 的 BBE32 支持块浮点(block floating point),在 FFT 过程中动态调整指数,兼顾动态范围和精度。配置时应根据前端增益和 ADC 满量程合理设置输入缩放因子,并在 RDM 输出端检查是否有大面积饱和区域。

多普勒 FFT 前不要对慢时间维加窗,除非明确需要抑制多普勒旁瓣。加窗会展宽多普勒主瓣,降低速度分辨率,对近距离慢速目标的分辨不利。

把上述链路映射到 S32R 时,核心原则是“让数据靠近计算单元”。ADC 数据经 DMA 直接进入 SPU 本地 SRAM,距离 FFT 和多普勒 FFT 都在 BBE32 上完成,中间结果不落外部 DDR。只有在 RDM 输出后才通过 DMA 送到 CPU 做 CFAR 和跟踪。这样做的收益是内存带宽占用降低一个数量级,帧处理时间从毫秒级压缩到百微秒级,为后续多帧跟踪留出充足预算。