Kalman Filter 卡尔曼滤波详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


数据融合

引入例子,当通过俩方法测量一物体质量时,结果和对应的方差为 z 1 z_1 z1 z 2 z_2 z2 ,对应的方差是 δ 1 和 δ 2 \delta_1 和 \delta_2 δ1δ2, 数据融合是通过这俩个数据来估计真实值。
z = z 1 + k ( z 2 − z 1 ) z = z_1 + k(z_2 - z_1) z=z1+k(z2z1)
求k使得 δ z \delta_z δz 最小
δ z 2 = V a r ( z 1 + k ( z 2 − z 1 ) ) = V a r ( ( 1 − k ) z 1 ) + V a r ( k z 2 ) = ( 1 − k ) 2 v a r ( z 1 ) + k 2 V a r ( z 1 ) \delta_z ^ 2 = Var(z_1 + k(z_2-z_1))\\ =Var((1-k)z_1)+Var(kz_2)\\ =(1-k)^2var(z1) + k^2Var(z_1) δz2=Var(z1+k(z2z1))=Var((1k)z1)+Var(kz2)=(1k)2var(z1)+k2Var(z1)
然后利用导数为零求出
k = δ 1 δ 1 2 + δ 2 2 k=\frac{\delta_1}{\delta_1^2 + \delta_2^2} k=δ12+δ22δ1

协方差矩阵

三个变量的协方差矩阵形式如下
P = [ δ 1 2 δ 1 δ 2 δ 1 δ 3 δ 1 δ 2 δ 2 2 δ 2 δ 3 δ 1 δ 3 δ 2 δ 3 δ 3 2 ] P= \left[\begin{matrix} \delta_1^2&\delta_1\delta_2&\delta_1\delta_3\\ \delta_1\delta_2&\delta_2^2&\delta_2\delta_3\\ \delta_1\delta_3&\delta_2\delta_3&\delta_3^2 \end{matrix}\right] P= δ12δ1δ2δ1δ3δ1δ2δ22δ2δ3δ1δ3δ2δ3δ32
方差和协方差在一个矩阵表现出来,体现了变量之间的联动关系

δ 1 δ 2 \delta_1\delta_2 δ1δ2为正说明,俩变量正相关,反正负相关.

状态转移方程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DzU4hO6w-1682312199872)(C:\Users\家有二乔\AppData\Roaming\Typora\typora-user-images\1666547367785.png)]

引入例子,k为弹簧,B为阻尼器

牛顿定理得 F = m x ¨ + B x ˙ + k x = u , 其中 x ¨ 是加速度, x ˙ 速度, x 是位移 F=m\ddot x + B\dot x + kx = u, 其中 \ddot x是加速度,\dot x 速度, x是位移 F=mx¨+Bx˙+kx=u,其中x¨是加速度,x˙速度,x是位移, 设

x 1 = x x 2 = x ˙ x_1=x\\ x_2=\dot x\\ x1=xx2=x˙
所有
x ˙ 1 = x ˙ = x 2 x ˙ 2 = x ¨ = − B m x 2 − k m x 1 + u m \dot x_1 = \dot x = x_2\\ \dot x_2 = \ddot x = -\frac{B}{m}x_2 -\frac{k}{m}x_1 + \frac{u}{m} x˙1=x˙=x2x˙2=x¨=mBx2mkx1+mu
矩阵的形式
[ x ˙ 1 x ˙ 2 ] = [ 0 1 − k m − B m ] [ x 1 x 2 ] + [ 0 1 m ] u [ z 1 z 2 ] = [ 1 0 0 1 ] [ x 1 x 2 ] \left[ \begin{matrix} \dot x_1\\ \dot x_2 \end{matrix}\right] = \left[\begin{matrix}0&1\\-\frac{k}{m} & -\frac{B} {m}\end{matrix}\right] \left[\begin{matrix}x_1\\x_2 \end{matrix}\right] + \left[\begin{matrix} 0\\\frac{1}{m}\end{matrix}\right] u\\ \left[\begin{matrix}z_1\\z_2\end{matrix}\right]=\left[\begin{matrix}1&0\\0&1\end{matrix}\right] \left[\begin{matrix}x_1\\x_2\end{matrix}\right] [x˙1x˙2]=[0mk1mB][x1x2]+[0m1]u[z1z2]=[1001][x1x2]
得到状态转移方程
X ˙ ( t ) = A X ( t ) + B u Z ( t ) = H X ( t ) \dot X(t) = A X(t) + Bu\\ Z(t)=HX(t) X˙(t)=AX(t)+BuZ(t)=HX(t)
该式为连续的表达,但计算机只能处理线性的问题,所以需要进行离散化
X k = A X k − 1 + B u k − 1 + w k − 1 Z k = H X k + v k X_k = AX_{k-1} +Bu_{k-1} + w_{k-1}\\ Z_k = HX_k + v_k Xk=AXk1+Buk1+wk1Zk=HXk+vk
其中 w k − 1 w_{k-1} wk1为过程误差, v k v_{k} vk为测量误差,都属于自然界的误差,满足期望为0的正态分布

下表k为采样时间,其俩次采样时间差为采样周期,当采样周期 T →   0 T \to \ 0 T 0 , 转变成连续。

卡尔曼滤波

规定 x ^ k − \hat x^-_k x^k为先验误差,即先通过理论方程得到的结果,里面会会有过程误差 w , P ( w ) ∼ ( 0 , Q ) , Q 为过程误差的协方差矩阵 w, P(w) \sim (0, Q), Q为过程误差的协方差矩阵 w,P(w)(0,Q),Q为过程误差的协方差矩阵 x k x_k xk为测量值,即通过仪器等手段测量出来,里面会有机器带有的测量噪声 v , P ( v ) ∼ ( 0 , R ) , R v, P(v) \sim(0, R), R v,P(v)(0,R),R为测量误差协方差矩阵。 x ^ k \hat x_k x^k为最后得估计值,也就是我们所求

由状态转移方程得
x ^ k − = A x ^ k − 1 + B u k − 1 z k = H x k \hat x^-_k = A\hat x_{k-1} +Bu_{k-1}\\ z_k=Hx_k x^k=Ax^k1+Buk1zk=Hxk
由之前讲过得数据融合得到估计值

$ \hat x_k = \hat x^-_k + G(H^-z_k-\hat x^-_k)$

这里使用下面得标准形式 G = k k H G=k_kH G=kkH, k k ∈ [ 0 , H − ] k_k \in [0, H^-] kk[0,H]
x ^ k = x ^ k − + k k ( z k − H x ^ k − ) \hat x_k = \hat x^-_k + k_k(z_k-H\hat x^-_k) x^k=x^k+kk(zkHx^k)
e k = x k − x ^ k e_k=x_k-\hat x_k ek=xkx^k

x k x_k xk为真实值,所以e为后验误差
P ( e ) ∼ ( 0 , P ) , P = E [ e e T ] = [ δ e 1 2 δ e 1 δ e 2 δ e 1 δ e 2 δ e 2 2 ] P(e) \sim(0, P), P = E[e e^T] = \left[\begin{matrix}\delta e_1^2 & \delta e_1 \delta e_2 \\ \delta e_1 \delta e_2 & \delta e_2^2\end{matrix}\right] P(e)(0,P),P=E[eeT]=[δe12δe1δe2δe1δe2δe22]
求后验误差得方差最小也就是求协方差矩阵得迹最小$tr§ = \delta e_1^2 +\delta e_2^2 $最小
p k = E [ e k e k T ] = E [ ( x k − x ^ k ) ( x k − x ^ k ) T ] = P k − − K k H P k − − P k − H T K k T + K k H P k − H T K k T + K k R K k T t r ( p k ) = t r ( p k − ) − 2 t r ( k k H P k − ) + t r ( k k H p k − H T K k T ) + t r ( K k R K k T ) d t r ( p k ) d k k = 0 \begin{aligned} p_k=&E[e_ke_k^T]\\=&E[(x_k-\hat x_k)(x_k-\hat x_k)^T]\\=&P^-_k-K_kHP^-_k-P^-_kH^TK_k^T+K_kHP^-_kH^TK_k^T+K_kRK_k^T\\ tr(p_k)=&tr(p_k^-)-2tr(k_kHP^-_k)+tr(k_kHp_k^-H^TK_k^T)+tr(K_kRK_k^T)\\ \frac{dtr(p_k)}{dk_k} &= 0 \end{aligned} pk===tr(pk)=dkkdtr(pk)E[ekekT]E[(xkx^k)(xkx^k)T]PkKkHPkPkHTKkT+KkHPkHTKkT+KkRKkTtr(pk)2tr(kkHPk)+tr(kkHpkHTKkT)+tr(KkRKkT)=0
最后得到
K k = P k − H T H P k − H T + R K_k=\frac{P^-_kH^T}{HP_k^-H^T+R} Kk=HPkHT+RPkHT
K k 公式还有未知量先验误差协方差 P k − K_k公式还有未知量先验误差协方差P^-_k Kk公式还有未知量先验误差协方差Pk

P k − P^-_k Pk
P k − = E [ e k − e k − T ] = A P k − 1 A T + Q \begin{aligned} P^-_k=&E[e_k^-e^{-T}_k] \\=&AP_{k-1}A^T+Q \end{aligned} Pk==E[ekekT]APk1AT+Q
所以
P k = ( I − k k H ) P k − P_k=(I-k_kH)P^-_k Pk=(IkkH)Pk
到此卡尔曼滤波的5个重要公式都求出来了,总结
预测 先验估计 x ^ k − = A x ^ k − 1 + B u k − 1 先验误差协方差 P k − = A P k − 1 A T + Q 校正 卡尔曼增益 K k = P k − H T H P k − H T + R 后验估计 x ^ k = x ^ k − + k k ( z k − H x ^ k − ) 后验误差协方差 P k = ( I − k k H ) P k − 预测\\先验估计 \hat x^-_k=A\hat x_{k-1} +Bu_{k-1}\\ 先验误差协方差 P^-_k=AP_{k-1}A^T+Q\\ 校正\\ 卡尔曼增益 K_k=\frac{P^-_kH^T}{HP_k^-H^T+R}\\ 后验估计\hat x_k = \hat x^-_k + k_k(z_k-H\hat x^-_k)\\ 后验误差协方差P_k=(I-k_kH)P^-_k 预测先验估计x^k=Ax^k1+Buk1先验误差协方差Pk=APk1AT+Q校正卡尔曼增益Kk=HPkHT+RPkHT后验估计x^k=x^k+kk(zkHx^k)后验误差协方差Pk=(IkkH)Pk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_62491765

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值