📄 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 + -