📄 新建 文本文档.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 + -