4. 雷达信号预处理

雷达原始中频(IF)采样数据在进入手势识别或微动检测算法之前,必须经过一条固定的预处理链。这条链的核心任务是把混叠在一起的“距离信息”和“速度信息”分离出来,同时压制两类干扰:一类是收发链路与ADC引入的直流偏移,另一类是墙面、桌面、机壳等静止物体反射形成的静态杂波。本节按信号实际流经的顺序,讲清每一级的数学含义、实现方式与可观察的结果。

一、直流偏移的来源与消除

XENSIV这类FMCW雷达的IF信号是差频信号,理想情况下应围绕零均值振荡。但实际中,混频器本振泄漏、LNA失调、ADC偏置都会在时域采样上叠加一个近似恒定的分量。这个分量在后续FFT中会集中落在零频(第0个bin),表现为一个很高的尖峰,既抬高底噪,又可能掩盖近距离目标的真实回波。

消除方法很直接:对每个chirp的采样序列减去其均值。设第m个chirp的第n个采样为 x[m,n],则去直流后为 x'[m,n] = x[m,n] − mean_n(x[m,n])。工程上更常用“逐chirp去均值”而非全局去均值,因为直流偏移会随温度和时间缓慢漂移,逐chirp处理能跟踪这种漂移。若雷达支持I/Q双通道,应分别对I路和Q路去均值,避免破坏复信号的相位关系。

判断去直流是否有效:对去直流前后的同一帧数据做距离FFT,观察第0个bin的幅度。有效消除后,零频尖峰应下降20 dB以上,且不再随帧间漂移。

二、静态杂波抑制

去直流只处理了零频附近的恒定分量,但墙面、家具等静止物体在距离维上仍会形成稳定的强反射。这些反射在慢时间维(跨chirp)上几乎不变,而手势、呼吸、心跳等目标在慢时间维上是有变化的。因此静态杂波抑制的本质是:在慢时间维上做高通或差分,保留变化分量。

最常用的实现是“慢时间均值相消”:对每个距离bin,沿chirp维求均值,再从每个chirp中减去该均值。设距离FFT后第k个距离bin、第m个chirp的复值为 R[k,m],则抑制后为 R'[k,m] = R[k,m] − mean_m(R[k,m])。这等价于一个截止频率极低的高通滤波器,能有效压制静止目标,同时保留运动目标的多普勒分量。

需要注意两点:第一,均值相消会同时削弱慢速目标(如缓慢抬手),若应用侧重微动,可改用一阶差分 R'[k,m] = R[k,m] − R[k,m−1],其高通特性更温和;第二,抑制应在距离FFT之后、多普勒FFT之前进行,因为距离维已经完成了空间分离,逐距离bin处理不会引入距离耦合。

三、距离FFT与多普勒FFT的实现

FMCW雷达的原始数据是二维矩阵:快时间维(一个chirp内的采样)和慢时间维(多个chirp)。距离FFT沿快时间维做,把差频映射为距离;多普勒FFT沿慢时间维做,把chirp间的相位变化映射为速度。

距离FFT的实现要点:对每个chirp的N个采样加窗(常用Hamming或Blackman),再做N点FFT。距离分辨率由带宽决定,ΔR = c/(2B)。例如B = 1 GHz时,ΔR ≈ 15 cm。第k个bin对应的距离为 R_k = k·c/(2B·N)(单边谱)。若采样率不满足Nyquist,需先做抗混叠或调整chirp斜率。

多普勒FFT的实现要点:对每个距离bin,沿M个chirp加窗后做M点FFT。多普勒分辨率 Δv = λ/(2·M·Tc),其中Tc为chirp重复周期。第p个bin对应的速度 v_p = p·λ/(2·M·Tc),p取正负对称范围。由于FFT输出是双边谱,实际速度范围是 [−λ/(4Tc), +λ/(4Tc)],超出即产生速度模糊。

# 伪代码:完整预处理链
for each frame:
    raw = read_frame()                    # 形状 [M, N],M个chirp,N个采样
    raw = raw - raw.mean(axis=1, keepdims=True)   # 逐chirp去直流
    win_range = hamming(N)
    range_fft = fft(raw * win_range, axis=1)      # 距离FFT
    range_fft = range_fft[:, :N//2]               # 取单边谱
    clutter_removed = range_fft - range_fft.mean(axis=0, keepdims=True)  # 静态杂波抑制
    win_doppler = hamming(M)
    doppler_fft = fft(clutter_removed * win_doppler[:, None], axis=0)    # 多普勒FFT
    doppler_fft = fftshift(doppler_fft, axes=0)   # 零频移到中心
    rd_map = abs(doppler_fft)                     # 距离-多普勒图

最终得到的距离-多普勒图(RD Map)是一个二维幅度矩阵,横轴为距离,纵轴为速度。静止杂波被压制后,运动目标会以亮斑形式出现在对应的距离和速度位置上。手势识别通常在这个RD Map上提取特征,而不是直接使用原始时域数据。

雷达信号预处理链:从原始IF采样到距离-多普勒图 原始IF采样 矩阵 [M, N] M个chirp × N采样 直流偏移消除 逐chirp减均值 x' = x − mean(x) 距离FFT 沿快时间维加窗FFT ΔR = c/(2B) 静态杂波抑制 慢时间维均值相消 R' = R − mean_m(R) 多普勒FFT 沿慢时间维加窗FFT Δv = λ/(2·M·Tc) 距离-多普勒图 (RD Map) 横轴:距离 bin 纵轴:速度 bin(fftshift后零频居中) 亮斑 = 运动目标 关键参数示例 带宽 B = 1 GHz → ΔR ≈ 15 cm chirp数 M = 64 → 速度分辨率 chirp周期 Tc = 100 μs λ = 5 mm (60 GHz) → v_max ≈ ±12.5 m/s 结果判读 • 零频尖峰下降 >20 dB → 去直流有效 • 静止目标消失,运动目标保留 → 杂波抑制有效 • RD图上亮斑位置对应目标距离与速度

四、实现中的常见问题与判断依据

第一,去直流与杂波抑制的顺序不能颠倒。若先做杂波抑制,直流分量会被当作“静止目标”一并处理,但去直流仍应保留,因为直流偏移在距离FFT后会扩散到多个bin,仅靠慢时间均值相消无法完全清除。

第二,加窗是必要的。矩形窗会导致距离旁瓣和多普勒旁瓣,强目标的旁瓣可能掩盖弱目标。Hamming窗可将旁瓣压低约40 dB,代价是主瓣展宽约1.3倍,距离分辨率略有下降。若应用对分辨率要求极高,可选用Blackman窗,但主瓣更宽。

第三,多普勒FFT后的fftshift不可省略。FFT输出零频在第一个bin,正负速度分列两端。fftshift将零频移到中心,使RD图直观可读。若不做fftshift,速度轴会出现“正负颠倒”的视觉误导。

第四,速度模糊的判断。当目标速度超过 v_max = λ/(4Tc) 时,会在RD图上出现折叠。例如Tc = 100 μs、λ = 5 mm时,v_max ≈ 12.5 m/s。手势速度通常远低于此,但快速挥手仍可能接近边界,此时可减小Tc或使用多PRF解模糊。

整条预处理链的输入是原始IF采样矩阵,输出是距离-多普勒图。去直流解决零频污染,杂波抑制解决静止目标遮蔽,距离FFT和多普勒FFT分别完成距离与速度的维度分离。四步的顺序、加窗选择和fftshift处理,共同决定了最终RD图的质量和可读性。