我正在学习Kalman过滤器,并从Kalman过滤器应用程序-康奈尔大学(Calman Filter Applications-Cornell University)中实现示例。

我已经实现了示例2,该示例对一个简单的水箱进行了建模,并以恒定的速率填充水。我们仅测量罐的液位,而卡尔曼滤波器应推断出填充率。



根据模型,填充率是一个常数,所以我假设随着时间的流逝,卡尔曼滤波器将在正确的填充率上越来越准确地收敛(并且噪声越来越小)。但是,填充速率中的噪声量似乎在最初的几次迭代后从未减少:



此图显示了状态向量的填充率部分如何变化在仿真的1000次迭代过程中。

调整测量方差矩阵似乎对填充率噪声的影响很小。

此外,卡尔曼增益矢量和在整个仿真过程中,状态方差矩阵似乎都是恒定的。我以为状态方差会随着过滤器对其状态估计值越来越有信心而减小。 -在这种情况下,卡尔曼增益向量和状态方差矩阵是否应随时间变化?

评论

它们通常会很快收敛。请更新有关该数据大小的一些详细信息。

@NKN-增加了迭代次数。

我猜图的行为表明,在实现中的某个地方您需要修正错误。

#1 楼

假设一个常数Kalman滤波器$ x_n = Gx_ {n-1} + \ omega $,其中$ \ omega \ sim \ mathrm {N}(0,W)$和$ y_n = Fx_n + \ nu $,其中$ \ nu \ sim \ mathrm {N}(0,V)$和初始状态$ x_0 \ sim \ mathrm {N}(m_0,C_0)$,其中$ C_0 $是初始状态方差。然后,状态协方差矩阵$ C_0,C_1,\ dots,C_n $的序列收敛到一个常数协方差矩阵$ C> 0 $(如果系统可观察到,则$ n \ to \ infty $),并且$ C $是一个函数系统和测量协方差矩阵$ W $和$ V $的总和(即,仅取决于信噪比)。卡尔曼增益也收敛到常数矩阵。该收敛过程仅需几个步骤即可完成。

总而言之,状态协方差矩阵$ C_n $不会随时间无限期地减小,它会减小直到达到极限常数协方差矩阵$ C> 0 $为止。实际上,甚至不确定$ C_n $是否会减少!如果$ C_0
请参见以下参考资料的第二章以获取证明:贝叶斯预测和动态模型,通过韦斯特和哈里森

#2 楼

您的图表实际上指示了我期望看到的图像,但是可能存在一些问题。现在,让我们假设您已经完美实现了它。


填充率是一个常数,所以我假设随着时间的推移,卡尔曼滤波器会越来越准确地收敛


您的卡尔曼滤波器是否知道填充率恒定?在给定大量数据的情况下,估算填充率实际上非常容易,但是可以尽快估算填充率的功能非常强大。

您的图形看起来从零开始,然后响了三遍,收敛非常快。此时,它只是对注入的噪声做出响应。

但是,诀窍是使用Kalman增益来平衡当前估算与传入数据之间的平衡。数据越嘈杂,您越需要采用估算值。但是,更喜欢它意味着您不会很快收敛(因为您实际上是在告诉过滤器填充率不会很快变化。)

要测试的两项:

1.)滤波器正在接收带有附加噪声的测量z。接收该信号,并将其导数绘制在估计值之上。查看信号中有多少噪声。

2.)在仿真过程的一半,将填充率提高2倍,并查看滤波器的响应方式。然后使用K中的值(将其远离计算出的最佳值)并查看其行为。

评论


$ \ begingroup $
过滤器具有2x1状态向量(电平和速率)。我猜想它“知道”速率恒定的方式是从过程矩阵中的零开始的。我以为卡尔曼滤波器应该是最优的。我可以轻松地编写一个收敛于较低噪声填充率的滤波器。这使我认为我实现了卡尔曼滤波器是错误的。
$ \ endgroup $
– Rocketmagnet
2014年4月27日在11:03

$ \ begingroup $
我对收敛速度的关注不如对持续改进收敛的关注。我不介意滤波器需要花费更长的时间,但是它使我感到困扰,即在前20次左右的迭代之后,噪声量保持恒定。
$ \ endgroup $
– Rocketmagnet
2014年4月27日上午11:10

$ \ begingroup $
我终于解决了。正是由于过程差异导致过滤器无法收敛。一旦将其设置为零,它就会更好地工作。
$ \ endgroup $
– Rocketmagnet
14年4月28日在16:30

#3 楼

过滤器停止收敛于解的原因是由于过程方差矩阵Q。

此矩阵告诉Kalman过滤器模型本身有多不完善。如果矩阵仅包含零,则告诉过滤器该模型是完美的,但如果它包含非零,则表明该模型不能完全被信任,应该对模型赋予更多权重。测量。这将限制过滤器的收敛。