跳转至

模拟器原理

这个模拟器把一个 3D mesh 转换成合成的 MIMO FMCW 雷达数据。

核心链路是:

3D mesh -> 可见三角面 -> 散射点 -> 原始雷达数据立方体 -> FFT 图

它不是完整电磁场求解器,而是一个透明的几何雷达模拟器,适合学习、调试和早期实验。

对初学者来说,最重要的是把它拆成三层:

  1. 几何层:有哪些表面,在哪里,哪些表面朝向雷达。
  2. 雷达信号层:可见表面如何产生带延迟的复数回波。
  3. FFT 解释层:原始采样如何变成距离、速度和角度图。

这个模拟器就是围绕这三层搭起来的。

1. Mesh 表示目标几何

目标用三角面片网格表示。

每个三角面都有:

  • 三个顶点
  • 一个中心点
  • 一个法向方向
  • 一个面积

模拟器只保留几何信息,不使用纹理、材质、动画或渲染信息。

这就是为什么一个视觉 3D 模型可以变成雷达目标。雷达不关心衣服颜色,也不关心物体纹理。在这个简化模拟器里,它只需要知道有哪些可能反射能量的表面。

使用三角面是因为三角面很容易计算:

  • 三角面有明确中心点
  • 三角面有明确法向
  • 三角面有可计算面积
  • 射线和三角面的相交判断是标准几何问题

2. 目标运动

对每个 chirp,目标 mesh 都会按刚体方式变换。

变换包含两部分:

  • 固定欧拉角旋转
  • 初始位置加上速度乘以 slow time 得到的平移

这意味着目标作为一个整体运动。当前版本不建模关节运动、走路四肢摆动、振动或人体微多普勒。

这是刻意简化。刚体运动更容易看清“目标速度”和“Doppler”之间的关系。如果整个 mesh 朝雷达移动,那么多个 chirp 之间的相位变化会比较一致。以后如果要加人体微多普勒,可以让不同 mesh 部位按不同轨迹运动。

3. 可见面筛选

不是所有三角面都应该贡献雷达回波。

模拟器先去掉法向背向雷达的面。然后做视线遮挡判断:如果从雷达到候选面中心的射线被其他三角面挡住,这个面就被丢弃。

这一步很重要。如果没有它,背面和被遮挡的内部面也会产生不真实的回波。

可见性阶段回答的是一个物理问题:“雷达能不能直接看到这个表面?”

模拟器把雷达相位中心当成观察点。对每个候选面,它检查从雷达到面中心的直线是否被其他三角面挡住。这有点像非常简单的光线追踪,但目标不是渲染图片,而是判断哪些表面允许产生散射。

这一步在大 mesh 上会比较慢,因为每个候选面可能要和很多其他面做相交测试。所以命令行里提供了 --max-faces,用于早期实验时控制面数。

4. 面片级散射近似

每个可见三角面会被转换成一个位于面中心的散射点。

散射强度主要由三部分决定:

  • 三角面面积
  • 入射角
  • 目标整体反射率

面积越大,贡献越大。越正对雷达,贡献越大。背向雷达的面不贡献回波。

这是一个粗略近似,但它能保持模拟器容易解释,也能控制计算量。

这个近似的好处是,把“表面散射问题”变成了“点散射问题”。一旦每个可见面都变成一个有强度的点,信号合成阶段只需要计算距离、延迟和相位。

散射强度公式故意保持简单:

strength ≈ reflectivity * area * incidence

含义是:

  • 面积越大,回波越强
  • 越正对雷达,回波越强
  • 背向雷达的面不贡献回波

5. 通道信号合成

对每个散射点和每个 TX/RX 组合,模拟器会计算:

  • Tx 到散射点的距离
  • 散射点到 Rx 的距离
  • 往返延迟
  • 距离衰减
  • beat frequency
  • 复数相位

所有散射点产生的复指数信号会叠加起来。

最终得到原始雷达数据立方体:

num_adc_samples x num_chirps x (num_tx * num_rx)

这个立方体是项目最核心的数据对象。

每一维回答一个问题:

  • ADC 采样点:一个 chirp 里有哪些 beat frequency?
  • chirp 序列:重复 chirp 之间相位如何变化?
  • 虚拟通道:不同天线位置之间相位如何变化?

在这个阶段,模拟器还没有单独存储“距离”或“速度”对象。这些物理含义是在 FFT 之后解释出来的。

6. FFT 处理

原始数据立方体会经过三次 FFT:

  1. 沿 ADC 采样点做 Range FFT。
  2. 沿 chirp 序列做 Doppler FFT。
  3. 沿 MIMO 虚拟通道做 Angle FFT。

流水线输出:

  • 原始数据立方体
  • 距离 FFT 立方体
  • 距离-速度立方体
  • 距离-速度图
  • 距离-角度图
  • 距离-速度-角度立方体
  • 距离、速度和角度坐标轴

三次 FFT 不是随便做的,它们和雷达测量的三个物理维度一一对应:

FFT 输入维度 物理含义
Range FFT ADC 采样点 延迟 / 距离
Doppler FFT chirp 序列 相位变化 / 速度
Angle FFT 虚拟通道 空间相位 / 角度

这张表是理解代码最快的入口。

7. 多进程

最耗时的部分是对许多 chirp 和许多三角面做信号合成。

模拟器会把 chirp 维度切成连续块。每个 worker 进程计算一个块,主进程再把这些块写回最终数据立方体。

这种方式保持算法简单,同时让较大的示例更容易运行。

重要的是:多进程不改变数学模型。它只改变 chirp 循环的执行方式。串行运行和多进程运行使用的是同一套物理计算。

当前边界

这个模拟器更适合理解第一性原理链路:mesh 目标如何变成合成雷达数据。它不能替代专业雷达仿真软件,也不能替代真实传感器验证。

端到端心智模型

如果只记住一句话,可以记这句:

可见几何表面产生带延迟的复数正弦波;
FFT 把这些正弦波解释成距离、速度和角度。

项目里的其他代码,本质上都是围绕这句话展开的实现细节。