⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 singlemtpathgain.m

📁 通讯系统仿真 静态恒定Tx在JOINT系统中
💻 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 + -