您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > QPSK通信系统的Monte Carlo仿真实验报告
QPSK通信系统的MonteCarlo仿真实验报告1实验目的1.1提高独立学习的能力1.2培养发现问题,解决问题,分析问题的能力1.3学习Matlab的使用1.4掌握4PSK通信系统的MonteCarlo仿真方法1.5掌握4PSK通信系统的组成原理1.6比较编码信号与未编码信号在随机信道中的传输,加深对纠错编码原理的理解2实验原理2.1调制解调原理一组M载波相位调制信号波形的一般表示为:是发送滤波器的脉冲形状,A为信号的幅度。将式中的余弦函数的相角看成两个相角的和,可以将上表示为将归一化,则函数能量、A可归一化到1。这样一个相位调制信号可以看做两个正交载波,起始幅度取决于在每个信号区间内的相位,因此,数字相位调制信号在几何上可以用和的二维向量来表示,即同样,将加性噪声分解成两路,加入噪声后的二维向量为判决方法:1)最大投影法:最佳检测器将接收到的信号向量r投射到M个可能的传输信号向量之一上去,并选取对应于最大投影的向量。我们在试验中用的是将r向量与作为标准的s向量作向量积后选取最大者的方法。2)最小距离法:我们在实验中实现最小距离法判决的方法是求出r向量的终点与作为标准的s向量的终点后选取最小者的方法。由于二相相位调制与二进制PAM是相同的,所以差错概率为式中是每比特能量。4PSK可以看作是两个在正交载波上的二相相位调制系统,所以1个比特的差错概率与二相相位调制是一致的。2.2信道纠错编码在随机信道中,错码的出现是随机的,且错码之间是统计独立的。由高斯白噪声引起的错码就具有这种性质。当信道中加性干扰主要是这种噪声时,就称这种信道为随机信道。由于信息码元序列是一种随机序列,接收端是无法预知的,也无法识别其中有无错码。为了解决这个问题,可以由发送端的信道编码器在信息码元序列中增加一些监督码元。这些监督码元和信源码元之间有一定的关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。在信息码元序列中加入监督码元就称为差错控制编码,有时也称为纠错编码。汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。下面是汉明码的构造原理。一般说来,若码长为n,信息位数为k,则监督位数r=n−k。如果希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求设分组码(n,k)中k=4,为了纠正一位错码,由上式可知要求监督位数r≥3。若取r=3,则n=k+r=7。用α6α5…α0表示这7个码元,用S1、S2、S3表示三个监督关系式中的校正子,则S1S2S3的值与错码位置的对应关系可以规定如下表所列。由表中规定可见,仅当一错码位置在α2、α4、α5或α6时,校正子S1为1;否则S1为0。这就意味着α2、α4、α5和α6四个码元构成偶数监督关系同理,α1、α3、α5和α6构成偶数监督关系以及α0、α3、α4和α6构成偶数监督关系在发送端编码时,信息位α6、α5、α4和α3的值决定于输入信号,因此它们是随机的。监督位α2、α1和α0应根据信息位的取值按监督关系来确定,即监督位应使上三式中S1、S2和S3的值为零(表示变成的码组中应无错码)由上式经移项运算,解出监督位给定信息位后,可直接按上式算出监督位,其结果如下表所列。接收端接收到每个码组后,先计算出校正因子S1、S2、和S3,再按事先规定的对应关系判断误码情况并且纠正。3实验程序模块程序1.信源函数signalsourcefunction[a,b]=signalsource(N)source=rand(1,N);%产生随机数a=zeros(1,N);b=zeros(1,N);fori=1:Nif(source(i)0.25)%当随机数0.25时,规定为00a(i)=0;b(i)=0;elseif(source(i)0.5)%当0.25随机数0.5时,规定为01a(i)=0;b(i)=1;elseif(source(i)0.75)%当0.5随机数0.75时,规定为10a(i)=1;b(i)=0;elsea(i)=1;%当0.75随机数1时,规定为11b(i)=1;endend2.正交映射zhengjiaoyingshfunction[sm]=zhengjiaoyingshe(m,N)%将四进制信号转换成4PSK两路正交信号esm=zeros(2,N);%生成一个二维数组fori=1:N%从1到N循环,根据相位进行映射ifm(i)==0sm(:,i)=[1;0];%当m=0时,sm=(10)elseifm(i)==1sm(:,i)=[0;1];%当m=1时,sm=(01)elseifm(i)==2sm(:,i)=[-1;0];%当m=2时,sm=(-10)elseifm(i)==3sm(:,i)=[0;-1];%当m=3时,sm=(0-1)endendend3.2进制转换4进制function[m]=source2(a,b,N)%将生成的原信号转换成四进制信号m=zeros(1,N);%建立一个长度为N的序列,N的长度应为原信号长度的1/2fori=1:Nif((a(i)==0)&&(b(i)==1))%根据格雷码对照进行映射m(i)=0;elseif((a(i)==0)&&(b(i)==0))m(i)=1;elseif((a(i)==1)&&(b(i)==0))m(i)=2;elsem(i)=3;endend4.噪声模块均值为0不再表示guassfunction[n]=guass(N,sgma)%产生两路正交噪声nc=zeros(1,N);ns=zeros(1,N);fori=1:Nu=rand;%产生随机数z=sgma*sqrt(2*log10(1/(1-u)));u=rand;gsrv1=z*cos(2*pi*u);gsrv2=z*sin(2*pi*u);nc(i)=gsrv1;ns(i)=gsrv2;endn=zeros(2,N);%写成矩阵模式便于和之前求得的sm相加n(1,:)=nc;n(2,:)=ns;end5.最大投影点准则touyingzhunzefunction[c]=touyingzhunze(r,N)d=zeros(1,4);c=zeros(1,N);fori=1:N%r和s作向量积d(1)=1*r(1,i)+0*r(2,i);d(2)=0*r(1,i)+1*r(2,i);d(3)=(-1)*r(1,i)+0*r(2,i);d(4)=0*r(1,i)+(-1)*r(2,i);dm=d(1);fork=2:4%求出最大向量积ifdmd(k)dm=d(k);endendifdm==d(1);c(i)=0;%根据映射的逆过程进行判决elseifdm==d(2);c(i)=1;elseifdm==d(3);c(i)=2;elseifdm==d(4);c(i)=3;endendend6.最小欧氏距离法则julizhunzefunction[c]=julizhunze(r,N)d=zeros(1,4);c=zeros(1,N);fori=1:N%分别求r向量终点与(10)(01)(-10)(0-1)距离d(1)=(r(1,i)-1)^2+(r(2,i)-0)^2;d(2)=(r(1,i)-0)^2+(r(2,i)-1)^2;d(3)=(r(1,i)-(-1))^2+(r(2,i)-0)^2;d(4)=(r(1,i)-0)^2+(r(2,i)-(-1))^2;dm=d(1);fork=2:4%求出最小距离ifdmd(k)dm=d(k);endendifdm==d(1);c(i)=0;%判决elseifdm==d(2);c(i)=1;elseifdm==d(3);c(i)=2;elseifdm==d(4);c(i)=3;endend7.还原原信号rebuildfunction[y]=rebuild(c,N)%重新建立源信号M=2*N;y=zeros(1,M);%生成空序列,长度为2Nfori=1:Nifc(i)==0y(2*i-1)=0;y(2*i)=1;%当c=0,y信号为[01]elseifc(i)==1y(2*i-1)=0;y(2*i)=0;%当c=1,y信号为[00]elseifc(i)==2y(2*i-1)=1;y(2*i)=0;%当c=2,y信号为[10]elseifc(i)==3y(2*i-1)=1;y(2*i)=1;%当c=3,y信号为[11]endendend8.纠错模块correctfunction[f]=correct(e)fori=1:length(e)/7;%求校正因子s1=xor(xor(xor(e(7*i-6),e(7*i-5)),e(7*i-4)),e(7*i-2));s2=xor(xor(xor(e(7*i-6),e(7*i-5)),e(7*i-3)),e(7*i-1));s3=xor(xor(xor(e(7*i-6),e(7*i-4)),e(7*i-3)),e(7*i-0));ifs1==0&&s2==0&&s3==1;e(7*i)=1-e(7*i);%根据错码表检错elseifs1==0&&s2==1&&s3==0;e(7*i-1)=1-e(7*i-1);%纠错,即将错误比特取反elseifs1==1&&s2==0&&s3==0;e(7*i-2)=1-e(7*i-2);elseifs1==0&&s2==1&&s3==1;e(7*i-3)=1-e(7*i-3);elseifs1==1&&s2==0&&s3==1;e(7*i-4)=1-e(7*i-4);elseifs1==1&&s2==1&&s3==0;e(7*i-5)=1-e(7*i-5);elseifs1==1&&s2==1&&s3==1;e(7*i-6)=1-e(7*i-6);endendf=e;%纠错后信号end9.符号差错概率与比function[ps,pb]=error1(y,a,b,N)特差错概率numbit=0;%统计错误比特个数,初始化为0numsymbol=0;%统计错误符号个数,初始化为0fori=1:Nsymbol=0;if(y(2*i-1)~=a(i))%统计错误比特个数numbit=numbit+1;symbol=1;endif(y(2*i)~=b(i))numbit=numbit+1;symbol=1;endif(symbol==1)%统计错误符号个数numsymbol=numsymbol+1;endendps=numsymbol/N;%计算错误率pb=numbit/(2*N);end10.将ab整合成一个序列(a1b1a2b2……)function[h]=xulie(a,b,N)h=zeros(1,2*N);fori=1:Nh(2*i-1)=a(i);h(2*i)=b(i);endend11.问题c中需要的误码率。输入变量不再为方差。function[pb]=pbquxian(N,a,b,sgma)m=source2(a,b,N);sm=zhengjiaoyingshe(m,N);n=guass(N,sgma);%产生两路正交高斯白噪声r=sm+n;%将噪声与正交信号相加c=touyingzhunze(r,N);y=rebuild(c,N);%重新还原信号[ps,pb]=error1(y,a,b,N);end第二问特有的:12.汉明编码codefunction[p]=code(N,h)p=zeros(1,N+N/4*3);%空序列长度为原比特数的7/4fork=1:N/4%将序列分为四个比特一组p(7*k-6)=h(4*k-3);%每组前4个直接复制原序列p(7*k-5)=h(4*k-2);p(7*k-4)=h(4*k-1);p(7*k-3)=h(4*k);p(7*k-2)=xor(xor(p(7*k-6),p(7*k-5)),p(7*k-4));%每组后3位生成监督位p(7*k-1)=xor(xor(p(7*k-6),p(7*k-5)),p(7*k-3));p(7*k)=xor(xor(p(7*k-6),p(
本文标题:QPSK通信系统的Monte Carlo仿真实验报告
链接地址:https://www.777doc.com/doc-5155123 .html