本节卡尔曼滤波Matlab实现是针对线性系统估计的,仅为简单仿真。
1.离散时间线性动态系统的状态方程
线性系统采用状态方程、观测方程及其初始条件来描述。线性离散时间系统的一般状态方程可描述为
其中,X(k) 是 k 时刻目标的状态向量,V(k)是过程噪声,它是具有均值为零、方差矩阵为 Q(k) 的高斯噪声向量,即
Q(k)是状态转移矩阵, G(k)是过程噪声增益矩阵。
2.传感器的测量(观测)方程
传感器的通用观测方程为
这里, Z(k+1)是传感器在 k+1 时刻的观测向量,观测噪声 W(k+1) 是具有零均值和正定协方差矩阵 R(k+1) 的高斯分布测量噪声向量,即
3.初始状态的描述
初始状态 X(0) 是高斯的,具有均值 X(0|0) 和协方差 ,即
4.Kalman滤波算法
状态估计的一步预测方程为
一步预测的协方差为
预测的观测向量为
观测向量的预测误差协方差为
新息或量测残差为
滤波器增益为
Kalman滤波算法的状态更新方程为
滤波误差协方差的更新方程为
A=1;
H=0.2;
X(1)=0;
Y(1)=1;
P(1)=10;
N=200;
V=randn(1,N);
w=randn(1,N);
for k=2:N
X(k) = A * X(k-1)+V(k-1);
end
Q=std(V)^2;
R=std(w)^2;
Z=H*X+w;
for t=2:N
P(t) = A * P(t-1)+Q;
S(t) = H.^2 * P(t)+R;
K(t) = H * P(t)/S(t);
v(t) = Z(t) - ( A * H * Y(t-1) );
Y(t)=A * Y(t-1) + K(t) * v(t);
P(t)=(1-H * K(t)) * P(t);
end
t=1:N;
plot(t,Y,'r',t,Z,'g',t,X,'b');
legend('Kalman滤波结果','观测值','预测值');
运行结果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)