【问题标题】:How does covariance matrix (P) in Kalman filter get updated in relation to measurements and state estimate?卡尔曼滤波器中的协方差矩阵 (P) 如何根据测量值和状态估计更新?
【发布时间】:2020-08-12 14:45:54
【问题描述】:
我正在用 C++ 实现基于卡尔曼滤波器的 AHRS。过滤器的方程对我来说有些奇怪。
我找不到实际更新 P(协方差)矩阵以表示预测不确定性的部分。
在“预测”步骤中,P 估计值是根据其先前的值 A 和 Q 计算得出的。据我所知,A(系统矩阵)和 Q(噪声协方差)是恒定的。然后在“正确”期间,根据 K、H 和预测 P 计算 P。H(观察矩阵)是常数,因此影响 P 的唯一变量是 K(卡尔曼增益)。但是 K 是根据预测的 P、H 和 R(观察噪声)计算得出的,它们要么是常数,要么是 P 本身。那么使 P 与 x 相关的方程部分在哪里呢?对我来说,似乎 P 在这里递归循环仅取决于 P 的常量和初始值。这没有任何意义。我错过了什么?
【问题讨论】:
标签:
filtering
signal-processing
system
kalman-filter
【解决方案1】:
你没有错过任何东西。
实际上,线性卡尔曼滤波器中的状态误差协方差矩阵 (P) 并不依赖于数据 (z),这可能会让人感到惊讶。减少意外的一种方法是注意协方差的含义:考虑到您使用的模型(实际上是 A、Q 和 H、R)是准确的,您应该处于估计状态的不确定性。这并不是说:这是不确定性。通过明智地调整 Q 和 R,您可以任意更改 P。特别是,您不应将 P 解释为“质量”数字,而应查看观察残差。例如,您可以通过减小 R 来使 P 更小。但是,与计算出的 sd 相比,残差会更大。
当观测值以恒定速率出现并且始终是相同的观测值集时,P 将趋于稳定状态,原则上可以提前计算。
但是,当您在观察之间有不同的时间并且每次观察的集合不同时,应用卡尔曼滤波器没有困难,例如,如果您有不同采样周期的各种传感器系统。在这种情况下,您将看到 P 的更多变化,尽管原则上这可以提前计算。
卡尔曼滤波器可以进一步扩展(以各种方式,例如扩展卡尔曼滤波器和无迹卡尔曼滤波器)以处理非线性动力学和非线性观察。在这种情况下,因为转移矩阵(A)和观察模型矩阵(H)有状态依赖,所以P也有。