3、雷达数据表示:距离-时间图、距离-多普勒图、微多普勒特征、时频分析

好,咱们进入正题。雷达数据怎么表示,这事儿我琢磨了挺久。你想想看,雷达回波本质上就是个时间序列,但直接拿原始信号去训练深度学习模型,效果往往不理想。为什么?因为原始信号里信息太杂,噪声、杂波、目标特征全混在一起。所以,我们需要把数据“翻译”成更适合网络理解的形式。

我个人习惯把雷达数据表示分成四大类:距离-时间图、距离-多普勒图、微多普勒特征,还有时频分析。每种表示都有它的脾气,咱们一个一个聊。

3.1 距离-时间图(Range-Time Map)

这个最简单,也最直观。横轴是时间,纵轴是距离,每个像素点的亮度代表回波强度。说白了,就是看目标在距离上怎么随时间移动。

我在项目中遇到过一个问题:用距离-时间图做行人检测,结果模型老是误检。后来发现,是因为雷达安装位置有轻微震动,导致静止背景在距离-时间图上出现了“伪运动”。嗯,这里要注意,预处理时一定要做运动补偿。

关键点:距离-时间图适合观察目标的整体运动趋势,比如车辆靠近、远离,或者行人走动。但它对微小的运动细节不敏感。

举个例子,一个行人从50米处走向雷达,距离-时间图上就是一条斜线。斜率的正负代表靠近还是远离,斜率大小代表速度。但如果你想知道这个行人有没有挥手、有没有背包,距离-时间图就无能为力了。

3.2 距离-多普勒图(Range-Doppler Map)

这个就厉害了。距离-多普勒图同时给出了目标的距离和径向速度信息。横轴是多普勒频率(对应速度),纵轴是距离,亮度代表回波强度。

我建议你把这个图当作雷达目标分类的“标配”。为什么?因为大多数目标都有独特的距离-速度分布模式。比如:

  • 行人:在距离-多普勒图上呈现为“一团”,因为行人身体各部分运动速度不一致。
  • 车辆:呈现为“一个点”或“一条短线”,因为车辆整体运动速度一致。
  • 无人机:呈现为“多个点”,因为旋翼的旋转会产生额外的多普勒分量。

避坑指南:我曾经在项目里直接用原始距离-多普勒图训练CNN,结果效果很差。后来发现,是因为动态范围太大——强目标把弱目标完全淹没了。解决办法是:做对数压缩,或者用分位数归一化。你试试看,效果立竿见影。

生成距离-多普勒图,通常用二维FFT。代码大概长这样:

# 假设 radar_data 是快时间-慢时间矩阵
# 快时间维度对应距离,慢时间维度对应脉冲数

# 第一步:对快时间做FFT,得到距离信息
range_fft = np.fft.fft(radar_data, axis=0)

# 第二步:对慢时间做FFT,得到多普勒信息
range_doppler = np.fft.fftshift(np.fft.fft(range_fft, axis=1), axes=1)

# 第三步:取幅度,做对数压缩
rd_map = 20 * np.log10(np.abs(range_doppler) + 1e-6)

3.3 微多普勒特征(Micro-Doppler Signature)

这个是我个人觉得最有意思的部分。微多普勒效应,说白了就是目标上微小部件的振动或旋转,会在主多普勒频率周围产生“边带”。比如:

  • 行人走路时,手臂摆动会产生微多普勒
  • 无人机旋翼旋转会产生微多普勒
  • 车辆发动机振动也会产生微多普勒

微多普勒特征通常从距离-多普勒图中提取。具体做法是:先找到目标所在的距离单元,然后提取该距离单元的多普勒频谱随时间的变化。

为什么重要?因为微多普勒特征是目标的“指纹”。两个外形相似的目标,可能因为内部结构不同,微多普勒特征完全不同。我在做无人机和鸟类分类时,就是靠微多普勒特征把准确率从75%提到了92%。

提取微多普勒特征,我常用的方法是:

  1. 对每个距离单元,提取多普勒频谱
  2. 找到目标所在的距离单元(通常是能量最大的那个)
  3. 对该距离单元的多普勒频谱做短时傅里叶变换(STFT),得到微多普勒时频图

3.4 时频分析(Time-Frequency Analysis)

时频分析,说白了就是看信号的频率成分怎么随时间变化。对于雷达目标分类,最常用的是短时傅里叶变换(STFT)和小波变换。

STFT:把信号切成一段一段,对每一段做FFT。窗口越短,时间分辨率越高,但频率分辨率越低。这是个 trade-off。

小波变换:用不同尺度的母小波去匹配信号。低频部分用宽窗口,高频部分用窄窗口。我个人觉得,对于微多普勒分析,小波变换比STFT更合适,因为它能同时捕捉到慢速的手臂摆动和快速的旋翼旋转。

注意:时频分析的计算量比较大。如果你用STFT,窗口长度和重叠率要仔细调。我建议你先用默认参数跑一遍,看看效果,再根据结果调整。别一上来就追求高分辨率,计算时间会让你崩溃的。

举个例子,行人走路的微多普勒时频图,你会看到:

  • 主多普勒频率(躯干运动)是一条平滑的曲线
  • 手臂摆动会产生周期性的频率调制,在主频率上下波动
  • 腿部的运动也会产生类似但幅度较小的调制

嗯,说到这里,我想起一个项目。当时我们要区分跑步的人和走路的人。单纯看距离-多普勒图,两者差别不大。但一看微多普勒时频图,区别就出来了:跑步时手臂摆动频率更高,幅度更大,而且躯干多普勒频率的波动也更剧烈。

实用技巧:如果你用深度学习做分类,我建议你把多种数据表示融合起来。比如:把距离-多普勒图和微多普勒时频图作为两个通道输入网络。我在一个项目里试过,融合后的准确率比单用任何一种都高5-8%。

最后总结一下这四种表示:

数据表示 维度 主要信息 适用场景
距离-时间图 2D 目标距离随时间变化 运动轨迹分析、目标检测
距离-多普勒图 2D 目标距离和径向速度 目标分类、速度估计
微多普勒特征 1D/2D 目标内部微小运动 精细分类(人/车/无人机)
时频分析 2D 频率随时间变化 微多普勒分析、运动模式识别

我个人建议,刚开始做雷达目标分类时,先从距离-多普勒图入手。它信息量够大,计算量适中,而且大多数深度学习模型都能直接处理。等你把基础打牢了,再慢慢加入微多普勒和时频分析,效果会更好。