一、递归算法
维基百科对递归的解释是:
递归(Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。
举个栗子
多次测量一个硬币的直径,观测结果分别为 z 1 , z 2 , ⋯ , z k z_1,z_2,\cdots,z_k z1,z2,⋯,zk( k k k 为测量的次数),我们希望得到这个硬币直径的估计值 x ~ \tilde{x} x~。
我们可以对观测结果取平均值:
测量次数 k k k | 估计值 x k ~ \tilde{x_k} xk~ |
---|---|
1 | z 1 z_1 z1 |
2 | 1 2 ( z 1 + z 2 ) \frac{1}{2}(z_1+z_2) 21(z1+z2) |
3 | 1 3 ( z 1 + z 2 + z 3 ) \frac{1}{3}(z_1+z_2+z_3) 31(z1+z2+z3) |
⋮ \vdots ⋮ | ⋮ \vdots ⋮ |
k | 1 k ( z 1 + z 2 + ⋯ + z k ) \frac{1}{k}(z_1+z_2+\cdots+z_k) k1(z1+z2+⋯+zk) |
整理一下:
x ~ k = 1 k ( z 1 + z 2 + ⋯ + z 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} \tilde{x}_k&=\frac{1}{k}(z_1+z_2+\cdots+z_k)\\ &=\frac{1}{k}(z_1+z_2+\cdots+z_{k-1})+\frac{1}{k}z_k\\ &=\frac{1}{k}\frac{k-1}{k-1}(z_1+z_2+\cdots+z_{k-1})+\frac{1}{k}z_k\\ &=\frac{k-1}{k}\tilde{x}_{k-1}+\frac{1}{k}z_k\\ &=\tilde{x}_{k-1}-\frac{1}{k}\tilde{x}_{k-1}+\frac{1}{k}z_k \end{aligned} x~k=k1(z1+z2+⋯+zk)=k1(z1+z2+⋯+zk−1)+k1zk=k1k−1k−1(z1+z2+⋯+zk−1)+k1zk=kk−1x~k−1+k1zk=x~k−1−k1x~k−1+k1zk
即
x ~ k = x ~ k − 1 + 1 k ( z k − x ~ k − 1 ) \tilde{x}_k=\tilde{x}_{k-1}+\frac{1}{k}(z_k-\tilde{x}_{k-1}) x~k=x~k−1+k1(zk−x~k−1)
从上式可以看出,随着测量次数 k k k 的增加,测量结果 z k z_k zk 对我们的估计就不再重要了。其实也就是,随着数据量的增加,我们对估计值越发有信心,所以之后的数据结果变得不那么重要了;相反,当 k k k 很小的时候,测量结果 z k z_k zk 的作用较大。
令 K k = 1 / k K_k=1/k Kk=1/k,
x ~ k = x ~ k − 1 + K k ( z k − x ~ k − 1 ) ( * ) \tilde{x}_k=\tilde{x}_{k-1}+K_k(z_k-\tilde{x}_{k-1})\tag{\pmb{*}} x~k=x~k−1+Kk(zk−x~k−1)(*)
这就是卡尔曼滤波器的核心公式之一, K k K_k Kk 称为卡尔曼增益。即
当前的估计值 = 上一次的估计值 + 卡尔曼增益 × ( 当前的测量值 − 上一次的估计值 ) \pmb{当前的估计值=上一次的估计值+卡尔曼增益\times(当前的测量值-上一次的估计值)} 当前的估计值=上一次的估计值+卡尔曼增益×(当前的测量值−上一次的估计值)
从这个式子可以看出,当前的估计值与上一次的估计值有关,上一次的估计值与上上次的估计值有关,这就是递归的思想。这也是卡尔曼滤波器的优势,它不需要追溯很久之前的数据,只需要上一次的数据就可以了。
二、数据融合
百度百科对数据融合的解释是:
数据融合是将多信息源的数据和信息加以联合、相关及组合,获得更为精确的估计的过程。
举个栗子
两个天平测量同一个物体的重量,测量结果如下(我们认为数据分布服从正态分布):
测量结果(数学期望)(单位g) | 误差(标准差)(单位g) | |
---|---|---|
scale_1 | z 1 = 30 z_1=30 z1=30 | σ 1 = 2 \sigma_1=2 σ1=2 |
scale_2 | z 2 = 32 z_2=32 z2=32 | σ 1 = 4 \sigma_1=4 σ1=4 |
我们希望从这两组数据中得到物体重量的最优估计。
绿色曲线与蓝色曲线分别对应两个称的测量数据的概率密度曲线,因为scale_1的标准差相对scale_2的小,所以它的可信度更高一点。
因此对物体重量的估计值应该如红色虚线所示,它的值更加靠近scale_1。
三、协方差矩阵
百度百科对数据融合的解释是:
设 X = ( X 1 , X 2 , ⋯ , X N ) T \pmb{X}=(X_1,X_2,\cdots,X_N)^T X=(X1,X2,⋯,XN)T 为 n n n 维随机变量,称矩阵
C = ( c i j ) n × n = [ c 11 c 12 ⋯ c 1 n c 21 c 22 ⋯ c 2 n ⋮ ⋮ ⋱ ⋮ c n 1 c n 2 ⋯ c n n ] C=(c_{ij})_{n\times n}= \begin{bmatrix} {c_{11}}&{c_{12}}&{\cdots}&{c_{1n}}\\ {c_{21}}&{c_{22}}&{\cdots}&{c_{2n}}\\ {\vdots}&{\vdots}&{\ddots}&{\vdots}\\ {c_{n1}}&{c_{n2}}&{\cdots}&{c_{nn}}\\ \end{bmatrix} C=(cij)n×n= c11c21⋮cn1c12c22⋮cn2⋯⋯⋱⋯c1nc2n⋮cnn 为 n n n 维随机变量 X i \pmb{X_i} Xi 和 X j \pmb{X_j} Xj 的协方差矩阵,也记作 D ( X ) D(X) D(X),其中 c i j = C o v ( X i , X j ) , i , j = 1 , 2 , ⋯ , n c_{ij}=Cov(\pmb{X_i,X_j}),i,j=1,2,\cdots,n cij=Cov(Xi,Xj),i,j=1,2,⋯,n
为 X \pmb X X 的分量 X i \pmb{X_i} Xi 和 X j \pmb{X_j} Xj 的协方差(设它们都存在)。
举个栗子
球员 | 身高 x x x | 体重 y y y | 年龄 z z z |
---|---|---|---|
瓦尔迪 | 179 | 74 | 33 |
奥巴梅扬 | 187 | 80 | 31 |
萨拉赫 | 175 | 71 | 28 |
数学期望 | 180.3 | 75 | 30.7 |
方差:
σ x 2 = 1 3 [ ( 179 − 180.3 ) 2 + ( 187 − 180.3 ) 2 + ( 175 − 180.3 ) 2 ] = 24.89 σ y 2 = 1 3 [ ( 74 − 75 ) 2 + ( 80 − 75 ) 2 + ( 71 − 75 ) 2 ] = 14 σ z 2 = 1 3 [ ( 33 − 30.7 ) 2 + ( 31 − 30.7 ) 2 + ( 28 − 30.7 ) 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\\ \quad\\ \sigma_y^2&=\frac{1}{3}[(74-75)^2+(80-75)^2+(71-75)^2]=14\\ \quad\\ \sigma_z^2&=\frac{1}{3}[(33-30.7)^2+(31-30.7)^2+(28-30.7)^2]=4.22\\ \end{aligned} σx2σy2σz2=31[(179−180.3)2+(187−180.3)2+(175−180.3)2]=24.89=31[(74−75)2+(80−75)2+(71−75)2]=14=31[(33−30.7)2+(31−30.7)2+(28−30.7)2]=4.22
协方差:
C o v ( x , y ) = C o v ( y , x ) = 1 3 [ ( 179 − 180.3 ) ( 74 − 75 ) + ( 187 − 180.3 ) ( 80 − 75 ) + ( 175 − 180.3 ) ( 71 − 75 ) ] = 18.7 C o v ( x , z ) = C o v ( z , x ) = 1 3 [ ( 179 − 180.3 ) ( 33 − 30.7 ) + ( 187 − 180.3 ) ( 31 − 30.7 ) + ( 175 − 180.3 ) ( 28 − 30.7 ) ] = 4.4 C o v ( y , z ) = C o v ( z , y ) = 1 3 [ ( 74 − 75 ) ( 33 − 30.7 ) + ( 80 − 75 ) ( 31 − 30.7 ) + ( 71 − 75 ) ( 28 − 30.7 ) ] = 3.3 \begin{aligned} Cov(x,y)&=Cov(y,x)=\frac{1}{3}[(179-180.3)(74-75)+(187-180.3)(80-75)+(175-180.3)(71-75)]=18.7\\ \quad\\ Cov(x,z)&=Cov(z,x)=\frac{1}{3}[(179-180.3)(33-30.7)+(187-180.3)(31-30.7)+(175-180.3)(28-30.7)]=4.4\\ \quad\\ Cov(y,z)&=Cov(z,y)=\frac{1}{3}[(74-75)(33-30.7)+(80-75)(31-30.7)+(71-75)(28-30.7)]=3.3\\ \end{aligned} Cov(x,y)Cov(x,z)Cov(y,z)=Cov(y,x)=31[(179−180.3)(74−75)+(187−180.3)(80−75)+(175−180.3)(71−75)]=18.7=Cov(z,x)=31[(179−180.3)(33−30.7)+(187−180.3)(31−30.7)+(175−180.3)(28−30.7)]=4.4=Cov(z,y)=31[(74−75)(33−30.7)+(80−75)(31−30.7)+(71−75)(28−30.7)]=3.3
因此,协方差矩阵为:
P = [ σ x 2 C o v ( x , y ) C o v ( x , z ) C o v ( y , x ) σ y 2 C o v ( y , z ) C o v ( z , x ) C o v ( 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}&{Cov(x,y)}&{Cov(x,z)}\\ {Cov(y,x)}&{\sigma_y^2}&{Cov(y,z)}\\ {Cov(z,x)}&{Cov(z,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=
σx2Cov(y,x)Cov(z,x)Cov(x,y)σy2Cov(z,y)Cov(x,z)Cov(y,z)σz2
=
24.8918.74.418.7143.34.43.34.22
通过定义来计算协方差矩阵比较繁琐,下面给出简洁的计算公式:
假设 X = ( x , y , z ) T X=(x,y,z)^T X=(x,y,z)T 为三维随机变量,我们求它的协方差矩阵,
令
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=
x1x2x3y1y2y3z1z2z3
−31
111111111
x1x2x3y1y2y3z1z2z3
则协方差矩阵为:
P = 1 3 A T A P=\frac{1}{3}A^TA P=31ATA
四、状态空间表达式
举个栗子
弹簧阻尼系统
受力分析:
m q ¨ + c q ˙ + k q = u m\ddot{q}+c\dot{q}+kq=u mq¨+cq˙+kq=u
设状态变量 X = ( x 1 , x 2 ) T X=(x_1,x_2)^T X=(x1,x2)T
有
x 1 = q x 2 = q ˙ x_1=q\\x_2=\dot{q} x1=qx2=q˙
则
x 1 ˙ = x 2 x 2 ˙ = q ¨ = 1 m u − c m q ˙ − k m q = 1 m u − c m x 2 − k m x 1 \begin{aligned} \dot{x_1}&=x_2\\ \dot{x_2}&=\ddot{q}=\frac{1}{m}u-\frac{c}{m}\dot{q}-\frac{k}{m}q\\ &=\frac{1}{m}u-\frac{c}{m}x_2-\frac{k}{m}x_1 \end{aligned} x1˙x2˙=x2=q¨=m1u−mcq˙−mkq=m1u−mcx2−mkx1
设测量量 Z = ( z 1 , z 2 ) T = ( x 1 , x 2 ) T Z=(z_1,z_2)^T=(x_1,x_2)^T Z=(z1,z2)T=(x1,x2)T,分别为位移和速度
写成矩阵的形式:
[ x 1 ˙ x 2 ˙ ] = [ 0 1 − k m − c 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{c}{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\\ \quad\\ \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] [x1˙x2˙]=[0−mk1−mc][x1x2]+[0m1]u[z1z2]=[1001][x1x2]
即
X ˙ ( t ) = A X ( t ) + B u ( t ) Z ( t ) = H X ( t ) \begin{aligned} \dot{X}(t)&=\pmb{A}X(t)+\pmb{B}u(t)\\ Z(t)&=\pmb{H}X(t) \end{aligned} X˙(t)Z(t)=AX(t)+Bu(t)=HX(t)
上式即连续时间系统的状态空间表达式,它是从微分方程或传递函数建立起来的,叫做系统的实现。在离散系统中,从差分方程或脉冲传递函数求取离散状态空间表达式,也是一种实现。
百度百科对差分方程的解释是:
在数学上,递推关系(recurrence relation),也就是差分方程(difference equation),是一种递推地定义一个序列的方程式:序列的每一项目是定义为前一项的函数。
设系统差分方程为:
y ( k + n ) + a n − 1 y ( k + n − 1 ) + ⋯ + a 1 y ( k + 1 ) + a 0 y ( k ) = b n u ( k + n ) + b n − 1 u ( k + n − 1 ) + ⋯ + b 1 u ( k + 1 ) + b 0 u ( k ) \begin{aligned} &y(k+n)+a_{n-1}y(k+n-1)+\cdots+a_1y(k+1)+a_0y(k)\\ &=b_nu(k+n)+b_{n-1}u(k+n-1)+\cdots+b_1u(k+1)+b_0u(k) \end{aligned} y(k+n)+an−1y(k+n−1)+⋯+a1y(k+1)+a0y(k)=bnu(k+n)+bn−1u(k+n−1)+⋯+b1u(k+1)+b0u(k)
实现的任务就是确定一种状态空间表达式:
X k = A X k − 1 + B u k Z k = H X k \begin{aligned} X_k&=AX_{k-1}+Bu_k\\ Z_k&=HX_k \end{aligned} XkZk=AXk−1+Buk=HXk
后面我们推导卡尔曼滤波器主要用的就是上面描述的离散系统的状态空间表达式。
在此基础上,映入不确定性,即
X k = A X k − 1 + B u k − 1 + w k − 1 Z k = H X k + v k \begin{aligned} X_k&=AX_{k-1}+Bu_{k-1}+w_{k-1}\\ Z_k&=HX_k+v_k \end{aligned} XkZk=AXk−1+Buk−1+wk−1=HXk+vk
由于数据的不确定性,卡尔曼滤波器要解决的问题就是将系统估计值与观测值进行数据融合,得到误差比它们都要小的最优估计。
五、卡尔曼滤波数学推导
(1)卡尔曼增益数学推导
系统状态空间方程为:
x k = A x k − 1 + B u k − 1 + w k − 1 z k = H x k + v k \begin{aligned} x_k&=Ax_{k-1}+Bu_{k-1}+w_{k-1}\\ z_k&=Hx_k+v_k \end{aligned} xkzk=Axk−1+Buk−1+wk−1=Hxk+vk
其中 w k w_k wk 为系统过程噪声, v k v_k vk 为观测噪声,假设两者为相互独立,正态分布的白色噪声,协方差矩阵分别为 Q 、 R Q、R Q、R,即
w k ∼ N ( 0 , Q ) v k ∼ N ( 0 , R ) w_k\sim N(0,Q)\\ v_k\sim N(0,R) wk∼N(0,Q)vk∼N(0,R)
后面会用到一个公式:
Q = E [ w w T ] R = E [ v v T ] Q=E[ww^T]\\ \quad\\ R=E[vv^T] Q=E[wwT]R=E[vvT]
验证过程如下:
令 x = [ x 1 , x 2 ] T , w = [ w 1 , w 2 ] T x=[x_1,x_2]^T,w=[w_1,w_2]^T x=[x1,x2]T,w=[w1,w2]T
w w T = [ w 1 w 2 ] [ w 1 , w 2 ] = [ w 1 2 w 1 w 2 w 2 w 1 w 2 2 ] E [ w w T ] = [ E ( w 1 2 ) E ( w 1 w 2 ) E ( w 2 w 1 ) E ( w 2 2 ) ] ww^T=\left[\begin{matrix} w_1\\ w_2\\\end{matrix}\right]\left[\begin{matrix} w_1, w_2\\\end{matrix}\right]=\left[\begin{matrix} w_1^2&w_1w_2\\ w_2w_1&w_2^2\\\end{matrix}\right]\\ \quad\\ E[ww^T]=\left[\begin{matrix} E(w_1^2)&E(w_1w_2)\\ E(w_2w_1)&E(w_2^2)\\\end{matrix}\right] wwT=[w1w2][w1,w2]=[w12w2w1w1w2w22]E[wwT]=[E(w12)E(w2w1)E(w1w2)E(w22)]
由于 C o v ( w 1 , w 2 ) = E ( w 1 w 2 ) − E ( w 1 ) E ( w 2 ) Cov(w_1,w_2)=E(w_1w_2)-E(w_1)E(w_2) Cov(w1,w2)=E(w1w2)−E(w1)E(w2),又 w w w 的数学期望为0,故
C o v ( w 1 , w 2 ) = E ( w 1 w 2 ) Cov(w_1,w_2)=E(w_1w_2) Cov(w1,w2)=E(w1w2),同理 C o v ( w 2 , w 1 ) = E ( w 2 w 1 ) Cov(w_2,w_1)=E(w_2w_1) Cov(w2,w1)=E(w2w1)
又因为 V a r ( x ) = E ( x 2 ) − E 2 ( x ) Var(x)=E(x^2)-E^2(x) Var(x)=E(x2)−E2(x),故 V a r ( x 1 ) = E ( x 1 2 ) , V a r ( x 2 ) = E ( x 2 2 ) Var(x_1)=E(x_1^2),Var(x_2)=E(x_2^2) Var(x1)=E(x12),Var(x2)=E(x22)
综上, E [ w w T ] = [ σ w 1 2 C o v ( w 1 w 2 ) C o v ( w 2 w 1 ) σ w 2 2 ] = Q E[ww^T]=\left[\begin{matrix} \sigma^2_{w_1}&Cov(w_1w_2)\\ Cov(w_2w_1)&\sigma^2_{w_2}\\\end{matrix}\right]=Q E[wwT]=[σw12Cov(w2w1)Cov(w1w2)σw22]=Q
根据第四章得到的状况空间方程
x ~ k − = A x ~ k − 1 + B u k − 1 z k = H x k \begin{aligned} \tilde{x}_k^-&=A\tilde{x}_{k-1}+Bu_{k-1}\\ z_k&=Hx_k \end{aligned} x~k−zk=Ax~k−1+Buk−1=Hxk
x k \pmb {x_k} xk:状态的真实值
x ~ k − \pmb{\tilde{x}_k^-} x~k−:先验状态估计值,即状态的预测值
x ~ k \pmb{\tilde{x}_k} x~k:后验状态估计值,即状态的最优估计值
将上式变换一下,有
x ~ k − = A x ~ k − 1 − + B u k − 1 → 根据模型计算得到的预测值 x ~ k m e a = H − 1 z k → 根据测量得到的预测值 \begin{aligned} \tilde{x}_k^-&=A\tilde{x}_{k-1}^-+Bu_{k-1}&\quad\quad\rightarrow根据模型计算得到的预测值\\ \tilde{x}_{k_{mea}}&=H^{-1}z_k&\rightarrow根据测量得到的预测值 \end{aligned} x~k−x~kmea=Ax~k−1−+Buk−1=H−1zk→根据模型计算得到的预测值→根据测量得到的预测值
而最优估计值应位于两个预测值之间,即
x ~ k = x ~ k − + G ( H − 1 z k − x ~ k − ) \tilde{x}_k=\tilde{x}_k^-+G(H^{-1}z_k-\tilde{x}_k^-) x~k=x~k−+G(H−1zk−x~k−)
其中, G = K k H G=K_kH G=KkH, K k K_k Kk 就是卡尔曼增益。
我们的目标就是寻找最合适的 K k K_k Kk 使得最优估计值 x ~ k \tilde{x}_k x~k 最接近真实值 x k x_k xk。
引入误差: e k = x k − x ~ k e_k=x_k-\tilde{x}_k ek=xk−x~k,也就是状态真实值与最优估计值之差,且 e k ∼ N ( 0 , P ) e_k\sim N(0,P) ek∼N(0,P)
因此我们的目标变为寻找最合适的 K k K_k Kk 使得 e k e_k ek 最小,因为它是一个向量,即是得其各分量的方差之和最小,即寻找最合适的 K k K_k Kk 使得协方差矩阵 P P P 的迹最小。
P k = E [ e k e k T ] = E [ ( x k − x ~ k ) ( x k − x ~ k ) T ] P_k=E[e_ke_k^T]=E[(x_k-\tilde{x}_k)(x_k-\tilde{x}_k)^T] Pk=E[ekekT]=E[(xk−x~k)(xk−x~k)T]
其中
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 + v 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 \begin{aligned} x_k-\tilde{x}_k&=x_k-[\tilde{x}_k^-+K_k(z_k-H\tilde{x}_k^-)]\\ &=x_k-\tilde{x}_k^--K_kz_k+K_kH\tilde{x}_k^-\\ &=x_k-\tilde{x}_k^--K_k(Hx_k+v_k)+K_kH\tilde{x}_k^-\\ &=x_k-\tilde{x}_k^--K_kHx_k-K_kv_k+K_kH\tilde{x}_k^-\\ &=(x_k-\tilde{x}_k^-)-K_kH(x_k-\tilde{x}_k^-)-K_kv_k\\ &=(I-K_kH)(x_k-\tilde{x}_k^-)-K_kv_k\\ &=(I-K_kH)e_k^--K_kv_k \end{aligned} xk−x~k=xk−[x~k−+Kk(zk−Hx~k−)]=xk−x~k−−Kkzk+KkHx~k−=xk−x~k−−Kk(Hxk+vk)+KkHx~k−=xk−x~k−−KkHxk−Kkvk+KkHx~k−=(xk−x~k−)−KkH(xk−x~k−)−Kkvk=(I−KkH)(xk−x~k−)−Kkvk=(I−KkH)ek−−Kkvk
故
P k = 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 − − K k v k ] [ e k − T ( I − K k H ) T − v k T K 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 ) = E ( ( I − K k H ) e k − e k − T ( I − K k H ) T ) − E ( ( I − K k H ) e k − v k T K k T ) − E ( K k v k e k − T ( I − K k H ) T ) + E ( K k v k v k T K k T ) \begin{aligned} P_k&=E\bigg(\big[(I-K_kH)e_k^--K_kv_k\big]\big[(I-K_kH)e_k^--K_kv_k\big]^T\bigg)\\ &=E\bigg(\big[(I-K_kH)e_k^--K_kv_k\big]\big[e_k^{-T}(I-K_kH)^T-v_k^TK_k^T\big]\bigg)\\ &=E\bigg((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\bigg)\\ &=E\bigg((I-K_kH)e_k^-e_k^{-T}(I-K_kH)^T\bigg)-E\bigg((I-K_kH)e_k^-v_k^TK_k^T\bigg)-E\bigg(K_kv_ke_k^{-T}(I-K_kH)^T\bigg)+E\bigg(K_kv_kv_k^TK_k^T\bigg) \end{aligned} Pk=E([(I−KkH)ek−−Kkvk][(I−KkH)ek−−Kkvk]T)=E([(I−KkH)ek−−Kkvk][ek−T(I−KkH)T−vkTKkT])=E((I−KkH)ek−ek−T(I−KkH)T−(I−KkH)ek−vkTKkT−Kkvkek−T(I−KkH)T+KkvkvkTKkT)=E((I−KkH)ek−ek−T(I−KkH)T)−E((I−KkH)ek−vkTKkT)−E(Kkvkek−T(I−KkH)T)+E(KkvkvkTKkT)
其中
E ( ( I − K k H ) e k − v k T K k T ) = ( I − K k H ) E ( e k − v k T ) K k T = 0 ( 因为先验误差 e k − 与测量噪声 v k 相互独立,且 v k 的期望为 0 ) \begin{aligned} E\bigg((I-K_kH)e_k^-v_k^TK_k^T\bigg)&=(I-K_kH)E\bigg(e_k^-v_k^T\bigg)K_k^T\\ &=0\quad(因为先验误差 e_k^- 与测量噪声v_k相互独立,且v_k的期望为0) \end{aligned} E((I−KkH)ek−vkTKkT)=(I−KkH)E(ek−vkT)KkT=0(因为先验误差ek−与测量噪声vk相互独立,且vk的期望为0)
同理,
E ( K k v k e k − T ( I − K k H ) T ) = 0 E\bigg(K_kv_ke_k^{-T}(I-K_kH)^T\bigg)=0\\ E(Kkvkek−T(I−KkH)T)=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 = ( 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 − − P k − H T K k T − K k H P k − + K k H P k − H T K k T + K k R K k T = P k − − ( K k H P k − ) T − K k H P k − + K k H P k − H T K k T + K k R K k T \begin{aligned} P_k&=(I-K_kH)E\bigg(e_k^-e_k^{-T}\bigg)(I-K_kH)^T+K_kE\bigg(v_kv_k^T\bigg)K_k^T\\ &=(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^--P_k^-H^TK_k^T-K_kHP_k^-+K_kHP_k^-H^TK_k^T+K_kRK_k^T\\ &=P_k^--(K_kHP_k^-)^T-K_kHP_k^-+K_kHP_k^-H^TK_k^T+K_kRK_k^T\\ \end{aligned} Pk=(I−KkH)E(ek−ek−T)(I−KkH)T+KkE(vkvkT)KkT=(I−KkH)Pk−(I−KkH)T+KkRKkT=(Pk−−KkHPk−)(I−HTKkT)+KkRKkT=Pk−−Pk−HTKkT−KkHPk−+KkHPk−HTKkT+KkRKkT=Pk−−(KkHPk−)T−KkHPk−+KkHPk−HTKkT+KkRKkT
因此
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 ) tr(P_k)=tr(P_k^-)-2tr(K_kHP_k^-)+tr(K_kHP_k^-H^TK_k^T)+tr(K_kRK_k^T) tr(Pk)=tr(Pk−)−2tr(KkHPk−)+tr(KkHPk−HTKkT)+tr(KkRKkT)
我们的目标是其值最小,即
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 \begin{aligned} \frac{d\big(tr(P_k)\big)}{d(K_k)}&=0-2(HP_k^-)^T+2K_kHP_k^-H^T+2K_kR\\ &=0 \end{aligned} d(Kk)d(tr(Pk))=0−2(HPk−)T+2KkHPk−HT+2KkR=0
上面推导用到了关于矩阵乘积求导公式,如下
d ( t r ( A B ) ) d A = B T \frac{d\big(tr(AB)\big)}{dA}=B^T dAd(tr(AB))=BT
d ( t r ( A B A T ) ) d A = 2 A B \frac{d\big(tr(ABA^T)\big)}{dA}=2AB dAd(tr(ABAT))=2AB
因此我们得到
− P k − T H T + K k ( H P k − H T + R ) = 0 − P k − H T + K k ( H P k − H T + R ) = 0 K k ( H P k − H T + R ) = P k − H T K k = P k − H T H P k − H T + R \begin{aligned} -P_k^{-T}H^T+K_k(HP_k^-H^T+R)=0\\ -P_k^{-}H^T+K_k(HP_k^-H^T+R)=0\\ K_k(HP_k^-H^T+R)=P_k^{-}H^T\\ K_k=\frac{P_k^{-}H^T}{HP_k^-H^T+R} \end{aligned} −Pk−THT+Kk(HPk−HT+R)=0−Pk−HT+Kk(HPk−HT+R)=0Kk(HPk−HT+R)=Pk−HTKk=HPk−HT+RPk−HT
这样我们就得到了卡尔曼滤波器中最核心的公式:卡尔曼增益
我们分析一下,当观测噪声协方差矩阵 R R R 特别大(即观测噪声方差特别大)时, K k → 0 K_k\rightarrow0 Kk→0,此时最优估计就是先验估计;当观测噪声协方差矩阵 R R R 特别小(即观测噪声方差特别小)时 K k → H − 1 K_k\rightarrow H^{-1} Kk→H−1,此时最优估计就是观测结果。
(2)先验估计误差协方差矩阵及后验估计误差协方差矩阵数学推导
现在我们有了以下三个公式:
先验估计
x ~ k − = A x ~ k − 1 + B u k − 1 \tilde{x}_k^-=A\tilde{x}_{k-1}+Bu_{k-1}\\ x~k−=Ax~k−1+Buk−1
后验估计
x ~ k = x ~ k − + K k ( z k − H x ~ k − ) \tilde{x}_k=\tilde{x}_k^-+K_k(z_k-H\tilde{x}_k^-) x~k=x~k−+Kk(zk−Hx~k−)
卡尔曼增益
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=HPk−HT+RPk−HT
卡尔曼增益中, P k − P_k^- Pk− 还是未知的,接下来我们来计算它
P k − = E [ e k − e k − T ] \begin{aligned} P_k^-&=E[e_k^-e_k^{-T}] \end{aligned} Pk−=E[ek−ek−T]
其中,
e k − = x k − x ~ k − = A x k − 1 + B u k − 1 + w k − 1 − A x ~ k − 1 − B u k − 1 = A ( x k − 1 − x ~ k − 1 ) + w k − 1 = A e k − 1 + w k − 1 \begin{aligned} e_k^-&=x_k-\tilde{x}_k^-\\ &=Ax_{k-1}+Bu_{k-1}+w_{k-1}-A\tilde{x}_{k-1}-Bu_{k-1}\\ &=A(x_{k-1}-\tilde{x}_{k-1})+w_{k-1}\\ &=Ae_{k-1}+w_{k-1} \end{aligned} ek−=xk−x~k−=Axk−1+Buk−1+wk−1−Ax~k−1−Buk−1=A(xk−1−x~k−1)+wk−1=Aek−1+wk−1
将其带入,有
P k − = E [ e k − e k − T ] = E [ ( A e k − 1 + w k − 1 ) ( A e k − 1 + w k − 1 ) T ] = E [ ( A e k − 1 + w k − 1 ) ( e k − 1 T A T + w k − 1 T ) ] = E [ A e k − 1 e k − 1 T A T + A e k − 1 w k − 1 T + w k − 1 e k − 1 T A T + w k − 1 w k − 1 T ] = E [ A e k − 1 e k − 1 T A T ] + E [ A e k − 1 w k − 1 T ] + E [ w k − 1 e k − 1 T A T ] + E [ w k − 1 w k − 1 T ] = A E [ e k − 1 e k − 1 T ] A T + E [ w k − 1 w k − 1 T ] = A P k − 1 A T + Q \begin{aligned} P_k^-&=E[e_k^-e_k^{-T}]\\ &=E\big[(Ae_{k-1}+w_{k-1})(Ae_{k-1}+w_{k-1})^T\big]\\ &=E\big[(Ae_{k-1}+w_{k-1})(e_{k-1}^TA^T+w_{k-1}^T)\big]\\ &=E\big[Ae_{k-1}e_{k-1}^TA^T+Ae_{k-1}w_{k-1}^T+w_{k-1}e_{k-1}^TA^T+w_{k-1}w_{k-1}^T\big]\\ &=E\big[Ae_{k-1}e_{k-1}^TA^T\big]+E\big[Ae_{k-1}w_{k-1}^T\big]+E\big[w_{k-1}e_{k-1}^TA^T\big]+E\big[w_{k-1}w_{k-1}^T\big]\\ &=AE\big[e_{k-1}e_{k-1}^T\big]A^T+E\big[w_{k-1}w_{k-1}^T\big]\\ &=AP_{k-1}A^T+Q\\ \end{aligned} Pk−=E[ek−ek−T]=E[(Aek−1+wk−1)(Aek−1+wk−1)T]=E[(Aek−1+wk−1)(ek−1TAT+wk−1T)]=E[Aek−1ek−1TAT+Aek−1wk−1T+wk−1ek−1TAT+wk−1wk−1T]=E[Aek−1ek−1TAT]+E[Aek−1wk−1T]+E[wk−1ek−1TAT]+E[wk−1wk−1T]=AE[ek−1ek−1T]AT+E[wk−1wk−1T]=APk−1AT+Q
这样就可以利用卡尔曼滤波器来估计状态变量的值了,它分为两个部分,一个是预测,另一个是校正。
预测 | |
---|---|
先验估计 | x ~ k − = A x ~ k − 1 + B u k − 1 \tilde{x}_k^-=A\tilde{x}_{k-1}+Bu_{k-1} x~k−=Ax~k−1+Buk−1 |
先验估计协方差 | P k − = A P k − 1 A T + Q P_k^-=AP_{k-1}A^T+Q Pk−=APk−1AT+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=HPk−HT+RPk−HT |
后验估计 | x ~ k = x ~ k − + K k ( z k − H x ~ k − ) \tilde{x}_k=\tilde{x}_k^-+K_k(z_k-H\tilde{x}_k^-) x~k=x~k−+Kk(zk−Hx~k−) |
然后我们还要更新 P k P_k Pk
上一节,我们证明了
P k = P k − − ( K k H P k − ) T − K k H P k − + K k H P k − H T K k T + K k R K k T P_k=P_k^--(K_kHP_k^-)^T-K_kHP_k^-+K_kHP_k^-H^TK_k^T+K_kRK_k^T Pk=Pk−−(KkHPk−)T−KkHPk−+KkHPk−HTKkT+KkRKkT
再带入 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=HPk−HT+RPk−HT
可得
P k = ( I − K k H ) P k − P_k=(I-K_kH)P_k^- Pk=(I−KkH)Pk−
这就得到了卡尔曼滤波器完整的五个公式:
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 − \tilde{x}_k^-=A\tilde{x}_{k-1}+Bu_{k-1}\\ \quad\\ P_k^-=AP_{k-1}A^T+Q\\ \quad\\ K_k=\frac{P_k^{-}H^T}{HP_k^-H^T+R}\\ \quad\\ \tilde{x}_k=\tilde{x}_k^-+K_k(z_k-H\tilde{x}_k^-)\\ \quad\\ P_k=(I-K_kH)P_k^- x~k−=Ax~k−1+Buk−1Pk−=APk−1AT+QKk=HPk−HT+RPk−HTx~k=x~k−+Kk(zk−Hx~k−)Pk=(I−KkH)Pk−