function [out1_6001,out4_6001]= relayselection_6001
% random generate positions for STA A,B,C and D in the defined area.And
% compare the proposed relay selection strategy and the simulation result.
% 1 denote NLoS and 0 is LoS.
global node_loc thita_3db antenna_gain_sl antenna_gain_ml alpha weigh1 maxNLoS_prob maxrate% 全局变量的影响范围:在所有申明为global的函数中都适用;
cases = 'relay selection with directional-to-directional transmission/receive';
seed = 0;
rand('state',seed);
randn('state',seed);
sim_num = 50;
thita_3db = 60; %[15 30 60];
NLoS_prob=0.1; % blockage probability
an_eta = 0.8; %1.0; % antenna efficiency
rt_eta = 1; % 收发机效率,我认为是调制编码效率
antenna_gain_ml = 360*an_eta/thita_3db;
antenna_gain_sl = 360*(1-an_eta)/(360 - thita_3db);
antenna_gain_ml_db = 10*log10(antenna_gain_ml); % 这边需不需要做这样的处理????
antenna_gain_sl_db = 10*log10(antenna_gain_sl);
pt=-10; %[-10, 0 ,10] -10dBm=0.1mW
alpha = 2.0 ; % the LoS attenua index
bandwidth = 1700; % MHz
noise_db = -90; % 10*log10( 10^(-11) * bandwidth ) % -90dBm/MHz
display(cases)
display(thita_3db)
display(an_eta)
% define the width and length for the communication square area R
long_in_meter = 10; %m
wide_in_meter = 10;
% generate the location for nodes,the first colomn is the axis for
% transmiter,the second colomn is the axis for recerver%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% NLoS概率为0.1~1
rate = 0;
maxrate= 8; % 5Gbps
for rate_no= 1 : maxrate/0.2 +1
% link generation
node = 90;
link_num = 30;
NLoS_num = floor(link_num*NLoS_prob);
LoS_num = link_num - NLoS_num;
candat_num = node - 2*link_num; % 因为Hungry algorithm算法的局限,候选节点数目必须只比NLoS link的数目多一个!!!!!!!
%%
sum_throput1(rate_no) = 0;
sum_throput2(rate_no) = 0;
sum_throput3(rate_no) = 0;
sum_throput4(rate_no) = 0;
out1=0; % 记录outage times
out2=0; % 记录outage times
out3=0; % 记录outage times
out4=0; % 记录outage times
for sim_time = 1:sim_num
tic
node_loc = [long_in_meter*rand(1,node);wide_in_meter*rand(1,node)]; % node_loc(1,:)为所有node的x坐标;node_loc(i,odd)的奇数列为transmitter;
LoSthroput_sum(sim_time) = 0;
z1=0;
z2=0;
z3=0;
z4=0;
% LoS link throughput%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if LoS_num>1
for LoS_no = 1:LoS_num % 假设前LoS_num条链路是LoS链路;
% 每条LoS链路的通信距离
LoS_dis(LoS_no) = sqrt((node_loc(1,2*LoS_no)-node_loc(1,2*LoS_no-1))^2 ...
+ (node_loc(2,2*LoS_no)-node_loc(2,2*LoS_no-1))^2);
% 每条LoS链路的SNR值
LoSSNR_db(LoS_no) = pt + 2*antenna_gain_ml_db - cr_ch_model_pathloss(LoS_dis(LoS_no)) ...
- noise_db; % 确定cr_ch_model_pathloss(LoS_dis(LoS_no))的结果是dB
% SNR值转换为十进制, LoSSNR(LoS_no) = 10^(LoSSNR_db(LoS_no)/10);
LoSSNR(LoS_no) = 10*log10( LoSSNR_db(LoS_no) );
% LoS链路的吞吐量
LoSthroput(LoS_no) = rt_eta * bandwidth * 1024 * 1024 * log2( 1+ LoSSNR(LoS_no) ); % 信道容量,香农公式中的S/N是十进制的!!
% 所有LoS链路的吞吐量之和
LoSthroput_sum(sim_time) = LoSthroput_sum(sim_time) + LoSthroput(LoS_no); % 十进制
end
end
%%
% NLoS link S-R and R-D link throughput%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if NLoS_num>1
NLoSthroput_1=zeros(NLoS_num,candat_num);
NLoSthroput_2=zeros(NLoS_num,candat_num);
SRNLoS_dis=zeros(NLoS_num,candat_num);
RDNLoS_dis=zeros(NLoS_num,candat_num);
SDNLoS_dis=zeros(NLoS_num,candat_num);
for NLoS_no =1:NLoS_num % 假设随机产生NloS_num条NLoS链路;
for candat_no = 1: candat_num
% 每条NLoS链路中的S-R,R-D的通信距离
SRNLoS_dis(NLoS_no,candat_no) = sqrt( (node_loc(1,2*link_num+candat_no)-node_loc(1,2*(LoS_num+NLoS_no)-1))^2 ...
+ (node_loc(2,2*link_num+candat_no)-node_loc(2,2*(LoS_num+NLoS_no)-1))^2 );
RDNLoS_dis(NLoS_no,candat_no) = sqrt( (node_loc(1,2*link_num+candat_no)-node_loc(1,2*(LoS_num+NLoS_no)))^2 ...
+ (node_loc(2,2*link_num+candat_no)-node_loc(2,2*(LoS_num+NLoS_no)))^2 );
SDNLoS_dis(NLoS_no,candat_no) = sqrt( (node_loc(1,2*(LoS_num+NLoS_no))-node_loc(1,2*(LoS_num+NLoS_no)-1))^2 ...
+ (node_loc(2,2*(LoS_num+NLoS_no))-node_loc(2,2*(LoS_num+NLoS_no)-1))^2 );
% 每条NLoS链路中的S-R的SNR值,dB形式,十进制形式
SRNLoSSNR_db1(NLoS_no,candat_no) = pt + 2*antenna_gain_ml_db - cr_ch_model_pathloss(SRNLoS_dis(NLoS_no,candat_no)) - noise_db;
SRNLoSSNR_1(NLoS_no,candat_no) = 10* log10( SRNLoSSNR_db1(NLoS_no,candat_no) );
% 每条NLoS链路中的R-D的SNR值,dB形式,十进制形式
RDNLoSSNR_db1(NLoS_no,candat_no) = pt + 2*antenna_gain_ml_db - cr_ch_model_pathloss(RDNLoS_dis(NLoS_no,candat_no)) - noise_db;
RDNLoSSNR_1(NLoS_no,candat_no)= 10* log10( RDNLoSSNR_db1(NLoS_no,candat_no) );
%每条NLoS链路中的S-D的SNR值,dB形式,十进制形式
SDNLoSSNR_db1(NLoS_no,candat_no) = pt + 2*antenna_gain_ml_db - cr_ch_model_pathloss(SDNLoS_dis(NLoS_no,candat_no)) - noise_db;
SDNLoSSNR_1(NLoS_no,candat_no) = 10* log10( SDNLoSSNR_db1(NLoS_no,candat_no) );
% 留给算法2备用
SRNLoSSNR_db2(NLoS_no,candat_no) = SRNLoSSNR_db1(NLoS_no,candat_no) ;
RDNLoSSNR_db2(NLoS_no,candat_no) = RDNLoSSNR_db1(NLoS_no,candat_no);
SDNLoSSNR_db2(NLoS_no,candat_no) = SDNLoSSNR_db1(NLoS_no,candat_no) ;
SRNLoSSNR_2(NLoS_no,candat_no) = SRNLoSSNR_1(NLoS_no,candat_no) ;
RDNLoSSNR_2(NLoS_no,candat_no) = RDNLoSSNR_1(NLoS_no,candat_no);
SDNLoSSNR_2(NLoS_no,candat_no) = SDNLoSSNR_1(NLoS_no,candat_no) ;
% 未知S-R和R-D链路是否为NLoS时,每条S-R链路的吞吐量,根据经典的relay信道公式
NLoSthroput_2(NLoS_no,candat_no) = 1/2 * rt_eta * bandwidth * 1024 * 1024 * log2(1+(0.1+(1-0.1)*rand(1))*10^(-4)*SDNLoSSNR_1(NLoS_no,candat_no)+ SRNLoSSNR_1(NLoS_no,candat_no) *RDNLoSSNR_1(NLoS_no,candat_no) /(1+SRNLoSSNR_1(NLoS_no,candat_no)+RDNLoSSNR_1(NLoS_no,candat_no)));
%为S-R和R-D链路引入随机遮挡环境,S-R和R-D链路的遮挡发生应该是相互独立的(0.1+(1-0.1)*rand(1))*10^(-4) * LoSSNR(LoS_no) +
NLoS_factor = randsrc(1,1,[0 1;1-NLoS_prob NLoS_prob]);
if NLoS_factor==1
SRNLoSSNR_1(NLoS_no,candat_no) = 10^(-11) *SRNLoSSNR_1(NLoS_no,candat_no) ; % 因为Hungry ALgorithm算法的局限,这里不能set=0;
end
NLoS_factor = randsrc(1,1,[0 1;1-NLoS_prob NLoS_prob]);
if NLoS_factor == 1
RDNLoSSNR_1(NLoS_no,candat_no) = 10^(-11) * RDNLoSSNR_1(NLoS_no,candat_no) ;
end
% 已知S-R和R-D链路是否为NLoS时,每条S-R链路的吞吐量,根据经典的relay信道公式
NLoSthroput_1(NLoS_no,candat_no) = 1/2 * rt_eta * bandwidth * 1024 * 1024 *log2(1+(0.1+(1-0.1)*rand(1))*10^(-4)*SDNLoSSNR_1(NLoS_no,candat_no)+ SRNLoSSNR_1(NLoS_no,candat_no) *RDNLoSSNR_1(NLoS_no,candat_no) /(1+SRNLoSSNR_1(NLoS_no,candat_no)+RDNLoSSNR_1(NLoS_no,candat_no)));
% 即当S-R和R-D链路中有一个为NLoS时,信道吞吐量为0;
end
end
%%
% Hungry Algorithm %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 已知S-R链路是否为NLoS时,hungry算法中的输入效率矩阵的component
weigh1 = -1* NLoSthroput_1; %将最大值转化为求最小值,以便用Hungry Algorithm来求解 %提出的算法
% 未知S-R链路是否为NLoS时,hungry算法中的输入效率矩阵的component
weigh2 = -1* NLoSthroput_2; %将最大值转化为求最小值,以便用Hungry Algorithm来求解 %吞吐量最大化为目标, 先验信息为错误的信息
weigh3 = SRNLoS_dis.^alpha +RDNLoS_dis.^alpha; % 距离最近原则,没有以吞吐量最大化为目标!
weigh4 = (SRNLoS_dis.^alpha).* (RDNLoS_dis.^alpha) ./ ( SRNLoS_dis.^alpha +RDNLoS_dis.^alpha) ; % 距离几何加权,没有以吞吐量最大化为
评论0