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