当我查看标准方程时,例如 http://en.wikipedia.org/wiki/Kalman_filter#Details
似乎“预测(先验)估计协方差”P_(k|k-1) 以及“更新(后验)估计协方差”P_(k|k) 仅取决于常数参数(F,H,Q,R)和P_(k-1|k-1)的初始值。观察/测量和估计的系统状态或它们之间的误差(x、y、e 等)似乎没有影响。
问题:
1) 这是否意味着一旦选择了初始值,就可以提前计算 P 的 future 值,从而减少实时应用程序的计算负载?
2) P 不应该告诉我们对当前观察或估计的当前信念/信任吗?如果不依赖于他们,这怎么可能?
最佳答案
这是一个很好的观察。给定约束(F、H、Q 和 R 常数),您就可以独立于数据计算 P 的演化。回答您的具体问题:
1) 是的,你可以。但是,如果您打算这样做,则应该预先计算一系列 K_n,因为您不需要 P。有时,始终使用稳态 K 是合适的(需要注意的是,启动时可能需要特殊情况)。每当你制作一个简单的移动平均滤波器时,你基本上都是在制作一个固定增益 KF,只是你没有使用 KF 的机制来选择 K。
2) 这是钦哲基金会的一个要点。 KF设计最重要的部分是噪声建模。您可以通过设置噪声项来告诉滤波器系统的性能。人们经常谈论“调整”KF,但协方差术语具有特定的含义(甚至单位),并直接导致滤波器的性能,正如您所描述的那样。您可以通过测量创新序列 z_n (y_n - H*x_n) 的协方差来检查您是否做得很好,以查看您的 S 项 ( HPH' + R ) 是否正确描述了它。
为了挑战你关于 F、H、Q 和 R 恒定的假设,让我指出它们可能不是恒定的一些原因(并且作者可能会谨慎地将它们写为 F_n、H_n 等来表明这一点):
- F 和 Q 几乎总是具有随时间变化的项。如果您的时间步长不是恒定的,或者您可以跳过一步,则每次都需要更新 F 和 Q。
- 在 EKF 中,F 不是线性的,当您计算 f() 的雅可比行列式时,F 会在每个时间步发生变化。如果 h() 不是线性的,则 H 也类似。
- 您的同变 Q 术语可能取决于所在州。例如,如果您的状态包括角速度和以四元数表示的方向,则角速度噪声影响四元数的方式取决于四元数的当前值。
- 您的 R 项可能会受到状态或测量值的影响。例如。部分测量可能会旋转,从而需要您旋转噪声。或者噪声可能取决于温度。
- 您可以在每次更新时放入不同的测量值(或测量值的子集),根据需要在 H 和 R 中添加和删除。
- 您可能对流程有外部了解,从而可以改变对 Q 的估计(例如,您知道您的机器人已进入沙地,因此更容易滑倒)。
关于initialization - 卡尔曼滤波器: Do I need to compute P in real time? 看来它的演化只取决于它的初始状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27380230/