www.gusucode.com > 基于cv/ca/signer模型的卡尔曼滤波 > ca.m

    clear;
clc;
T=2;
num=50; 
N0=400/T;
N1=600/T;
% N3=610/T;N4=660/T;N5=900/T;
x=zeros(N1,1);
y=zeros(N1,1);
vx=zeros(N1,1);
vy=zeros(N1,1);
x(1)=-10000;y(1)=2000;
vx(1)=15;vy(1)=0;
ax=0;ay=0;
var=100;
for i=1:N1-1
    if(i>N0-1&i<=N1-1)
        ax=-0.075;ay=0.075;
        vx(i+1)=vx(i)+ax*T;
        vy(i+1)=vy(i)+ax*T;
       
    else
        ax=0;ay=0;
        vx(i+1)=vx(i);
        vy(i+1)=vy(i);
    end
    x(i+1)=x(i)+vx(1)*T;
    y(i+1)=y(i)+vy(i)*T;
 end
rex(num,N1)=0;
rey(num,N1)=0;
%
for m=1:num
    nx=100*randn(N1,1);
    ny=100*randn(N1,1);
    zx=x+nx;
    zy=y+ny;
    rex(m,1)=-10000;
    rey(m,1)=2000;
    rex(m,2)=-9960;
    rey(m,2)=2000;
    ki=0;
    low=1;high=0;
    u=0;ua=0;
    e=0.8;
    xks(1)=zx(1);
    yks(1)=zy(1);
    xks(2)=zx(2);
    yks(2)=zy(2);
   o=[1,T,0,0,0.5*T^2,0;0,1,0,0,T,0;0,0,1,T,0,0.5*T^2;0,0,0,1,0,T;0,0,0,0,1,0;0,0,0,0,0,1];
h=[1,0,0,0,0,0;0,0,1,0,0,0];
g=[T^2/4,0;T/2,0;0,T^2/4;0,T/2;1,0;0,1];
q=[10000,0;0,10000];
%     o=[1,T,0,0;0,1,0,0;0,0,1,T;0,0,0,1];
%     h=[1,0,0,0;0,0,1,0];
%     g=[T^2/2,0;T,0;0,T^2/2;0,T];
%     q=[10000,0;0,10000];
%     perr=[var^2,var^2/T,0,0;var*var/T,2*var^2/(T^2),0,0;0,0,var^2,var^2/T;0,0,var^2/T,2*var^2/(T^2)];
perr=diag([10000,10000,10000,10000,10000,10000]);
    vx=(zx(2)-zx(1))/2;vy=(zy(2)-zy(1))/2;
    xk=[zx(1);vx;zy(1);vy;ax;ay];
    %
    for r=3:N1

            z=[zx(r);zy(r)];
            xk1=o*xk;
            perr1=o*perr*o';
            k1=perr1*h'*inv(h*perr1*h'+q);
            xk=xk1+k1*(z-h*xk1);
            perr=(eye(6)-k1*h)*perr1;
            xks(r)=xk(1,1);
            yks(r)=xk(3,1);
            vxks(r)=xk(2,1);
            vyks(r)=xk(4,1);
            xk1s(r)=xk1(1,1);
            yk1s(r)=xk1(3,1);
            vxk1s(r)=xk1(2,1);
            vyks1(r)=xk1(4,1);
            perr11(r)=perr(1,1);
            perr12(r)=perr(1,2);
            perr22(r)=perr(2,2);
            rex(m,r)=xks(r);
           rey(m,r)=yks(r);
     end
    
end

ex=0;ey=0;
eqx=0;eqy=0;
ex1(N1,1)=0;ey1(N1,1)=0;

qx(N1,1)=0;qy(N1,1)=0;
for i=1:N1
    for j=1:num
        ex=ex+x(i)-rex(j,i);
        ey=ey+y(i)-rey(j,i);
         %eqx=eqx+(x(i)-rex(j,i))^2;
        eqx=eqx+(x(i)-rex(j,i))^2;
        eqy=eqy+(y(i)-rey(j,i))^2;
    end
%     eqx/num-(ex1(i)^2)
%sqrt((double(eqx)/num-(ex1(i)^2)));
    ex1(i)=ex/num;
    ey1(i)=ey/num;
   qx(i)=sqrt((double(eqx)/num-(ex1(i)^2)));
  qy(i)=(eqy/num-(ey1(i)^2))^0.5;
    ex=0;eqx=0;ey=0;eqy=0;
    end
figure(1);
plot(x,y,'k-',zx,zy,'g:',xks,yks,'r-.');
legend('true trace','observation samples','estimated samples');
figure(2);
plot(zx,zy);
legend('observation samples');
figure(3)
plot(xks,yks);legend('estimated trace');
figure(4);plot(x,ex1);legend('the error at x anix');
figure(5);plot(x,qx);
legend('the square error at x anix');