最详细的卡尔曼滤波推导过程(来源于DR_CAN的笔记整理)

本教程来源于bibili up主DR_CAN的笔记整理,建议读者配合视频食用,视频链接如下:

【卡尔曼滤波器】1_递归算法_Recursive Processing_哔哩哔哩_bilibili

在此非常感谢DR_CAN老师精彩讲解,在此表示崇高的敬意。

1 卡尔曼滤波介绍

卡尔曼滤波算法实际是一个观测器,可以用来估计下一个状态,具有非常好的实时性。

其公式为:

假定我们要对一个未知长度的物体进行测量,每次的测量值为 Z k Z_k Zk,取前 k k k次的平均值作为当前的估计值(最优估计),则可得到以下公式:

x k ^ = Z 1 + Z 2 + . . . . + Z k k = 1 k ( Z 1 + Z 2 + . . . . + Z k − 1 + 1 k Z k = 1 k k − 1 k − 1 ( z 1 + z 2 + . . . . + z k − 1 ) + 1 k z k = k − 1 k x k − 1 ^ + 1 k z k = x k − 1 ^ − 1 k x k − 1 ^ + 1 k z k \begin{aligned} \hat{x_k}&=\frac{Z_1+Z_2+....+Z_k}{k}\\ &=\frac{1}{k}(Z_1+Z_2+....+Z_{k-1}+\frac{1}{k}Z_k\\ &=\frac{1}{k}\frac{k-1}{k-1}(z_1+z_2+....+z_{k-1})+\frac{1}{k}z_k\\ &=\frac{k-1}{k}\hat{x_{k-1}}+\frac{1}{k}z_k\\ &=\hat{x_{k-1}}-\frac{1}{k}\hat{x_{k-1}}+\frac{1}{k}z_k \end{aligned} xk^=kZ1+Z2+....+Zk=k1(Z1+Z2+....+Zk1+k1Zk=k1k1k1(z1+z2+....+zk1)+k1zk=kk1xk1^+k1zk=xk1^k1xk1^+k1zk
整理之后可以得到:

x k ^ = x k − 1 ^ + K k ( Z k − x k − 1 ^ ) (1.1) \hat{x_k}=\hat{x_{k-1}}+K_k(Z_k-\hat{x_{k-1}})\tag{1.1} xk^=xk1^+Kk(Zkxk1^)(1.1)
其中 K k = 1 k K_k=\frac{1}{k} Kk=k1(仅在本示例中等号成立),被称作卡尔曼增益(卡尔曼系数),随着测量次数 k k k的增加可以看到 x k ^ → x k − 1 ^ \hat{x_k}\to{\hat{x_{k-1}}} xk^xk1^,即随着测量次数增加,每次的测量值对最后的最优估计值起作用的效果越来越低,符合基本常识。

在广义的卡尔曼滤波中,卡尔曼增益 K k K_k Kk的值应被如下定义:

K k = e E S T k − 1 e E S T k − 1 − e M E A k (1.2) K_k=\frac{e_{EST_{k-1}}}{e_{EST_{k-1}}-e_{MEA_k}}\tag{1.2} Kk=eESTk1eMEAkeESTk1(1.2)

式中: e E S T k − 1 e_{EST_{k-1}} eESTk1为上一次的估计误差, e M E A k e_{MEA_{k}} eMEAk为当前的测量误差。

可以对式1.2做一个分析,

{  当  e E S T k − 1 ≫ e M E A k 时 K k → 1 x k ^ = x k − 1 ^ + Z k − x k − 1 ^ = z k ①  当  e E S T k − 1 ≪ e M E A k 时 K k → 0 x k ^ = x k − 1 ^ ② \begin{cases} & \text{ 当 } e_{EST_{k-1}}\gg e_{MEA_{k}}\text{时} &K_k\to1 & \hat{x_k}=\hat{x_{k-1}}+Z_k-\hat{x_{k-1}}=z_k &①\\ & \text{ 当 } e_{EST_{k-1}}\ll e_{MEA_{k}}\text{时} &K_k\to0 &\hat{x_k}=\hat{x_{k-1}} &② \end{cases} {  eESTk1eMEAk  eESTk1eMEAkKk1Kk0xk^=xk1^+Zkxk1^=zkxk^=xk1^
①式表明,当前一次(或前几次)的估计误差远大于当前测量误差时候,则其最优估计以当前测量值为准;

②式表明,当前一次(或前几次)的估计误差远小于当前测量误差时候,则其最优估计以前一次(或前几次)的估计值为准。

2 卡尔曼滤波计算过程

step1:计算卡尔曼增益 K k = e E S T k − 1 e E S T k − 1 − e M E A k K_k=\frac{e_{EST_{k-1}}}{e_{EST_{k-1}}-e_{MEA_k}} Kk=eESTk1eMEAkeESTk1

step2:计算当前最优估计 x k ^ = x k − 1 ^ + K k ( Z k − x k − 1 ^ ) \hat{x_k}=\hat{x_{k-1}}+K_k(Z_k-\hat{x_{k-1}}) xk^=xk1^+Kk(Zkxk1^)

step3:更新当前估计误差 e E S T k e_{EST_k} eESTk e E S T k = ( 1 − K k ) × e E S T k − 1 e_{EST_k}=(1-K_k)\times e_{EST_{k-1}} eESTk=(1Kk)×eESTk1,(后面会进行详细推导这个公式)

例如,对一个实际长度 x = 50 m m x=50mm x=50mm(此长度认为是真实长度,是未知的)的物体进行测量,第一次测量的测量值 Z 1 = 51 m m Z_1=51mm Z1=51mm,第0次的最优估计为 x 0 ^ = 40 m m \hat{x_0}=40mm x0^=40mm,第0次的估计误差为 5 m m 5mm 5mm,测量误差为常值 e M E A 1 = 3 m m e_{MEA_1}=3mm eMEA1=3mm。则第一次迭代可得:

k = 1 K k = e E S T 0 e E S T 0 + e M E A 1 = 5 5 + 3 = 0.625 x k ^ = 40 + 0.625 × ( 51 − 40 ) = 46.875 e E S T k = ( 1 − 0.625 ) × 5 = 1.875 \begin{aligned} k=1\qquad K_k&=\frac{e_{EST_0}}{e_{EST_0}+e_{MEA_1}}=\frac{5}{5+3}=0.625\\ \hat{x_k}&=40+0.625\times(51-40)=46.875\\ e_{EST_k}&=(1-0.625)\times5=1.875 \end{aligned} k=1Kkxk^eESTk=eEST0+eMEA1eEST0=5+35=0.625=40+0.625×(5140)=46.875=(10.625)×5=1.875

第二次迭代可得:

k = 2 K k = e E S T 1 e E S T 1 + e M E A 2 = 1.875 1.875 + 3 = 0.3846 x k ^ = 46.875 + 0.3846 × ( 48 − 46.875 ) = 47.308 e E S T k = ( 1 − 0.3846 ) × 1.875 = 1.154 \begin{aligned} k=2\qquad K_k&=\frac{e_{EST_1}}{e_{EST_1}+e_{MEA_2}}=\frac{1.875}{1.875+3}=0.3846\\ \hat{x_k}&=46.875+0.3846\times(48-46.875)=47.308\\ e_{EST_k}&=(1-0.3846)\times1.875=1.154 \end{aligned} k=2Kkxk^eESTk=eEST1+eMEA2eEST1=1.875+31.875=0.3846=46.875+0.3846×(4846.875)=47.308=(10.3846)×1.875=1.154
多次测量,可得到如下表格:
在这里插入图片描述
在这里插入图片描述

可以看到 k < 16 k<16 k<16时候,随着测量次数增大,最优估计 x k ^ \hat{x_k} xk^趋近于真实值50,但当实际测量值增大时(真实值也增大),此时最优估计值无法跟踪,当增大的测量值趋于稳定后(真实值趋于稳定)此时重新设置 x 22 ^ = 86 \hat{x_{22}}=86 x22^=86后,后续的卡尔曼滤波才可以趋于稳定,继续跟踪,这是因为,目前只涉及到卡尔曼滤波的的第一个方程,状态改变的情况暂时未考虑进内,所以呈现目前这种趋势。

3 前期知识准备

3.1 数据融合

举例:假设用两个不同的称来称一个的物体质量。测得其测量值为:
Z 1 = 30 g σ 1 = 2 g Z 2 = 32 g σ 2 = 4 g \begin{aligned} Z_1&=30g \qquad \sigma1=2g\\ Z_2&=32g \qquad \sigma2=4g\\ \end{aligned} Z1Z2=30gσ1=2g=32gσ2=4g
其中 σ \sigma σ为标准差(standard Deviatim),则其测量值满足正态分布。接下来用这两组数据估计真实值 Z ^ \hat{Z} Z^

利用第2节的卡尔曼滤波公式不难求得: Z ^ = Z 1 + K ( Z 2 − Z 1 ) \hat{Z}=Z_1+K(Z_2-Z_1) Z^=Z1+K(Z2Z1)

K ∈ [ 0 , 1 ] K = 0 , Z ^ = Z 1 K = 1 , Z ^ = Z 2 \begin{aligned} K\in[0,1] \qquad K&=0,\hat{Z}=Z_1\\ K&=1,\hat{Z}=Z_2 \end{aligned} K[0,1]KK=0,Z^=Z1=1,Z^=Z2

若得到最优估计,则要使得 Z ^ \hat{Z} Z^的标准差最小,或者说 Z ^ \hat{Z} Z^的方差(Var)最小,则可得出 Z ^ \hat{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 2 ) = ( 1 − K ) 2 σ 1 2 + K 2 σ 2 2 \begin{aligned} \sigma^2_z&=Var(Z_1+K(Z_2-Z_1)\\&=Var[(1-K)Z_1]+Var(KZ_2)\\&=(1-K)^2Var(Z_1)+K^2Var(Z_2)\\ &=(1-K)^2\sigma^2_1+K^2\sigma^2_2 \end{aligned} σz2=Var(Z1+K(Z2Z1)=Var[(1K)Z1]+Var(KZ2)=(1K)2Var(Z1)+K2Var(Z2)=(1K)2σ12+K2σ22
上式对K求导可得:
d σ z 2 d K = − 2 ( 1 − K ) σ 1 2 + 2 K σ 2 2 = 0 K = σ 1 2 σ 1 2 + σ 2 2 \frac{\mathrm{d} \sigma^2_z}{\mathrm{d} K} = -2(1-K)\sigma^2_1+2K\sigma_2^2=0\qquad K=\frac{\sigma_1^2}{\sigma_1^2+\sigma^2_2} dKdσz2=2(1K)σ12+2Kσ22=0K=σ12+σ22σ12
带入可得到 K = 0.2 K=0.2 K=0.2 σ z 2 = 3.2 \sigma_z^2=3.2 σz2=3.2 σ z = 1.79 \sigma_z=1.79 σz=1.79 Z ^ = 30.4 \hat{Z}=30.4 Z^=30.4。在最小方差的基础上我们得到了最优估计为30.4mm。表示在下图,蓝线表示 Z 1 Z_1 Z1的正态分布,红线表示 Z 2 Z_2 Z2的正态分布。黑线表示 Z ^ \hat{Z} Z^的正态分布,可以看到方差/标准差明显减小。
在这里插入图片描述

3.2 协方差矩阵

3.2.1 简要介绍

方差、协方差表示的是变量之间的联动关系。

举例:计算球员身高、体重、年龄的方差和协方差。

球员身高(x)体重(y)年龄(z)
瓦尔迪1797433
奥巴梅杨1878031
萨拉赫1757128
平均值180.37530.7

则方差为:
σ x 2 = 1 3 [ ( 179 − 180.3 ) 2 + ( 187 − 180.3 ) 2 + ( 175 − 180.3 ) 2 = 24.89 σ y 2 = 14 σ z 2 = 4.22 \begin{aligned} \sigma_x^2&=\frac{1}{3}[(179-180.3)^2+(187-180.3)^2+(175-180.3)^2=24.89\\ \sigma_y^2&=14\\ \sigma_z^2&=4.22 \end{aligned} σx2σy2σz2=31[(179180.3)2+(187180.3)2+(175180.3)2=24.89=14=4.22

协方差为:
σ x σ y = 1 3 [ ( 179 − 180.3 ) ( 74 − 75 ) + ( 187 − 180.3 ) ( 80 − 75 ) + ( 175 − 180.3 ) ( 71 − 75 ) ] = 18.7 = σ y σ x σ x σ z = 4.4 = σ z σ x σ y σ z = 3.3 = σ z σ y \begin{aligned} \sigma_x\sigma_y&=\frac{1}{3}[(179-180.3)(74-75)+(187-180.3)(80-75)+(175-180.3)(71-75)]=18.7=\sigma_y\sigma_x\\ \sigma_x\sigma_z&=4.4=\sigma_z\sigma_x\\ \sigma_y\sigma_z&=3.3=\sigma_z\sigma_y \end{aligned} σxσyσxσzσyσz=31[(179180.3)(7475)+(187180.3)(8075)+(175180.3)(7175)]=18.7=σyσx=4.4=σzσx=3.3=σzσy
协方差表示的是两个元素的相关性,如果数值越大,说明两个变量相关性越大。

上述协方差矩阵可以表示为:
P = [ σ x 2 σ x σ y σ x σ z σ y σ x σ y 2 σ y σ z σ z σ x σ z σ y σ z 2 ] = [ 24.89 18.7 4.4 18.7 14 3.3 4.4 3.3 4.22 ] P= \begin{bmatrix} \sigma_x^2&\sigma_x\sigma_y&\sigma_x\sigma_z\\ \sigma_y\sigma_x&\sigma_y^2&\sigma_y\sigma_z\\ \sigma_z\sigma_x&\sigma_z\sigma_y&\sigma_z^2\\ \end{bmatrix}= \begin{bmatrix} 24.89&18.7&4.4\\ 18.7&14&3.3\\ 4.4&3.3&4.22\\ \end{bmatrix} P=σx2σyσxσzσxσxσyσy2σzσyσxσzσyσzσz2=24.8918.74.418.7143.34.43.34.22

3.2.2 期望,方差、协方差重要公式

数学期望的标准定义为:
E ( x ) = ∫ − ∞ + ∞ x f ( x ) d x E(x)=\int_{-\infty}^{+\infty}xf(x)dx E(x)=+xf(x)dx
其中 f ( x ) f(x) f(x)称作是x的概率密度。

数学期望的性质:

①如果C是常数,则有 E ( C ) = C E(C)=C E(C)=C

②设X为随机变量,C是常数,则 E ( C X ) = C E ( X ) E(CX)=CE(X) E(CX)=CE(X)

③设X,Y为两个随机变量,则有 E ( X + Y ) = E ( X ) + E ( Y ) E(X+Y)=E(X)+E(Y) E(X+Y)=E(X)+E(Y)

④设X,Y为两个相互独立的随机变量,则有 E ( X Y ) = E ( X ) E ( Y ) E(XY)=E(X)E(Y) E(XY)=E(X)E(Y)。第④条性质用数学期望的定义来证明。

方差D(X)或者叫做Var(X)的标准定义为:
D ( X ) = E { [ X − E ( X ) ] 2 } = E [ X 2 − 2 X E ( X ) + E 2 ( X ) ] = E ( X 2 ) − 2 E ( X ) E ( X ) + E 2 ( X ) = E ( X 2 ) − E 2 ( X ) \begin{aligned} D(X)&=E\left \{[X-E(X)]^2\right\}\\ &=E[X^2-2XE(X)+E^2(X)]\\ &=E(X^2)-2E(X)E(X)+E^2(X)\\ &=E(X^2)-E^2(X) \end{aligned} D(X)=E{[XE(X)]2}=E[X22XE(X)+E2(X)]=E(X2)2E(X)E(X)+E2(X)=E(X2)E2(X)

协方差的标准定义为:
C o v ( X , Y ) = E { [ X − E ( X ) ] [ Y − E ( Y ) ] } = E [ X Y − X E ( Y ) − Y E ( X ) + E ( X ) E ( Y ) ] = E ( X Y ) − E ( X ) E ( Y ) − E ( X ) E ( Y ) + E ( X ) E ( Y ) = E ( X Y ) − E ( X ) E ( Y ) \begin{aligned} Cov(X,Y)&=E\left\{[X-E(X)][Y-E(Y)]\right\}\\ &=E[XY-XE(Y)-YE(X)+E(X)E(Y)]\\ &=E(XY)-E(X)E(Y)-E(X)E(Y)+E(X)E(Y)\\ &=E(XY)-E(X)E(Y) \end{aligned} Cov(X,Y)=E{[XE(X)][YE(Y)]}=E[XYXE(Y)YE(X)+E(X)E(Y)]=E(XY)E(X)E(Y)E(X)E(Y)+E(X)E(Y)=E(XY)E(X)E(Y)

3.2.3 通过矩阵运算计算协方差

首先求出过渡矩阵:
a = [ x 1 y 1 z 1 x 2 y 2 z 2 x 3 y 3 z 3 ] − 1 3 [ 1 1 1 1 1 1 1 1 1 ] [ x 1 y 1 z 1 x 2 y 2 z 2 x 3 y 3 z 3 ] a= \begin{bmatrix} x_1&y_1&z_1\\ x_2&y_2&z_2\\ x_3&y_3&z_3\\ \end{bmatrix} -\frac{1}{3} \begin{bmatrix} 1&1&1\\ 1&1&1\\ 1&1&1\\ \end{bmatrix} \begin{bmatrix} x_1&y_1&z_1\\ x_2&y_2&z_2\\ x_3&y_3&z_3\\ \end{bmatrix} a=x1x2x3y1y2y3z1z2z331111111111x1x2x3y1y2y3z1z2z3

其中
1 3 [ 1 1 1 1 1 1 1 1 1 ] [ x 1 y 1 z 1 x 2 y 2 z 2 x 3 y 3 z 3 ] \frac{1}{3} \begin{bmatrix} 1&1&1\\ 1&1&1\\ 1&1&1\\ \end{bmatrix} \begin{bmatrix} x_1&y_1&z_1\\ x_2&y_2&z_2\\ x_3&y_3&z_3\\ \end{bmatrix} 31111111111x1x2x3y1y2y3z1z2z3
表示的是x,y,z的平均值。

则可得到协方差矩阵为:

P = 1 3 a T a P=\frac{1}{3}a^Ta P=31aTa

3.3 状态空间方程

举例:对于一个弹簧阻尼系统。

在这里插入图片描述

可得到其动力学方程为: m x ¨ + B x ˙ + k x = F m\ddot{x}+B\dot{x}+kx=F mx¨+Bx˙+kx=F,令F作为输入u,则上式可以表示为:
m x ¨ = u − B x ˙ − k x m\ddot{x}=u-B\dot{x}-kx mx¨=uBx˙kx
设置两个状态变量, x 1 = x , x 2 = x ˙ x_1=x,x_2=\dot{x} x1=x,x2=x˙,同时我们定义测量值, z 1 = x = x 1 z_1=x=x_1 z1=x=x1(测位置), z 2 = x ˙ = x 2 z_2= \dot{x} =x_2 z2=x˙=x2(测速度),则可得到以下公式:
x 1 ˙ = x 2 x 2 ˙ = 1 m u − B m x 2 − k m x 1 z 1 = x = x 1 z 2 = x ˙ = x 2 \begin{aligned} \dot{x_1}&=x_2\\ \dot{x_2}&=\frac{1}{m}u-\frac{B}{m}x_2-\frac{k}{m}x_1\\ z_1&=x=x_1\\ z_2&=\dot{x}=x_2 \end{aligned} x1˙x2˙z1z2=x2=m1umBx2mkx1=x=x1=x˙=x2
可以得到矩阵形式为:
[ 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 ] \begin{aligned} \begin{bmatrix} \dot{x_1}\\ \dot{x_2}\\ \end{bmatrix} &= \begin{bmatrix} 0&1\\ -\frac{k}{m}&-\frac{B}{m}\\ \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \end{bmatrix} + \begin{bmatrix} 0\\ \frac{1}{m} \end{bmatrix} u\\ \begin{bmatrix} z_1\\ z_2\\ \end{bmatrix} &= \begin{bmatrix} 1&0\\ 0&1\\ \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \end{bmatrix} \end{aligned} [x1˙x2˙][z1z2]=[0mk1mB][x1x2]+[0m1]u=[1001][x1x2]
进而我们可以得到系统状态随时间别的变化趋势为:
x ˙ ( t ) = A x ( t ) + B u z ( t ) = H x ( t ) \begin{aligned} \dot{x}(t)&=Ax(t)+Bu\\ z(t)&=Hx(t)\\ \end{aligned} x˙(t)z(t)=Ax(t)+Bu=Hx(t)
对此方程进行离散化操作(这部分对离散化后的下标是k还是k-1存在疑问),k表示采样的时间单位,则有
x k = A x k − 1 + B u k − 1 z k = H x k \begin{aligned} x_k&=Ax_{k-1}+Bu_{k-1}\\ z_k&=Hx_k \end{aligned} xkzk=Axk1+Buk1=Hxk
对等式进行进一步叠加,引入过程噪音 w k − 1 w_{k-1} wk1和测量噪音 v k v_k vk后可以得到下列公式:
计算方程: x k = A x k − 1 + B u k − 1 + ω k − 1 测量方程: z k = H x k + v k \begin{aligned} \text{计算方程:}\qquad x_k&=Ax_{k-1}+Bu_{k-1}+\omega_{k-1}\\ \text{测量方程:}\qquad z_k&=Hx_k+v_k \end{aligned} 计算方程:xk测量方程:zk=Axk1+Buk1+ωk1=Hxk+vk
可以看到在加入过程噪音和测量噪音后,计算方程和测量方程都会变得不准确,在这种情况下,如何计算出尽可能接近真实值的最优估计 x ^ \hat{x} x^,就是卡尔曼滤波所要解决的问题。

4 卡尔曼滤波算法详细推导

4.1 线性系统

4.1.1 系统分析

设系统的状态空间方程为:

x k = A x k − 1 + B u k − 1 + ω k − 1 z k = H x k + v k (4.0) \begin{aligned} x_k&=Ax_{k-1}+Bu_{k-1}+\omega_{k-1}\\ z_k&=Hx_k+v_k\\ \end{aligned} \tag{4.0} xkzk=Axk1+Buk1+ωk1=Hxk+vk(4.0)
其中 w w w系统噪声,满足正态分布 P ( ω ) ∼ ( 0 , Q ) P(\omega)\sim(0,Q) P(ω)(0,Q),期望 E ( ω ) = 0 E(\omega)=0 E(ω)=0,协方差矩阵为 Q = E ( w w T ) Q=E(ww^T) Q=E(wwT),同理 v v v为测量噪声,满足正态分布 P ( v ) ∼ ( 0 , R ) P(v)\sim(0,R) P(v)(0,R),期望 E ( v ) = 0 E(v)=0 E(v)=0,协方差矩阵为 R = E ( v v T ) R=E(vv^T) R=E(vvT)

下面先对 Q = E ( w w T ) Q=E(ww^T) Q=E(wwT)进行推导说明:

假设有两个状态 [ x 1 x 2 ] \begin{bmatrix}x_1\\x_2\end{bmatrix} [x1x2],对应的系统噪声为 [ ω 1 ω 2 ] \begin{bmatrix}\omega_1\\\omega_2\end{bmatrix} [ω1ω2],则 [ ω 1 ω 2 ] [ ω 1 ω 2 ] = [ ω 1 2 ω 1 ω 2 ω 2 ω 1 ω 2 2 ] \begin{bmatrix}\omega_1\\\omega_2\end{bmatrix}\begin{bmatrix}\omega_1&\omega_2\end{bmatrix}=\begin{bmatrix}\omega_1^2&\omega_1\omega_2\\\omega_2\omega_1&\omega_2^2\end{bmatrix} [ω1ω2][ω1ω2]=[ω12ω2ω1ω1ω2ω22],对这个式子求期望得到 [ E ( ω 1 2 ) E ( ω 1 ω 2 ) E ( ω 2 ω 1 ) E ( ω 2 2 ) ] \begin{bmatrix}E(\omega_1^2)&E(\omega_1\omega_2)\\E(\omega_2\omega_1)&E(\omega_2^2)\end{bmatrix} [E(ω12)E(ω2ω1)E(ω1ω2)E(ω22)]

根据方差公式 D ( X ) = E ( X 2 ) − E 2 ( X ) D(X)=E(X^2)-E^2(X) D(X)=E(X2)E2(X)和协方差公式 C o v ( X , Y ) = E ( X Y ) − E ( X ) E ( Y ) Cov(X,Y)=E(XY)-E(X)E(Y) Cov(X,Y)=E(XY)E(X)E(Y)

因为 E ( ω ) = 0 E(\omega)=0 E(ω)=0,所以 [ E ( ω 1 2 ) E ( ω 1 ω 2 ) E ( ω 2 ω 1 ) E ( ω 2 2 ) ] = [ σ ω 1 2 σ ω 1 σ ω 2 σ ω 2 σ ω 1 σ ω 2 2 ] = Q \begin{bmatrix}E(\omega_1^2)&E(\omega_1\omega_2)\\E(\omega_2\omega_1)&E(\omega_2^2)\end{bmatrix}=\begin{bmatrix}\sigma_{\omega_1}^2&\sigma_{\omega_1}\sigma_{\omega_2}\\\sigma_{\omega_2}\sigma_{\omega_1}&\sigma_{\omega_2}^2\end{bmatrix}=Q [E(ω12)E(ω2ω1)E(ω1ω2)E(ω22)]=[σω12σω2σω1σω1σω2σω22]=Q,这里的 σ ω 1 σ ω 2 \sigma_{\omega_1}\sigma_{\omega_2} σω1σω2表示的是协方差,不是两个标准差相乘。

接下来引入估计值:
x k ^ − = A x k − 1 ^ + B u k − 1 ( x k ^ − 称 为 先 验 估 计 值 ) (4.1) \hat{x_k}^-=A\hat{x_{k-1}}+Bu_{k-1}(\hat{x_k}^-称为先验估计值)\tag{4.1} xk^=Axk1^+Buk1(xk^)(4.1)
z k = H x k → x M E A k ^ = H − 1 z k (4.2) z_k=Hx_k\to\hat{x_{MEAk}}=H^{-1}z_k\tag{4.2} zk=HxkxMEAk^=H1zk(4.2)
其中(4.1)是算出来的估计值,(4.2)是测出来的估计值。利用3.1节数据融合的理论,我们可以得到另一组公式:
x k ^ = x k ^ − + G ( x M E A k ^ − x k ^ − ) = x k ^ − + G ( H − 1 z k − x k ^ − ) \begin{aligned} \hat{x_k}&=\hat{x_k}^-+G(\hat{x_{MEA_k}}-\hat{x_k}^-)\\ &=\hat{x_k}^-+G(H^{-1}z_k-\hat{x_k}^-) \end{aligned} xk^=xk^+G(xMEAk^xk^)=xk^+G(H1zkxk^)
可以看到
{ 当 G = 0 时 , x k ^ = x k − ^ 当 G = 1 时 , x k ^ = H − 1 z k = x M E A k ^ \left\{\begin{matrix} 当G=0时, &\hat{x_k}=\hat{x_k^-} \\ 当G=1时, &\hat{x_k}=H^{-1}z_k=\hat{x_{MEAk}} \end{matrix}\right. {G=0G=1xk^=xk^xk^=H1zk=xMEAk^
我们令 G = K k H G=K_kH G=KkH,则可得到:
x k ^ = x k ^ − + K k ( z k − H x k ^ − ) , K k ∈ [ 0 , H − 1 ] (4.3) \hat{x_k}=\hat{x_k}^-+K_k(z_k-H\hat{x_k}^-),K_k\in[0,H^{-1}]\tag{4.3} xk^=xk^+Kk(zkHxk^),Kk[0,H1](4.3)
卡尔曼滤波的目标是,找到一个 K k K_k Kk使得 x k ^ → x k \hat{x_k}\to{x_k} xk^xk x k x_k xk指的是真实值

4.1.2 如何找到满足条件的卡尔曼增益?

设误差 e k = x k − x k ^ e_k=x_k-\hat{x_k} ek=xkxk^,误差满足正态分布 P ( e k ) ∼ ( 0 , P ) P(e_k)\sim(0,P) P(ek)(0,P),若误差最小,则必须误差接近于误差的期望0,意味着方差必须尽可能小。
P = E [ e e T ] = [ σ e 1 2 σ e 1 σ e 2 σ e 2 σ e 1 σ e 2 2 ] (4.4) P=E[ee^T]= \begin{bmatrix}\sigma_{e_1}^2&\sigma_{e_1}\sigma_{e_2}\\\sigma_{e_2}\sigma_{e_1}&\sigma_{e_2}^2\end{bmatrix}\tag{4.4} P=E[eeT]=[σe12σe2σe1σe1σe2σe22](4.4)
要使得误差的方差最小,则要使得矩阵P的最小,即 t r ( p ) = σ e 1 2 + σ e 2 2 tr(p)=\sigma_{e_1}^2+\sigma_{e_2}^2 tr(p)=σe12+σe22最小,将4.0和4.3带入 e k e_k ek计算公式可得
e k = x k − x k ^ = x k − [ x k ^ − + K k ( z k − H x k ^ − ) ] = x k − x k ^ − − K k z k + K k H x k ^ − = x k − x k ^ − − K k H x k − K k v k + K k H x k ^ − = x k − x k ^ − − K k H ( x k − x k ^ − ) − K k v k = ( I − K k H ) ( x k − x k ^ − ) − K k v k = ( I − K k H ) e k − − K k v k (4.5) \begin{aligned} e_k=x_k-\hat{x_k}&=x_k-[\hat{x_k}^-+K_k(z_k-H\hat{x_k}^-)]\\ &=x_k-\hat{x_k}^--K_kz_k+K_kH\hat{x_k}^-\\ &=x_k-\hat{x_k}^--K_kHx_k-K_kv_k+K_kH\hat{x_k}^-\\ &=x_k-\hat{x_k}^--K_kH(x_k-\hat{x_k}^-)-K_kv_k\\ &=(I-K_kH)(x_k-\hat{x_k}^-)-K_kv_k\\ &=(I-K_kH)e_k^--K_kv_k \end{aligned} \tag{4.5} ek=xkxk^=xk[xk^+Kk(zkHxk^)]=xkxk^Kkzk+KkHxk^=xkxk^KkHxkKkvk+KkHxk^=xkxk^KkH(xkxk^)Kkvk=(IKkH)(xkxk^)Kkvk=(IKkH)ekKkvk(4.5)
将4.5带入4.4可得
P k = E [ e k e k T ] = E [ ( I − K k H ) e k − − K k v k ] [ ( I − K k H ) e k − − K k v k ] T = E [ ( I − K k H ) e k − e k − T ( I − K k H ) T − ( I − K k H ) e k − v k T K k T − K k v k e k − T ( I − K k H ) T + K k v k v k T K k T ] \begin{aligned} P_k=E[e_ke_k^T]&=E[(I-K_kH)e_k^--K_kv_k][(I-K_kH)e_k^--K_kv_k]^T\\ &=E[(I-K_kH)e_k^-e_k^{-T}(I-K_kH)^T-(I-K_kH)e_k^-v_k^TK_k^T-K_kv_ke_k^{-T}(I-K_kH)^T+K_kv_kv_k^TK_k^T] \end{aligned} Pk=E[ekekT]=E[(IKkH)ekKkvk][(IKkH)ekKkvk]T=E[(IKkH)ekekT(IKkH)T(IKkH)ekvkTKkTKkvkekT(IKkH)T+KkvkvkTKkT]
把E放进去,因为 e k − e_k^- ek v k v_k vk相互独立,第二项和第三项中 E ( e k − v k T ) = 0 E(e_k^-v_k^T)=0 E(ekvkT)=0,上式继续化简为
P k = ( I − K k H ) E ( e k − e k − T ) ( I − K k H ) T + K k E ( V k V k T ) K k T P_k=(I-K_kH)E(e_k^-e_k^{-T})(I-K_kH)^T+K_kE(V_kV_k^T)K_k^T Pk=(IKkH)E(ekekT)(IKkH)T+KkE(VkVkT)KkT
因为 P k = E ( e k e k T ) P_k=E(e_ke_k^T) Pk=E(ekekT),因此, P k − = E ( e k − e k − T ) P_k^-=E(e_k^-e_k^{-T}) Pk=E(ekekT),同理 R = R k = E ( V k V k T ) R=R_k=E(V_kV_k^T) R=Rk=E(VkVkT),上式继续化简为
P k = ( I − K k H ) P k − ( I − K k H ) T + K k R K k T = ( P k − − K k H P k − ) ( I − H T K k T ) + K k R K 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 = P k − − K k H P k − − ( K k H P k − ) T + K k H P k − H T K k T + K k R K k T (4.6) \begin{aligned} P_k&=(I-K_kH)P_k^-(I-K_kH)^T+K_kRK_k^T\\ &=(P_k^--K_kHP_k^-)(I-H^TK_k^T)+K_kRK_k^T\\ &=P_k^--K_kHP_k^--P_k^-H^TK_k^T+K_kHP_k^-H^TK_k^T+K_kRK_k^T\\ &=P_k^--K_kHP_k^--(K_kHP_k^-)^T+K_kHP_k^-H^TK_k^T+K_kRK_k^T\\ \end{aligned} \tag{4.6} Pk=(IKkH)Pk(IKkH)T+KkRKkT=(PkKkHPk)(IHTKkT)+KkRKkT=PkKkHPkPkHTKkT+KkHPkHTKkT+KkRKkT=PkKkHPk(KkHPk)T+KkHPkHTKkT+KkRKkT(4.6)
对4.6式处理,求 P k P_k Pk的迹
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 ) (4.7) tr(P_k)=tr(P_k^-)-2tr(K_kHP_k^-)+tr(K_kHP_k^-H^TK_k^T)+tr(K_kRK_k^T)\tag{4.7} tr(Pk)=tr(Pk)2tr(KkHPk)+tr(KkHPkHTKkT)+tr(KkRKkT)(4.7)

此处对两个公式进行说明:
d t r ( A B ) d A = B T d t r ( A B A T ) d A = A ( B + B T ) 当B为对称矩阵时 d t r ( A B A T ) d A = 2 A B \begin{aligned} \frac{dtr(AB)}{dA}&=B^T\\ \frac{dtr(ABA^T)}{dA}&=A(B+B^T)\\ \text{当B为对称矩阵时}\frac{dtr(ABA^T)}{dA}&=2AB\\ \end{aligned} dAdtr(AB)dAdtr(ABAT)B为对称矩阵时dAdtr(ABAT)=BT=A(B+BT)=2AB

使 t r ( P k ) tr(P_k) tr(Pk)对卡尔曼增益 K k K_k Kk进行求导,求极小值,令导数为0,求得最优的 K k K_k Kk
d t r ( P k ) d K k = 0 − 2 ( H P k − ) T + 2 K k H P k − H T + 2 K k R = 0 K k ( H P k − H T + R ) = P k − H T \begin{aligned} \frac{dtr(P_k)}{dK_k}=0-2(HP_k^-)^T+2K_kHP_k^-H^T+2K_kR=0\\ K_k(HP_k^-H^T+R)=P_k^-H^T \end{aligned} dKkdtr(Pk)=02(HPk)T+2KkHPkHT+2KkR=0Kk(HPkHT+R)=PkHT
得到
K k = P k − H T H P k − H T + R K k = P k − H T ( H P k − H T + R ) − 1 严格表示 (4.8) \begin{aligned} K_k&=\frac{P_k^-H^T}{HP_k^-H^T+R}\\ K_k&=P_k^-H^T(HP_k^-H^T+R)^{-1}\text{严格表示} \end{aligned} \tag{4.8} KkKk=HPkHT+RPkHT=PkHT(HPkHT+R)1严格表示(4.8)

对应于 x k ^ = x k ^ − + K k ( z k − H x k ^ − ) , K k ∈ [ 0 , H − 1 ] \hat{x_k}=\hat{x_k}^-+K_k(z_k-H\hat{x_k}^-),K_k\in[0,H^{-1}] xk^=xk^+Kk(zkHxk^)Kk[0,H1]可以分析如下

当R非常大时,说明测量值很不准确,此时 K k → 0 K_k\to{0} Kk0 x k ^ → x k − ^ \hat{x_k}\to{\hat{x_k^-}} xk^xk^,最优估计以先验值(或者说上一次的估计值,或者说计算得到的值)为准;

当R比较小时,说明测量值比较准确,此时 K k → H − K_k\to{H^-} KkH x k ^ → z k \hat{x_k}\to{z_k} xk^zk,最优估计以当前测量值为准;

在4.8式中只有 P k − P_k^- Pk未知,现在求 P k − P_k^- Pk

4.1.3 求误差的协方差矩阵的先验值

首先求出 e k − e_k^- ek
e k − = x k − x k − ^ = A x k − 1 + B u k − 1 + ω k − 1 − A x k − 1 ^ − B u k − 1 = A ( x k − 1 − x k − 1 ^ ) + ω k − 1 = A e k − 1 + ω k − 1 \begin{aligned} e_k^-=x_k-\hat{x_k^-}&=Ax_{k-1}+Bu_{k-1}+\omega_{k-1}-A\hat{x_{k-1}}-Bu_{k-1}\\ &=A(x_{k-1}-\hat{x_{k-1}})+\omega_{k-1}\\ &=Ae_{k-1}+\omega_{k-1}\\ \end{aligned} ek=xkxk^=Axk1+Buk1+ωk1Axk1^Buk1=A(xk1xk1^)+ωk1=Aek1+ωk1
然后求 P k − P_k^- Pk
P k − = E ( e k − e k − T ) = E [ ( A e k − 1 + ω k − 1 ) ( A e k − 1 + ω k − 1 ) T ] = E [ ( A e k − 1 + ω k − 1 ) ( e k − 1 T A T + ω k − 1 T ) ] = E ( A e k − 1 e k − 1 T A T + A e k − 1 ω k − 1 T + ω k − 1 e k − 1 T A T + ω k − 1 ω k − 1 T ) (4.9) \begin{aligned} P_k^-&=E(e_k^-e_k^{-T})\\ &=E[(Ae_{k-1}+\omega_{k-1})(Ae_{k-1}+\omega_{k-1})^T]\\ &=E[(Ae_{k-1}+\omega_{k-1})(e_{k-1}^TA^T+\omega_{k-1}^T)]\\ &=E(Ae_{k-1}e_{k-1}^TA^T+Ae_{k-1}\omega_{k-1}^T+\omega_{k-1}e_{k-1}^TA^T+\omega_{k-1}\omega_{k-1}^T) \end{aligned} \tag{4.9} Pk=E(ekekT)=E[(Aek1+ωk1)(Aek1+ωk1)T]=E[(Aek1+ωk1)(ek1TAT+ωk1T)]=E(Aek1ek1TAT+Aek1ωk1T+ωk1ek1TAT+ωk1ωk1T)(4.9)
因为 e k − 1 e_{k-1} ek1 ω k − 1 \omega_{k-1} ωk1相互独立,所以第二项和第三项的期望为0。

说明
e k − 1 = x k − 1 − x k − 1 ^ x k = A x k − 1 + B u k − 1 + ω k − 1 \begin{aligned} e_{k-1}&=x_{k-1}-\hat{x_{k-1}}\\ x_k&=Ax_{k-1}+Bu_{k-1}+\omega_{k-1}\\ \end{aligned} ek1xk=xk1xk1^=Axk1+Buk1+ωk1
可以看到 e k − 1 e_{k-1} ek1表示的是k-1次的误差, ω k − 1 \omega_{k-1} ωk1作用的是第k次的x,所以二者相互独立。

继续推导4.9式
P k − = A E ( e k − 1 e k − 1 T ) A T + E ( ω k − 1 ω k − 1 T ) = A P k − 1 A T + Q (4.10) \begin{aligned} P_{k}^-&=AE(e_{k-1}e_{k-1}^{T})A^T+E(\omega_{k-1}\omega_{k-1}^T)\\ &=AP_{k-1}A^T+Q \end{aligned} \tag{4.10} Pk=AE(ek1ek1T)AT+E(ωk1ωk1T)=APk1AT+Q(4.10)

4.1.4 求误差的协方差矩阵

根据4.6式我们得到
P k = P k − − K k H P k − − ( K k H P k − ) T + K k H P k − H T K k T + K k R K k T P_k=P_k^--K_kHP_k^--(K_kHP_k^-)^T+K_kHP_k^-H^TK_k^T+K_kRK_k^T Pk=PkKkHPk(KkHPk)T+KkHPkHTKkT+KkRKkT

化简
P k = P k − − K k H P k − − P k − T H T k k T + K k H P k − H T K k T + K k R K k T P_k=P_k^--K_kHP_k^--P_k^{-T}H^Tk_k^T+K_kHP_k^-H^TK_k^T+K_kRK_k^T Pk=PkKkHPkPkTHTkkT+KkHPkHTKkT+KkRKkT
因为 P P P为实对称矩阵,因此 P k − T = P k − P_k^{-T}=P_k^- PkT=Pk,上式等于
P k = P k − − K k H P k − − P k − H T k k T + K k ( H P k − H T + R ) K k T P_k=P_k^--K_kHP_k^--P_k^{-}H^Tk_k^T+K_k(HP_k^-H^T+R)K_k^T Pk=PkKkHPkPkHTkkT+Kk(HPkHT+R)KkT
K k = P k − H T H P k − H T + R K_k=\frac{P_k^-H^T}{HP_k^-H^T+R} Kk=HPkHT+RPkHT带入,得到
P k = P k − − K k H P k − P_k=P_k^--K_kHP_k^- Pk=PkKkHPk
P k = ( I − K k H ) P k − (4.11) P_k=(I-K_kH)P_k^-\tag{4.11} Pk=(IKkH)Pk(4.11)
自此卡尔曼滤波五大公式推导完毕。

4.1.5 卡尔曼滤波算法五大公式

先验: x k ^ − − = A x k − 1 ^ + B u k − 1 \hat{x_k}^--=A\hat{x_{k-1}}+Bu_{k-1} xk^=Axk1^+Buk1

先验误差协方差: P k − = A P k − 1 A T + Q P_{k}^-=AP_{k-1}A^T+Q Pk=APk1AT+Q

卡尔曼增益: K k = P k − H T H P k − H T + R K_k=\frac{P_k^-H^T}{HP_k^-H^T+R} Kk=HPkHT+RPkHT

误差协方差: P k = ( I − K k H ) P k − P_k=(I-K_kH)P_k^- Pk=(IKkH)Pk

最优估计(后验估计): 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}^-) xk^=xk^+Kk(zkHxk^)

4.1.6 卡尔曼滤波示例加编程

示例,研究一个物体匀速前进的系统,状态有两个,一个是位置设为 X 1 X_1 X1,一个是速度设为 X 2 X_2 X2,则存在以下方程:
位置: x 1 , k = x 1 , k − 1 + Δ T x 2 , k − 1 + ω 1 , k − 1 速度: x 2 , k = x 2 , k − 1 + ω 2 , k − 1 \begin{aligned} \text{位置:}x_{1,k}&=x_{1,k-1}+\Delta{T}x_{2,k-1}+\omega_{1,k-1}\\ \text{速度:}x_{2,k}&=x_{2,k-1}+\omega_{2,k-1} \end{aligned} 位置:x1,k速度:x2,k=x1,k1+ΔTx2,k1+ω1,k1=x2,k1+ω2,k1
我们令 Δ T = 1 \Delta{T}=1 ΔT=1,则有

位置: x 1 , k = x 1 , k − 1 + x 2 , k − 1 + ω 1 , k − 1 速度: x 2 , k = x 2 , k − 1 + ω 2 , k − 1 \begin{aligned} \text{位置:}x_{1,k}&=x_{1,k-1}+x_{2,k-1}+\omega_{1,k-1}\\ \text{速度:}x_{2,k}&=x_{2,k-1}+\omega_{2,k-1} \end{aligned} 位置:x1,k速度:x2,k=x1,k1+x2,k1+ω1,k1=x2,k1+ω2,k1
测量方程可以写为
Z 1 , k = x 1 , k + v 1 , k Z 2 , k = x 2 , k + v 2 , k \begin{aligned} Z_{1,k}&=x_{1,k}+v_{1,k}\\ Z_{2,k}&=x_{2,k}+v_{2,k}\\ \end{aligned} Z1,kZ2,k=x1,k+v1,k=x2,k+v2,k
因此,状态方程可以写为:

[ x 1 , k x 2 , k ] = [ 1 1 0 1 ] [ x 1 , k − 1 x 2 , k − 1 ] + [ ω 1 , k − 1 ω 2 , k − 1 ] [ z 1 , k z 2 , k ] = [ 1 0 0 1 ] [ x 1 , k x 2 , k ] + [ v 1 , k v 2 , k ] \begin{aligned} \begin{bmatrix} x_{1,k}\\ x_{2,k} \end{bmatrix} &= \begin{bmatrix} 1&1\\ 0&1 \end{bmatrix} \begin{bmatrix} x_{1,k-1}\\ x_{2,k-1} \end{bmatrix} + \begin{bmatrix} \omega_{1,k-1}\\ \omega_{2,k-1} \end{bmatrix}\\ \begin{bmatrix} z_{1,k}\\ z_{2,k} \end{bmatrix} &= \begin{bmatrix} 1&0\\ 0&1 \end{bmatrix} \begin{bmatrix} x_{1,k}\\ x_{2,k} \end{bmatrix} + \begin{bmatrix} v_{1,k}\\ v_{2,k} \end{bmatrix} \end{aligned} [x1,kx2,k][z1,kz2,k]=[1011][x1,k1x2,k1]+[ω1,k1ω2,k1]=[1001][x1,kx2,k]+[v1,kv2,k]
在本示例中我们需要预先知道的初值有:
Q = [ 0.1 0 0 0.1 ] , P = [ 1 0 0 1 ] , A = [ 1 1 0 1 ] , H = [ 1 0 0 1 ] , 单位矩阵 E = [ 1 0 0 1 ] P 0 = [ 1 0 0 1 ] , x ( 1 , 2 ) 0 = x ( 1 , 2 ) 0 ^ = [ 0 1 ] \begin{aligned} Q&= \begin{bmatrix} 0.1&0\\ 0&0.1 \end{bmatrix}, P= \begin{bmatrix} 1&0\\ 0&1 \end{bmatrix}, A= \begin{bmatrix} 1&1\\ 0&1 \end{bmatrix}, H= \begin{bmatrix} 1&0\\ 0&1 \end{bmatrix}, \text{单位矩阵} E= \begin{bmatrix} 1&0\\ 0&1 \end{bmatrix}\\ P_0&= \begin{bmatrix} 1&0\\ 0&1 \end{bmatrix}, x_{(1,2)_0}=\hat{x_{(1,2)_0}}= \begin{bmatrix} 0\\ 1 \end{bmatrix} \end{aligned} QP0=[0.1000.1]P=[1001]A=[1011]H=[1001]单位矩阵E=[1001]=[1001]x(1,2)0=x(1,2)0^=[01]

根据上述方程和卡尔曼滤波公式,递推300次,编写以下程序:

close all
clc;clear;
Q=[0.1,0;0,0.1];%定义Q矩阵(系统量误差的协方差矩阵)
R=[1,0;0,1];%定义R矩阵(测量误差的协方差矩阵)
A=[1,1;0,1];%定义A矩阵
H=[1,0;0,1];%定义H矩阵
I=eye(2);%定义单位矩阵
X_out=[0;1];%最终输出实际值
Y_Measure_out=[0,0];%最终输出的测量值
X_pre_out=[0;0];%最终输出的先验估计值
X_pro_out=[0;1];%最终输出的后验估计值
Z_out=[0;0];%最终输出的测量值
P_pre=[0,0;0,0];%协方差矩阵的先验值
P_pro=[1,0;0,1];%协方差矩阵的后验值
for k=2:1:300
    X=A*X_out(:,k-1)+normrnd(0,sqrt(0.01),[2,1]);%计算当前时刻的状态实际值
    X_pre=A*X_pro_out(:,k-1);%计算当前时刻的先验估计
    Z=H*X+normrnd(0,sqrt(0.1),[2,1]);%计算当前时刻的测量值
    P_pre=A*P_pro*A'+Q;%计算当前时刻的误差协方差的先验
    K=P_pre*H'*inv(H*P_pre*H'+R);%计算当前时刻的卡尔曼增益
    P_pro=(I-K*H)*P_pre;%计算当前时刻的误差协方差的后验并更新
    X_pro=X_pre+K*(Z-H*X_pre);%计算当前时刻的后验估计(最优估计)
    

    X_pro_out=[X_pro_out,X_pro];%将每一次计算出来的后验估计放入X_pro_out数组中
    X_pre_out=[X_pre_out,X_pre];%将每一次计算出来的先验估计放入X_pre_out数组中
    X_out=[X_out,X];%将每一次计算出来的实际值放入X_out数组中
    Z_out=[Z_out,Z];%将每一次测量值放入Z_out数组中
    
end
subplot(2,1,1)
plot(X_out(1,:));
hold on
plot(X_pro_out(1,:));
plot(Z_out(1,:));
plot(X_pre_out(1,:));
grid on
legend('位置原始数据','位置最优估计','位置测量数据','位置先验估计');
subplot(2,1,2)
plot(X_out(2,:));
hold on
plot(X_pro_out(2,:));
plot(Z_out(2,:));
plot(X_pre_out(2,:));
grid on
legend('速度原始数据','速度最优估计','位置测量数据','位置先验估计');

在这里插入图片描述

  • 31
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值