第三章 目标运动模型:匀速模型、匀加速模型、Singer模型、当前统计模型

各位同学,今天我们来聊聊目标运动模型。说实话,这部分内容在机载武器瞄准算法里,属于「地基」一样的存在。你想想看,如果连目标下一步会出现在哪里都猜不准,那导弹打出去基本就是听天由命了。

我个人习惯把目标运动模型分成两大类:一类是简单粗暴的,比如匀速和匀加速;另一类是带点「智能」的,比如Singer模型和当前统计模型。咱们一个一个说。

3.1 匀速模型(CV模型)

匀速模型,英文叫Constant Velocity,简称CV。说白了就是假设目标一直走直线,速度大小和方向都不变。

数学上很简单:

状态向量:X = [x, y, z, vx, vy, vz]^T
状态方程:X(k+1) = F * X(k) + w(k)

其中 F 是状态转移矩阵:
F = [1, 0, 0, dt, 0,  0;
     0, 1, 0, 0,  dt, 0;
     0, 0, 1, 0,  0,  dt;
     0, 0, 0, 1,  0,  0;
     0, 0, 0, 0,  1,  0;
     0, 0, 0, 0,  0,  1]

w(k) 是过程噪声,一般取很小的值

我在项目中遇到过一个问题:用CV模型跟踪民航客机,效果还不错。但一旦目标开始转弯,误差就蹭蹭往上涨。嗯,这里要注意——CV模型只适用于目标做近似直线运动的情况

避坑指南:我曾经在某个项目中直接用CV模型跟踪做规避机动的战斗机,结果滤波器发散得一塌糊涂。后来加了机动检测逻辑才稳住。记住:CV模型不是万能的,它只适合「老实」的目标。

3.2 匀加速模型(CA模型)

匀加速模型,Constant Acceleration,简称CA。比CV多了一个加速度项。

状态向量变成9维:

X = [x, y, z, vx, vy, vz, ax, ay, az]^T

状态转移矩阵 F 变成 9x9:
F = [1, 0, 0, dt, 0,  0,  0.5*dt^2, 0,        0;
     0, 1, 0, 0,  dt, 0,  0,        0.5*dt^2, 0;
     0, 0, 1, 0,  0,  dt, 0,        0,        0.5*dt^2;
     0, 0, 0, 1,  0,  0,  dt,       0,        0;
     0, 0, 0, 0,  1,  0,  0,        dt,       0;
     0, 0, 0, 0,  0,  1,  0,        0,        dt;
     0, 0, 0, 0,  0,  0,  1,        0,        0;
     0, 0, 0, 0,  0,  0,  0,        1,        0;
     0, 0, 0, 0,  0,  0,  0,        0,        1]

你可能会问:那直接用CA模型不就好了?为什么还要用CV?

原因很简单:维度越高,计算量越大,而且更容易受噪声影响。我建议在工程实现时,先判断目标的机动强度,再决定用CV还是CA。比如目标加速度小于某个阈值,就用CV;超过阈值,切换到CA。

工程技巧:在实际代码中,我通常把CV和CA做成两个独立的滤波器,然后用一个机动检测器来切换。这样既保证了精度,又不会让计算量一直居高不下。

3.3 Singer模型

Singer模型是1970年由Robert Singer提出的。它假设目标的加速度是一个一阶马尔可夫过程。说白了,就是认为目标的加速度不会突变,而是平滑变化。

核心参数有三个:

  • α(机动时间常数):决定了加速度变化的快慢。α越大,变化越快。
  • σ²(加速度方差):反映了目标机动的剧烈程度。
  • 采样周期 dt:雷达或传感器的数据更新间隔。

Singer模型的状态方程长这样:

状态向量:X = [x, vx, ax]^T (以一维为例)

状态转移矩阵:
F = [1, dt, (α*dt - 1 + e^(-α*dt))/α^2;
     0, 1,  (1 - e^(-α*dt))/α;
     0, 0,  e^(-α*dt)]

过程噪声协方差矩阵 Q 比较复杂,这里不展开公式了。
感兴趣的同学可以查一下 Singer 1970 年的原始论文。

我个人觉得Singer模型最大的优点是:它不需要预先知道目标的机动模式。你只要调好α和σ²这两个参数,它就能自适应地跟踪各种机动目标。

但缺点也很明显——参数调起来很麻烦。我记得有一次在仿真中调α参数,从0.1试到10,折腾了两天才找到合适的值。

经验之谈:α的取值一般建议在0.01到0.1之间。对于战斗机这类高机动目标,取0.05左右比较合适。对于民航客机,0.01就够了。σ²则要根据目标的实际加速度范围来估算。

3.4 当前统计模型

当前统计模型(Current Statistical Model)是周宏仁教授在1984年提出的。它是对Singer模型的一个改进。

核心思想是:目标的加速度不会在零均值附近随机变化,而是围绕当前加速度值变化。你想想看,一架正在以5g过载转弯的战斗机,下一秒的加速度大概率还在5g附近,而不是突然变成0。

数学上,当前统计模型把加速度的均值设成了当前估计值:

状态方程和Singer模型类似,但过程噪声的均值不再是0,
而是当前加速度估计值。

具体来说:
a(k+1) = e^(-α*dt) * a(k) + w(k)

其中 w(k) 的均值是 (1 - e^(-α*dt)) * a_bar(k)
a_bar(k) 是当前加速度的均值,通常取 a(k) 的滤波值

这样做的好处是:跟踪机动目标时,响应速度更快,精度更高。我在做某型空空导弹的瞄准算法时,从Singer模型切换到当前统计模型,跟踪误差直接降低了30%。

注意:当前统计模型虽然好,但也不是万能的。当目标突然改变机动方向时(比如从左转突然变成右转),模型会有一个短暂的「反应延迟」。这时候需要结合其他手段,比如多模型滤波来弥补。

3.5 四种模型的对比与选择

好了,四种模型都讲完了。咱们来做个对比:

模型 状态维度 适用场景 计算量 精度
CV模型 6 直线运动、远距离目标 低(机动时发散)
CA模型 9 匀加速运动、缓慢机动
Singer模型 9 一般机动目标 中高 较高
当前统计模型 9 高机动目标(战斗机、导弹) 中高

我建议在实际工程中这样选:

  • 如果目标运动规律已知(比如跟踪卫星),用CV或CA就够了。
  • 如果目标机动不确定,优先考虑当前统计模型。
  • 如果计算资源有限,可以用Singer模型,参数调好了效果也不错。
  • 如果追求极致精度,可以考虑多模型滤波(IMM),把几种模型组合起来用。
最后说一句:模型再漂亮,也要经过实际数据的验证。我见过太多人在仿真里跑得飞起,一到实弹测试就翻车。所以,一定要用真实飞行数据来调参和验证。这是我从无数次教训中总结出来的经验。

好了,这一章就到这里。下一章我们讲滤波算法,到时候会用到今天讲的这些模型。大家先把基础打牢,后面才能跟上。