使用卡尔曼滤波器估计误差

Posted

技术标签:

【中文标题】使用卡尔曼滤波器估计误差【英文标题】:Estimating error with a Kalman Filter 【发布时间】:2014-12-18 03:19:27 【问题描述】:

我正在向应用程序添加一个简单的一维卡尔曼滤波器,以处理一些嘈杂的输入数据并输出经过清理的结果。

我使用的示例代码来自this tutorial 和this python code 的单变量示例部分。

这对于计算结果值非常有效,但是,当我第一次阅读卡尔曼滤波器时,我的印象是它们也可以用于测量输入中的“误差”多少。

例如,假设我测量的值为 10,但我的输入有大量错误。我的输入数据可能看起来像 6、11、14、5、19、5 等(10 左右的一些高斯分布)。

但假设我切换到噪音较小的测量值,测量值是 9.7、10.3、10.1、10.0、9.8、10.1。

在这两种情况下,卡尔曼滤波器理论上都会收敛到 10 的适当测量值。我希望它也能给我某种数值,估计这些数据流中存在多少误差。

我相信使用卡尔曼滤波器应该是完全可能的,但是,我很难找到描述这个的资源。我该怎么做?

【问题讨论】:

【参考方案1】:

实际上情况恰恰相反:KF 对您的过程噪声的估计完全不受您的数据的影响。如果您查看 KF 的预测/更新步骤,您会发现 P 项永远不会受到您的状态或测量值的影响。它是根据您的对加性过程噪声 Q 的估计和您的对测量噪声 R 的估计来计算的。

如果您有一个数据集并想要对其进行测量,您可以计算其均值和方差(这就是您的状态和过程协方差所代表的内容)。如果您在谈论您的输入,那么您就是在谈论测量样本的方差以设置 R。

如果您的实际输入测量值实际上比预期的噪声小,那么您将获得一个噪声较小的状态,但与您在 R 中正确设置期望值相比,延迟时间更长。

在运行过滤器中,您可以查看您的创新序列(预测和实际测量值之间的差异)并将它们与您预测的创新协方差(通常称为 S,尽管有时直接作为 K 的分母滚动)进行比较。

【讨论】:

谢谢。正如您所想的那样,我将输入的方差与生成的 P 项混淆了,并查看了数学,很困惑 P 如何不受实际输入数据的影响,但现在它更有意义了。【参考方案2】:

卡尔曼滤波器不会测量输入中的“错误”程度。您只会得到估计输出的误差。

为什么不使用online algorithm 来计算输入的方差?

【讨论】:

以上是关于使用卡尔曼滤波器估计误差的主要内容,如果未能解决你的问题,请参考以下文章

基于MATLAB的RSSI 和 PLE 定位算法,并通过卡尔曼滤波器减少非视距误差

卡尔曼滤波器+过程噪声协方差

卡尔曼滤波器实例:进一步讨论自由落体运动

卡尔曼滤波——17.高斯移动

卡尔曼滤波器1——递归算法(笔记篇 + 代码实现)

卡尔曼滤波器1——递归算法(笔记篇 + 代码实现)