📄 新建 文本文档.txt
字号:
1.。。%16psk调制
fc=0.002;%载波频率即中心频率
Tc=1/fc;%载波周期
fs=1;%采样频率
dt=1/fs;%采样间隔
fo=0.001;%码元速率
To=1/fo;%码元宽度
N=6;%码元个数
t=0:dt:(N*To-dt);%时间长度
a(1)=0;
a(2)=5;
a(3)=0;
a(4)=9;
a(5)=3;
a(6)=6;
for k=1:6
for m=1:To
c(To*(k-1)+m)=a(k);
end;
end;
figure(1);
subplot(2,1,1);
plot(c);
title('原学号数据');
b=[0,1,3,2,7,6,4,5,15,14,12,13,8,9,11,10];
for n=1:6
s=a(n)+1;
d(n)=b(s);
end;
for k=1:6
for m=1:To
B(To*(k-1)+m)=10*sin(2*pi*fc*t(To*(k-1)+m)+d(k)*pi/8);
end;
end;
subplot(2,1,2);
plot(B(1:6000));
title('16PSK调制后数据');
2echo on
SNRindB1=0:2:10;
SNRindB2=0:0.1:10 ;
for i=1:length(SNRindB1);
[pb,ps]=cm_sm(SNRindB1(i));
smld_bit_err_prb(i)=pb;
smld_symbol_err_prb(i)=ps;
end;
for i=1:length(SNRindB2);
SNR=exp(SNRindB2(i)*log(10)/10);
theo_err_prb(i)=2*Qfunct(sqrt(8*SNR)*sin(pi/16))/4;
end;
semilogy(SNRindB1,smld_bit_err_prb,'*');
hold on
semilogy(SNRindB1,smld_symbol_err_prb,'O');
semilogy(SNRindB2,theo_err_prb);
axis([0,10,10^(-5),10^0]);
grid
xlabel('Eb/No in dB')
ylabel('error probability')
title('16PSK通信系统的蒙特卡洛仿真')
gtext('(注:“—”理论误码率;“*”误比特率;“o”误符号率 )')
3。。。function [pb,ps]=cm_sm32(snr_in_dB)
N=10000;
E=1;
snr=10^(snr_in_dB/10);
sgma=sqrt(E/(4*2*snr));
s0000=[1 0];
s0001=[cos(pi/8) sin(pi/8)];
s0011=[cos(2*pi/8) sin(2*pi/8)];
s0010=[cos(3*pi/8) sin(3*pi/8)];
s0110=[cos(4*pi/8) sin(4*pi/8)];
s0111=[cos(5*pi/8) sin(5*pi/8)];
s0101=[cos(6*pi/8) sin(6*pi/8)];
s0100=[cos(7*pi/8) sin(7*pi/8)];
s1100=[cos(8*pi/8) sin(8*pi/8)];
s1101=[cos(9*pi/8) sin(9*pi/8)];
s1111=[cos(10*pi/8) sin(10*pi/8)];
s1110=[cos(11*pi/8) sin(11*pi/8)];
s1010=[cos(12*pi/8) sin(12*pi/8)];
s1011=[cos(13*pi/8) sin(13*pi/8)];
s1001=[cos(14*pi/8) sin(14*pi/8)];
s1000=[cos(15*pi/8) sin(15*pi/8)];
for i=1:N,
temp=rand;
if(temp<1/16)
dsource1(i)=0;
dsource2(i)=0;
dsource3(i)=0;
dsource4(i)=0;
elseif(temp<1/8)
dsource1(i)=0;
dsource2(i)=0;
dsource3(i)=0;
dsource4(i)=1;
elseif(temp<3/16)
dsource1(i)=0;
dsource2(i)=0;
dsource3(i)=1;
dsource4(i)=0;
elseif(temp<4/16)
dsource1(i)=0;
dsource2(i)=0;
dsource3(i)=1;
dsource4(i)=1;
elseif(temp<5/16)
dsource1(i)=0;
dsource2(i)=1;
dsource3(i)=0;
dsource4(i)=0;
elseif(temp<6/16)
dsource1(i)=0;
dsource2(i)=1;
dsource3(i)=0;
dsource4(i)=1;
elseif(temp<7/16)
dsource1(i)=0;
dsource2(i)=1;
dsource3(i)=1;
dsource4(i)=0;
elseif(temp<8/16)
dsource1(i)=0;
dsource2(i)=1;
dsource3(i)=1;
dsource4(i)=1;
elseif(temp<9/16)
dsource1(i)=1;
dsource2(i)=0;
dsource3(i)=0;
dsource4(i)=0;
elseif(temp<10/16)
dsource1(i)=1;
dsource2(i)=0;
dsource3(i)=0;
dsource4(i)=1;
elseif(temp<11/16)
dsource1(i)=1;
dsource2(i)=0;
dsource3(i)=1;
dsource4(i)=0;
elseif(temp<12/16)
dsource1(i)=1;
dsource2(i)=0;
dsource3(i)=1;
dsource4(i)=1;
elseif(temp<13/16)
dsource1(i)=1;
dsource2(i)=1;
dsource3(i)=0;
dsource4(i)=0;
elseif(temp<14/16)
dsource1(i)=1;
dsource2(i)=1;
dsource3(i)=0;
dsource4(i)=1;
elseif(temp<15/16)
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,s0010);
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,s1010);
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);
4.。。。function[gsrv1,gsrv2]=gngauss(m,sgma)
if nargin==0,
m=0;sgma=1;
elseif nargin==1,
sgma=m;m=0;
end;
u=rand;
z=sgma*(sqrt(2*log(1/(1-u))));
u=rand;
gsrv1=m+z*cos(2*pi*u);
gsrv2=m+z*sin(2*pi*u);
5.。。。function [y]=Qfunct(x)
y=(1/2)*erfc(x/sqrt(2));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -