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,':');


xlabel('SNR/db');
ylabel('r/(bit/second)');
legend('case2 存/不存','case3 存/存,DF模式','case3 存/存,AF模式');
figure(2)
plot(SNR,Pou,'o',SNR,Pou1,'.',SNR,Pou1a,':');
xlabel('SNR/db');
ylabel('Pout');
legend('case2 存/不存','case3 存/存,DF模式','case3 存/存,AF模式');

D100

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值