南阳师范学院物理与电子工程学院《数字通信系统》题目:基于MATLAB的通信系统仿真完成人:张晓旭班级:09通信四班学号:09006510455专业:通信工程基于MATLAB的通信系统仿真———信道编码对通信系统性能的影响摘要:简述信道编码理论,详细说明分组码的编译原理、实现方法及检错纠错能力,用MATLAB仿真有无信道编码条件下对通信系统性能的影响及信道编码在不同信道下对通信系统性能的影响,如AWGN信道和深衰落信道。关键词:信道编码、分组码、MATLAB仿真、性能一、引言提高信息传输的有效性和可靠性始终是通信技术所追求的目标,而信道编码能够显著的提升信息传输的可靠性。1948年,信息论的奠基人C.E.Shannon在他的开创性论文“通信的数学理论”中,提出了著名的有噪信道编码定理.他指出:对任何信道,只要信息传输速率R不大于信道容量C,就一定存在这样的编码方法:在采用最大似然译码时,其误码率可以任意小.该定理在理论上给出了对给定信道通过编码所能达到的编码增益的上限,并指出了为达到理论极限应采用的译码方法.在信道编码定理中,香农提出了实现最佳编码的三个基本条件:(1)采用随机编译码方式;(2)编码长度L→∞,即分组的码组长度无限;(3)译码采用最佳的最大似然译码算法。二、信道编码理论1、信道编码的目的在数字通信系统中由于信道内存在加性噪声及信道传输特性不理想等容易造成码间串扰同时多用户干扰、多径传播和功率限制等也导致错误译码。为了确保系统的误比特率指标通常采用信道编码。信道编码是为了保证信息传输的可靠性、提高传输质量而设计的一种编码。它是在信息码中增加一定数量的多余码元,使码字具有一定的抗干扰能力。2、信道编码的实质信道编码的实质就是在信息码中增加一定数量的多余码元(称为监督码元),使它们满足一定的约束关系,这样由信息码元和监督码元共同组成一个由信道传输的码字。举例而言,欲传输k位信息,经过编码得到长为n(nk)的码字,则增加了n-k=r位多余码元,我们定义R=k/n为编码效率。3、信道编码公式令信息速率为fb,经过编码以后的速率为ft,定义:R=fb/ft为编码率。则对于任何一个信道,总存在一个截止速率R0,只要RR0,总可以达到:BERCR2-nR0,其中CR为某个常数,n为编码的约束长度。对于等概二进码、AWGN信道,有:)1(log100/20NERbeR121ln1)1(000RbRNE三、线性分组码的编译码原理1、线性分组码的基本概念一个[n,k]线性分组码,是把信息划成k个码元为一段(称为信息组),通过编码器变成长为n个码元的一组,作为[n,k]线性分组码的一个码字。若每位码元的取值有q种(q为素数幂),则共有qk个码字。n长的数组共有qn组,在二进制情况下,有2n个数组。显然,qn个n维数组(n重)组成一个GF(q)上的n维线性空间。如果qk(或2k)个码字集合构成了一个k维线性子空间,则称它是一个[n,k]线性分组码。即将k维k重信息空间的元素线性映射到n维n重矢量空间(接收矢量/收码)的k维n重子空间(码空间)。2、生成矩阵和校验矩阵生成矩阵:G称为生成矩阵,因为可以用它产生整个码组A,即有生成矩阵的性质:具有[IkQ]形式的生成矩阵称为典型生成矩阵。由典型生成矩阵得出的码组A中,信息位的位置不变,监督位附加于其后。这种形式的码组称为系统码。矩阵G的各行也必须是线性无关的。如果已有k个线性无关的码组,则可以将其用来作为生成矩阵G,并由它生成其余码组。监督矩阵:监督矩阵可用来校验和纠错。四、MATLAB仿真源程序及说明采用模块化编程,力求把每个功能独立成各个模块,让程序更清晰。首先介绍各个子程序及其实现的基本功能。运行环境为Matlab7.0版本通信过程的每个模块写成子程序函数:Channelcoding为信道编码函数Channeldecoding为信道解码纠错子函数0110001101001011001001111000QGkIG34560123456aaaaaaaaaaaArPIH001101101011011001110Interwaving为交积子函数Deinterwaving为解交积子函数addfade为向信道加入衰落参数的子函数awgn为库函数,向信源加高斯白噪声pskmod为库函数,用于信号调制,输出为复数pskdemod为库函数,用于信号解调脚本文件:file1:信道编码对通信系统性能的影响,有无信道编码的影响file2:在周期性深衰落的信道条件下,交织对通信系统性能的影响file3:在交织条件下,不同时长的周期性深衰落对系统性能影响的比较信道编码子程序:%信道编码子函数,sym为编码码流,G为生成矩阵,k为编码方式的长度,如(7,4)码的4functionbitcoded=channelcoding(sym,G,k)A=vec2mat(sym,k);U=A*G;U=mod(U,2);bitcoded=reshape(U',1,[]);信道解码子程序:functionbitdecoded=channeldecoding(recode,Etab,Smatrix,H,n,k)%前向纠错函数,实现纠错功能%bidecoded为纠错后返回的比特流%recode为输入的比特流%E为错误图样表,S为对应的伴随式表%H为监督矩阵,n,k为码的类型,如(7,4)码,n=7,k=4row=length(recode)/n;%行数E=zeros(row,n);%错误图样RM=zeros(row,n);%纠错之后的矩阵R=vec2mat(recode,n);S=R*H';%伴随矩阵S=mod(S,2);fori=1:rowforj=1:2^(n-k)%查表纠错if(S(i,:)==Smatrix(j,:))E(i,:)=Etab(j,:);RM(i,:)=R(i,:)+E(i,:);RM(i,:)=mod(RM(i,:),2);break;endendendbitdecoded=reshape(RM',1,[]);%转化为比特流交织子程序:functionretbit=interweaving(bitstream,row,col)%功能:实现对输入比特的交积%retbit为交积后返回的比特流向量%bitstream为需要交积的比特流向量%row和col为交积器的行和列,%通过改变col就可以改变交积深度retbit=zeros(1,length(bitstream));bitarr=vec2mat(bitstream,row);bitarr=bitarr';fori=1:length(bitstream)/(row*col)temp=bitarr(:,((i-1)*col+1):i*col);retbit(1,((i-1)*(row*col)+1):(i*(row*col)))=reshape(temp',1,[]);end解交织子程序:functionretbits=deinterweaving(bitstream,row,col)%功能:实现对输入比特的解交积%rebits为解交积后返回的比特流%bitstream输入的比特流%row和col为交积器的行和列,通过改变col就可以改变交积器的长度retbits=zeros(1,length(bitstream));bitarr=vec2mat(bitstream,col);fori=1:length(bitstream)/(row*col)temp=bitarr((i-1)*row+1:i*row,:);retbits(1,(i-1)*row*col+1:i*row*col)=reshape(temp,1,[]);end信道衰落子程序:functioncode=addfade(modcode,Tf,isperiod,isfade)%功能:向传输序列modcode叠加衰落性信道的衰落参数k(t)%code为加入衰减参数之后返回的序列。%modcode为调制之后的序列%Tf为衰落时间,以ms为单位,小于10ms,%Tf=1,表示衰落1ms%isperiod周期衰落和一次性衰落的标志,%isperiod=1表示周期性衰落,0表示一次性衰落%isfade表示是否存在衰落,1存在,0不存在衰落直接返回modcodeif(isfade==1)if(isperiod==1)%周期性衰落fork=1:length(modcode)/(100*Tf)a=(k-1)*100*Tf+31;b=(k-1)*100*Tf+30+10*Tf;modcode(1,a:b)=0.1*modcode(1,a:b);endelse%一次衰落a=31;b=30+10*Tf;modcode(1,a:b)=0.1*modcode(1,a:b);endcode=modcode;elsecode=modcode;end1、file1:信道编码对通信系统性能的影响,有无信道编码的影响执行时间:Elapsedtimeis355.023518seconds.ticclc%功能:有无信道编码性能比较M=2;%进制b=log2(M);%每符号比特数n=128*10000;%符号数G=[1111000;1010100;0110010;1100001];%生成矩阵H=[1001101;0101011;0011110];%监督矩阵Etab=[0000000;0000001;%错误图样0000010;0000100;0001000;0010000;0100000;1000000];Smatrix=Etab*H';%对应的伴随式sym=randint(n,1,M);sym=de2bi(sym,'left-msb');%模拟信源编码bitcoded=channelcoding(sym,G,4);%信道编码,(7,4)码modbit=pskmod(bitcoded,M);%在传输序列modbit加入AWGN噪声snr=0:0.2:15;%噪声为0到15dL=length(snr)ser=zeros(1,L);ser2=zeros(1,L);fork=1:Ly=awgn(modbit,10*log10(b)+snr(k),'measured');zsym=pskdemod(y,M);%复数解调zbit=de2bi(zsym,'left-msb');recode=reshape(zbit',1,[]);Rstream=recode;err=(Rstream~=bitcoded);errnum=sum(err);ser(k)=log10(errnum/length(bitcoded));%纠错bitdecoded=channeldecoding(Rstream,Etab,Smatrix,H,7,4);err=(bitdecoded~=bitcoded);errbits=sum(err);ser2(k)=log10(errbits/(length(bitcoded)));endplot(snr,ser,'b-*')holdonplot(snr,ser2,'r-o')gridonlegend('没有信道编码','信道编码');xlabel('Eb/No(dB)');ylabel('SER');title('2PSK有无信道编码性能比较');toc%Elapsedtimeis278.288819seconds.程序运行时间结论:由上图在较高信噪比的时候编码增益很明显大大提高了误码性能,但是在低信噪被的时候编码增益较小甚至可能是负值,则是因为编码后信息比特能量扩散到多个编码比特上,每个编码比特能量有所降低,如果信噪比低的话,编码冗余带来的性能增益可能弥补不了编码比特的能量的降低,因此信道中信噪比的波动会显著降低编码性能2、file2:在周期性深衰落的信道条件下,交织对通信系统性能的影响ticclc%功能:有无信道编码性能比