一些基本数学知识
- 均方误差
MSE=E(x^−x)2MSE = E(\hat{x} - x)^2MSE=E(x^−x)2 - 协方差矩阵
Cov(x)=E[(x−μ)(x−μ)T]=ΣCov(x) = E[(x - \mu)(x - \mu)^T] = \SigmaCov(x)=E[(x−μ)(x−μ)T]=Σ
其实若估计值是无偏估计时,即μe=0\mu_e = 0μe=0时,tr(C)tr(C)tr(C)就是MSE。 - 线性系统状态差分方程xk=Axk−1+Buk−1+wk−1x_k = Ax_{k-1} +Bu_{k-1}+ w_{k-1}xk=Axk−1+Buk−1+wk−1 系统观测方程zk=Hxk+vkz_k = Hx_k +v_kzk=Hxk+vk
推导过程
注意区分估计值xk^\hat{x_k}xk^和预测值xk~\tilde{x_k}xk~
xk^=xk~+Kk(zk−Hxk)\hat{x_k} = \tilde{x_k} + K_k(z_k - Hx_k)xk^=xk~+Kk(zk−Hxk) 为使每时刻的估计值都为最优估计,因此需要寻找一个目标函数,来求取每时刻使目标函数最小的增益矩阵KkK_kKk
使用真实值与估计值之间的误差的协方差阵作为目标函数,即Pk=E[(ek)(ek)T]=E[(x−xk^)(x−xk^)T]P_k = E[(e_k)(e_k)^T] = E[(x - \hat{x_k})(x - \hat{x_k})^T]Pk=E[(ek)(ek)T]=E[(x−xk^)(x−xk^)T]
=E[((I−KkH)(xk−xk~)−kkvk)∗((I−KkH)(xk−xk~)−kkvk)T] = E[((I - K_kH)(x_k - \tilde{x_k}) - k_kv_k) *((I - K_kH)(x_k - \tilde{x_k}) - k_kv_k)^T]=E[((I−KkH)(xk−xk~)−kkvk)∗((I−KkH)(xk−xk~)−kkvk)T]
由于测量噪声为白噪声,E(vk)=0E(v_k) = 0E(vk)=0 ,因此PkP_kPk可简化为
Pk=(I−KkH)E[(xk−xk~)(xk−xk~)T](I−KkH)T+KkE(vkvkT)KkTP_k = (I - K_kH)E[(x_k - \tilde{x_k})(x_k - \tilde{x_k})^T] (I - K_kH)^T + K _kE(v_kv_k^T)K_k^TPk=(I−KkH)E[(xk−xk~)(xk−xk~)T](I−KkH)T+KkE(vkvkT)KkT
令E[(xk−xk~)(xk−xk~)T]=Pk~E[(x_k - \tilde{x_k})(x_k - \tilde{x_k})^T] = \tilde{P_k}E[(xk−xk~)(xk−xk~)T]=Pk~, E(vkvkT)=RE(v_kv_k^T) = RE(vkvkT)=R
则Pk=(I−KkH)Pk~(I−KkH)T+KkRKkTP_k = (I - K_kH) \tilde{P_k}(I - K_kH)^T + K _kRK_k^TPk=(I−KkH)Pk~(I−KkH)T+KkRKkT
=Pk~−KkHPk~−Pk~HTKkT+Kk(HPk~HT+R)KkT = \tilde{P_k} - K_kH\tilde{P_k} - \tilde{P_k}H^TK_k^T + K_k(H\tilde{P_k}H^T + R)K_k^T=Pk~−KkHPk~−Pk~HTKkT+Kk(HPk~HT+R)KkT
求改协方差矩阵的最小值与求改协方差矩阵的迹的最小值等价,因此
tr(Pk)=tr(Pk~)−2tr(KkHPk~)−tr(Kk(HPk~HT+R)KkT)tr(P_k)= tr(\tilde{P_k}) - 2tr(K_kH\tilde{P_k} ) - tr(K_k(H\tilde{P_k}H^T + R)K_k^T)tr(Pk)=tr(Pk~)−2tr(KkHPk~)−tr(Kk(HPk~HT+R)KkT)
∂tr(PK)∂Kk=−2(HPk~)T−2Kk(HPk~HT+R)=0\frac{\partial tr(P_K)}{\partial K_k } = -2(H\tilde{P_k})^T - 2K_k(H\tilde{P_k}H^T + R ) = 0∂Kk∂tr(PK)=−2(HPk~)T−2Kk(HPk~HT+R)=0
Kk=PkT~HT(HPk~HT+R)−1 K_k = \tilde{P_k^T}H^T(H\tilde{P_k}H^T + R )^{-1}Kk=PkT~HT(HPk~HT+R)−1
将KkK_kKk带入PkP_kPk中得到
Pk=(I−KkH)Pk~P_k = (I - K_kH)\tilde{P_k}Pk=(I−KkH)Pk~
Pk~=E[(x−xk~)(x−xk~)T]\tilde{P_k} = E[(x - \tilde{x_k})(x - \tilde{x_k})^T]Pk~=E[(x−xk~)(x−xk~)T]
=E[((Axk−1+wk)−Ax^k−1)((Axk−1+wk)−Ax^k−1)T] = E[((Ax_{k-1} +w_k) - A\hat{x}_{k-1})((Ax_{k-1} +w_k) - A\hat{x}_{k-1})^T]=E[((Axk−1+wk)−Ax^k−1)((Axk−1+wk)−Ax^k−1)T]
=E[(A(xk−1−x^k−1)(xk−1−x^k−1)TAT]+E(wk−1wk−1T)=E[(A(x_{k-1} - \hat{x}_{k-1})(x_{k-1} - \hat{x}_{k-1})^TA^T] +E(w_{k-1}w_{k-1}^T)=E[(A(xk−1−x^k−1)(xk−1−x^k−1)TAT]+E(wk−1wk−1T)
=APk−1AT+Q=AP_{k-1}A^T +Q=APk−1AT+Q
由此得到P~k\tilde P_kP~k的递推公式
算法过程
- 初始化k时刻的协方差矩阵PkP_kPk和k时刻的估计值x^k\hat{x}_kx^k
- 计算K+1时刻的P~k+1\tilde P_{k+1}P~k+1和K+1时刻的预测值x~k+1\tilde x_{k+1}x~k+1
P~k+1=AP^kAT+Q; x~k+1=Axk^+Buk \tilde P_{k+1} =A\hat P_kA^T+Q; \tilde x_{k+1}=A\hat{x_k}+Bu_k P~k+1=AP^kAT+Q; x~k+1=Axk^+Buk - 计算K+1时刻的增益矩阵Kk+1K_{k+1}Kk+1Kk+1=P~k+1HT(HP~k+1HT+R)−1K_{k+1} = \tilde P_{k+1}H^T(H\tilde P_{k+1}H^T+R)^{-1}Kk+1=P~k+1HT(HP~k+1HT+R)−1
- 计算K+1时刻的估计值x^k+1和K+1时刻协方差矩阵Pk+1\hat x_{k+1}和K+1时刻协方差矩阵P_{k+1}x^k+1和K+1时刻协方差矩阵Pk+1x^k+1=x~k+1+Kk+1(zk−Hx~k+1)\hat x_{k+1} = \tilde x_{k+1}+K_{k+1}(z_k-H\tilde x_{k+1})x^k+1=x~k+1+Kk+1(zk−Hx~k+1)
Pk+1=(I−KK+1H)P~k+1P_{k+1} = (I-K_{K+1}H)\tilde P_{k+1}Pk+1=(I−KK+1H)P~k+1