initialization - 卡尔曼滤波器: Do I need to compute P in real time? 看来它的演化只取决于它的初始状态

标签 initialization offline kalman-filter

当我查看标准方程时,例如 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/

相关文章:

ios - Firebase以离线模式启动,不会为子值触发osberve *

javascript - 在 Backbone Marionette 应用程序中设置变量

html - 下载 html 页面供离线使用

JavaScript 检查变量是否存在(已定义/初始化)

c++ - 在构造函数 C++ 标准中修改 const 吗?

javascript - prototype.Function 未在 node.js 中导出

algorithm - 增加迭代次数是否也会增加在卡尔曼滤波器中获得错误输出的机会?

kalman-filter - 仅在给定位置测量值(以及协方差)的情况下实现用于位置跟踪的卡尔曼滤波器

c++ - 来自默认构造函数的神秘 int 值

c++ - 关于时髦数组声明的问题