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

📄 ss_pemvsgdunf.m

📁 M序列和Gold序列的性能比较matlab程序。
💻 M
字号:
function [pm,pg] =ss_pemvsgdunf(snrindb,Lc,A,w0,M_seq1,M_seq2,M_seq3,M_seq4)
%本例m序列基于其互相关特性--双极性,扩频增益为31
snr=10^(snrindb/10);
sgma=1;
Eb=2*sgma^2*snr;
E_chip=Eb/Lc;
 %
  %gold 序列,参考<<MATLAB与通信仿真>>
  %也可以考虑使用一个函数来产生-
%Lc=31的gold序列
% PN1=[0  1  1  1 0 0 0 0  1 0 0 0 0  1  1 0 0  1 0 0  1 0  1  1  1  1 0 0 0 0 0]
% PN1=[1 -1 -1 -1 1 1 1 1 -1 1 1 1 1 -1 -1 1 1 -1 1 1 -1 1 -1 -1 -1 -1 1 1 1 1 1];
  PN1=[1 -1 -1 -1 1 1 1 1 -1 1 1 1 1 -1 -1 1 1 -1 1 1 -1 1 -1 -1 -1 -1 1 1 1 1 1];
% PN2=[0  1 0 0 0  1  1  1 0  1 0  1 0  1  1  1 0  1  1 0 0 0 0 0  1  1 0 0  1  1  1]
% PN2=[1 -1 1 1 1 -1 -1 -1 1 -1 1 -1 1 -1 -1 -1 1 -1 -1 1 1 1 1 1 -1 -1 1 1 -1 -1 -1];
PN2=[1 -1 1 -1 -1 1 -1 -1 -1 1 1 1 -1 1 1 1 1 1 -1 1 1 -1 1 1 1 -1 -1 1 1 1 -1];
% PN3=[ 1  1  1 0 0  1 0  1 0 0 0 0 0 0 0  1 0  1  1  1  1  1 0 0 0 0 0  1 0 0 0 ]
 PN3=[-1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 1 -1 1 -1 -1 -1 -1 -1 1 1 1 1 1 -1 1 1 1];
%PN3=[-1 1 -1 1 -1 -1 -1 -1 -1 -1 1 1 1 1 -1 1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1];
% PN4=[0 0  1  1 0  1 0 0 0 0  1 0  1 0  1 0 0  1  1  1 0 0  1 0 0  1  1  1  1  1  1]
 PN4=[1 1 -1 -1 1 -1 1 1 1 1 -1 1 -1 1 -1 1 1 -1 -1 -1 1 1 -1 1 1 -1 -1 -1 -1 -1 -1];

%
%
%发送10000个数据
N=10000;
numoferrm=0;
numoferrg=0;
%产生下一个数据比特
for i=1:N,
    %
    %产生第一个用户数据
    temp=rand;
    if (temp<0.5),
        data1=-1;
    else
        data1=1;
    end;
    %重复产生的比特
    for j=1:Lc,
        repeated_data1(j)=data1;
    end;
    %for j=1:15,
    %   repeated_data1(j)=data1;
    %end;
    %for j=16:Lc,
     %   repeated_data1(j)=data1*(-1);
    %end;
    %
    %产生第二个用户数据
    temp=rand;
    if (temp<0.5),
        data2=-1;
    else
        data2=1;
    end;
    %重复产生的比特
    for j=1:Lc,
       repeated_data2(j)=data2;
    end;
    %for j=1:15,
    %   repeated_data2(j)=data2;
    %end;
    %for j=16:Lc,
    %    repeated_data2(j)=data2*(-1);
    %end;
    %
    %产生第三个用户数据
    temp=rand;
    if (temp<0.5),
        data3=-1;
    else
        data3=1;
    end;
    %重复产生的比特
     for j=1:Lc,
        repeated_data3(j)=data3;
    end;
    %for j=1:15,
    %    repeated_data3(j)=data3;
    %end;
    %for j=16:Lc,
    %    repeated_data3(j)=data3*(-1);
    %end;
     %
    %产生第四个用户数据
    temp=rand;
    if (temp<0.5),
        data4=-1;
    else
        data4=1;
    end;
    %重复产生的比特
    for j=1:Lc,
        repeated_data4(j)=data4;
    end;
    %for j=1:15,
    %    repeated_data4(j)=data4;
    %end;
    %for j=16:Lc,
    %    repeated_data4(j)=data4*(-1);
    %end;
    %
    %信号的幅度
    A1=rand;
    A2=rand;
    A3=rand;
    A4=rand;
    %
    %发送信号为
    %使用m序列区分用户
    tran_mseq1=A1*sqrt(E_chip)*repeated_data1.*M_seq1;
    tran_mseq2=A2*sqrt(E_chip)*repeated_data2.*M_seq2;
    tran_mseq3=A3*sqrt(E_chip)*repeated_data3.*M_seq3;
    tran_mseq4=A4*sqrt(E_chip)*repeated_data3.*M_seq4;
    trans_msig=tran_mseq1+tran_mseq2+tran_mseq3+tran_mseq4;
    %使用gold序列区分用户
    tran_seq1=A1*sqrt(E_chip)*repeated_data1.*PN1;
    tran_seq2=A2*sqrt(E_chip)*repeated_data2.*PN2;
    tran_seq3=A3*sqrt(E_chip)*repeated_data3.*PN3;
    tran_seq4=A4*sqrt(E_chip)*repeated_data3.*PN4;
    trans_sig=tran_seq1+tran_seq2+tran_seq3+tran_seq4;
     %
    %方差为sgma^2的gauss white noise
    noise=sgma*rand(1,Lc);
    %
    %干扰
    n=(i-1)*Lc+1:i*Lc;
    interference=0.2*A*sin(w0*n);
    nr=A1*(noise+interference);
    %
    %接收信号
    rec_msig =trans_msig+nr;
    rec_sig=trans_sig+nr;
    %
    %从接收信号中产生判决变量
    mtemp=rec_msig.*M_seq1;
    %mtemp1=mtemp.*[ones(1,15) zeros(1,Lc-15)];
    %mtemp2=mtemp.*[zeros(1,15) ones(1,Lc-15)];
    decision_mvariable=sum(mtemp)/Lc;
    %decision_mvariable2=sum(mtemp2)/(Lc-15);
   %
    temp=rec_sig.*PN1;
    %temp1=temp.*[ones(1,15) zeros(1,Lc-15)];
    %temp2=temp.*[zeros(1,15) ones(1,Lc-15)];
    decision_gvariable=sum(temp)/Lc;
    %decision_gvariable2=sum(temp2)/(Lc-15);
    
    %
    %进行判决
    if (decision_mvariable<0)
        mdecision=-1;
    else
        mdecision=1;
    end;    
    %if (decision_mvariable2<0)
    %    mdecision2=-1;
    %else
    %    mdecision2=1;
    %end;
    
    if (decision_gvariable<0),
        gdecision=-1;
    else
        gdecision=1;
    end;   
    %if (decision_gvariable2<0)
    %    gdecision2=-1;
    %else
    %    gdecision2=1;  
    %end;
    
    %I如果存在传输中的错误,计算器累加操作
    if (mdecision~=data1),
        numoferrm=numoferrm+1;
    end;
    %if (mdecision2~=data1*(-1)),
    %    numoferrm=numoferrm+1;
    %end;
    
    if (gdecision~=data1),
        numoferrg=numoferrg+1;
    end;
    %if (gdecision2~=data1*(-1)),
    %    numoferrg=numoferrg+1;
    %end;
end;
pm=numoferrm/N;
pg=numoferrg/N;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -