• 大小: 785B
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: Matlab
  • 标签: matlab  EKF  

资源简介

matlab写的一个扩展卡尔曼滤波程序,状态方程为线性,观测方程非线性,最后输出图片以便观察是否收敛,分享给大家参考。

资源截图

代码片段和文件信息

t=3;
Ts=0.1;
len=fix(t/Ts);

xn=zeros(3len);
x_pre=zeros(3len);
x_up=zeros(3len);

s_con=zeros(31);
s_con(11)=9.8*cos(pi/6);
s_con(21)=9.8*sin(pi/6);
s_con(31)=0;

xn(31)=pi/6;
x_pre(31)=pi/6;

z=zeros(2len);
h=zeros(2len);

sx=0.1;
sy=0.1;
sa=pi/1800;

dafa=pi/720;
dr=6;

Qk=diag([sa;sx;sy])^2;
Rk=diag([dr;dafa])^2;

p=1*eye(3);

F=zeros(33);
F(11)=1;
F(22)=1;
F(33)=1;

for i=1:len-1
%真实值
xn(1i+1)=xn(1i)+s_con(11)+sx*randn(11);
xn(2i+1)=xn(2i)+s_con(21)+sy*randn(11);
xn(3i+1)=xn(3i)+sa*randn(11);
%测量值
z(1i+1)=sqrt((xn(1i+1))^2+(xn(2i+1))^2)+dr*randn(11);
z(2i+1)=atan(xn(2i+1)/xn(1i+1))+dafa*randn(11);

%预测值
x_pre(1i+1)=x_up(1i)+s_con(11);
x_pre(2i+1)=x_up(2i)+s_con(21);
x_pre(3i+1)=x_up(3i);

h(1i+1)=sqrt((x_pre(1i+1))^2+(x_pre(2i+1))^2);
h(2i+1)=atan(x_pre(2i+1)/x_pre(1i+1));

p_pre=F*p*F‘+Qk;

%观测矩阵的雅克比矩阵
H=zeros(23);
r=sqrt((x_pre(1i+1))^2+(x_pre(2i+1))^2);
H(11)=x_pre(1i+1)/r;
H(12)=x_pre(2i+1)/r;
H(13)=0;
H(21)=-x_pre(2i+1)/r^2;
H(22)=x_pre(1i+1)/r^2;
H(23)=0;

%卡尔曼增益
S=H*p_pre*H‘+Rk;
K=p_pre*H‘*(S^-1);

%更新方程
x_up=x_pre+K*(z-h);
p=p_pre-K*H*p_pre;

end

x_up(11)=0;
x_up(21)=-20;


figurehold ongrid on;
plot(xn(1:)xn(2:)‘-b‘);
plot(z(1:).*cos(z(2:))z(1:).*sin(z(2:))‘G‘);
plot(x_up(1:)x_up(2:)‘r‘);
xlabel(‘X‘);
ylabel(‘Y‘);
title(‘EKFsimulation‘);
legend(‘real‘‘measurement‘‘ekfestimated‘);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1510  2019-12-31 21:55  EKF.m

评论

共有 条评论