天天看點

AF協定DF協定對通信性能的影響分析

clear all;

SINRO=0.1,T=10^21,k=1.38*10^(-23),refer=0.4,B=10^6,noise=10^(-6),N=50,Pp=10,rr=1.5*10^6;%基本元素的設定,此處的refer值得是第二時隙次使用者發送自身信号和主使用者信号的功率比,如ps1=(1-refer)ps,ps2=refer*ps

%設定各種信道的信道衰落

K=1,M=15;%規定信道矩陣的大小

V1=10^(-1)/sqrt(3.14/2);%瑞利信道的參數,注意這裡不是平均值

V2=10^(-2)/sqrt(3.14/2);

H=15;%Hb表示整個系統程式循環的次數

W=ones(H,N);%每一橫排表示一次循環的速率值,不同的縱坐标表示不同的信噪比下系統的速率值

W1=ones(H,N);%case 3 r df模式

W2=ones(H,N);%af模式

Pout=ones(H,N);%case 2 pout

Pout1=ones(H,N);%case 3 pout df模式

Pout2=ones(H,N);%af模式

Gss=random('rayleigh',10^(-1)/sqrt(3.14/2),K,M);%次使用者發送端到次使用者接收端的信道增益

Gpss=random('rayleigh',10^(-1)/sqrt(3.14/2),K,M);%主使用者發送端到次使用者發送端的信道增益

Gpp=random('rayleigh',10^(-2)/sqrt(3.14/2),K,M);%主使用者發送端到主使用者接收端的信道增益

Gsp=random('rayleigh',10^(-1)/sqrt(3.14/2),K,M);%次使用者發送端到主使用者接收端的信道增益

Gpssd=random('rayleigh',10^(-2)/sqrt(3.14/2),K,M);%主使用者發送端到次使用者接收端的信道增益

for j=1:1:H

%設定橫坐标的範圍

SNR=linspace(-10,30,N);                                          %橫坐标為信噪比[-10,30]db,SNR=Gss*ps2/(B*noise)

snr=ones(size(SNR));                                                   %snr為信噪比的瓦特表示

for i=1:1:N                                                      %SNR到snr的轉換

    snr(i)=10^(SNR(i)/10);

end%橫坐标是次使用者接收端的信噪比

%帶入公式仿真

%第二種情形的系統速率和中斷機率

a=snr.*B*noise;%a=Gss*ps2

 ps2=a./Gss(j);

for i=1:1:N

    if Gsp(j)*ps2(i)<=T*k*B 

        ps1(i)=ps2(i)/refer*(1-refer);

rs(i)=B*log2(1+a(i)/(B*noise+Gss(j)*ps1(i)));%rs=B*log2(1+a/b),a=Gss*ps2,b=B*noise+Gss*ps1

temp(i)=ps2(i)/(2^(rr/B)-1);

temp1(i)=-((B^2)*(noise^2))/(2*((temp(i)-ps1(i))^2)*(V1^2));

pout(i)=1-exp(temp1(i));

    else

     p2o(i)=T*k*B/Gsp(j);%次使用者發送自身信号的邊界功率

     p1o(i)=p2o(i)/refer*(1-refer);

 rs(i)=B*log2(1+Gss(j)*p2o(i)/(B*noise+Gss(j)*p1o(i)));   

 temp(i)=p2o(i)/(2^(rr/B)-1);

temp1(i)=-((B^2)*(noise^2))/(2*((temp(i)-p1o(i))^2)*(V1^2));

pout(i)=1-exp(temp1(i));

    end

end

for i=1:1:N

W(j,i)=rs(i);

Pout(j,i)=pout(i);

end

%rs2=ones(size(rs));

%rs2=rs;%把情形二下的速率值付給rs2

 %第三種情形的系統速率

 a=snr.*B*noise;%a=Gss*ps2

 ps2=a./Gss(j);

 for i=1:1:N

     if Gsp(j)*ps2(i)<=T*k*B %滿足對主使用者的影響小于特定值

          ps1(i)=ps2(i)/refer*(1-refer);

         if a(i)/(Pp*Gpssd(j)+B*noise+Gss(j)*ps1(i))>=SINRO%滿足次使用者的最小通信要求

             rs3(i)=B*log2(1+a(i)/(Pp*Gpssd(j)+B*noise+Gss(j)*ps1(i)));%隻有同時滿足兩個條件才能用這個表達式表達。

             c=B*log2(1+Gpss(j)*Pp/(B*noise));

             d1=1+Gpp(j)*Pp/(B*noise);

             d2(i)=Gsp(j)*ps1(i)/(B*noise+Gsp(j)*ps2(i));

             e= ps1(i)*Pp*Gpss(j)*Gsp(j)/(B*noise+Pp*Gpss(j));

             e1=B*noise*(1+ps1(i)*Gsp(j)/(B*noise+Pp*Gpss(j)))+ps2(i)*Gsp(j);

             d3(i)=e/e1;

             d(i)=B*log2(d1+d2(i));%df模式

             rp(i)=min(c,d(i));

             r(i)=rs3(i)+rp(i);

              da(i)=B*log2(d1+d3(i));%af模式

               rpa(i)=min(c,da(i));

             ra(i)=rs3(i)+rpa(i);

          %   首先得是df模式主使用者的中斷機率

             if c<d(i)%如果較小的是前者,則主使用者的中斷機率是一個常數如下

           temp4=1;

           temp2=(2^(rr/B)-temp4)^2;

           temp3=-(temp2*(B^2)*(noise^2))/(2*(Pp^2)*(V1^2));

             else

          temp4=1+Gsp(j)*ps1(i)/(B*noise+Gsp(j)*ps2(i));

          temp2=(2^(rr/B)-temp4)^2;

           temp3=-(temp2*(B^2)*(noise^2))/(2*(Pp^2)*(V2^2));

             end

           %df主使用者的中斷機率

           poutp(i)=1-exp(temp3);

           %然後是af模式主使用者的中斷機率

            if c<da(i)%如果較小的是前者,則主使用者的中斷機率是一個常數如下

           temp41=1;

            temp21=(2^(rr/B)-temp41)^2;

           temp31=-(temp21*(B^2)*(noise^2))/(2*(Pp^2)*(V1^2));

             else

          temp41=1+d3(i);

           temp21=(2^(rr/B)-temp41)^2;

           temp31=-(temp21*(B^2)*(noise^2))/(2*(Pp^2)*(V2^2));

            end

               %af主使用者的中斷機率

           poutpa(i)=1-exp(temp31);

            %接下來是次使用者的中斷機率

            temp(i)=ps2(i)/(2^(rr/B)-1);

            temp1(i)=-((Pp*Gpssd(j)+B*noise)^2)/(2*((temp(i)-ps1(i))^2)*(V1^2));

            pout(i)=1-exp(temp1(i));

            %系統的中斷機率

           poutsys(i)=pout(i)*poutp(i);

           poutsysa(i)=pout(i)*poutpa(i);

         else%不滿足次使用者的最小通信要求,即ps2(i)的值太小了

             rs3(i)=B*log2(1+SINRO);

             refer1=1/refer-1;

             ps22=B*noise*SINRO/(Gss(j)*(1-refer1*SINRO));%邊界功率值

             ps11=ps22/refer*(1-refer);

             c=B*log2(1+Gpss(j)*Pp/(B*noise));

             d1=1+Gpp(j)*Pp/(B*noise);

             d2=Gsp(j)*ps11/(B*noise+Gsp(j)*ps22);

              e= ps11*Pp*Gpss(j)*Gsp(j)/(B*noise+Pp*Gpss(j));

             e1=B*noise*(1+ps11*Gsp(j)/(B*noise+Pp*Gpss(j)))+ps22*Gsp(j);

             d3(i)=e/e1;

             %df模式

             d=B*log2(d1+d2);

             rp(i)=min(c,d);

             r(i)=rs3(i)+rp(i);

             %af模式

             da(i)=B*log2(d1+d3(i));

               rpa(i)=min(c,da(i));

             ra(i)=rs3(i)+rpa(i);

             %df模式主使用者的中斷機率

             if c<d%如果較小的是前者,則主使用者的中斷機率是一個常數如下

            temp4=1;

             temp2=(2^(rr/B)-temp4)^2;

           temp3=-(temp2*(B^2)*(noise^2))/(2*(Pp^2)*(V1^2));

             else

            temp4=1+Gsp(j)*ps11/(B*noise+Gsp(j)*ps22);

             temp2=(2^(rr/B)-temp4)^2;

           temp3=-(temp2*(B^2)*(noise^2))/(2*(Pp^2)*(V2^2));

             end

           %主使用者的中斷機率

           poutp(i)=1-exp(temp3);

            %然後是af模式主使用者的中斷機率

            if c<da(i)%如果較小的是前者,則主使用者的中斷機率是一個常數如下

           temp41=1;

            temp21=(2^(rr/B)-temp41)^2;

           temp31=-(temp21*(B^2)*(noise^2))/(2*(Pp^2)*(V1^2));

             else

          temp41=1+d3(i);

           temp21=(2^(rr/B)-temp41)^2;

           temp31=-(temp21*(B^2)*(noise^2))/(2*(Pp^2)*(V2^2));

            end

               %af主使用者的中斷機率

           poutpa(i)=1-exp(temp31);

            %接下來是次使用者的中斷機率

            temp(i)=ps22/(2^(rr/B)-1);

            temp1(i)=-((Pp*Gpssd(j)+B*noise)^2)/(2*((temp(i)-ps11)^2)*(V1^2));

            pout(i)=1-exp(temp1(i));

            %系統的中斷機率

            poutsys(i)=pout(i)*poutp(i);

            poutsysa(i)=pout(i)*poutpa(i); 

         end

     else%不滿足對主使用者的影響小于特定值,即ps2(i)的值太大了

         p2oo(i)=T*k*B/Gsp(j);%次使用者發送自身信号的邊界功率

         p1oo(i)=p2oo(i)/refer*(1-refer);

         rs3(i)=B*log2(1+Gss(j)*p2oo(i)/(Pp*Gpssd(j)+B*noise+Gss(j)*p1oo(i)));   

         c=B*log2(1+Gpss(j)*Pp/(B*noise));

         d1=1+Gpp(j)*Pp/(B*noise);

             d2(i)=Gsp(j)*p1oo(i)/(B*noise+Gsp(j)*p2oo(i));

             e= p1oo(i)*Pp*Gpss(j)*Gsp(j)/(B*noise+Pp*Gpss(j));

             e1=B*noise*(1+p1oo(i)*Gsp(j)/(B*noise+Pp*Gpss(j)))+p2oo(i)*Gsp(j);

             d3(i)=e/e1;

             %df模式

             d(i)=B*log2(d1+d2(i));

             rp(i)=min(c,d(i));

             r(i)=rs3(i)+rp(i);

              %af模式

             da(i)=B*log2(d1+d3(i));

             rpa(i)=min(c,da(i));

             ra(i)=rs3(i)+rpa(i);

             %df模式主使用者中斷機率

             if c<d(i)%如果較小的是前者,則主使用者的中斷機率是一個常數如下

            temp4=1;

            temp2=(2^(rr/B)-temp4)^2;

            temp3=-(temp2*(B^2)*(noise^2))/(2*(Pp^2)*(V1^2));

             else

             temp4=1+Gsp(j)*p1oo(i)/(B*noise+Gsp(j)*p2oo(i));

             temp2=(2^(rr/B)-temp4)^2;

            temp3=-(temp2*(B^2)*(noise^2))/(2*(Pp^2)*(V2^2));

             end

            %主使用者的中斷機率 

            poutp(i)=1-exp(temp3);

             %af模式主使用者中斷機率

             if c<da(i)%如果較小的是前者,則主使用者的中斷機率是一個常數如下

            temp41=1;

             temp21=(2^(rr/B)-temp41)^2;

            temp31=-(temp21*(B^2)*(noise^2))/(2*(Pp^2)*(V1^2));

             else

             temp41=1+d3(i);

              temp21=(2^(rr/B)-temp41)^2;

            temp31=-(temp21*(B^2)*(noise^2))/(2*(Pp^2)*(V2^2));

             end

            %主使用者的中斷機率 

            poutpa(i)=1-exp(temp31);

            %接下來是次使用者的中斷機率

            temp(i)=p2oo(i)/(2^(rr/B)-1);

            temp1(i)=-((Pp*Gpssd(j)+B*noise)^2)/(2*((temp(i)-p1oo(i))^2)*(V1^2));

            pout(i)=1-exp(temp1(i));

           %系統的中斷機率

            poutsys(i)=pout(i)*poutp(i);

             poutsysa(i)=pout(i)*poutpa(i); 

     end

 end

 for i=1:1:N

W1(j,i)=r(i);%df模式下系統的容量

W2(j,i)=ra(i);%af模式下系統的容量

Pout1(j,i)=poutsys(i);%df模式下系統的中斷機率

Pout2(j,i)=poutsysa(i);%af模式下系統的中斷機率

 end

end%大循環的結束

for i=1:1:N

    r2(i)=mean(W(1:1:H,i));%H次循環的平均值

    r3(i)=mean(W1(1:1:H,i));

     r3a(i)=mean(W2(1:1:H,i));

    Pou(i)=mean(Pout(1:1:H,i));

    Pou1(i)=mean(Pout1(1:1:H,i));

    Pou1a(i)=mean(Pout2(1:1:H,i));

end

plot(SNR,r2,'o',SNR,r3,'.',SNR,r3a,':');