📄 fusion_asyn.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 + -