📄 singlemtpathgain.m
字号:
function [SAindex,G]=singleMTpathgain(KSM, KA, KS, r, NF, alpha1, hotspotfactor)
% KA: number of APs per SA
% KS: number of SAs (square number)
% r: reuse factor
% H: channel transfer function matrix
% for details refer to my technical report 1 and 3
SA_dim = sqrt(KS);
SA_cyc_dim = SA_dim*2-mod(SA_dim,2);
R=250; % radius of subareas
%DIST=300; % breakpoint distance for dual slope path loss model
%alpha1=2.5;
%alpha2=4.0; % if alpha2==alpha1 --> single slope
G_var=0; % in dB (variance of log-normal slow fading)
if KA==3
i1=1; j1=1;
elseif KA==1
i1=1; j1=0;
elseif KA==4
i1=2; j1=0;
elseif KA==7
i1=2; j1=1;
elseif KA==19
i1=3; j1=2;
end
if r==3
i2=1; j2=1;
elseif r==1
i2=1; j2=0;
elseif r==4
i2=2; j2=0;
elseif r==7
i2=2; j2=1;
end
D3=sqrt(3*KA*r)*R;
theta2=acos((2*i1+j1)/(2*sqrt(KA)));
theta3=acos((2*i2+j2)/(2*sqrt(r)));
theta=theta2+theta3;
% lookup table
if KA==1
AP_Pos_ref2=[0
0];
elseif KA==3
AP_Pos_ref2=[0 sqrt(3)*R sqrt(3)*R/2
0 0 3*R/2];
elseif KA==4
AP_Pos_ref2=[0 sqrt(3)*R/2 sqrt(3)*R sqrt(3)*R/2
0 -3*R/2 0 3*R/2];
elseif KA==7
AP_Pos_ref2=[0 sqrt(3)*R sqrt(3)*R/2 -sqrt(3)*R/2 -sqrt(3)*R -sqrt(3)*R/2 sqrt(3)*R/2
0 0 3*R/2 3*R/2 0 -3*R/2 -3*R/2];
elseif KA==19
AP_Pos_ref2=[0 sqrt(3)*R sqrt(3)*R/2 -sqrt(3)*R/2 -sqrt(3)*R -sqrt(3)*R/2 sqrt(3)*R/2 2*sqrt(3)*R 3*sqrt(3)*R/2 sqrt(3)*R 0 -sqrt(3)*R -3*sqrt(3)*R/2 -2*sqrt(3)*R -3*sqrt(3)*R/2 -sqrt(3)*R 0 sqrt(3)*R 3*sqrt(3)*R/2
0 0 3*R/2 3*R/2 0 -3*R/2 -3*R/2 0 3/2*R 3*R 3*R 3*R 3/2*R 0 -3/2*R -3*R -3*R -3*R -3/2*R ];
end
AP_Pos_ref=AP_Pos_ref2(1,:)+sqrt(-1)*AP_Pos_ref2(2,:);
for p=1:SA_cyc_dim
for q=1:SA_cyc_dim
RP((p-1)*SA_cyc_dim+q) = (q-1)*D3*cos(pi/3+theta)+ (p-1)*D3*cos(theta) + sqrt(-1)*((q-1)*D3*sin(pi/3+theta)+ (p-1)*D3*sin(theta));
%RP(2,(p-1)*SA_cyc_dim+q) = (q-1)*D3*sin(pi/3+theta)+ (p-1)*D3*sin(theta);
end
end
for kS=1:SA_cyc_dim^2
APs_Pos((kS-1)*KA+1:kS*KA) = RP(kS) + AP_Pos_ref;
% APs_Pos(2,(kS-1)*KB+1:kS*KB) = RP(2,kS) + AP_Pos_ref(2,:);
end
% figure
% plot(APs_Pos,'ro')
% hold on
%---------------------------
% generate MT positions
%---------------------------
mm = floor(SA_dim/2);
SAindex(1:hotspotfactor*KA*NF)=1;
SAindex(hotspotfactor*KA*NF+1:KSM)=floor(rand(1,KSM-hotspotfactor*KA*NF)*(KS-1))+2;
seq=[1:KSM];
seq2=[];
for kk=1:KSM
rr=floor(rand*length(seq))+1;
seq2=[seq2 seq(rr)];
seq(rr)=[];
end
SAindex=SAindex(seq2);
for kSM=1:KSM
% random position
x=sqrt(3*rand)*R/2;
y=(2*rand-1)*x/sqrt(3);
rot=floor(rand*6)*pi/3;
kA=floor(rand*KA)+1; % AP index
%kS=floor(rand*KS)+1; % SA index
%SAindex(kSM)=kS;
kS=SAindex(kSM);
q = (floor((kS-1)/SA_dim)+mm)*SA_cyc_dim + mm + mod(kS-1,SA_dim)+1; % corresponding index of SA in the whole area
MTs_Pos = cos(rot)*x-sin(rot)*y+(sin(rot)*x+cos(rot)*y)*sqrt(-1);
MTs_Pos = MTs_Pos + APs_Pos((q-1)*KA+kA);
%plot(MTs_Pos,'gx')
%pause
for ii=mm+1 : mm+SA_dim
if (ii<=2*mm)
ii_map=ii+SA_dim;
elseif (ii>SA_dim)
ii_map=ii-SA_dim;
else ii_map=ii;
end
for jj=mm+1 : mm+SA_dim
if (jj<=2*mm)
jj_map=jj+SA_dim;
elseif (jj>SA_dim)
jj_map=jj-SA_dim;
else jj_map=jj;
end
q = (ii-1)*SA_cyc_dim + jj;
q_map_1 = (ii_map-1)*SA_cyc_dim + jj;
q_map_2 = (ii-1)*SA_cyc_dim + jj_map;
q_map_3 = (ii_map-1)*SA_cyc_dim + jj_map;
% finding out the shortest distance from the 4 APs to the MT
distance(1,:) = abs(APs_Pos((q-1)*KA+1:q*KA)-MTs_Pos);
distance(2,:) = abs(APs_Pos((q_map_1-1)*KA+1:q_map_1*KA)-MTs_Pos);
distance(3,:) = abs(APs_Pos((q_map_2-1)*KA+1:q_map_2*KA)-MTs_Pos);
distance(4,:) = abs(APs_Pos((q_map_3-1)*KA+1:q_map_3*KA)-MTs_Pos);
dist = min(distance,[],1);
%--- dual/single slope model ---
pg_temp = power(dist*4*pi/0.0545, -alpha1);
%--- log-normal model ---
G_mean=10*log10(pg_temp);
q = (ii-mm-1)*SA_dim + jj-mm; % index of the AP in the considered area
G(kSM,(q-1)*KA+1:q*KA) = power(10, (sqrt(G_var)*randn(1,KA)+G_mean)/10);
end % of for jj
end % of for ii
end % of kSM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -