卡尔曼滤波算法的工作原理如下:


初始化$ \ hat {\ textbf {x}} _ {0 | 0} $和$ \ textbf {P} _ {0 | 0} $。

每次迭代$ k = 1,\ dots,n $

预测

预测(先验)状态估计$$ \帽子{\ textbf {x}} _ {k | k-1} =
\ textbf {F} _ {k} \ hat {\ textbf {x}} _ {k-1 | k-1} + \ textbf {B} _ {k}
\ textbf {u} _ {k} $$
预测(先验)估计协方差$$
\ textbf {P} _ {k | k-1} = \ textbf {F} _ {k} \ textbf {P} _ {k-1 | k-1}
\ textbf {F} _ {k} ^ {\ text {T}} + \ textbf {Q} _ {k} $$
更新

创新或测量残差$$ \ tilde {\ textbf {y}} _ k =
\ textbf {z} _k-\ textbf {H} _k \ hat {\ textbf {x}} _ {k | k-1} $$创新(或
残差)协方差$$ \ textbf {S} _k = \ textbf {H} _k
\ textbf {P} _ {k | k-1} \ textbf {H} _k ^ \ text {T} + \ textbf {R} _k $$最佳
卡尔曼增益$$ \ textbf { K} _k =
\ textbf {P} _ {k | k-1} \ textbf {H} _k ^ \ text {T} \ textbf {S} _k ^ {-1} $$
已更新(后验)状态估算$$ \ hat {\ textbf {x}} _ {k | k} =
\ hat {\ textbf {x}} _ {k | k-1} + \ textbf {K} _k \ tilde {\ textbf {y}} _ k $$
更新(后验)估计协方差$$ \ textbf {P} _ {k | k} =(I-
\ textbf {K} _k \ textbf {H} _k)\ textbf {P} _ {k | k-1} $$


卡尔曼增益$ K_k $表示误差$ \ tilde {\ textbf {y}} _ k $相对于先前估计$ \ hat {\ textbf {x}} _ {k | k-1} $的相对重要性。

我想知道如何直观地理解卡尔曼增益$ K_k $的公式吗?考虑状态和输出为标量的情况,为什么增益较大,而


$ \ textbf {P} _ {k | k-1} $较大
$ \ textbf {H} _k $较大
$ \ textbf {S} _k $较小?

谢谢!

评论

这是一个很难正确回答的问题。我尝试过,但自己的答案不服。基本上,增益控制着您对估计值的信任程度,但是我无法解释该增益是如何符合的。

我目前正在使用卡尔曼滤波器,并且需要跟踪不同滤波器实现的增益变化。这里有没有人知道如何可视化(绘制)N次迭代的卡尔曼增益?

@Laila:请不要发布您的问题作为答案。请使用“提问”按钮提问。这不是讨论站点。

#1 楼

我找到了一种直观思考卡尔曼增益$ K $的好方法。如果您这样写$ K $

$ \ displaystyle \ quad \ \ bf {K_k} = \ bf {P_k ^-\,H_k ^ {\ rm T}(H_k P_k ^-\, H_k ^ {\ rm T} + R_k)^ {-1}}
= \ bf {\ frac {P_k ^-\,H_k ^ {\ rm T}} {H_k P_k ^-\,H_k ^ { \ rm T} + R_k}} $

您将意识到,矩阵的相对大小($ R_k $)和($ P_k $)控制着滤波器使用预测状态估计值($ x_ {k}⁻$)和测量值($ỹ_k$)。

$ \ displaystyle \ quad \
\ lim \ limits _ {\ bf {R_k \ to 0}}} \ bf { {P_k ^-\,H_k ^ {\ rm T}} \ over \
{H_k P_k ^-\,H_k ^ {\ rm T} + R_k}} \
= \ bf {H_k ^ {-1}} $

$ \ displaystyle \ quad \
\ lim \ limits _ {\ bf {P_k \ to 0}}} \ bf {{P_k ^-\,H_k ^ { \ rm T}} \ over \
{H_k P_k ^-\,H_k ^ {\ rm T} + R_k}} \
= \ bf 0 $

测量更新公式中的第一个极限
$ \ displaystyle \ quad \
\ bf {\ hat x_k} = \ bf {x_k ^-} + \ bf {K_k}(\ bf { \ tilde y_k}-\ bf {H_k} \ bf {x_k ^-})$

表示当$ R $的大小较小时,意味着t如果测量是准确的,则状态估计值主要取决于测量值。

如果准确知道状态,则$ HP ^⁻H ^ T $与$ R $相比很小,并且过滤器大部分忽略依赖于先前状态($x_k⁻$)得出的预测的度量。

评论


$ \ begingroup $
谢谢!如果我是正确的话,相对于$ H_k $,$ K_k $不是单调的。
$ \ endgroup $
– Tim
2012年6月6日11:00



#2 楼

卡尔曼增益告诉您通过给定测量值我要改变多少估算值。

$ {\ bf S} _k $是度量$ {\ bf z} _k $的估计协方差矩阵。这告诉我们测量中的“可变性”。如果太大,则意味着度量“变化”很多。因此,您对这些测量的信心很低。另一方面,如果$ {\ bf S} _k $小,变异性低,我们对测量的信心就会增加。当我们对测量有信心时,就有信心所获得的信息足以使我们更新/更改状态估计。因此,卡尔曼增益较高。

$ {\ bf P} _k $是估计的状态协方差矩阵。这告诉我们状态“ $ {\ bf x} _k $”的“可变性”。如果$ {\ bf P} _k $大,则意味着状态会发生很大变化。因此,您需要能够通过新的度量来更改估算值。结果,卡尔曼增益更高。

相反,如果$ {\ bf P} _k $很小,那么您知道状态不会有太大变化,因此您不想每次都改变太多估计值瞬间。 @Jav_Rock的答案说,如果$ {\ bf P} _k \ rightarrow 0 $,则$ K \ rightarrow 0 $。换句话说,他暗示,如果您认为自己的状态不再变化,则不要尝试更改估计值。

#3 楼

Jav_Rock明白了。实际上,如果您这样写$ \ bf {K_k} $

$ \ displaystyle \ quad \ \ bf {K_k} = \ bf {P_k ^-\,H_k ^ {\ rm T}(H_k P_k ^-\,H_k ^ {\ rm T} + R_k)^ {-1}}
= \ bf {H_k ^-\ frac {H_kP_k ^-\,H_k ^ {\ rm T}} {H_k P_k ^-\,H_k ^ {\ rm T} + R_k}} $

分数的分子表示从模型传播的不确定性,而$ \ bf {R_k} $表示不确定性从测量。因此,分数的值代表我们应该信任测量值的程度,如Jav_Rock所述。

对于$ \ bf {H_k ^-} $,它只是将观测值转换回了状态,因为它是我们要更新的状态,而不是观察结果。

总结起来,增益$ \ bf {K_k} $计算我们应该从观察中进行多少校正并转换将观察的校正返回到状态校正,从而导致状态估计值的更新:

$ \ displaystyle \ quad \
\ bf {\ hat x_k} = \ bf {x_k ^ -} + \ bf {K_k}(\ bf {\ tilde y_k}-\ bf {H_k} \ bf {x_k ^-})$

#4 楼

我正在研究卡尔曼滤波器(KF)算法。我观察到,卡尔曼增益与算法的收敛性有关,即算法校正和最小化残差的速度。高到可以给你一个近似值。