⛄一、EKF算法简介
扩展卡尔曼滤波是利用泰勒级数展开方法将非线性滤波问题转化成近似的线性滤波问题,利用线性滤波的理论求解非线性滤波问题的次优滤波算法。其系统的状态方程和量测方程分别如式(1)、式(2)所示:
式中,X(k)为n维的随机状态向量序列,Z(k)为n维的随机量测向量序列,f(k,x(k))为空气阻力,v(k)、w(k)为零均值的正态(高斯)白噪声序列,其方差分别满足:
协方差的一步预测为:
量测预测值为:
相应的协方差为:
增益为:
状态更新方程为:
协方差更新方程为:
式中,I为与协方差同维的单位矩阵。
二阶扩展卡尔曼滤波的泰勒展开保留到二阶项,其状态的一步预测为:
协方差的一步预测为:
量测预测值为:
协方差更新方程为:
式中,I为与协方差同维的单位矩阵。
⛄二、部分源代码
clc;clear
N=501;
T=0.1;
alpha=1/60;
% X=[0 0 0 47.8109 18.1173 47.8109 0 0 0]‘;%%%X初值
X=[10 10 10 47.8109 18.1173 47.8109 1 1 1]’;%状态向量初值
P=diag([1000;1000;1000;10;10;10;10;10;10]).^2;%%%%P初值
n=size(X,1);
% % % %
target=load(‘target.txt’);
% % % % % %
UAV1=load(‘UAV1.txt’);
UAV2=load(‘UAV2.txt’);
Xs1=UAV1(:,2);
Ys1=UAV1(:,3);
Zs1=UAV1(:,4);
Xs2=UAV2(:,2);
Ys2=UAV2(:,3);
Zs2=UAV2(:,4);
% % % % % % 量测信息
measurement=load(‘measurement.txt’);
gama1=measurement(:,2);
eta1=measurement(:,3);
gama2=measurement(:,4);
eta2=measurement(:,5);
% % % % %
v=0.3pi/180randn;
R=v^2eye(4);
% Q=diag([10;10;10;5;5;5;1;1;1]).^2;
O=zeros(3,3);
o=zeros(1,6);
I=eye(3);
E=eye(n);
% % % % % % %
%过程噪声矩阵
Q=diag([10;5;1]);
%%%
F=[I TI (1/alpha)^2*(-1+alphaT+exp(-alphaT))I;
O I (1/alpha)(1-exp(-alphaT))I;
O O exp(-alphaT)I];
U=[(T2/2-(alpha*T-1+exp(-alpha*T))/alpha2)I;
(T-(1-exp(-alphaT))/alpha)I;
(1-exp(-alphaT))I];
G=[1/alpha2*((1-exp(-alpha*T))/alpha+alpha*T2/2-T)I;
(T-(1-exp(-alphaT))/alpha)/alphaI;
(1-exp(-alphaT))/alphaI];
% % % % 系统噪声 以下噪声导致不能收敛
% q11=1/(2alpha5)*(1-exp(-2*alpha*T)+2*alpha*T+2*alpha3T3/3-2*alpha2T^2-4alphaTexp(-alphaT));
% q12=1/(2alpha4)*(1+exp(-2*alpha*T)-2*exp(-alpha*T)+2*alpha*T*exp(-alpha*T)-2*alpha*T+alpha2T^2);
% q13=1/(2alpha^3)(1-2exp(-alphaT)+2alphaTexp(-alphaT));
% q22=1/(2alpha^3)(4exp(-alphaT)-3-exp(-2alphaT)+2alphaT);
% q23=1/(2alpha^2)(exp(-2alphaT)+1-2alphaT);
% q33=1/(2alpha)(1-exp(-alphaT));
% Q=2alpha100^2*[q11 q12 q13;q12 q22 q23;q13 q23 q33];
% % % %
for k=1:N
%X=FX+UX(7:9)+Gw;
Z=[gama1(k) eta1(k) gama2(k) eta2(k)]';
H=cal_H(X(1),X(2),X(3),Xs1(k),Xs2(k),Ys1(k),Ys2(k),Zs1(k),Zs2(k));
X=FX+UX(7:9);
P=FPF’+GQG’;
K=PH’/(HPH’+R);
Zpre=cal_Z(X(1),X(2),X(3),Xs1(k),Xs2(k),Ys1(k),Ys2(k),Zs1(k),Zs2(k));
X=X+K*(Z-Zpre);
P=(eye(9)-K*H)*P;
Xekf(k,:)=X;
end
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]宁倩慧,张艳兵,刘莉,陆真,郭冰陶.扩展卡尔曼滤波的目标跟踪优化算法[J].探测与控制学报. 2016,38(01)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除