接着上一篇文章:https://blog.csdn.net/ZLH_HHHH/article/details/90515377
卡尔曼滤波在原本的 R L S RLS RLS基础上增加了一个线性系统。
卡尔曼滤波应用于下面的系统:
(1) x ( k ) = F ( k − 1 ) x ( k − 1 ) + G ( k − 1 ) u ( k − 1 ) + w ( k − 1 ) x(k)=F(k-1)x(k-1)+G(k-1)u(k-1)+w(k-1)\tag{1} x(k)=F(k−1)x(k−1)+G(k−1)u(k−1)+w(k−1)(1)
(2) y ( k ) = h ( k ) x ( k ) + v ( k ) y(k)=h(k)x(k)+v(k)\tag{2} y(k)=h(k)x(k)+v(k)(2)
其中 w , v w,v w,v是零均值,不相关白噪音。即协方差为 0 0 0.
这里, x x x 就是当前系统的状态,比如速度,位置,温度,等等。
( 1 ) (1) (1)式可以理解为,上一个时刻,系统的一个输入,对系统产生的影响。系统的状态改变。比如突然有外力做工,从新更新状态。但是这个更新是有误差的。
( 2 ) (2) (2)式子,可以认为是测量, h ( k ) h(k) h(k)对应的在 x ( k ) x(k) x(k)状态下的输出 y ( k ) y(k) y(k)被我们测量出来,有一个不可观测的随机误差 v ( k ) v(k) v(k), h , y h,y h,y都是已知的。
经过 ( 1 ) (1) (1)的计算,对 x x x状态进行了一次转移。并被 ( 2 ) (2) (2)式纠正。
动态的系统,之前的 R L S RLS RLS已经不再适用, x ( k − 1 ) x(k-1) x(k−1)的状态在不停改变的。或者说需要修改 R L S RLS RLS算法。
R L S RLS RLS算法关键的一点就是:
P ( k ) = ( H T ( k ) H ( k ) ) − = E ( ( x ^ ( k ) − x ( k ) ) ( x ^ ( k ) − x ( k ) ) T ) P(k)=(H^T(k)H(k))^-=E\Big((\hat x(k) - x(k))(\hat x(k) - x(k))^T\Big) P(k)=(HT(k)H(k))−=E((x^(k)−x(k))(x^(k)−x(k))T)
即, P ( k ) P(k) P(k)是估计 x ^ \hat x x^的协方差。而协防差在 ( 1 ) (1) (1)式状态改变的过程中也被传递了。
这里,由于误差是无偏的,一般认为 E ( x ^ ) = x E(\hat x)=x E(x^)=x
这也就是说:
E ( F ( k − 1 ) x ^ ( k − 1 ) + G ( k − 1 ) u ( k − 1 ) + w ( k − 1 ) ) = F ( k − 1 ) x ( k − 1 ) + G ( k − 1 ) u ( k − 1 ) = x ( k ) = E ( x ^ ( k ) ) E\Big(F(k-1)\hat x(k-1)+G(k-1)u(k-1)+w(k-1)\Big)\\=F(k-1)x(k-1)+G(k-1)u(k-1)=x(k)=E(\hat x(k)) E(F(k−1)x^(k−1)+G(k−1)u(k−1)+w(k−1))=F(k−1)x(k−1)+G(k−1)u(k−1)=x(k)=E(x^(k))
则: E ( x ^ ( k ) − x ( k ) ) = F ( k − 1 ) E ( x ^ ( k − 1 ) − x ( k − 1 ) ) + E ( w ( k − 1 ) ) E(\hat x(k)-x(k))=F(k-1)E(\hat x(k-1)-x(k-1))+E(w(k-1)) E(x^(k)−x(k))=F(k−1)E(x^(k−1)−x(k−1))+E(w(k−1))
那么我们可以根据 k − 1 k-1 k−1时刻以及此时状态转移来估计新的协方差:
P ( k ) = E ( ( x ^ ( k ) − x ( k ) ( x ^ ( k ) − x ( k ) T ) = E ( [ F ( k − 1 ) ( x ^ ( k − 1 ) − x ( k − 1 ) ) + w ( k − 1 ) ] [ F ( k − 1 ) ( x ^ ( k − 1 ) − x ( k − 1 ) ) + w ( k − 1 ) ] T ) = F ( k − 1 ) P ( k − 1 ) F T ( k − 1 ) + Q ( k − 1 ) P(k)=E\Big((\hat x(k)-x(k)(\hat x(k)-x(k)^T\Big)\\ =E\Big ([F(k-1)(\hat x(k-1)-x(k-1))+w(k-1)][F(k-1)(\hat x(k-1)-x(k-1))+w(k-1)]^T\Big)\\ =F(k-1)P(k-1)F^T(k-1)+Q(k-1) P(k)=E((x^(k)−x(k)(x^(k)−x(k)T)=E([F(k−1)(x^(k−1)−x(k−1))+w(k−1)][F(k−1)(x^(k−1)−x(k−1))+w(k−1)]T)=F(k−1)P(k−1)FT(k−1)+Q(k−1)
其中: Q ( k ) = E ( w ( k ) w T ( k ) ) Q(k)=E(w(k)w^T(k)) Q(k)=E(w(k)wT(k))
当我们没有新的观测数据时,利用旧的观测来做一个先验估计 x ( k ) − x(k)^- x(k)−
而通过新的观测纠正后的数据为后验: x ( k ) + x(k)^+ x(k)+
结合 R L S RLS RLS, 得出卡尔曼滤波:
x ( k ) − = F ( k − 1 ) x ( k − 1 ) + + G ( k − 1 ) u ( k − 1 ) P ( k ) − = F ( k − 1 ) P ( k − 1 ) + F T ( k − 1 ) + Q ( k − 1 ) x(k)^-=F(k-1)x(k-1)^++G(k-1)u(k-1)\\ P(k)^-=F(k-1)P(k-1)^+F^T(k-1)+Q(k-1) x(k)−=F(k−1)x(k−1)++G(k−1)u(k−1)P(k)−=F(k−1)P(k−1)+FT(k−1)+Q(k−1)
(RLS) K ( k ) = P ( k ) − h T ( k ) R ( k ) + h ( k ) P ( k ) − h T ( k ) K(k)=\frac{P(k)^-h^T(k)}{R(k)+h(k)P(k)^-h^T(k)}\tag{RLS} K(k)=R(k)+h(k)P(k)−hT(k)P(k)−hT(k)(RLS)
(RLS) P ( k ) + = ( I − K ( k ) h ( k ) ) P ( k ) − P(k)^+=(I-K(k)h(k))P(k)^-\tag{RLS} P(k)+=(I−K(k)h(k))P(k)−(RLS)
(RLS) x ^ ( k ) + = x ^ ( k ) − + K ( k ) ( y ( k ) − h ( k ) x ^ ( k ) − ) \hat x(k)^+ =\hat x(k)^-+K(k)\Big(y(k)-h(k)\hat x(k)^-\Big) \tag{RLS} x^(k)+=x^(k)−+K(k)(y(k)−h(k)x^(k)−)(RLS)
卡尔曼滤波其实就是通过系统状态转移,跟踪了协方差的状态转移。然后从新带入到 R L S RLS RLS更新中.
最关键的还是 P ( k ) P(k) P(k)的属性:
P ( k ) = ( H T ( k ) H ( k ) ) − = E ( ( x ^ − x ) ( x ^ − x ) T ) P(k)=\Big(H^T(k)H(k)\Big)^-=E((\hat x -x)(\hat x - x)^T) P(k)=(HT(k)H(k))−=E((x^−x)(x^−x)T)
P P P的这一属性使得参考系改变时得以根据状态转移矩阵同时被转移。
怎么说呢, 比如,两架飞机, A , B A,B A,B,当 A A A匀加速速运动时,观察到匀加速运动的 B B B。
当 A A A在处理上一时刻状态时,其实自身的状态,也改变了,速度啊,速率,位置什么的,都改变。这个时候使用 ( 1 ) (1) (1)式,进行状态转移,由于 P P P的关键属性,即使 H T H H^TH HTH的逆,又是 x x x的协方差。如此甚好。对 P P P进行一次状态转移。这次转移,是为了使用新的观测数据。来调用 R L S RLS RLS的三段更新。
到这里,对卡尔曼滤波有了一个浅显的认识,嘿嘿。