首页 > 解决方案 > 卡尔曼滤波器中的协方差矩阵 (P) 如何根据测量值和状态估计更新?

问题描述

我正在用 C++ 实现基于卡尔曼滤波器的 AHRS。过滤器的方程式对我来说有些奇怪。

在此处输入图像描述

我找不到实际更新 P(协方差)矩阵以表示预测不确定性的部分。在“预测”步骤中,P 估计值是根据其先前的值 A 和 Q 计算的。据我所知,A(系统矩阵)和 Q(噪声协方差)是恒定的。然后在“正确”期间,根据 K、H 和预测 P 计算 P。H(观察矩阵)是常数,因此影响 P 的唯一变量是 K(卡尔曼增益)。但是 K 是根据预测的 P、H 和 R(观察噪声)计算得出的,它们要么是常数,要么是 P 本身。那么使 P 与 x 相关的方程部分在哪里呢?对我来说,似乎 P 在这里递归循环仅取决于 P 的常量和初始值。这没有任何意义。我错过了什么?

标签: filteringsignal-processingsystemkalman-filter

解决方案


你没有错过任何东西。

令人惊讶的是,线性卡尔曼滤波器中的状态误差协方差矩阵 (P) 确实不依赖于数据 (z)。减少意外的一种方法是注意协方差的含义:考虑到您使用的模型(实际上是 A、Q 和 H、R)是准确的,您应该处于估计状态的不确定性。这并不是说:这是不确定性。通过明智地调整 Q 和 R,您可以任意更改 P。特别是,您不应将 P 解释为“质量”数字,而应查看观察残差。例如,您可以通过减小 R 来使 P 更小。但是,与计算出的 sd 相比,残差会更大。

当观察以恒定的速率进入时,并且始终是相同的一组观察,P 将趋于稳定状态,原则上可以提前计算。

然而,当您在每次观察之间有不同的时间和不同的观察集时,应用卡尔曼滤波器没有困难,例如,如果您有具有不同采样周期的各种传感器系统。在这种情况下,您将看到 P 的更多变化,尽管原则上这可以提前计算。

此外,卡尔曼滤波器可以扩展(以各种方式,例如扩展卡尔曼滤波器和无迹卡尔曼滤波器)以处理非线性动力学和非线性观察。在这种情况下,因为转移矩阵 (A) 和观察模型矩阵 (H) 具有状态依赖性,所以 P 也是如此。


推荐阅读