卡尔曼滤波器中的协方差矩阵 (P) 如何根据测量和状态估计进行更新?

How does covariance matrix (P) in Kalman filter get updated in relation to measurements and state estimate?

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

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

你没有遗漏任何东西。

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

当观测值以恒定速率出现,并且始终是同一组观测值时,P 将趋于稳定状态,原则上可以提前计算。

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

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