⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fusion_asyn.m

📁 扩展卡尔曼滤波 信息同步 数据融合算法实现
💻 M
字号:
% %  融合
% %  同步后数据的融合
% %  时间  2003 6 18
% %  秦玉亮
% % %-----------------------------------------------------------------------------------------------
function y=fusion_asyn;
clear;
clc;
[ZTrue]=source;


Tf=0.020;%融合周期
TimesOut=fix(10/Tf);
 %-------------误差计算-----------------------------------
 ErrSquareSita=zeros(TimesOut,1)    %方位角误差平方和变量
 ErrSquareSita_w=zeros(TimesOut,1);    %方位角速度误差平方和变量
 ErrSquareBeta=zeros(TimesOut,1)    %俯仰角误差平方和变量
 ErrSquareBeta_w=zeros(TimesOut,1);    %俯仰角速度误差平方和变量
 
  ErrSquareSita1=zeros(TimesOut,1)    %方位角误差平方和变量
 ErrSquareSita_w1=zeros(TimesOut,1);    %方位角速度误差平方和变量
 ErrSquareBeta1=zeros(TimesOut,1)    %俯仰角误差平方和变量
 ErrSquareBeta_w1=zeros(TimesOut,1);    %俯仰角速度误差平方和变量

  ErrSquareSita2=zeros(TimesOut,1)    %方位角误差平方和变量
 ErrSquareSita_w2=zeros(TimesOut,1);    %方位角速度误差平方和变量
 ErrSquareBeta2=zeros(TimesOut,1)    %俯仰角误差平方和变量
 ErrSquareBeta_w2=zeros(TimesOut,1);    %俯仰角速度误差平方和变量
 
 mont=10;
 for m=1:mont
 [Xasyn_Radar,Zasyn_Radar,Pasyn_Radar]=Asynchronism_Radar;
[Xasyn_IR,Zasyn_IR,Pasyn_IR]=Asynchronism_IR;
Xfusion=zeros(6,1,TimesOut);
for i=1:TimesOut
    for j=1:6
       Xfusion(j,1,i)=(Pasyn_IR(j,j,i)*Xasyn_Radar(j,1,i)+Pasyn_Radar(j,j,i)*Xasyn_IR(j,1,i))/(Pasyn_Radar(j,j,i)+Pasyn_IR(j,j,i));
    end
end

Zfusion=zeros(4,1,TimesOut);

%-------------转换为极坐标下值---------------------------------------------------------------
 for i=1:TimesOut
    %模型观测距离
   
%     range=(X2(1,1,i)^2+X2(3,1,i)^2+X2(5,1,i)^2)^0.5;

      
    %模拟观测方位角度 
    azimuth=atan(Xfusion(1,1,i)/Xfusion(3,1,i));      %%%%%   这里采用的是孙忠康的雷达数据处理中323页的公式  注意其方位角的公式与一般不同!!!!!!!      

%      
    if azimuth>2*pi
        azimuth=azimuth-2*pi;
    else if azimuth < 0
            azimuth=azimuth+2*pi;
        end;
    end;
    %观测俯仰角度
    pitching=atan(Xfusion(5,1,i)/(Xfusion(1,1,i)^2+Xfusion(3,1,i)^2)^0.5);
    if pitching>pi/2
        pitching=pitching-pi;
    else if pitching<-pi/2
            pitching=pitching+pi;
        end;
    end;
    %观测方位角速度
    azimuth_w=(Xfusion(3,1,i)*Xfusion(2,1,i)-Xfusion(1,1,i)*Xfusion(4,1,i))/(Xfusion(1,1,i)^2+Xfusion(3,1,i)^2)  ;
    
    %观测俯仰角角速度
    R_Rs=(Xfusion(1,1,i)^2+Xfusion(3,1,i)^2)^0.5;
    R_R=(Xfusion(1,1,i)^2+Xfusion(3,1,i)^2+Xfusion(5,1,i)^2)^0.5;
    R_V=(Xfusion(1,1,i)*Xfusion(2,1,i)+Xfusion(3,1,i)*Xfusion(4,1,i)+Xfusion(5,1,i)*Xfusion(6,1,i) )/R_R;
    
   pitching_w=( Xfusion(6,1,i)*R_R-Xfusion(5,1,i)*R_V)/(R_R*R_Rs) ;
    
    Zfusion(:,:,i)=[%range;
              azimuth;
              pitching;
              azimuth_w;
              pitching_w];
  end; 
 %-------------转换为极坐标系下值结束-------------


 for i=1:TimesOut
    ErrSquareSita(i)=(ZTrue(1,1,i)-Zfusion(1,1,i)).^2+ErrSquareSita(i);
    ErrSquareBeta(i)=(ZTrue(2,1,i)-Zfusion(2,1,i)).^2+ErrSquareBeta(i);
    ErrSquareSita_w(i)=(ZTrue(3,1,i)-Zfusion(3,1,i)).^2+ErrSquareSita_w(i);
    ErrSquareBeta_w(i)=(ZTrue(4,1,i)-Zfusion(4,1,i)).^2+ErrSquareBeta_w(i);

    ErrSquareSita1(i)=(ZTrue(1,1,i)-Zasyn_Radar(1,1,i)).^2+ErrSquareSita1(i);
    ErrSquareBeta1(i)=(ZTrue(2,1,i)-Zasyn_Radar(2,1,i)).^2+ErrSquareBeta1(i);
    ErrSquareSita_w1(i)=(ZTrue(3,1,i)-Zasyn_Radar(3,1,i)).^2+ErrSquareSita_w1(i);
    ErrSquareBeta_w1(i)=(ZTrue(4,1,i)-Zasyn_Radar(4,1,i)).^2+ErrSquareBeta_w1(i);

    ErrSquareSita2(i)=(ZTrue(1,1,i)-Zasyn_IR(1,1,i)).^2+ErrSquareSita2(i);
    ErrSquareBeta2(i)=(ZTrue(2,1,i)-Zasyn_IR(2,1,i)).^2+ErrSquareBeta2(i);
    ErrSquareSita_w2(i)=(ZTrue(3,1,i)-Zasyn_IR(3,1,i)).^2+ErrSquareSita_w2(i);
    ErrSquareBeta_w2(i)=(ZTrue(4,1,i)-Zasyn_IR(4,1,i)).^2+ErrSquareBeta_w2(i);

end
end
% for i=2:TimesOut
%     A(i)=sqrt(ErrSquareSita(i)/mont);
%     B(i)=sqrt(ErrSquareBeta(i)/mont);
%     C(i)=sqrt(ErrSquareSita_w(i)/mont);
%     D(i)=sqrt(ErrSquareBeta_w(i)/mont);
% 
%     A1(i)=sqrt(ErrSquareSita1(i)/mont);
%     B1(i)=sqrt(ErrSquareBeta1(i)/mont);
%     C1(i)=sqrt(ErrSquareSita_w1(i)/mont);
%     D1(i)=sqrt(ErrSquareBeta_w1(i)/mont);
%     
%     A2(i)=sqrt(ErrSquareSita2(i)/mont);
%     B2(i)=sqrt(ErrSquareBeta2(i)/mont);
%     C2(i)=sqrt(ErrSquareSita_w2(i)/mont);
%     D2(i)=sqrt(ErrSquareBeta_w2(i)/mont);
% 
% end
for i=2:TimesOut
    A(i-1)=sqrt(ErrSquareSita(i)/mont);
    B(i-1)=sqrt(ErrSquareBeta(i)/mont);
    C(i-1)=sqrt(ErrSquareSita_w(i)/mont);
    D(i-1)=sqrt(ErrSquareBeta_w(i)/mont);

    A1(i-1)=sqrt(ErrSquareSita1(i)/mont);
    B1(i-1)=sqrt(ErrSquareBeta1(i)/mont);
    C1(i-1)=sqrt(ErrSquareSita_w1(i)/mont);
    D1(i-1)=sqrt(ErrSquareBeta_w1(i)/mont);
    
    A2(i-1)=sqrt(ErrSquareSita2(i)/mont);
    B2(i-1)=sqrt(ErrSquareBeta2(i)/mont);
    C2(i-1)=sqrt(ErrSquareSita_w2(i)/mont);
    D2(i-1)=sqrt(ErrSquareBeta_w2(i)/mont);

end
  %-------------误差计算结束------------------------------

p=2:TimesOut;

plot(p,A,'r',p,A1,p,A2);
title('方位角误差均方根');
xlabel('t');
ylabel('error /rad');
legend('融合结果','雷达滤波值','红外滤波值');
figure;
plot(p,B,'r',p,B1,p,B2);
title('俯仰角误差均方根');
xlabel('t');
ylabel('error /rad');
legend('融合结果','雷达滤波值','红外滤波值');
figure;
plot(p,C,'r',p,C1,p,C2);
title('方位角角速率误差均方根');
xlabel('t');
ylabel('error /rad');
legend('融合结果','雷达滤波值','红外滤波值');
figure;
plot(p,D,'r',p,D1,p,D2);
title('俯仰角角速率误差均方根');
xlabel('t');
ylabel('error /rad');
legend('融合结果','雷达滤波值','红外滤波值');



% for i=1:TimesOut
%     A(i)=Zasyn_Radar(1,1,i);
%     B(i)=ZTrue(1,1,i);
%     C(i)=Zasyn_IR(1,1,i);
% end
% plot(p,A,p,B,'r',p,C);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -