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

📄 ss_pemmse.m

📁 解相关及MMSE和传统检测器比较的仿真程序包括有远近
💻 M
字号:
function [p1,p,Pd,Pmmse]=ss_pemmse(snrindb,R,PN1,PN2,PN3,PN4)
%本函数在一定的信噪比条件下测试出相应的误码率,
%针对单用户和传统多用户以及解相关器多用户
%考虑到远近效应的影响
%[p1,p,Pd,Pmmse]分别返回单用户,传统多用户检测
%解相关检测,mmse检测的误码率
Lc=31;
M=7;%干扰的幅度
w0=1;
%
%由给出的信噪比计算出实际的信噪比
snr=10^(snrindb/10);
%噪声方差假设为1,信号的幅度也设为1
sgma=1;
%比特能量,定义噪声功率=2*sgma^2
Eb=2*sgma^2*snr;
N01=2*sgma;
%码片能量
E_chip=Eb/Lc;
%
S=inv(R);
%
N=10000;
numoferr1=0;
numoferr=0;
numoferrofde=0;
numoferrmmse=0;
%
%
%产生10000个数据比特
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;
    %
    %产生第二个用户数据
    temp=rand;
    if (temp<0.5),
        data2=-1;
    else
        data2=1;
    end;
    %重复产生的比特
    for j=1:Lc,
        repeated_data2(j)=data2;
    end;
    %
    %产生第三个用户数据
    temp=rand;
    if (temp<0.5),
        data3=-1;
    else
        data3=1;
    end;
    %重复产生的比特
    for j=1:Lc,
        repeated_data3(j)=data3;
    end;
     %
    %产生第四个用户数据
    temp=rand;
    if (temp<0.5),
        data4=-1;
    else
        data4=1;
    end;
    %重复产生的比特
    for j=1:Lc,
        repeated_data4(j)=data4;
    end;
    %
    %信号的幅度
    A1=rand;
    A2=rand;
    A3=rand;
    A4=rand;
    %
    %the matrix of the amplitude of signal
    A=[A1 0 0 0;0 A2 0 0;0 0 A3 0;0 0 0 A4];
    %发送信号为
    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.25*M*sin(w0*n);
    %
    N02=(0.25*M)^2/2;
    N0=(N01+N02)/2;
    % %matrix of mmse
    %
    %the matrix of the amplitude of signal
    
    %
    A=[A1 0 0 0;0 A2 0 0;0 0 A3 0;0 0 0 A4];
    Lmmse=inv(R+N0*inv(A)*inv(A));
    %the receive signal of the first user
    %
    nr=A1*(noise+interference);
    %
    %
    %接收信号
    rec_sig1=tran_seq1+nr;
    rec_sig=trans_sig+nr;
   
    %the matrix of receive signal
    Y1= sum(rec_sig.*PN1)/Lc;
    Y2= sum(rec_sig.*PN2)/Lc;
    Y3= sum(rec_sig.*PN3)/Lc;
    Y4= sum(rec_sig.*PN4)/Lc;
    Y=[Y1 Y2 Y3 Y4]';
    %
   
    dataout1=[1 0 0 0]*(S*Y);
    datammse=[1 0 0 0]*(Lmmse*Y);
    %
    %
    %从接收信号中产生判决变量
    %single user
    temp1=rec_sig1.*PN1;
    decision_variable1=sum(temp1)/Lc;
    %multiusers
    temp=rec_sig.*PN1;
    decision_variable=sum(temp)/Lc;
    %multiusers of decorrelating detector
    dataout=dataout1;
    %
    %进行判决
    %single user detecion
    if (decision_variable1<0)
        decision1=-1;
    else
        decision1=1;
    end;
    %
    %multiusers detection
    if (decision_variable<0),
        decision=-1;
    else
        decision=1;
    end;
    %%multiusers of decorrelating detection
    if (dataout<0),
        decisionofde=-1;
    else
        decisionofde=1;
    end;
    %detection of mmse detector
    if (datammse<0),
        decisionmmse=-1;
    else
        decisionmmse=1;
    end;
    %I如果存在传输中的错误,计算器累加操作
     if (decision1~=data1),
        numoferr1=numoferr1+1;
    end;
    %
    if (decision~=data1),
        numoferr=numoferr+1;
    end;
    %
    if (decisionofde~=data1),
        numoferrofde=numoferrofde+1;
    end;
    % 
    if (decisionmmse~=data1),
       numoferrmmse=numoferrmmse+1;
    end;
    %
end;
p1=numoferr1/N;
p=numoferr/N;
Pd=numoferrofde/N;
Pmmse=numoferrmmse/N;

⌨️ 快捷键说明

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