%产生地图,包括起始点、终点的开销以及障碍物的开销,障碍物大小、类型等
%write by wubb
%2021/03/09
function [MAP,Ground_node,Jamming,Obstacle]=obstacle_map(MAP,Ground_node,Jamming,Obstacle,Channel)
%%
for n=1:Obstacle.num
Obstacle.centre(n,1)=randi([MAP.MIN_X+Obstacle.size_max,MAP.MAX_X-Obstacle.size_max],1,1);%产生障碍物中心
Obstacle.centre(n,2)=randi([MAP.MIN_Y+Obstacle.size_max,MAP.MAX_Y-Obstacle.size_max],1,1);
Obstacle.H(n)=randi([Obstacle.Hmin,Obstacle.Hmax],1,1);%产生障碍物高度
%根据类型随机产生不同形状的障碍物
Obstacle.circle_R(n)=randi([Obstacle.size_min,Obstacle.size_max],1,1);%产生圆形障碍物半径
Obstacle.rectangle_L(n)=randi([Obstacle.size_min,Obstacle.size_max],1,1);%产生矩形障碍物长宽
Obstacle.rectangle_W(n)=randi([Obstacle.size_min,Obstacle.size_max],1,1);
temp=[]; k=1;
if Obstacle.type(n)==0
%获取障碍物覆盖面积内的点
for i=MAP.MIN_X:MAP.MAX_X
for j=MAP.MIN_Y:MAP.MAX_Y
if ((i-Obstacle.centre(n,1))^2+(j-Obstacle.centre(n,2))^2)<=Obstacle.circle_R(n)^2
temp(k,:)=[i,j];
k=k+1;
end
end
end
else
%获取障碍物覆盖面积内的点
L_length=length((Obstacle.centre(n,1)-fix(Obstacle.rectangle_L(n)/2)):(Obstacle.centre(n,1)+fix(Obstacle.rectangle_L(n)/2)));
W_length=length((Obstacle.centre(n,2)-fix(Obstacle.rectangle_W(n)/2)):(Obstacle.centre(n,2)+fix(Obstacle.rectangle_W(n)/2)));
for i=1:L_length
for j=1:W_length
temp(k,:)=[(Obstacle.centre(n,1)-fix(Obstacle.rectangle_L(n)/2))+i-1,....
(Obstacle.centre(n,2)-fix(Obstacle.rectangle_W(n)/2))+j-1];
k=k+1;
end
end
end
Obstacle.Coverage_Point(n)={temp};
end
% 获取所有障碍物覆盖的点的数组
Obstacle.Coverage_Point_all=[];
k=1;
for n=1:Obstacle.num
len=length(Obstacle.Coverage_Point{1,n}(:,1));
for i=1:len
Obstacle.Coverage_Point_all(k,:)=Obstacle.Coverage_Point{1,n}(i,:);
k=k+1;
end
end
%% 根据地面节点数量产生地面节点位置:不能在障碍物中
%选用随机产生位置
for n=1:Ground_node.num
%生产随机数索引并判断是否属于障碍物范围
Ground_node.position(n,1)=randi([MAP.MIN_X,MAP.MAX_X],1,1);
Ground_node.position(n,2)=randi([MAP.MIN_Y,MAP.MAX_Y],1,1);
Ground_node.position(n,3)=0;
end
%% 根据干扰源位置随机产生干扰源位置
%选用随机产生位置
for n=1:Jamming.num
Jamming.position(n,1)=randi([MAP.MIN_X,MAP.MAX_X],1,1);
Jamming.position(n,2)=randi([MAP.MIN_Y,MAP.MAX_Y],1,1);
Jamming.position(n,3)=0;
%需要确保干扰源的位置和地面节点的位置不重叠
for k=1:Ground_node.num
if Jamming.position(n,1)==Ground_node.position(k,1) && ....
Jamming.position(n,2)==Ground_node.position(k,2)
Jamming.position(n,1)=mod(Jamming.position(n,1)+10,MAX_X);
Jamming.position(n,2)=mod(Jamming.position(n,2)+10,MAX_Y);
end
end
end
%% 获取地图上每个栅格上的信干噪比和能量
Rate=zeros(MAP.MAX_X,MAP.MAX_Y);
flag=0;
for i=1:MAP.MAX_X
for j=1:MAP.MAX_Y
%首先判断是否在障碍物内,开销为无穷大
for n=1:Obstacle.num
flag=0;
if Obstacle.type(n)==0
if ((i-Obstacle.centre(n,1))^2+(j-Obstacle.centre(n,2))^2)<=Obstacle.circle_R(n)^2
Rate(i,j)=0;
flag=1;
end
else
l_min=(Obstacle.centre(n,1)-fix(Obstacle.rectangle_L(n)/2));
l_max=(Obstacle.centre(n,1)+fix(Obstacle.rectangle_L(n)/2));
w_min=(Obstacle.centre(n,2)-fix(Obstacle.rectangle_W(n)/2));
w_max=(Obstacle.centre(n,2)+fix(Obstacle.rectangle_W(n)/2));
if i>=l_min&&i<=l_max&&j>=w_min&&w_max
Rate(i,j)=0;
flag=1;
end
end
if flag == 0
node_E=0;
for n=1:Ground_node.num
node_E=node_E+Channel.beta_value.*Ground_node.p0.*(norm([i,j,0]-Ground_node.position(n,:))+1).^(-Channel.alph);
end
Jamming_E=0;
for n=1:Jamming.num
Jamming_E=Jamming_E+Channel.beta_value.*Jamming.pm.*(norm([i,j,0]-Jamming.position(n,:))+1).^(-Channel.alph);
end
% Rate(i,j)=Channel.bw*log2(1+(node_E)/(Jamming_E+Channel.dlt2));
% Rate(i,j)=log2(1+(node_E)/(Jamming_E+Channel.dlt2));
Rate(i,j)=(node_E)/(Jamming_E+Channel.dlt2);
end
end
end
end
MAP.R=Rate;
add=0;
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
A_star.rar (5个子文件)
A_star
obstacle_map.m 5KB
A_star_main.m 4KB
get_child_nodes_cal.m 3KB
A_star_Data_rev.m 4KB
A_star_basic.m 4KB
共 5 条
- 1
资源评论
- zybyukino2022-03-27用户下载后在一定时间内未进行评价,系统默认好评。
- m0_671697292022-04-23用户下载后在一定时间内未进行评价,系统默认好评。
- csdn_19331102182023-05-22资源有很好的参考价值,总算找到了自己需要的资源啦。
有礼
- 粉丝: 0
- 资源: 11
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功