2018华为杯全国研究生数学建模E题:多无人机对组网雷达的协同干扰。第一部分先对赛题中几个概念做出明确解释!第二部分主要是模型需要使用的一些绘图技巧总结。
干扰机以"距离假目标欺骗"的方式来实施对地面组网雷达系统进行有效干扰。
注:干扰机基于侦察到的敌方雷达发射电磁波的信号特征,对其进行相应处理后,延迟(或导前)一定时间后再发射出去,使雷达接收到一个或多个比该目标真实距离靠后(或靠前)的回波信号。一般虚假航迹点比真实干扰机位置要远远靠后。
注:形成一条虚假航迹的起始和终止时刻的干扰机飞行轨迹和位置,以及干扰机产生的虚假航迹。
注:为方便理解这里对上面两张图再细化一下,给出不同飞行策略下的几条疑似虚假航迹的概念位置:
1.1.博弈双方:
红方:干扰机;
蓝方:地面组网雷达系统(5部);
为方便说明后续以第一文中的条件指定数据来加以说明。
1.2.何为"有效干扰"?
条件的详细说明见第一问,即5部雷达中至少有3部雷达同一时刻解算出的目标空间位置是相同的,融合中心就将其确定为一个合理的航迹点(即:为同源),20个连续的经融合中心确认的航迹点形成的合理航迹,将被组网雷达系统视为一条真实的目标航迹。
1.3.假目标点(目标航迹点信息)的实质是什么?
条件的详细说明见第一问,20个时刻,第t时刻m(m>=3)架次干扰机与地面n(n>=3)个雷达的连线的延长线的交点。
1.4."组网雷达信息融合中心"干一件什么事情?
基于一定的融合规则判断一个合理的目标航迹点,多个连续的合理目标航迹点就形成了目标航迹,即融合出一条疑似目标的有效轨迹(即:干扰机形成的干扰虚假航迹)
1.5.融合规则是什么?
条件的详细说明见第一问,20个时刻,第t时刻m架次干扰机与地面n个雷达中的m个的连线的延长线要产生公共交点(即:虚假航迹点),详见(图5 t=1时刻m架次干扰机与n部雷达组连线的延长线共交点)。通过协同控制无人机的飞行航迹,可在敌方的组网雷达系统中形成一条或多条欺骗干扰航迹,迫使敌方加强空情处置,达到欺骗目的。
1.6.干扰机和地面组网雷达的博弈关系如下,本质上是一个分段函数:假定m为干扰机数目,n为地面雷达数目。(m=1,2,3,4,5; n=1,2,3,4,5) 。博弈的结果使用F(m,n)表示。
注:从博弈角度来说,最优化问题简化为干扰机产生有效干扰时,所需的最少无人机数量。
1.7.干扰机群中中心无人机在那里合适?中心无人机的调度策略是什么?
不是很清楚,略!正在等待一等奖论文揭开谜底。
1.8.其他方面过于复杂不做深入展开。这里本文仅给出一些基础的matlab画图技巧讲解。
2.1. 干扰机群产生一个虚假航迹点的三维绘图实现:
%% 1.画出三维空间中相交的三条直线相较于同一个轨迹点
pp=[80,0,0;30,60,0;55,110,0;105,110,0;130,60,0] %雷达坐标(单位:km)
p1=[60.6,69.982,69.982]; %轨迹点
% for i=1:5
hold on
for i=1:5
k=0:0.01:1;
p2=pp(i,:);
hold on; %% 这里是实现三维相交直线相交的关键!!!
x=p1(1)+k*(p2(1)-p1(1));
y=p1(2)+k*(p2(2)-p1(2));
z=p1(3)+k*(p2(3)-p1(3));
plot3(x,y,z)
text(p2(1,1),p2(1,2),p2(1,3),['雷达',num2str(i)])
end
hold on;
plot3(60.6,69.982,69.982,'b^','MarkerSize',10,'MarkerFacecolor','b');
plot3(pp(1:5,1),pp(1:5,2),pp(1:5,3),'rp','MarkerSize',10,'MarkerFacecolor','r')
text(60.6,69.982,69.982,'轨迹点At1')
xlabel('x轴(km)');
ylabel('y轴(km)');
zlabel('z轴(km)');
title(['第1时刻轨迹点与',num2str(i),'个雷达的位置分析'])
view([-45,45])
%% 2.画出靛青色截平面,并标注截平面与连线的交点
zz=ones(130,130)*2;
% zz = z1/3000;
hold on;
x1=1:1:130;
y1=1:1:130;
%mesh(x1,y1,zz,'EdgeColor','w','FaceColor','w','MarkerEdgecolor','w','MarkerFacecolor','w');
mesh(x1,y1,zz,'EdgeColor','c','FaceColor','c','MarkerEdgecolor','c','MarkerFacecolor','c');
axis([1 130 1 130 1 70])
% 画出轨迹1到5个雷达点的效果图
guiji1x=[77713.73,29142.67,53428.2,101999.26,126284.79];
guiji1y=[1731.87,60017.15,108588.21,108588.21,60017.15];
guiji1z=ones(5,1)*2100;
%坐标转换为km
hold on;
plot3(guiji1x'/1000,guiji1y/1000,guiji1z/1000,'r*','MarkerSize',10,'MarkerFacecolor','r');
for i=1:5
text(guiji1x(i)'/1000,guiji1y(i)/1000,guiji1z(i)/1000+1.5,['截点',num2str(i)])
end
xlabel('x轴(km)');
ylabel('y轴(km)');
zlabel('z轴(km)');
title('第1时刻截取五棱锥的5条棱的截点位置分析')
view([-45,45])
2.2.画出20个已知轨迹点与组网雷达的三维空间中的连线及延长线交点:
%% 在同一幅图上画出20个轨迹点
data= xlsread('D:\Program Files\MATLAB\workspace\E2018\F1_guiji.xls');
%轨迹单位是m
guiji=[data(:,2),data(:,3),data(:,3)]
guiji=guiji/1000;
pp=[80,0,0;30,60,0;55,110,0;105,110,0;130,60,0]
for j=1:20
p1=guiji(j,:);%轨迹点
for i=1:5
k=0:0.01:1;
p2=pp(i,:); %5台无人机
hold on;
x=p1(1)+k*(p2(1)-p1(1));
y=p1(2)+k*(p2(2)-p1(2));
z=p1(3)+k*(p2(3)-p1(3));
plot3(x,y,z)
end
end
2.3.以上所有代码叠加的效果图
2.4.一些更好看的三维立体效果仿真
注:针对俯视图,可以考虑一下雷达之间的距离,将雷达做一个聚类分区域处理,会方便后续雷达的选择。
data= xlsread('D:\Program Files\MATLAB\workspace\E2018\F1_guiji.xls');
%轨迹单位是m
guiji=[data(:,2),data(:,3),data(:,3)]
guiji=guiji/1000;
Falsetarget=guiji;
radar = zeros(5,3);
radar(1,1)= 80;
radar(2,1) = 30; radar(2,2) = 60;
radar(3,1) = 55; radar(3,2) = 110;
radar(4,1) = 105; radar(4,2) = 110;
radar(5,1) = 130; radar(5,2) = 60;
radar = radar*1000;
%% 绘图
plot3(Falsetarget(:,1),Falsetarget(:,2),Falsetarget(:,3),'ro','MarkerFaceColor',[1 0 0]);
grid on
hold on
plot3(radar(:,1),radar(:,2),radar(:,3),'^','MarkerSize',10,...
'MarkerEdgeColor','r',...
'MarkerFaceColor',[1 0 0]);
for i = 1:5
text(radar(i,1)+10,radar(i,2),radar(i,3),['雷达' num2str(i)]);
end
for i = 1:5
for j = 1:20
if i == 1
plot3([radar(i,1),Falsetarget(j,1)],[radar(i,2),Falsetarget(j,2)],[radar(i,3),Falsetarget(j,3)],'b');
end
if i == 2
plot3([radar(i,1),Falsetarget(j,1)],[radar(i,2),Falsetarget(j,2)],[radar(i,3),Falsetarget(j,3)],'r');
end
if i == 3
plot3([radar(i,1),Falsetarget(j,1)],[radar(i,2),Falsetarget(j,2)],[radar(i,3),Falsetarget(j,3)],'m');
end
if i == 4
plot3([radar(i,1),Falsetarget(j,1)],[radar(i,2),Falsetarget(j,2)],[radar(i,3),Falsetarget(j,3)],'k');
end
if i == 5
plot3([radar(i,1),Falsetarget(j,1)],[radar(i,2),Falsetarget(j,2)],[radar(i,3),Falsetarget(j,3)],'g');
end
end
end
x = 0:1000:150000;
y = 0:1000:150000;
size(x,2)
mesh(x,y,ones(size(x,2),size(y,2))*2250,'EdgeColor','c','FaceColor','c','MarkerEdgecolor','c','MarkerFacecolor','c');
xlabel('X(单位:m)');
ylabel('Y(单位:m)');
zlabel('Z(单位:m)');
title('组网雷达与虚假目标航迹点连线')
hold off
2.5.组网雷达地面覆盖范围
data= xlsread('D:\Program Files\MATLAB\workspace\E2018\F1_guiji.xls');
%轨迹单位是m
guiji=[data(:,2),data(:,3),data(:,3)]
%% 2018-9-18画图。
%% 添加5个雷达
Falsetarget=guiji;
radar = zeros(5,3);
radar(1,1)= 80;
radar(2,1) = 30; radar(2,2) = 60;
radar(3,1) = 55; radar(3,2) = 110;
radar(4,1) = 105; radar(4,2) = 110;
radar(5,1) = 130; radar(5,2) = 60;
radar = radar*1000;
%% 绘图
%plot3(Falsetarget(:,1),Falsetarget(:,2),Falsetarget(:,3),'ro','MarkerFaceColor',[1 0 0]);
grid on
hold on
plot3(radar(:,1),radar(:,2),radar(:,3),'^','MarkerSize',10,...
'MarkerEdgeColor','r',...
'MarkerFaceColor',[1 0 0]);
for i = 1:5
text(radar(i,1)+10,radar(i,2),radar(i,3),['雷达' num2str(i)]);
end
2.6.问题一(使用空间解析结合尝试求解)
使用截平面法指定z的高度,使用直线的点法式公式来求取干扰机的位置坐标。这里可以使用matlab很好用的命令subs自动带入已经存在的参数值加以计算,同时使用eval()将带入数值的syms表达式的结果转化为具体数值。
%% h=2322.8m去截取雷达1,2,3
%轨迹单位为m
guiji= xlsread('D:\Program Files\MATLAB\workspace\E2018\F1_guiji.xls');
guiji=guiji(:,2:4)
leidazuobiao=[80000,0,0;30000,60000,0;55000,110000,0;105000,110000,0;130000,60000,0]
%% 求取截面坐标
Path2000X=cell(20,3);
Path2000Y=cell(20,3);
gaodu=[2322.8]
for j=1:length(guiji)%仅仅考虑一个轨迹点
for i=1:3
% a(j,i)=guiji(j,1)-leidazuobiao(i,1);
% b(j,i)=guiji(j,2)-leidazuobiao(i,2);
% c(j,i)=guiji(j,3)-leidazuobiao(i,3);
%使用直线的点法式公式
%Lji:(x-guiji(i,1))/a(j,i)=(y-guiji(i,2))/b(j,i)=(z-guiji(i,3))/c(j,i)
syms x y h x0 y0 z0 a0 b0 c0;
x=x0+a0*(h-z0)/c0;
y=y0+b0*(h-z0)/c0;
a0=guiji(j,1)-leidazuobiao(i,1)
b0=guiji(j,2)-leidazuobiao(i,2)
c0=guiji(j,3)-leidazuobiao(i,3)
x0=guiji(i,1)
y0=guiji(i,2)
z0=guiji(i,3)
%high=min(guiji(:,3)) ;%63.9570km;但是无人机飞行高度在2000-2500m
h=gaodu(1) %h=2000m
y1=subs(x)
y2=subs(y)
disp('==========')
Path2000X{j,i}= eval(y1) %将syms转化为数值
Path2000Y{j,i}= eval(y2)
end
end
%% 对2,3雷达处的20个坐标分别再以4个点依次拟合出来直线个5条。那么我一共是有10条无人机飞行的直线
%4个一组作直线拟合
XX=[Path2000X{:,2}]'
YY=[Path2000Y{:,2}]'
XX1=[Path2000X{1:4,2}]'
YY1=[Path2000Y{1:4,2}]'
YY2=[Path2000Y{5:8,2}]'
XX2=[Path2000X{5:8,2}]'
XX3=[Path2000X{9:12,2}]'
YY3=[Path2000Y{9:12,2}]'
XX4=[Path2000X{13:16,2}]'
YY4=[Path2000Y{13:16,2}]'
YY5=[Path2000Y{17:20,2}]'
XX5=[Path2000X{17:20,2}]'
%
XX1=[Path2000X{1:4,3}]'
YY1=[Path2000Y{1:4,3}]'
YY2=[Path2000Y{5:8,3}]'
XX2=[Path2000X{5:8,3}]'
XX3=[Path2000X{9:12,3}]'
YY3=[Path2000Y{9:12,3}]'
XX4=[Path2000X{13:16,3}]'
YY4=[Path2000Y{13:16,3}]'
YY5=[Path2000Y{17:20,3}]'
XX5=[Path2000X{17:20,3}]'
%%
clear PPPPPPPPPPPPPPPo1
PPPPPPPPPPPPPPPo1= xlsread('D:\Program Files\MATLAB\workspace\E2018\CC2.xlsx','sheet2','A1:BI4');
PPPPPPPPPPPPPPPo1=round(PPPPPPPPPPPPPPPo1,1)
xlswrite('D:\zhou.xlsx',PPPPPPPPPPPPPPPo1,'sheet1','A1:BI4');
2.7.答案格式拼接
拼凑如下图所示格式的答案,无人机架次及20个时刻对应的X,Y,Z坐标。cell元胞数组作用强大,matlab中只有cell中装的是字符串,单位长度为1,即一个字符串只是cell中的一个对象。使用数组则为单个字符。matlab中的数组(即:A=[]),可以通过";“和”,"产生沿着列和沿着行的方向拼接的向量,可以方便的插入到Excel中,插入时注意是该用列向量形式还是行向量形式。
%% 填写答案,构造答案表格
%''是matlab中字符数组,写入的是单个的汉字而不是字符串,使用cell就是字符串了
% str0='无人机编号';
% xlswrite('D:\zhou.xlsx',str0,'sheet1','A1');
%写入第一行
str1=cell(1,61);%matlab中字符串处理用cell会很方便,每个字符串是一个对象,leng(str1)=1
str1{1,1}='无人机编号';
str2={'x','y','z'}
for i=1:20
for j=1:3
str1{1,3*(i-1)+j+1}=['第',num2str(i),'个时刻空间位置',str2{j},'坐标值'];
end
end
xlswrite('D:\zhou.xlsx',str1,'sheet1','A1:BI1');
%写入编号
num1=1:1:5;
num1=num1';%转换为列向量
xlswrite('D:\zhou.xlsx',num1,'sheet1','A2');
%将答案写入到统一个格式cell中
AAA=jiemian_mute{1,1}';
BBB=jiemian_mute{1,2}';
for i=1:5
for j=1:20
daan{i,3*(j-1)+1}=AAA{i,j};
daan{i,3*(j-1)+2}=BBB{i,j};
daan{i,3*(j-1)+3}=2000;
end
end
xlswrite('D:\zhou.xlsx',daan,'sheet1','B2:BI6');
2.8.第二问的四条疑似轨迹
2.8.使用hold on命令实现复杂的空间物体的堆叠:
例1:
function DieJiaFigure(color,high)
theta = linspace(0,1,500);
x = exp(theta).*sin(100*theta);
y = exp(theta).*cos(100*theta);
len=length(x)
h=[]
for i=1:len
h=[h,high]
end
s = scatter3(x,y,h);
s.LineWidth = 0.6;
%color= 'b'
s.MarkerEdgeColor =color;
s.MarkerFaceColor = [0 0.5 0.5];
end
%% 测试代码
%{ %% matlab多行注释,这一行为空白,否则无效。
figure
high=100
DieJiaFigure('b',high)
hold on
high=200
DieJiaFigure('r',high)
hold on
high=300
DieJiaFigure('g',high)
hold on
high=400
DieJiaFigure('c',high)
view([-45 45])
%}