代码说明:
matlab7.1环境,把当前文件夹指定为matlab工作目录
simulate.m为主控程序
其余为被调函数
文件1 ds_fusion.m
function x=DS_fusion(x,y)
%功能:融合x,y两行向量
[nx,mx]=size(x);
if 1~=nx
disp('x应为行向量');
return;
end
[ny,my]=size(y);
if 1~=ny
disp('y应为行向量');
return;
end
if mx~=my
disp('x,y列数应相等');
return;
end
temp=0;
for i=1:mx-1
x(1,i)=x(1,i)*y(1,i)+x(1,i)*y(1,mx-1)+y(1,i)*x(1,mx-1);
if i==mx-1
x(1,i)=x(1,i)*y(1,i);
end
temp=temp+x(1,i);
end
for i=1:mx-1
x(1,i)=x(1,i)/temp;
end
x(1,mx)=0;
文件2 ds_out.m
function DS_out(Result,ec1,ec2)
%功能:由Result结果和ec1 ec2做出判断
[nx,mx]=size(Result);
if 1~=nx
disp('Result应为行向量');
return;
end
[data,index]=sort(Result(1,1:mx-2)); %升序排列
if (Result(index(mx-2))-Result(index(mx-3))>ec1) & (Result(mx-1)<ec2) & (Result(index(mx-2))>Result(mx-1))
if index(mx-2)==1 %火控 瞄准 导航 预警
Type='机载火控雷达';
elseif index(mx-2)==2
Type='机载瞄准雷达';
elseif index(mx-2)==3
Type='机载导航雷达';
elseif index(mx-2)==4
Type='机载预警雷达';
else
Type='识别算法出错';
end
else
Type='无法识别目标';
end
Type
文件3 simulate.m
clear
%%%%%%%%%% D_S算法设置 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
num_Sensor=3; %传感器数目
num_Object=6; %识别对象数目 四个目标(机载雷达: 火控 瞄准 导航 预警)+全集+空集
num_Period=3; %测量周期数
Info=zeros(num_Sensor,num_Object,num_Period); % 一次判决所需要的信息
Info(:,:,1)=[0.30 0.40 0.15 0.00 0.15 0.00;
0.30 0.50 0.10 0.00 0.10 0.00;
0.30 0.30 0.20 0.00 0.20 0.00;];
Info(:,:,2)=[0.40 0.20 0.20 0.00 0.20 0.00;
0.50 0.20 0.20 0.00 0.10 0.00;
0.50 0.30 0.10 0.00 0.10 0.00;];
Info(:,:,3)=[0.50 0.20 0.15 0.00 0.15 0.00;
0.40 0.30 0.10 0.00 0.20 0.00;
0.40 0.20 0.10 0.00 0.30 0.00;];
Info1=zeros(num_Period,num_Object);
%各周期内传感器的融合
for i=1:num_Period
Info1(i,:)=Info(1,:,i);
for j=1:num_Sensor-1
Info1(i,:)=DS_fusion(Info1(i,:),Info(j+1,:,i));
end
end
%周期之间的融合
Result=Info1(1,:);
for i=1:num_Period-1
Result=DS_fusion(Result,Info1(i+1,:));
end
ec1=0.1; %融合决策判据
ec2=0.1;
DS_out(Result,ec1,ec2);