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

📄 新建 文本文档.txt

📁 解相关及最小均方误差和传统多用户检测器的比较
💻 TXT
字号:
function[p1,p,jxg,mmse]=mul(snr_in_dB)
Lc=31;
snr=10^(snr_in_dB/10);
sgma=1;
Eb=sgma^2*snr;
E_chip=Eb/Lc;
A=[sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb)];
N=10000;
K=length(A);

connections1=[1 0 1 0 0];
connections2=[1 1 1 0 1];
gold_seq=get_gold(connections1,connections2);
user1code=(1/sqrt(Lc))*gold_seq(:,31); 


p1num_of_err=0;        %错误码数先赋0
pnum_of_err=0;
jxgnum_of_err=0;
mmsenum_of_err=0;   
S=zeros(31,K+1);       %定义扩频码矩阵
S(:,K+1)=user1code;


for i=1:N, 
  
  b=zeros(K+1,1);   %定义发送端发送的信息列
  y=zeros(K+1,1);   %定义经过匹配滤波器组相关处理后的信息列  
 
%   产生新的数据位
  temp=rand;  
  if (temp<0.5), 
    data=-1; 
  else 
    data=1; 
  end; 
  % 发送信号为 
  trans_sig=sqrt(Eb)*data*user1code; %与公式相比sqrt(Eb)相当于Ak data相当于bk user1code为sk   sqrt(Eb)认为是期望用户,

  
 
  noise=sgma*randn(Lc,1);   %产生一列31行的随机噪声
 
  
  % 产生K个干扰用户,dat是干扰用户数据,真正的用户为K+1个,期望用户直接定义为sqrt(Eb)
  inter_sig=zeros(31,1);
  for k=1:K,
      temp=rand;  
      if (temp<0.5), 
         dat=-1; 
      else 
         dat=1; 
      end; 
  inter_sig=inter_sig+A(k)*dat*(1/sqrt(Lc))*gold_seq(:,k); %干扰用户数据的扩频码放在1到第K列,期望用户的在第31列
  S(:,k)=(1/sqrt(Lc))*gold_seq(:,k); 
  b(k)=dat;
  end;
  b(K+1)=data;
  R=corrcoef(S);  %扩频码的互相关矩阵
 
 %接收信号   
  rec_sig=trans_sig+noise+inter_sig;   %接收到的数据是31x1位的
 
 

 % 从接收信号中产生判决变量
 %单用户
   
    y1=rec_sig'*S(:,31);
   
%多用户                      
  for k=1:K+1,
      y(k)=rec_sig'*S(:,k);               %求出经过匹配滤波器组相关处理后的信息列 
  end
 %单用户
   dec1=sign(y1);
   if   (dec1<=0)
         bit1=-1;
   else
         bit1=1;
   end;
   if(bit1~=data),
      num_of_err1=num_of_err1+1;
   end;
%传统多用户
  dec=sign(y(k));
   if   (dec<=0)
         bit=-1;
   else
         bit=1;
   end;
   if(bit~=data),
      num_of_err=num_of_err+1;
   end;
  

 % 解相关
  
    M=inv(R)*y;    
    decjxg=sign(M(K+1));
      if  (decjxg<=0)
           bitjxg=-1;
      else
           bitjxg=1;
      end;
     
      if (bitjxg~= data), 
        jxgnum_of_err=jxgnum_of_err+1; 
      end;
 %MMSE
    mmse=inv(R+inv(R)*inv(R));
    decmmse=sign(M(K+1));
       if  (decmmse<=0);
            bitmmse=-1;
       else
           bitmmse=-1;
       end;
       if (bitmmse~= data), 
        mmsenum_of_err=mmsenum_of_err+1; 
      end; 
       
end;       % 对应for i=1:N,
p1=num_of_err1/N;
p=num_of_err/N;
jxg=jxgnum_of_err/N; 
mmse=mmsenum_of_err/N; 

⌨️ 快捷键说明

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