8PSK通信系统的蒙特卡罗仿真分析一、设计原理1.设计整体方案根据题目要求和对设计原理的分析,设计的整体方案为:首先,产生一个等概率且相互独立的二进制序列,将二进制序列通过串-并转换为一个三位码组。通过调用Matlab系统函数,对输入信号进行调制和滤波,再送入信道传输,在在信道中对信号采用加性高斯白噪声进行干扰,然后进行解调,同时计数误比特和误符号数,并根据蒙特卡罗方法统计分析信号传输过程中由于噪声干扰作用下的误比特率和误符号率。最后画出各种波形。图18PSK通信系统的蒙特卡罗仿真分析2.蒙特卡罗法的原理蒙特卡罗法又称随机抽样或统计试验方法,属于计算数学的一个分支,它是在本世纪四十年代中期为了适应当时原子能事业的发展而发展起来的。传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。这也是我们采用该方法的原因。蒙特卡罗方法的基本原理及思想如下:当所要求解的问题是某种事件出现的概率,或者是某个随机变量的期望值时,它们可以通过某种“试验”的方法,得到这种事件出现的频率,或者这个随机变数的平均值,并用它们作为问题的解。这就是蒙特卡罗方法的基本思想。蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。二、详细设计步骤根据整体设计方案,对各个设计模块进行具体设计。设计步骤如下:1.二进制序列的产生、串/并转换及二/十进制转换二进制的产生即是本系统的信息源的产生,串/并转换和二/十进制转换以备在调制的时候数据调用。在本系统中,首先,用Matlab库函数来直接产生一个串行二进制序列,并将其保存在一个向量中,以备函数调用;其次,将产生的串行二进制码转换成3行并行码,即是一个符号;再次,将二进制序列转换成十进制数(0、1、2、…、7);最后,调用Matlab绘图函数绘制等概率且相互独立的二进制序列波形。模块程序如下:%数据源的产生x=round(rand(1,3*N));%产生独立串行随机二进制fori=1:N,D(1)=x(3*i-2);%D暂存二进制数以待转换D(2)=x(3*i-1);D(3)=x(3*i);d1(i)=D(1);d2(i)=D(2);d3(i)=D(3);Bin2Dec(i)=bin2dec(num2str(D));%二十进制转换end%##################以下是画出独立随机二进制序列程序fori=1:length(x),%计算码元的值if(x(i)==1),%如果信息为1forj0=1:grid0,%该码元对应的点值取1y((i-1)*grid0+j0)=1;endelseforj0=1:grid0,%反之,信息元为0,码元对应点值取0y((i-1)*grid0+j0)=0;end;end;endfigure(2);%图2plot(y,'b');%画出独立随机二进制序列title('信号源');xlabel('X序列');ylabel('Y序列');axis([020000-0.52]);2.8psk调制、滤波、添加加性高斯白噪声及相应波形产生本系统中,首先,8psk调制、滤波通过调用Matlab库函数y=dmodce(x,Fd,Fs,method,…),从而在输出端输出8psk波形(眼图);其次,通过调用子函数产生高斯白噪声;最后,在加入高斯白噪声后,绘制受噪声干扰的星座图和眼图。模块程序如下:forSNR_db=0:10:20N3=0.1*SNR_db;Eb_N0=10^(SNR_db/10);sgma=sqrt(1/(8*Eb_N0));%nc、ns的均方差y0=dmodce(Bin2Dec,Fd,Fs,'psk',M);%8PSK调制ynoise=sqrt(Fs/Fd)*sgma*(randn(length(y0),1)+j*randn(length(y0),1));%加加性高斯随机噪声%z=ddemodce(ynoise,Fd,Fs,'psk',M);%8PSK解调figure(N3+3);%循环画出不同加加性高斯随机噪声后的星座图axis([-1.21.2-1.21.2]);holdon;fori=0:M-1plot(cos(2*pi*i/M),sin(2*pi*i/M),'.','MarkerSize',20);%产生星座图endplot(ynoise,'+');%画出加噪声后的星座图title('加噪声后不同星座图');holdonforj1=1:Nn1(N*N3+j1)=y0(j1);%存调制后的数据于n1n2(N*N3+j1)=ynoise(j1);%存加噪声后的数据于n2end%画出受到噪声干扰的信号向量;end;holdondelay=3;%提升余弦滤波器的延时rcv=rcosflt(n1,Fd,Fs,'fir/normal',.5,delay);rcvy=rcosflt(n2,Fd,Fs,'fir/normal',.5,delay);propdelay=delay.*Fs/Fd+1;%繁殖延时rcv1=rcv(propdelay:end-(propdelay-1),:);rcvy1=rcvy(propdelay:end-(propdelay-1),:);N0=Fs/Fd;offset1=0;%偏移值为2h1=eyediagram(rcv1,N0,1/Fd,offset1);set(h1,'Name','EyeDiagramDisplayedwithNoOffset');title('加噪前的眼图');h2=eyediagram(rcvy1,N0,1/Fd,offset1);set(h2,'Name','EyeDiagramDisplayedwithNoOffset');title('加噪后的眼图');%#########以下是画出加加性高斯随机噪声的波形程序B=10*N;fori=1:Bn00(i)=10*gngauss(sgma);endfigure(8);holdon;fori=1:Bplot(n00);end;title('加性高斯随机噪声');xlabel('时间——t');ylabel('幅度——y');axis([0B-2.52.5]);3.加性高斯白噪声的产生及其波形的产生和绘制本模块,调用一个子函数,产生均值为0,方差为1的高斯白噪声,并且绘出相应的高斯白噪声波形。模块程序如下:%##############以下是画出加加性高斯随机噪声的波形程序B=10*Nfori=1:Bn00(i)=10*gngauss(sgma);endfigure(8);holdon;fori=1:Bplot(n00);end;title('加性高斯随机噪声');xlabel('时间——t');ylabel('幅度——y');axis([0B-2.52.5]);4.8PSK的解调本模块是将加入加性高斯随机噪声的信号与可能发送的8种发射信号相位向量am(m=0,1,2,3,4,5,6,7)进行相关,再通过判决器取出相关值最大的那组am,作为检测器的输出信号,完成相干检测,将该信号进行并串变换,其结果与原信号d进行比较。模块程序如下:%信号映射a000=[10];a001=[cos(pi/4)sin(pi/4)];a011=[01];a010=[cos(3*pi/4)sin(3*pi/4)];a110=[-10];a111=[cos(5*pi/4)sin(5*pi/4)];a101=[0-1];a100=[cos(7*pi/4)sin(7*pi/4)];fori=1:N,n(1)=gngauss(sgma);n(2)=gngauss(sgma);%存高斯白噪声数据于n中if((d1(i)==0)&(d2(i)==0)&(d3(i)==0)),%加噪声r=a000+n;elseif((d1(i)==0)&(d2(i)==0)&(d3(i)==1)),r=a001+n;elseif((d1(i)==0)&(d2(i)==1)&(d3(i)==0)),r=a010+n;elseif((d1(i)==0)&(d2(i)==1)&(d3(i)==1)),r=a011+n;elseif((d1(i)==1)&(d2(i)==0)&(d3(i)==0)),r=a100+n;elseif((d1(i)==1)&(d2(i)==0)&(d3(i)==1)),r=a101+n;elseif((d1(i)==1)&(d2(i)==1)&(d3(i)==0)),r=a110+n;elser=a111+n;end;%对应相关函数c000=dot(r,a000);c001=dot(r,a001);c010=dot(r,a010);c011=dot(r,a011);c100=dot(r,a100);c101=dot(r,a101);c110=dot(r,a110);c111=dot(r,a111);c_max=max([c000c001c010c011c100c101c110c111]);%判决器取出相关值最大,作为检测器的输出信号if(c000==c_max),de1=0;de2=0;de3=0;%将该信号进行并串变换elseif(c001==c_max),de1=0;de2=0;de3=1;elseif(c010==c_max),de1=0;de2=1;de3=0;elseif(c011==c_max),de1=0;de2=1;de3=1;elseif(c100==c_max),de1=1;de2=0;de3=0;elseif(c101==c_max),de1=1;de2=0;de3=1;elseif(c110==c_max),de1=1;de2=1;de3=0;elsede1=1;de2=1;de3=1;end;5.蒙特卡罗分析本模块完成对加高斯白噪声后的误码和误符号的概率计算,以及绘制出相应的蒙特卡罗分析图。首先,是检测加高斯白噪声后的对应码元是否错误,如果出错,则误码和误符号计数加1,算出总共的误码数和误符号数;然后,由误码数和误符号数计算出误码率和误符号率;最后,绘出8PSK的蒙特卡洛图。模块程序如下:fork=1:length(SNRindB1),snr=10^(SNRindB1(k)/10);%信噪比sgma=sqrt(E/(3*2*snr));%%噪声标准均方差numofsymbolerror=0;%无符号率计数初值numofbiterror=0;%无码率计数初值symbolerror=0;%误码标志if(de1~=d1(i)),numofbiterror=numofbiterror+1;%有误码则加一symbolerror=1;%置误码标志end;if(de2~=d2(i)),numofbiterror=numofbiterror+1;symbolerror=1;end;if(de3~=d3(i)),numofbiterror=numofbiterror+1;symbolerror=1;end;if(symbolerror==1),numofsymbolerror=numofsymbolerror+1;end;end;ps=numofsymbolerror/N;%计算误码率pb=numofbiterror/(3*N);%计算误符号率smld_symbol_err_prb(k)=ps;%将误码率值存入向量smld_symbol_err_prb中smld_bit_err_prb(k)=pb;%将误符号率值存入向量smld_bit_err_prb中end;%##############以下是画出理论误码率,误比特率和误符号率的程序fori=1:length(SNRindB2),SNR=exp(SNRindB2(i)*log(10)/10);%对数转换%信噪