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

📄 cdma.m

📁 Matlab实现的cdma编程
💻 M
字号:
function [result]=decre1(usern,bitn,snr)
%DS-CDMA解相关检测
chip=bitn*31;
gold=goldseq(31,usern);%产生usern*31
gold=gold';%31*usern
yanshi=randperm(30);
z=[];
kp=[];
%信道建立
for i=1:usern
    x=bingen(bitn);%1行bitn列的数据
    z=[z; x];
    f=gold(:,i);%31*1
   if i==1
      p=0;
   else
      p=yanshi(i);
   end
   kop1=[zeros(p,1);f];
   kop=kop1(1:31);
   kp=[kp kop];
end
gold1=kp;
bits=z;
receive1=gold1*z;%31*bitn
receive=reshape(receive1,1,chip);
clear z;
%加高斯噪声
std_dev = sqrt(chip/((10^(snr/10))*2));
noise = std_dev * randn(1,chip);
receive=receive+noise;%1*chip
receive=receive';
clear receive1;
clear std_dev;
clear noise;

%解相关检测器
bit=bits(1,:);
x=reshape(receive,31,bitn);
y=gold'*x;%匹配滤波器的输出usern*bitn
R=gold'*gold;
z=inv(R);
rec=z*y;
ber=[];
sm=0;
for k=50,
for i=0:bitn-1
    b=bit(i+1);
    w=rec(1,i+1);
    if w>0
        w=1;
    else
        w=-1;
    end
  sm=sm+abs(w-b);
end
 ber1=sm/(bitn);
 ber=[ber ber1];
end
 berr=mean(ber);
 result=berr;  
 
%2.gold序列

function [result]=GoldSeq(stringlength,u)
connections1=[1 0 0 0 1 0 0];
connections2=[1 1 0 0 0 0 0];
sequence1=ss_mlsrs(connections1);
sequence2=ss_mlsrs(connections2);
L=2^length(connections1)-1;
for shift_amount=0:L-1
   temp=[sequence2(shift_amount+1:L) sequence2(1:shift_amount)];
   gold_seq(shift_amount+1,:)=(sequence1+temp)-floor((sequence1+temp)./2).*2;
end
for i=1:L
   gold_seq(i,:)=2*gold_seq(i,:)-1;
end
step=floor(L./stringlength);
result=gold_seq(1:step:(step*stringlength),1:u)';
%%子程序
function [seq]=ss_mlsrs(connections)
m=length(connections);
L=2^m-1;
registers=[zeros(1,m-1) 1];
seq(1)=registers(m);
for i=2:L
   new_reg_cont(1)=connections(1)*seq(i-1);
   for j=2:m
      new_reg_cont(j)=registers(j-1)+connections(j)*seq(i-1);
   end
   registers=new_reg_cont;
   seq(i)=registers(m);
end
function x = bingen(L)
%随机产生L个值为+1,-1的符号
x = rand(1,L);
x(find(x<0.5)) = -1;
x(find(x >=0.5)) = 1;
function x = bingen(L)
%generate L symbols randomly with value +1 or -1
x = rand(1,L);
x(find(x<0.5)) = -1;
x(find(x >=0.5)) = 1;

⌨️ 快捷键说明

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