📄 ss_pemvsgdunf.m
字号:
function [pm,pg] =ss_pemvsgdunf(snrindb,Lc,A,w0,M_seq1,M_seq2,M_seq3,M_seq4)
%本例m序列基于其互相关特性--双极性,扩频增益为31
snr=10^(snrindb/10);
sgma=1;
Eb=2*sgma^2*snr;
E_chip=Eb/Lc;
%
%gold 序列,参考<<MATLAB与通信仿真>>
%也可以考虑使用一个函数来产生-
%Lc=31的gold序列
% PN1=[0 1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 0 1 1 1 1 0 0 0 0 0]
% PN1=[1 -1 -1 -1 1 1 1 1 -1 1 1 1 1 -1 -1 1 1 -1 1 1 -1 1 -1 -1 -1 -1 1 1 1 1 1];
PN1=[1 -1 -1 -1 1 1 1 1 -1 1 1 1 1 -1 -1 1 1 -1 1 1 -1 1 -1 -1 -1 -1 1 1 1 1 1];
% PN2=[0 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 0 0 0 0 1 1 0 0 1 1 1]
% PN2=[1 -1 1 1 1 -1 -1 -1 1 -1 1 -1 1 -1 -1 -1 1 -1 -1 1 1 1 1 1 -1 -1 1 1 -1 -1 -1];
PN2=[1 -1 1 -1 -1 1 -1 -1 -1 1 1 1 -1 1 1 1 1 1 -1 1 1 -1 1 1 1 -1 -1 1 1 1 -1];
% PN3=[ 1 1 1 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 0 0 1 0 0 0 ]
PN3=[-1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 1 -1 1 -1 -1 -1 -1 -1 1 1 1 1 1 -1 1 1 1];
%PN3=[-1 1 -1 1 -1 -1 -1 -1 -1 -1 1 1 1 1 -1 1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1];
% PN4=[0 0 1 1 0 1 0 0 0 0 1 0 1 0 1 0 0 1 1 1 0 0 1 0 0 1 1 1 1 1 1]
PN4=[1 1 -1 -1 1 -1 1 1 1 1 -1 1 -1 1 -1 1 1 -1 -1 -1 1 1 -1 1 1 -1 -1 -1 -1 -1 -1];
%
%
%发送10000个数据
N=10000;
numoferrm=0;
numoferrg=0;
%产生下一个数据比特
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;
%for j=1:15,
% repeated_data1(j)=data1;
%end;
%for j=16:Lc,
% repeated_data1(j)=data1*(-1);
%end;
%
%产生第二个用户数据
temp=rand;
if (temp<0.5),
data2=-1;
else
data2=1;
end;
%重复产生的比特
for j=1:Lc,
repeated_data2(j)=data2;
end;
%for j=1:15,
% repeated_data2(j)=data2;
%end;
%for j=16:Lc,
% repeated_data2(j)=data2*(-1);
%end;
%
%产生第三个用户数据
temp=rand;
if (temp<0.5),
data3=-1;
else
data3=1;
end;
%重复产生的比特
for j=1:Lc,
repeated_data3(j)=data3;
end;
%for j=1:15,
% repeated_data3(j)=data3;
%end;
%for j=16:Lc,
% repeated_data3(j)=data3*(-1);
%end;
%
%产生第四个用户数据
temp=rand;
if (temp<0.5),
data4=-1;
else
data4=1;
end;
%重复产生的比特
for j=1:Lc,
repeated_data4(j)=data4;
end;
%for j=1:15,
% repeated_data4(j)=data4;
%end;
%for j=16:Lc,
% repeated_data4(j)=data4*(-1);
%end;
%
%信号的幅度
A1=rand;
A2=rand;
A3=rand;
A4=rand;
%
%发送信号为
%使用m序列区分用户
tran_mseq1=A1*sqrt(E_chip)*repeated_data1.*M_seq1;
tran_mseq2=A2*sqrt(E_chip)*repeated_data2.*M_seq2;
tran_mseq3=A3*sqrt(E_chip)*repeated_data3.*M_seq3;
tran_mseq4=A4*sqrt(E_chip)*repeated_data3.*M_seq4;
trans_msig=tran_mseq1+tran_mseq2+tran_mseq3+tran_mseq4;
%使用gold序列区分用户
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.2*A*sin(w0*n);
nr=A1*(noise+interference);
%
%接收信号
rec_msig =trans_msig+nr;
rec_sig=trans_sig+nr;
%
%从接收信号中产生判决变量
mtemp=rec_msig.*M_seq1;
%mtemp1=mtemp.*[ones(1,15) zeros(1,Lc-15)];
%mtemp2=mtemp.*[zeros(1,15) ones(1,Lc-15)];
decision_mvariable=sum(mtemp)/Lc;
%decision_mvariable2=sum(mtemp2)/(Lc-15);
%
temp=rec_sig.*PN1;
%temp1=temp.*[ones(1,15) zeros(1,Lc-15)];
%temp2=temp.*[zeros(1,15) ones(1,Lc-15)];
decision_gvariable=sum(temp)/Lc;
%decision_gvariable2=sum(temp2)/(Lc-15);
%
%进行判决
if (decision_mvariable<0)
mdecision=-1;
else
mdecision=1;
end;
%if (decision_mvariable2<0)
% mdecision2=-1;
%else
% mdecision2=1;
%end;
if (decision_gvariable<0),
gdecision=-1;
else
gdecision=1;
end;
%if (decision_gvariable2<0)
% gdecision2=-1;
%else
% gdecision2=1;
%end;
%I如果存在传输中的错误,计算器累加操作
if (mdecision~=data1),
numoferrm=numoferrm+1;
end;
%if (mdecision2~=data1*(-1)),
% numoferrm=numoferrm+1;
%end;
if (gdecision~=data1),
numoferrg=numoferrg+1;
end;
%if (gdecision2~=data1*(-1)),
% numoferrg=numoferrg+1;
%end;
end;
pm=numoferrm/N;
pg=numoferrg/N;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -