在看到静笔《信息融合滤波理论及其应用》后,可以发现信息融合的研究方向是以下两个方面: 1 .系统状态滤波、平滑、估计; 2 .系统噪声和观测噪声估计。 系统状态的过滤是指根据1、2、t时刻的观测值来推测当前的t时刻的状态值; 系统状态的平滑化是指使用1,2, t, t k时刻的观测值来推测当前的t时刻的状态值; 系统状态的预测是指,使用1、2、 t的观测值预测时刻t 1的状态值。 估计系统噪声是使用前t-n时间点的观测值来估计系统噪声w(t )的量值。估计的噪声是使用前t-n时间点的观测值来估计观测噪声v(t )的量值,其表示为
在我之前博客中卡尔曼滤波器的推导中,卡尔曼滤波器的五个公式包含了状态的预测和估计过程。 这个博客主要谈论系统状态的平滑过程。
卡尔曼滤波平滑主要有固定点平滑、固定滞后平滑、固定区间平滑三种平滑方式。 我想这三种流畅方法的介绍在yydxf老师的课上已经说得很清楚了,所以我就直接贴讲义的说明:
关于具体的卡尔曼滤波算法的记述,不准备采用psddy讲义的算法。 psddy算法容易理解,但不实用,且存在大量的矩阵求逆过程,计算过程过于复杂,现介绍一种安静的笔电平滑算法。
定理1 )对于以下系统:
(1) ) ) )。
(2) ) ) )。
最佳递归固定点Kalman平滑器如下。
(3) ) )。
平滑化误差如下。
(4) ) )。
其中:
(5) ) )。
由于t N时的新信息,不明白的地方可以通过浏览前一篇博客的卡尔曼滤波推导出来,其中有具体介绍。
证明过程:
从递归射影定理可以看出:
(6) ) )。
其中:
(7) ) )。
因为有:
(8) )。
(9) ) )。
通过式9的进一步误差递归式,与的关系式如下求出。
(十) )。
在式9中,Ai、Bi分别是系数矩阵。
(11)因为存在:
当时
当时
当时
当时
由式10和式11可得:
(12)
则有:
(13)
因为有:
(14)
(15)
定理得证。
定理2:最优固定滞后Kalman平滑器如下:
(16)
(17)
定理2可以通过定理1递推证明。
定理3:固定区间Kalman平滑器如下:
(18)
其中:
(19)
其中有.
方差阵为:
(20)
其中有:
(21)
其中有:
证明过程:
由定理2可知
当N=N-t时,带入上式有:
(22)
将K(t/t+i)的表达式带入上式可得:
(23)
则有:
(24)
(25)
则有:
对于方差:
(26)
(27)
由此有:
(28)
(29)
由此定理三得证。
综上所述,卡尔曼平滑器介绍完毕(这一篇文章用到了很多我上一篇讲到的知识点,有不懂的可以看看的上一篇博客卡尔曼滤波的推导)。
算法仿真:
考虑随机系统:
其中Qw=0.4,R=10,仿真效果图如下:
matlab仿真代码如下:
clc;clear;N=500;A=[1,0;0.2,0.6];G=[1;2];H=[1,1];Q=0.4;R=10;RandNum=normrnd(0,sqrt(Q),1,N);RandNum1=normrnd(0,sqrt(R),1,N);%%获得测量数据x(:,1)=[0;0];y(1)=0;for i=2:N x(:,i)=A*x(:,i-1)+G*RandNum(i); y(i)=H*x(:,i)+RandNum1(i);endPk(:,:,1)=[Q,0;0,R];X(:,1)=[0;0];I=eye(2);K(:,1)=[0;0];Xk(:,1)=[0;0];Pkk(:,:,1)=[0,0;0,0];for i=2:N Xk(:,i)=A*X(:,i-1); Pkk(:,:,i)=A*Pk(:,:,i-1)*A'+G*Q*G'; K(:,i)=Pkk(:,:,i)*H'/(H*Pkk(:,:,i)*H'+R); X(:,i)=Xk(:,i)+K(:,i)*(y(i)-H*Xk(:,i)); Pk(:,:,i)=(I-K(:,i)*H)*Pkk(:,:,i);endN1=3;for i=2:N-N1-1 Ks=K(:,i)*(y(i)-H*Xk(:,i)); for j=2:N1+1 KN=eye(2); for k=1:j-1 KN=KN*(I-K(:,i+k-1)*H)'*A'; end KN=Pkk(i)*KN*H'/(H*Pkk(i+j-1)*H'+R); Ks=Ks+KN*(y(i+j-1)-H*Xk(:,i+j-1)); end X2(:,i)=Xk(:,i)+Ks;end X2(:,N-2)=X(:,N-2);X2(:,N-1)=X(:,N-1);X2(:,N)=X(:,N);t=1:N;figure(1);subplot(2,2,1);plot(t,x(1,:),'r',t,X(1,:),'k');subplot(2,2,2);plot(t,x(2,:),'r',t,X(2,:),'k');subplot(2,2,3);plot(t,X(1,:),'r',t,X2(1,:),'k');subplot(2,2,4);plot(t,X(2,:),'r',t,X2(2,:),'k');figure(2);plot(t,X(1,:)-x(1,:),'r',t,X2(1,:)-x(1,:),'k');figure(3);plot(t,X(2,:)-x(2,:),'r',t,X2(2,:)-x(2,:),'k');