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

📄 cm_sm41.m

📁 给出比较少见的16PSK的仿真算法
💻 M
字号:
function[pb,ps]=cm_sm41(snr_in_dB)

N=100;
E=1;
snr=10^(snr_in_dB/10);
sgma=sqrt(E/(4*2*snr));

s0000=[1 0];
s0001=[cos(pi/8) sin(pi/8)];
s0010=[cos(pi/4) sin(pi/4)];
s0011=[cos(3*pi/8) sin(3*pi/8)];
s0100=[0 1];
s0101=[cos(5*pi/8) sin(5*pi/8)];
s0110=[cos(3*pi/4) sin(3*pi/4)];
s0111=[cos(7*pi/8) sin(7*pi/8)];
s1000=[-1 0];
s1001=[cos(9*pi/8) sin(9*pi/8)];
s1010=[cos(5*pi/4) sin(5*pi/4)];
s1011=[cos(11*pi/8) sin(11*pi/8)];
s1100=[0 -1];
s1101=[cos(13*pi/8) sin(13*pi/8)];
s1110=[cos(7*pi/4) sin(7*pi/4)];
s1111=[cos(15*pi/8) sin(15*pi/8)];
for i=1:N,
   temp=rand;
   
   if(temp<0.0625),
      dsource1(i)=0;
      dsource2(i)=0;
      dsource3(i)=0;  
      dsource4(i)=0;
   elseif(temp<0.125),
      dsource1(i)=0;
      dsource2(i)=0;
      dsource3(i)=0;  
      dsource4(i)=1;
  elseif(temp<0.1875),
      dsource1(i)=0;
      dsource2(i)=0;
      dsource3(i)=1;  
      dsource4(i)=0;
   elseif(temp<0.25),
      dsource1(i)=0;
      dsource2(i)=0;
      dsource3(i)=1;
      dsource4(i)=1;
   elseif(temp<0.3125),
      dsource1(i)=0;
      dsource2(i)=1;
      dsource3(i)=0;
      dsource4(i)=0;
   elseif(temp<0.375),
      dsource1(i)=0;
      dsource2(i)=1;
      dsource3(i)=0;
      dsource4(i)=1;
  elseif(temp<0.4375),
      dsource1(i)=0;
      dsource2(i)=1;
      dsource3(i)=1;
      dsource4(i)=0;
   elseif(temp<0.5),
      dsource1(i)=0;
      dsource2(i)=1;
      dsource3(i)=1;
      dsource4(i)=1;
  elseif(temp<0.5625),
      dsource1(i)=1;
      dsource2(i)=0;
      dsource3(i)=0;
      dsource4(i)=0;
   elseif(temp<0.625),      
      dsource1(i)=1;
      dsource2(i)=0;
      dsource3(i)=0;
      dsource4(i)=1;
  elseif(temp<0.6875),
      dsource1(i)=1;
      dsource2(i)=0;
      dsource3(i)=1;
      dsource4(i)=0;
   elseif(temp<0.75),
      dsource1(i)=1;
      dsource2(i)=0;
      dsource3(i)=1;
      dsource4(i)=1;
  elseif(temp<0.8125),
      dsource1(i)=1;
      dsource2(i)=1;
      dsource3(i)=0;
      dsource4(i)=0;
   elseif(temp<0.875),
      dsource1(i)=1;
      dsource2(i)=1;
      dsource3(i)=0;
      dsource4(i)=1;
  elseif(temp<0.9375),
      dsource1(i)=1;
      dsource2(i)=1;
      dsource3(i)=1;
      dsource4(i)=0;
   else
      dsource1(i)=1;
      dsource2(i)=1;
      dsource3(i)=1;
      dsource4(i)=1;
   end;
end;

numofsymbolerror=0;
numofbiterror=0;

for i=1:N,
   n(1)=gngauss(sgma);
   n(2)=gngauss(sgma);
   if((dsource1(i)==0)&(dsource2(i)==0)&(dsource3(i)==0)&(dsource4(i)==0)),
      r=s0000+n;
   elseif((dsource1(i)==0)&(dsource2(i)==0)&(dsource3(i)==0)&(dsource4(i)==1)),
      r=s0001+n;
   elseif((dsource1(i)==0)&(dsource2(i)==0)&(dsource3(i)==1)&(dsource4(i)==0)),
      r=s0010+n;
   elseif((dsource1(i)==0)&(dsource2(i)==0)&(dsource3(i)==1)&(dsource4(i)==1)),
      r=s0011+n;
   elseif((dsource1(i)==0)&(dsource2(i)==1)&(dsource3(i)==0)&(dsource4(i)==0)),
      r=s0100+n;
   elseif((dsource1(i)==0)&(dsource2(i)==1)&(dsource3(i)==0)&(dsource4(i)==1)),
      r=s0101+n;
   elseif((dsource1(i)==0)&(dsource2(i)==1)&(dsource3(i)==1)&(dsource4(i)==0)),
      r=s0110+n;
   elseif((dsource1(i)==0)&(dsource2(i)==1)&(dsource3(i)==1)&(dsource4(i)==1)),
      r=s0111+n;
   elseif((dsource1(i)==1)&(dsource2(i)==0)&(dsource3(i)==0)&(dsource4(i)==0)),
      r=s1000+n;
   elseif((dsource1(i)==1)&(dsource2(i)==0)&(dsource3(i)==0)&(dsource4(i)==1)),
      r=s1001+n;
   elseif((dsource1(i)==1)&(dsource2(i)==0)&(dsource3(i)==1)&(dsource4(i)==0)),
      r=s1010+n;
   elseif((dsource1(i)==1)&(dsource2(i)==0)&(dsource3(i)==1)&(dsource4(i)==1)),
      r=s1011+n;
   elseif((dsource1(i)==1)&(dsource2(i)==1)&(dsource3(i)==0)&(dsource4(i)==0)),
      r=s1100+n;
   elseif((dsource1(i)==1)&(dsource2(i)==1)&(dsource3(i)==0)&(dsource4(i)==1)),
      r=s1101+n;
   elseif((dsource1(i)==1)&(dsource2(i)==1)&(dsource3(i)==1)&(dsource4(i)==0)),
      r=s1110+n;
   else
      r=s1111+n;
   end;
   
   c0000=dot(r,s0000);
   c0001=dot(r,s0001);
   c0010=dot(r,s0100);
   c0011=dot(r,s0011);
   c0100=dot(r,s0100);
   c0101=dot(r,s0101);
   c0110=dot(r,s0110);
   c0111=dot(r,s0111);
   c1000=dot(r,s1000);
   c1001=dot(r,s1001);
   c1010=dot(r,s1100);
   c1011=dot(r,s1011);
   c1100=dot(r,s1100);
   c1101=dot(r,s1101);
   c1110=dot(r,s1110);
   c1111=dot(r,s1111);
   
   c_max=max([c0000 c0001 c0010 c0011 c0100 c0101 c0110 c0111 c1000 c1001 c1010 c1011 c1100 c1101 c1110 c1111]);
   
   if(c0000==c_max),
      decis1=0;decis2=0;decis3=0;decis4=0;
   elseif(c0001==c_max),
      decis1=0;decis2=0;decis3=0;decis4=1;
   elseif(c0010==c_max),
      decis1=0;decis2=0;decis3=1;decis4=0;
   elseif(c0011==c_max),
      decis1=0;decis2=0;decis3=1;decis4=1;
   elseif(c0100==c_max),
      decis1=0;decis2=1;decis3=0;decis4=0;
   elseif(c0101==c_max),
      decis1=0;decis2=1;decis3=0;decis4=1;
   elseif(c0110==c_max),
      decis1=0;decis2=1;decis3=1;decis4=0;
   elseif(c0111==c_max)
      decis1=0;decis2=1;decis3=1;decis4=1;
   elseif(c1000==c_max),
      decis1=1;decis2=0;decis3=0;decis4=0;
   elseif(c1001==c_max),
      decis1=1;decis2=0;decis3=0;decis4=1;
   elseif(c1010==c_max),
      decis1=1;decis2=0;decis3=1;decis4=0;
   elseif(c1011==c_max),
      decis1=1;decis2=0;decis3=1;decis4=1;
   elseif(c1100==c_max),
      decis1=1;decis2=1;decis3=0;decis4=0;
   elseif(c1101==c_max),
      decis1=1;decis2=1;decis3=0;decis4=1;
   elseif(c1110==c_max),
      decis1=1;decis2=1;decis3=1;decis4=0;
   else
      decis1=1;decis2=1;decis3=1;decis4=1;
   end;
   
   symbolerror=0;
   if(decis1~=dsource1(i)),
      numofbiterror=numofbiterror+1;
      symbolerror=1;
   end;
   
   if(decis2~=dsource2(i)),
      numofbiterror=numofbiterror+1;
      symbolerror=1;
   end;
   
   if(decis3~=dsource3(i)),
      numofbiterror=numofbiterror+1;
      symbolerror=1;
   end;

   if(decis4~=dsource4(i)),
      numofbiterror=numofbiterror+1;
      symbolerror=1;
   end;
   
   if(symbolerror==1),
      numofsymbolerror=numofsymbolerror+1;
   end;
end;

ps=numofsymbolerror/N;
pb=numofbiterror/(4*N);

⌨️ 快捷键说明

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