MATLAB实现卷积码编译码_第1页
MATLAB实现卷积码编译码_第2页
MATLAB实现卷积码编译码_第3页
MATLAB实现卷积码编译码_第4页
MATLAB实现卷积码编译码_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./WORD格式可编辑本科生毕业论文〔设计题目:MATLAB实现卷积码编译码专业代码:作者姓名:学号:单位:指导教师:年月日.目录前言11.纠错码基本理论21.1纠错码基本理论2纠错码概念2基本原理和性能参数21.2几种常用的纠错码62.卷积码的基本理论82.1卷积码介绍82.1.1卷积码的差错控制原理82.2卷积码编码原理102.2.1卷积码解析表示法102.2.2卷积码图形表示法112.3卷积码译码原理152.3.1卷积码三种译码方式152.3.2Viterbi译码原理163.卷积码编译码及MATLAB仿真183.1Matlab概述183.1.1Matlab的特点193.1.2Matlab工具箱和内容193.2卷积码编码及仿真20编码程序203.3信道传输过程仿真213.4维特比译码程序及仿真223.4.1维特比译码算法解析233.4.2Viterbi译码程序253.4.3viterbi译码matlab仿真28信噪比对卷积码译码性能的影响28码率对卷积码译码性能的影响303.4.6约束长度对卷积码误码性能的影响31回溯长度对卷积码误码性能的影响323.4.8判决方式对卷积码误码性能的影响324.结论及展望344.1结论344.2展望355.结束语36参考文献37致谢38附录39摘要在数字通信系统中,通常采用差错控制编码来提高系统的可靠性。自P.Elias首次提出卷积码编码以来,这一编码技术至今仍显示出强大的生命力。目前,卷积码已广泛应用在无线通信标准中,如GSM,CDMA2000和IS-95等无线通信标准中。本文简单介绍了纠错码的基本原理,论述了卷积码编译码原理和算法,并通过matlab仿真对卷积码性能进行研究,重点比较分析了不同码率、不同约束长度、不同回溯长度以及不同译码判决方式对Viterbi译码性能的影响,并得出相关结论。关键词:卷积码,Viterbi,Matlab,误码率,数字通信系统AbstractIndigitalcommunicationsystems,errorcontrolcodingisusuallyusedtoimprovesystemreliability.SinceP.Eliasputforwardtheconvolutionalcodingthefirsttime,thecodingisstillshowingstrongvitality.,hasbecomewidelyusedinsatellitecommunications,wirelesscommunicationsandmanyothercommunicationsystemsasakindofchannelcodingmethod.suchasGSM,CDMA2000andhasbeenawirelesscommunicationstandardsofIS-95.Thisarticleintroducesthebasicprinciplesoferror-correctingcodes,mainlyreasearchtheprincipleoftheconvolutionalcodeencodinganddecodingandthealgorithms.Throughthematlabsimulation,westudytheperformanceofconvolutionalcode,especillytheperformanceoftheviterbidecodingwithdifferentbitrates,differentConstraintlength,differenttracebackdeptheanddifferentdecisiontypes,compareandmakeconclusions.Keywords:convolutionalcodes,Viterbi,Matlab,biterrorrate,thedigitalcommunicationsystem...MATLAB实现卷积码编译码前言信道编码是数字通信系统的重要组成部分,随着通信技术的不断发展,信道编码技术也在不断地发展。在通信系统中,信道传输特性不理想以及噪声的存在,会导致接收端出现接收信号的错误,因此用于信道纠错的信道编码是数字通信系统中极为重要的一个环节。二十世纪40年代香农定理的出现为人们指出了纠错码的研究方向。根据香农的有噪信道编码定理,可以推导出一个码率为R的编码通信系统达到无误码传输状态所必须的最小信噪比的理论极限。这个理论极限通常称为香农限,它说明对一个码率为R的编码通信系统,只有当SNR超过这个极限值时才能获得无误码传输。只要SNR高于这个极限值,香农的编码定理保证了能够获得无误码传输的〔可能相当复杂编码通信系统的存在性。另外,香农证明了在采用无限长的随机编码时,数据可以以接近信道容量的速率几乎无误码的传输,从而为信道编码的研究奠定了基础。本文主要介绍了信道编码的基本理论,着重研究了卷积码的编码方法和viterbi译码,介绍了MATLAB的使用方法,并编写卷积码的编码和解码程序,通过MATLAB仿真软件对卷积码编解码进行仿真。重点对viterbi译码进行了研究,该算法就是利用卷积码编码器的格图来计算路径度量,选择从起始时刻到终止时刻的惟一幸存路径作为最大似然路径,沿着最大似然路径回溯到开始时刻,所走过的路径对应的编码输出就是最大似然译码输出序列。它是一种最大似然译码方法,当编码约束长度不大、或者误码率要求不是很高的情况下,Viterbi译码器设备比较简单,计算速度快,因而Viterbi译码器被广泛应用于各种领域。1.纠错码基本理论1.1纠错码基本理论1.1.1纠错码概念纠错码<errorcorrectingcode>,在传输过程中发生错误后能在收端自行发现或纠正的码。仅用来发现错误的码一般常称为检错码。为使一种码具有检错或纠错能力,须对原码字增加多余的码元,以扩大码字之间的差别,即把原码字按某种规则变成有一定剩余度〔见信源编码的码字,并使每个码字的码之间有一定的关系。关系的建立称为编码。码字到达收端后,可以根据编码规则是否满足以判定有无错误。当不能满足时,按一定规则确定错误所在位置并予以纠正。纠错并恢复原码字的过程称为译码。检错码与其他手段结合使用,可以纠错。1.1.2基本原理和性能参数纠错码编码的基本思想是在被传输的信息码元中附加一些监督码元,并且使它们之间确定某一种关系,根据传输过程中这种关系是否被破坏来发现或纠正错误。可见这种差错控制能力是用增加信息量的冗余度来换取的。设编码后的码组长度、码组中所含信息码元以及监督码元的个数分别为n、k和r,三者间满足n=k+r,定义编码效率为R=k/n=1-r/n。可见码组长度一定时,所加入的监督码元个数越多,编码效率越低。香农的信道编码定理指出:对于一个给定的有扰信道,若信道容量为C,只要发送端以低于C的速率R发送信息,其中R为编码器的输入二进制码元速率,则一定存在一种编码方法,使编码错误概率P随着码长n的增加,按指数下降到任意小的值。可以表示为QUOTE<1-1>其中E<R>称为误差指数,它与R和C的关系如图1-1所示。图1-1误差指数曲线由定理有如下结论:<1>.在码长及发送信息速率一定的情况下,为减小P可以增大信道容量。由图2-1可知,E<R>随信道容量的增加而增大。由式<1-1>可知,错误概率随E<R>的增大而指数下降。<2>.在信道容量及发送信息速率一定的条件下,增加码长,可以使错误概率指数下降。对于实际应用来说,此时的设备复杂性和译码延时也随之增加。香农的信道编码定理为信道编码奠定了理论基础,虽然定理本身并没有给出具体的差错控制编码方法和纠错码的结构,但它从理论上为信道编码的发展指出了努力方向。我们用3位二进制码组来说明检错纠错的基本原理。3位二进制码元共有8种可能的组合:000、001、010、011、100、101、110、111。如果这8种码组都可传递消息,若在传输过程中发生一个误码,则一种码组会错误地变成另一种码组。由于每一种码组都可能出现,没有多余的信息量,因此接收端不可能发现错误,认为发送的就是另一种码组。如果选其中000、011、101、110来传送消息,这相当于只传递00、01、10、11四种信息,而第3位是附加的。这位附加的监督码元与前面两位码元一起,保证码组中"1"码的个数为偶数。这4种码组称为许用码组。另外4种码组不满足这种校验关系,称为禁用码组,它们在编码后的发送码元中不会出现。接收时一旦发现有禁用码组,就表明传输过程中发生了错误。用这种简单的校验关系可以发现1个或3个错误,但不能纠正错误。因为当接收到的码组为禁用码组时,比如为010,无法判断发送的是哪个码组。虽然原发送码组为101的可能性很小<因为3个误码的概率一般很小>,但不能绝对排除,即使传输过程中只发生一个误码,也有三种可能的发送码组即000、011和110。假如我们进一步将许用码组限制为二种即000和111,显然这样可以发现所有2位以下的误码,若用来纠错,可以用最大似然准则纠正1位错误。可以用一个三维立方体来表示上述3位二进制码组的例子,如图1-2所示。图中立方体各顶点分别表示8位码组,3位码元依次表示x、y、z轴的坐标。zzyx<0,0,1><0,1,1><0,0,0><1,1,1><0,1,0><1,1,0><1,0,0><1,0,1>图1-2码距的几何解释这里定义码组中非零码元的数目为码组的重量,简称码重。比如100码组的码重为1,101码组的码重为2。定义两个码组中对应码位上具有不同二进制码元的位数为两码组的距离,称为汉明<Hamming>距,简称码距。在前面3位二进制码组的例子中,当8种码组均为许用码组时,两码组间的最小距离为1,称这种编码的最小码距为1,一般记为dmin=l;当选4种码组为许用码组时,最小码距dmin=2;当用2种码组作为许用码组时,dmin=3。从图1-2所示的立方体可以看出,码距就是从一个顶点沿立方体各边移到另一个顶点所经过的最少边数。图中粗线表示000与111之间的一条最短路径。很容易得出前例中各种情况下的码距。根据以上分析可知,编码的最小码距直接关系到这种码的检错和纠错能力,所以最小码距是差错控制编码的一个重要参数。对于分组码一般有以下结论:<1>在一个码组内检测e个误码,要求最小码距<1-2><2>在一个码组内纠正t个误码,要求最小码距QUOTE<1-3><3>在一个码组内纠正t个误码,同时检测e<eQUOTEt>个误码,要求最小码距<1-4>这些结论可以用图1-3所示的几何图形简单的给予证明。图1-3码距与检错和纠错能力的关系图1-3<a>中C表示某码组,当误码不超过e个时,该码组的位置移动将不超出以它为圆心以e为半径的圆。只要其它任何许用码组都不落入此圆内,则C发生e个误码时就不可能与其它许用码组混淆。这意味着其它许用码组必须位于以C为圆心,以e+1为半径的圆上或圆外。因此该码的最小码距dmin为e+1。图1-3<b>中C1、C2分别表示任意两个许用码组,当各自误码不超过t个时,发生误码后两码组的位置移动将各自不超出以C1、C2为圆心,t为半径的圆。只要这两个圆不相交,当误码小于t个时,根据它们落在哪个圆内可以正确地判断为C1或C2,就是说可以纠正错误。以C1、C2为圆心的两圆不相交的最近圆心距离为2t+l,即为纠正t个误码的最小码距。式<1-1>所述情形中纠正t个误码同时检测e个误码,是指当误码不超过t个时,能自动纠正误码,而当误码超过t个时,则不可能纠正错误但仍可检测e个误码。图1-3<c>中C1、C2分别为两个许用码组,在最坏情况下C1发生e个误码而C2发生t个误码,为了保证此时两码组仍不发生混淆,则要求以C1为圆心e为半径的圆必须与以C2为圆心t为半径的圆不发生交叠,即要求最小码距dmin>=t+e+1。可见dmin体现了码组的纠、检错能力。码组间最小距离越大,说明码字间最小差别越大,抗干扰能力就越强。由于编码系统具有纠错能力,因此在达到同样误码率要求时,编码系统会使所要求的输入信噪比低于非编码系统,为此引入了编码增益的概念。其定义为,在给定误码率下,非编码系统与编码系统之间所需信噪比Eb/N0之差<用dB表示>。采用不同的编码会得到不同的编码增益,但编码增益的提高要以增加系统带宽或复杂度来换取。<2.1.3>纠错码实现纠错码实现中最复杂的部分是译码。它是纠错码能否应用的关键。根据式<1>,采用的码长n越大,则误码率越小。但n越大,编译码设备也越复杂,且延迟也越大。人们希望找到的译码方法是:误码率随码长n的增加按指数规律下降;译码的复杂程度随码长n的增加接近线性地增加;译码的计算量则与码长n基本无关。可惜,已经找到的码能满足这样要求的很少。不过由于大规模集成电路的发展,既使应用比较复杂的但性能良好的码,成本也并不太高。因此,纠错码的应用越来越广泛。纠错码传输的都是数字信号。这既可用硬件实现,也可用软件实现。前者主要用各种数字电路,主要是采用大规模集成电路。软件实现特别适合计算机通信网等场合。因为这时可以直接利用网中的计算机进行编码和译码,不需要另加专用设备。硬件实现的速度较高,比软件可快几个数量级。在传信率一定的情况下,如果采用纠错码提高可靠性,要求信道的传输率增加,带宽加大。因此,纠错码主要用于功率受限制而带宽较大的信道,如卫星、散射等系统中。纠错码还用在一些可靠性要求较高,但设备或器件的可靠性较差,而余量较大的场合,如磁带、磁盘和半导体存储器等。在分组码的研究中,谱分析的方法受到人们的重视。纠同步错误码、算术码、不对称码、不等错误纠正码等,也得到较多的研究.1.2几种常用的纠错码<1>RS编码RS码即里德-所罗门码,它是能够纠正多个错误的纠错码,RS码为〔204,188,t=8,其中t是可抗长度字节数,对应的188符号,监督段为16字节<开销字节段。实际中实施〔255,239,t=8的RS编码,即在204字节〔包括同步字节前添加51个全"0"字节,产生RS码后丢弃前面51个空字节,形成截短的〔204,188RS码。RS的编码效率是:188/204。<2>卷积码卷积码非常适用于纠正随机错误,但是,解码算法本身的特性却是:如果在解码过程中发生错误,解码器可能会导致突发性错误。为此在卷积码的上部采用RS码块,RS码适用于检测和校正那些由解码器产生的突发性错误。所以卷积码和RS码结合在一起可以起到相互补偿的作用。卷积码分为两种:①基本卷积码:基本卷积码编码效率为,η=1/2,编码效率较低,优点是纠错能力强。②收缩卷积码:如果传输信道质量较好,为提高编码效率,可以采样收缩截短卷积码。有编码效率为:η=1/2、2/3、3/4、5/6、7/8这几种编码效率的收缩卷积码。编码效率高,一定带宽内可传输的有效比特率增大,但纠错能力越减弱。<3>Turbo码1993年诞生的Turbo码,单片Turbo码的编码/解码器,运行速率达40Mb/s。该芯片集成了一个32×32交织器,其性能和传统的RS外码和卷积内码的级联一样好。所以Turbo码是一种先进的信道编码技术,由于其不需要进行两次编码,所以其编码效率比传统的RS+卷积码要好。<4>交织在实际应用中,比特差错经常成串发生,这是由于持续时间较长的衰落谷点会影响到几个连续的比特,而信道编码仅在检测和校正单个差错和不太长的差错串时才最有效〔如RS只能纠正8个字节的错误。为了纠正这些成串发生的比特差错及一些突发错误,可以运用交织技术来分散这些误差,使长串的比特差错变成短串差错,从而可以用前向码对其纠错,例如:在DVB-C系统中,RS<204,188>的纠错能力是8个字节,交织深度为12,那么纠可抗长度为8×12=96个字节的突发错误。实现交织和解交织一般使用卷积方式。交织技术对已编码的信号按一定规则重新排列,解交织后突发性错误在时间上被分散,使其类似于独立发生的随机错误,从而前向纠错编码可以有效的进行纠错,前向纠错码加交积的作用可以理解为扩展了前向纠错的可抗长度字节。纠错能力强的编码一般要求的交织深度相对较低。纠错能力弱的则要求更深的交织深度。一般来说,对数据进行传输时,在发端先对数据进行FEC编码,然后再进行交积处理。在收端次序和发端相反,先做去交积处理完成误差分散,再FEC解码实现数据纠错。交积不会增加信道的数据码元。<5>伪随机序列扰码进行基带信号传输的缺点是其频谱会因数据出现连"1"和连"0"而包含大的低频成分,不适应信道的传输特性,也不利于从中提取出时钟信息。解决办法之一是采用扰码技术,使信号受到随机化处理,变为伪随机序列,又称为"数据随机化"和"能量扩散"处理。扰码不但能改善位定时的恢复质量,还可以使信号频谱平滑,使帧同步和自适应同步和自适应时域均衡等系统的性能得到改善。扰码虽然"扰乱"了原有数据的本来规律,但因为是人为的"扰乱",在接收端很容易去加扰,恢复成原数据流。实现加扰和解码,需要产生伪随机二进制序列〔PRBS再与输入数据逐个比特作运算。PRBS也称为m序列,这种m序列与TS的数据码流进行模2加运算后,数据流中的"1"和"0"的连续游程都很短,且出现的概率基本相同。利用伪随机序列进行扰码也是实现数字信号高保密性传输的重要手段之一。一般将信源产生的二进制数字信息和一个周期很长的伪随即序列模2相加,就可将原信息变成不可理解的另一序列。这种信号在信道中传输自然具有高度保密性。在接收端将接收信号再加上〔模2和同样的伪随机序列,就恢复为原来发送的信息。2.卷积码的基本理论2.1卷积码介绍卷积码最早于1955年由Elias提出,稍后,1957年Wozencraft提出了一种有效地译码方法即序列译码。1963年Massey提出了一种性能稍差但是比较实用的门限译码方法,使得卷积码开始走向实用化。而后1967年Viterbi提出了最大似然译码算法,它对存储级数较小的卷积码很容易实现,被称作Viterbi译码算法,广泛的应用于现代通信中。2.1.1卷积码的差错控制原理卷积码是一种性能优越的信道编码,它的编码器和解码器都比较易于实现,同时还具有较强的纠错能力,这使得它的使用越来越广泛。我们在一些资料上可以找到关于分组码的一些介绍,分组码的实现是将编码信息分组单独进行编码,因此无论是在编码还是译码的过程中不同码组之间的码元无关。卷积码和分组码的根本区别在于,它不是把信息序列分组后再进行单独编码,而是由连续输入的信息序列得到连续输出的已编码序列。即进行分组编码时,其本组中的n-k个校验元仅与本组的k个信息元有关,而与其它各组信息无关;但在卷积码中,其编码器将k个信息码元编为n个码元时,这n个码元不仅与当前段的k个信息有关,而且与前面的〔N-1段信息有关〔N为编码的约束长度。同样,在卷积码译码过程中,不仅从此时刻收到的码组中提取译码信息,而且还要利用以前或以后各时刻收到的码组中提取有关信息。而且卷积码的纠错能力随约束长度的增加而增强,差错率则随着约束长度增加而呈指数下降。卷积码<n,k,N>主要用来纠随机错误,它的码元与前后码元有一定的约束关系,编码复杂度可用编码约束长度N*n来表示。一般地,最小距离d表明了卷积码在连续N段以内的距离特性,该码可以在N个连续码流内纠正<d-1>/2个错误。卷积码的纠错能力不仅与约束长度有关,还与采用的译码方式有关。总之,由于n,k较小,且利用了各组之间的相关性,在同样的码率和设备的复杂性条件下,无论理论上还是实践上都证明:卷积码的性能至少不比分组码差。以二元码为例,输入信息序列为u=<u0,u1,…>,其多项式表示为u<x>=u0+u1x+…+ulxl+…。编码器的连接可用多项式表示为g<1,1><x>=1+x+x2和g<1,2><x>=1+x2,称为码的子生成多项式。它们的系数矢量g<1,1>=<111>和g<1,2>=<101>称作码的子生成元。以子生成多项式为阵元构成的多项式矩阵G<x>=[g<1,1><x>,g<1,2><x>],称为码的生成多项式矩阵。由生成元构成的半无限矩阵称为码的生成矩阵。其中<11,10,11>是由g<1,1>和g<1,2>交叉连接构成。编码器输出序列为c=u·G,称为码序列,其多项式表示为c<x>,它可看作是两个子码序列c<1><x>和c<2><x>经过合路开关S合成的,其中c<1><x>=u<x>g<1,1><x>和c<2><x>=u<x>g<1,2><x>,它们分别是信息序列和相应子生成元的卷积,卷积码由此得名。在一般情况下,输入信息序列经过一个时分开关被分成k0个子序列,分别以u<x>表示,其中i=1,2,…k0,即u<x>=[u<x>,…,u<x>]。编码器的结构由k0×n0阶生成多项式矩阵给定。输出码序列由n0个子序列组成,即c<x>=[c<x>,c<x>,…,c<x>],且c<x>=u<x>·G<x>。若m是所有子生成多项式g<x>中最高次式的次数,称这种码为<n0,k0,N>卷积码。卷积码中编码后的n个码元不仅与当前段的k个信息有关,而且也与前面〔N-1段的信息有关,编码过程中相互关联的码元为nN个。因此,这N时间内的码元数目nN通常被称为这种码的约束长度。卷积码的纠错能力随着N的增加而增大,在编码器复杂程度相同的情况下,卷段积码的性能优于分组码。卷积码也是分组的,但它的监督元不仅与本组的信息元有关,而且还与前若干组的信息元有关。卷积码根据需要,有不同的结构及相应的纠错能力,但都有类似的编码规律。值得指出的是一种<2,1,N>卷积码,其码率为1/2,它的监督位只有1位,编码效率较高,也比较简单。如使用较长的约束长度,则既可以纠正突发差错,也可以纠正随机差错。2.2卷积码编码原理卷积码一般表示为<n,k,N>的形式,即将k个信息比特编码为n个比特的码组,N为编码约束长度,说明编码过程中相互约束的码段个数。卷积码编码后的n个码元不仅与当前组的k个信息比特有关,还与前N-1个输入组的信息比特有关。编码过程中相互关联的码元有N*n个。R=k/n是编码效率。编码效率和约束长度是衡量卷积码的两个重要参数。典型的卷积码一般选n,k较小,但N值可取较大<>10>,以获得简单而高性能的卷积码。卷积码的编码描述方式有很多种:冲激响应描述法、生成矩阵描述法、多项式乘积描述法、状态图描述,树图描述,网格图描述等。2.2.1卷积码解析表示法卷积码的解析表示发大致可以分为离散卷积法,生成矩阵法,码多项式法。下面以离散卷积为例进行说明。卷积码的编码器一般比较简单,为一个具有k个输入端,n个输出端,m级移位寄存器的有限状态有记忆系统。下图所示为<2,1,7>卷积码的编码器。图2-1〔2,1,7卷积码编码器若输入序列为u=<u0u1u2u3……>,则对应两个码字序列C1=<ca0ca1ca2ca3……>和C2=<cb0cb1cb2cb3……>相应的编码方程可写为P1=u∗C1,P2=u∗C2,P=<P1,P2>。"∗"符号表示卷积运算,P1,P2表示编码器的两个冲激响应,即编码器的输出可以由输入序列和编码器的两个冲击响应卷积而得到,故称为卷积码。这里的冲激响应指:当输入为[10000……]序列时,所观察到的两个输出序列值。由于上图N值为7,故冲激响应至多可持续到第7位,可写为P1=[1111001],P2=[1011011]然后将两个输出端的码字序列合并为一个码字序列为C=<ca0cb0ca1cb1ca2cb2……>。若输入信息序列为[1101];则P1=[1001010101],P2=[1111101111],C=[11010111011001110111]。如图3-2所示为<2,1,3>卷积码的编码器,也是本次课程设计所研究的卷积码编码器,由于其生成冲激响应分别为[111]和[101],故被称为<7,5>码。ZZ-1Z-1++图2-2〔2,1,3卷积码编码器2.2.2卷积码图形表示法除了用解析法描述卷积码的编码外,还可以使用比较形象的图形法来表示卷积码。比较常用的有状态图法,树图法和网格图法。状态图法:由于卷积码编码器在下一时刻的输出取决于编码器的当前状态和下一时刻的输入,而编码器当前状态取决于编码器当前各移位寄存器的存储内容。称编码器当前各移位寄存器存储内容<0或1>为编码器在该时刻的状态<此状态代表记忆以前的输入信息>。随着信息序列的不断输入,编码器不断从一个状态转移到另外一个状态,并且输出相应的编码序列。编码器的总可能状态数为2mk个。对<7,5>码的编码器来说,n=2,k=1,N=3,m=2。共有四个可能状态,其状态图如图2-3所示:0/00

0/00

001001111/101/011/000/100/010/111/11图2-3卷积码状态图图中四个方块表示状态,状态间的连线与箭头表示转移方向,连线上的数字表示是状态发生转移的到来比特,斜杠后的数字由一个状态到另一个状态转移时的输出码字。如当前状态为11,输入信息为0,则转移到01状态并输出01码字,若输入信息为1,则依然为11状态,并输出10码字。树图法描述卷积码的编码过程除了用它的生成矩阵QUOTE外,还可以用半无限码树图。卷积码的树图表示是一种形象的表示卷积码编码过程的方法。卷积码的各种距离度量与树图有密切关系。以<2,1,3>卷积码为例,它的生成多项式矩阵和生成矩阵分别为:QUOTE<2-1><2-2>若输入编码器的信息序列M<D>=<m0,m1,m2…..>=<11011…..>,则由编码器输出码序列C为C=M=<11,01,01,00,01,01,>=<C0,Cl,C2,C3,…><2-3>可以把这个编码过程用如图3-4所示的半无限码树图来说明。设编码器的初始状态为0,码树中每个节点的下一级的上面的分支表示输入为0,下面的分支表示输入为l。每个分支上面的数字表示对应次分支的输出。因此输入不同的信息序列,编码器就走不同的路径,输出不同的码序列。按照上面的例子,则编码过程对应码树中粗线表示的一条路径。对该码序列来说,树图上的这条路径就是它的正确路径。对于一般的二进制<n,k,N>编码器来说,每次输入的是k个信息元,有2k个可能的信息组,这对应于从码树每一个节点上分出的分支树有2k条,相应于2kQUOTE个不同信息组的输入,并且每条都有n个码元,作为与此相应的输出子码。由以上讨论可知,卷积码编码过程的实质,是在输入信息序列的控制下,编码器沿码树通过某一特定路径的过程。显然,译码过程就是根据接收序列和信道干扰的统计特性,译码器在原码树上力图恢复原来编码器所走的路径,即寻找正确路径的过程。其过程如图2-4所示。000000S011S01100S0S010S20111S2011101SS000101100101100110101100S200110101100S2S2S301S301S000S000S01110S011101S1S2SS2110111S110111S100000000000101S3S3S310S310图2-4<2,1,3>卷积码的树图网格图法:网格图可以描述卷积码的状态随时间推移而转移的情况。该图纵坐标表示所有状态,横坐标表示时间。网格图在卷积码的概率译码,特别是Viterbi译码中非常重要,它综合了状态图法直观简单和树图法时序关系清晰的特点。如图2-5所示状态状态t1t2t3t4t5t621111111111102202002020211102010000111图2-5译码器网格图图中实线表示输入0时所走分支,虚线表示输入1时所走分支,编码时只需从起始状态开始依次选择路线并读出输出即可。假设从a状态开始,输入为[1011],则可由图中读出输出为[11101001]。2.3卷积码译码原理2.3.1卷积码三种译码方式<1>代数译码代数译码是将卷积码的一个编码约束长度的码段看作是[n0<m+1>,k0<m+1>]线性分组码,每次根据<m+1>分支长接收数字,对相应的最早的那个分支上的信息数字进行估计,然后向前推进一个分支。如果假设输入的信息序列为=<10111>,相应的编码输出序列为在未超出编码约束长度的情况下,可以通过译码时将接受序列与所有可能的输出编码序列进行比较,通过比较可以得到最小距离,进而可以得到可能的最大概率。按同样方法判决,将每一位进行比较,进行纠错。若此时<2>维特比译码维特比译码是根据接收序列在码的格图上找出一条与接收序列距离〔或其他量度为最小的一种算法。它和运筹学中求最短路径译码器从某个状态,例如从状态ɑ出发,每次向右延伸一个分支〔对于l<L,从每个节点出发都有2种可能的延伸,其中L是信息序列段数,对l≥L,只有一种可能,并与接收数字相应分支进行比较,计算它们之间的距离,然后将计算所得距离加到被延伸路径的累积距离值中。对到达每个状态的各条路径〔有2条的距离累积值进行比较,保留距离值最小的一条路径,称为幸存路径〔当有两条以上取最小值时,可任取其中之一,译码过程如图。图中标出到达各级节点的幸存路径的距离累积值。对给定R的估值序列为=<10111>。这种算法所保留的路径与接收序列之间的似然概率为最大,所以又称为最大似然译码。这种译码的译码约束长度常为编码约束长度的数倍,因而可以纠正不多于<df/2>个错误。维特比译码器的复杂性随m呈指数增大。实用中m不大于10。它在卫星和深空通信中有广泛的应用。在解决码间串扰和数据压缩中也可应用。〔3序贯译码序贯译码是根据接收序列和编码规则,在整个码树中搜索〔既可以前进,也可以后退出一条与接收序列距离〔或其他量度最小的一种算法。由于它的译码器的复杂性随m值增大而线性增长,在实用中可以选用较大的m值〔如20~40以保证更高的可靠性。许多深空和海事通信系统都采用序贯译码。2.3.2Viterbi译码原理卷积码概率译码的基本思路是:以接收码流为基础,逐个计算它与其他所有可能出现的、连续的网格图路径的距离,选出其中可能性最大的一条作为译码估值输出。概率最大在大多数场合可解释为距离最小,这种最小距离译码体现的正是最大似然的准则。卷积码的最大似然译码与分组码的最大似然译码在原理上是一样的,但实现方法上略有不同。主要区别在于:分组码是孤立地求解单个码组的相似度,而卷积码是求码字序列之间的相似度。基于网格图搜索的译码是实现最大似然判决的重要方法和途径。用格图描述时,由于路径的汇聚消除了树状图中的多余度,译码过程中只需考虑整个路径集合中那些使似然函数最大的路径。如果在某一点上发现某条路径已不可能获得最大对数似然函数,就放弃这条路径,然后在剩下的"幸存"路径中重新选择路径。这样一直进行到最后第L级<L为发送序列的长度>。由于这种方法较早地丢弃了那些不可能的路径,从而减轻了译码的工作量,Viterbi译码正是基于这种想法。对于<n,k,N>卷积码,其网格图中共2kL种状态。由网格图的前N-1条连续支路构成的路径互不相交,即最初2k_1条路径各不相同,当接收到第N条支路时,每条路径都有2条支路延伸到第N级上,而第N级上的每两条支路又都汇聚在一个节点上。在Viterbi译码算法中,把汇聚在每个节点上的两条路径的对数似然函数累加值进行比较,然后把具有较大对数似然函数累加值的路径保存下来,而丢弃另一条路径,经挑选后第N级只留下2N条幸存路径。选出的路径同它们的对数似然函数的累加值将一起被存储起来。由于每个节点引出两条支路,因此以后各级中路径的延伸都增大一倍,但比较它们的似然函数累加值后,丢弃一半,结果留存下来的路径总数保持常数。由此可见,上述译码过程中的基本操作是,"加-比-选",即每级求出对数似然函数的累加值,然后两两比较后作出选择。有时会出现两条路径的对数似然函数累加值相等的情形,在这种情况下可以任意选择其中一条作为"幸存"路径。卷积码的编码器从全零状态出发,最后又回到全零状态时所输出的码序列,称为结尾卷积码。因此,当序列发送完毕后,要在网格图的终结处加上〔N-1个己知的信息作为结束信息。在结束信息到来时,由于每一状态中只有与已知发送信息相符的那条支路被延伸,因而在每级比较后,幸存路径减少一半。因此,在接收到〔N-1个己知信息后,在整个网格图中就只有唯一的一条幸存路径保留下来,这就是译码所得的路径。也就是说,在己知接收到的序列的情况下,这条译码路径和发送序列是最相似的。2.3.3维特比译码算法性能对于<n,k,N>卷积码,其编码存储度<移位寄存器单元的数量>为N,幸存路径有2N条。每条幸存路径<或信息序列>存储器单元数是n*D,其中,n是卷积码码组宽度,D是需要存储的码组的个数。D的取值一般考虑取m的整倍数,称D为幸存路径长度。编码存储度和幸存路径长度的取值问题关系到芯片规格、传输时延等问题。若D很大,则译码器的存储量太大而难以实用。一般情况下,当译码进行到第5级<每级包括m个时刻>以后,每个状态幸存路径的前几个分支已基本重合在一起,这就是说每个路径存储器不必存储D个很大的码序列。译码时,当译码器接收并处理完第D个码组后,译码器中的幸存路径存储器已全部存满,当译码器开始处理第D+1个码组时,他就对幸存路径存储器中的最顶端的码组做出判决并输出。〔1适当增加幸存路径的长度可以提高译码器的纠错能力。〔2幸存路径的长度在增加到一定值时,译码器纠错能力趋于稳定。当N值增加到6以上,误比特率降低幅度大为减小,曲线有合二为一的趋势。因此,可以认为幸存路径长度D取编码存储度的6倍以上就可以取得比较好的译码性能。〔3选择合适的延时。路径量度<似然度>的累加选取和码字延时判决输出提高了译码的准确性,D越大越有利于判决的正确性,但是这又和通信的实时性背道而驰,一般D为卷积码约束长度N的5~10倍即可,本文算法D取50。〔4留存路径的更新的描述。每个状态的留存路径选择实际上是从当前时刻往前推的,例如,在时刻t,又假设到达状态s2的路径有两个,分别为s4和s5,对应的输出码字分别是00和11,我们分别计算出两条路经的分支量度BM,并累加它们对应的前状态路径量度PM_l,发现累加后s5-s2的PM值比s4-s2的大,所以保留s5所对应的留存路径,并更新状态s2所对应的留存路径存储器。对每一状态都做如此比较,保存大的分支量度BM,然后再累加前一状态路径量度PM_l,最后完成所有状态的选择,比较当前所有状态的路经量度PM,选择最大路径,如果延时超过D就判决输出码字。显然此处判决的码字要延时D时刻才能移位输出。3.卷积码编译码及MATLAB仿真在本次课题研究中,我们对整个通信过程进行了仿真,其过程如图3-1:序列序列产生信道编码BPSK

调制AWGN信道传输BPSK

解调Viterbi译码信息输出图3-1卷积码编译码流程图3.1Matlab概述计算机对科学技术的几乎一切领域产成了极其深远的影响。熟练掌握并利用计算机进行科学计算研究及工程应用已是广大科研设计人员所必备的基本技能之一。从事科学研究和工程应用时候所遇到的最大的困扰大抵是我们在计算涉及矩阵运算或画图时,采用Fortran、C及C++等计算机语言进行程序设计是一项十分麻烦的工作,不仅需要对所利用的有关算法有深刻的了解,还需要掌握所用语言的语法及编程技巧。Matlab软件由美国MathWorks公司于1984年推出,历经十几年的发展和竞争,现已成为通用科技计算和图视交互系统的程序语言,是<IEEE>国际公认的最优秀的科技应用软件之一。它的指令表达与数学、工程中常用的习惯形式十分相似,从而使许多用C或Fortran实现起来十分复杂和费时的问题用Matlab就可以轻松地解决。Matlab的典型应用包括:数学计算、算法研究、数据分析和计算结果可视化、建模与仿真等。3.1.1Matlab的特点Matlab作为一种数值计算和与图形处理工具软件,其特点是语法结构简明、数值计算高效、图形处理完备、易学易用,它在矩阵代数数值计算、数字信号处理、震动理论、神经网络控制、动态仿真等领域都有广泛的应用。与C、C++、Fortran等高级语言相比,Matlab不但在数学语言的表达与解释方面表现出人机交互的高度一致,而且具有优秀高技术计算环境所不可缺少的如下特征:〔1高质量、高可靠的数值计算能力;〔2基于向量、数组和矩阵的高维设计语言;〔3高级图形和可视化数据处理的能力;〔4广泛解决各学科各专业领域内复杂问题的能力;〔5拥有一个强大的非线性系统仿真工具箱——Simulink;〔6支持科学和工程计算标准的开放式、可交互结构;〔7跨平台兼容。3.1.2Matlab工具箱和内容目前Matlab已经成为国际上最流行的软件之一,它除了传统的交互式编程外,还提供了丰富可靠的矩阵运算。图形绘制、数据处理、图象处理、方便的Windows编程等便利工具。出现了各种以Matlab为基础的使用工具箱,广泛的应用于自动控制、图像信号处理、生物医学工程、语言处理、雷达工程、信号分析、震动理论、时序分析与建模、化学统计学、优化设计等领域,并表现出一般高级语言难以比拟的优势。较为常见的工具箱主要包括:控制系统工具箱<Controlsystemstoolbox>、系统识别工具箱<Systemsidentificationtoolbox>、多变量频率设计工具箱<Multivariablefrequencydesigntoolbox>、鲁棒控制工具箱<Robustcontroltoolbox>、分析与综合工具箱<analysisandsynthesistoolbox>、神经网络工具箱<Neuralnetworktoolbox>、最优化工具箱<Optimizationtoolbox>、信号处理工具箱<Signalprocessingtoolbox>、模糊推理数据工具箱<Fuzzyinferencesystemtoolbox>、小波分析工具箱<Wavelettoolbox>、通信工具箱<Communicationstoolbox>。3.2卷积码编码及仿真在程序设计中,我们没有采用MATLAB自带的编码函数而是采用了自己的编码函数codec对〔2,1,3卷积码编码,其参数m为输入信息序列,g1,g2为两个输出端口的冲激响应序列。3.2.1编码程序functioncod=codec<m,g1,g2>%g1,g2为两输出端口的冲激响应序列。m1=conv<m,g1>;%端口一输出 m2=conv<m,g2>;%端口二输出l=length<m1>;fori=1:l;cod<[2*i-1]>=rem<m1<[i]>,2>;%将端口一编码输出赋给cod奇数位置cod<[2*i]>=rem<m2<[i]>,2>;%将端口二编码输出赋给cod偶数位置end试运行编码:clearallg1=[111];g2=[101];msg=[1101];cod=codec<msg,g1,g2>输出为:仿真结果如下图3-2。图3-2〔2,1,3卷积码编码3.3信道传输过程仿真为了方便起见,我们采用了二相相移键控〔BPSK,也就是用二进制基带信号〔0、1对载波进行二相调制。BPSK是最简单的PSK形式,相移大小为180°,又可称为2-PSK。当基带信号为1时对应相位为π,而当基带信号为0时,对应的相位为-π。根据这个理论,我们对BPSK的调制过程作了模拟仿真,用一个简短的程序对BPSK的全过程进行了观察。程序代码如下:function[bpsk_output]=bpsk_1<g>;g=[110101001011];%卷积码编码输出信号cp=[];bit=[];forn=1:length<g>;ifg<n>==0;die=-ones<1,100>;%使得信号在坐标为0到100皆为-1,生成图线se=zeros<1,100>;elseg<n>==1;die=ones<1,100>;se=ones<1,100>;endcp=[cpdie];bit=[bitse];endsnr_db=35;%可以调整变化的信噪比同时考虑信道中可能存在的噪声noise=randn<1,length<bpsk>>;%随机噪声sigma=sqrt<5>*10^<-<snr_db>/20>;recv=bpsk+3*sigma*noise;%产生的噪声叠加在bpsk上仿真结果如图3-3所示。在matlab运行时,我们对信道高斯白噪声进行模拟,通过调节信噪比,我们可以清晰地观察到噪声对BPSK调制的影响,信噪比越大,传输的信号所受干扰越小,传输越准确。图3-3模拟信道传输3.4维特比译码程序及仿真信号通过bpsk调制后在信道中传输,到达接收端时,先要进行解调,判决代码为forj=1:length<recv>;ifrecv<j>>0;recv<j>=1;elserecv<j>=0;endend3.4.1维特比译码算法解析Viterbi算法是通过加-比较-选择来实现的,状态量度的计算方法如下:将前两个状态点上的状态量度和相应分支量度相加,得到的两个可能路径量度作为新的状态量度的候选项,送入逻辑单元中进行比较,将其中似然性最大<距离最小>的一个作为状态的新状态量度存储,同时存储的还有状态新的路径记录,主要算法步骤为:<1>将接收到的序列分成每段长为n0的m组子序列。<2>对所研究的码画出深度为m级的网格图。对该网格图的最后<L-1>级仅画出对应于全0输入序列的路径。<3>置s=1,并置初始全0状态的度量等于0。<4>对网格图中全部连接第s级状态到<s+1>级状态的支路求出该接收序列中的第s个子序列的距离。<5>将这些距离加到第s级各状态的度量上去,得到对第<s+1>级状态的度量候选者。对于第<s+1>级的每一状态,有QUOTE个候选度量,其中每一个都对应终止在那个状态的一条支路。<6>对在第<s+1>级的每一状态,挑选出最小的候选度量,并将对应于这个最小值的支路标以留存支路,同时指定之歌候选度量的最小值作为第<s+1>级状态的度量值。<7>若s=m,转到下一步;否则将s增加1并转到第4步。<8>在第<m+1>级以全0状态开始,沿着留存支路通过网格图往会到达初始全0状态,这条路径就是最佳路径,并且对应于这条路径的输入比特序列是最大似然解码序列。为了得到有关这个输入比特序列最好的推测,将最后<L-1>k0个0从该序列中除掉。根据算法绘出程序流程图如图3-4示:程序初始化,将路径信息和当前累计度量值清零,统计码长对前两步进行汉明距度量并保存路径信息程序初始化,将路径信息和当前累计度量值清零,统计码长对前两步进行汉明距度量并保存路径信息是否解码完成计算能到达当前状态的两条路径将两条路径a,b输出与输入比较汉明距,并累加到路径度量a路径累计度量是否小于b选a为当前点的最优到达路径选b为当前点的最优到达路径选取度量值最小路径输出是否否是图3-4Viterbi译码流程图从Viterbi算法中可以看到,对于一个长信息序列解码时,解码延时和所需要的存储量都是无法接受的。直到整个序列全被接收,解码才能开始,而且还不得不将总的留存路径存储起来。实际上,不会引起这些问题的次优解倒是很希望的。一种称为路径存储截断的办法是:在每一级编码器在网格图中仅往会搜索w级,而不回到网格图的出发点。用这种办法在第<w+1>级解码器对相应于网格图第1级的输入比特作出判决,并且未来的接收比特不改变这个判决。这意味着解码延时是k0w比特,需要保存的路径只相应于最后W级的路径。计算机仿真已经表明,如果W>5n,由于路径存储截断造成的性能下降可忽略不计。3.4.2Viterbi译码程序Viterbi译码主要程序如下:forj=0:number_of_states-1form=0:M-1[next_state,memory_contents]=nxt_stat<j,m,N,k>;%调用nxt_stat函数input<j+1,next_state+1>=m;branch_output=rem<memory_contents*G',2>;% nextstate数组记录了当前状态j下输入l时的下一个状态nextstate<j+1,m+1>=next_state;% output数组记录了当前状态j下输入l时的输出〔十进制output<j+1,m+1>=bin2deci<branch_output>;endendstate_metric=zeros<number_of_states,2>;depth_of_trellis=length<channel_output>/n;channel_output_matrix=reshape<channel_output,n,depth_of_trellis>;survivor_state=zeros<number_of_states,depth_of_trellis+1>;fori=1:depth_of_trellis-N+1flag=zeros<1,number_of_states>;if<i<=N>step=2^<k*<N-i>>;elsestep=1;endforj=0:step:number_of_states-1form=0:M-1branch_metric=0;binary_output=deci2bin<output<j+1,m+1>,n>;forll=1:nbranch_metric=branch_metric+metric<channel_output_matrix<ll,i>,binary_output<ll>>;end%选择码间距较小的路径,即当下一个状态没有被访问时就直接赋值,否则,用比它小的将其覆盖if<<state_metric<nextstate<j+1,m+1>+1,2>>state_metric<j+1,1>+branch_metric>|flag<nextstate<j+1,m+1>+1>==0>state_metric<nextstate<j+1,m+1>+1,2>=state_metric<j+1,1>+branch_metric;survivor_state<nextstate<j+1,m+1>+1,i+1>=j;flag<nextstate<j+1,m+1>+1>=1;endendendstate_metric=state_metric<:,2:-1:1>;endfori=depth_of_trellis-N+2:depth_of_trellisflag=zeros<1,number_of_states>;last_stop=number_of_states/<2^<k*<i-depth_of_trellis+N-2>>>;forj=0:last_stop-1branch_metric=0;binary_output=deci2bin<output<j+1,1>,n>;forll=1:nbranch_metric=branch_metric+metric<channel_output_matrix<ll,i>,binary_output<ll>>;endif<<state_metric<nextstate<j+1,1>+1,2>>state_metric<j+1,1>+branch_metric>|flag<nextstate<j+1,1>+1>==0>state_metric<nextstate<j+1,1>+1,2>=state_metric<j+1,1>+branch_metric;survivor_state<nextstate<j+1,1>+1,i+1>=j;flag<nextstate<j+1,1>+1>=1;endendstate_metric=state_metric<:,2:-1:1>;end%从最佳路径中产生解码,译码过程可从数组survivor_state的最后一个位置向前逐级译码state_sequence=zeros<1,depth_of_trellis+1>;state_sequence<1,depth_of_trellis>=survivor_state<1,depth_of_trellis+1>;fori=1:depth_of_trellisstate_sequence<1,depth_of_trellis-i+1>=survivor_state<<state_sequence<1,depth_of_trellis+2-i>+1>,depth_of_trellis-i+2>;enddecoder_output_matrix=zeros<k,depth_of_trellis-N+1>;fori=1:depth_of_trellis-N+1dec_output_deci=input<state_sequence<1,i>+1,state_sequence<1,i+1>+1>;dec_output_bin=deci2bin<dec_output_deci,k>;%将一次译码存入译码输出矩阵decoder_output_matrix相应的位置decoder_output_matrix<:,i>=dec_output_bin<k:-1:1>';enddecoder_output=reshape<decoder_output_matrix,1,k*<depth_of_trellis-N+1>>;cumulated_metric=state_metric<1,1>;viterbi译码matlab仿真将程序在matlab中进行仿真,对于〔2,1,3译码,G=[111;101],channel_output=recv,此时令信噪比snr_db=12,得到仿真图形如图3-5所示:snr_db12snr_db12图3-5信源编码及viterbi译码输出的是正确结果[1101],由理论分析知,信道编码经过bpsk调制,由于信道噪声的干扰,在信号解调后会产生一定的差错,维特比译码虽然有具有纠错功能,但是毕竟是有限的,所以信噪比对viterbi译码性能将产生影响,且信噪比越大,维特比译码越准确。为了验证上述推论,将信噪比减小,令SNR=6。Matalb仿真结果如图3-6所示:当信噪比降低到SNR=6时,译码输出变为[0111],产生了差错。验证了上述推论。snr_db=6snr_db=6图3-6信道编码及viterbi译码3.4.4信噪比对卷积码译码性能的影响上述过程只是可以看出信噪比会影响维特比译码的性能,为了进一步得到两者更加直观的联系,我们可以通过编程得到信噪比与误码率之间的函数关系,同时将没有进行卷积码的信号也计算其误码率。代码如下:clearall;clc;snr_db=0:10;%信息源msg=randint<1,1e3>;ber0=zeros<1,length<snr_db>>;ber1=zeros<1,length<snr_db>>;%Trellisestrel=poly2trellis<3,[75]>;%Definetrellisforrate1/2code.forn=1:length<msg>/2;forx=1:length<snr_db>%Codewordscode=convenc<msg,trel>;%Encode.state=20;inter=randintrlv<code,state>;%BPSK调制s0=sign<msg-0.5>;s1=sign<inter-0.5>;%AWGNChanneladd_noise0=awgn<s0,snr_db<x>,'measured'>;add_noise1=awgn<s1,snr_db<x>,'measured'>;%Deinterleaverwithnoiseforsoftdecodingdeinter_noise=randdeintrlv<add_noise1,state>;%解调r_0=0.5*sign<add_noise0>+0.5;r_1=0.5*sign<add_noise1>+0.5;%Deinterleaverdeinter_1=randdeintrlv<r_1,state>;%Tracebacklengthtblen=5;%vitdec判决decoded1=vitdec<deinter_1,trel,tblen,'cont','hard'>;%vitdec判决%比较误码率[num0,rat0]=biterr<r_0,msg>;[num1,rat1]=biterr<double<decoded1<tblen+1:end>>,msg<1:end-tblen>>;ber0<n,x>=rat0;ber1<n,x>=rat1;endendber0=mean<ber0>;ber1=mean<ber1>;程序在matlab中运行,得到仿真图如图3-7所示,该图直观的反映了经过卷积码编码和没有经过卷积码编码的误码率之间的区别。从图中可以看出,当信噪比较小时,未编码的误码率反而比采用编码的误码率低,这是因为误比特太多导致接收到的信息几乎无效。但是当信噪比稍高后卷积码编码译码的误码率就大大降低了。卷积没有卷积卷积没有卷积图3-7误码率比较图形3.4.5码率对卷积码译码性能的影响卷积码的码率R=k/n,它是卷积码的一个重要参数,当改变卷积码的码率时,系统的误码性能也将随之发生变化,为了研究码率对卷积码误码性能的影响,我们以码率为1/2的<2,1,3>卷积码和码率为1/3的<3,1,3>卷积码作为仿真码字。<2,1,3>卷积码的trellis结构为poly2trellis<3,[75]>,<3,1,3>卷积码的trellis结构为poly2trellis<3,[165]>。从图3-8中的误比特率曲线可以看出,当码率一定时,随着信道噪声的逐渐减小,系统的误比特率也逐渐减小,对比两条曲线可清楚地得出<3,1,3>卷积码的性能要比<2,1,3>卷积码要好。于是可以得出如下结论:当改变系统码率时,随着卷积码码率的逐渐提高,系统的误比特率也呈现出增大的趋势,也就是说,码率越低,系统的误比特率就越小,误码性能就越好。<3,,1,3>〔2,1,3<3,,1,3>〔2,1,3图3-8码率对卷积码性能的影响3.4.6约束长度对卷积码误码性能的影响对于码率一定的卷积码,当约束长度N发生变化时,系统的误码性能也会随之发生变化,我们以码率R=1/2的<2,1,3>和<2,1,7>卷积码为例展开分析。<2,1,7>卷积码只需将trellis结构改成poly2trellis<7,[171133]>即可。图3-9约束长度对卷积码性能的影响从图3-9中的误比特率曲线可以清楚地看到,在低信噪比时,<2,1,3>卷积码的的性能要好于<2,1,7>卷积码的性能。然而当信噪比高于一定值后,<2,1,7>卷积码的的性能要好于<2,1,3>卷积码的性能,随着约束长度的逐渐增加,系统的误比特率明显降低,所以说当码率一定,信噪比高于一定值时,增加约束长度可以降低系统的误比特率,但是随着约束长度的增加,译码设备的复杂性也会随之增加,所以对于码率为1/2的卷积码,我们在选取约束长度时一般为3~9。3.4.7回溯长度对卷积码误码性能的影响回溯长度是在Viterbi译码过程中一个很重要的参数,它决定了维特比译码的精度,同时也影响着译码延迟〔即在输出第一个解码数据之前输出的0的个数,随着它的不断变化误码性能也随之改变。这里采用<2,1,3>卷积码为例,将反馈深度分别取值为5,15和35。仿真结果如图3-10所示。3515535155图3-10回溯长度对卷积码性能的影响从图中的误比特率曲线可以清楚地看到,当回溯长度一定时,随着信道噪声的逐渐减小,系统的误比特率逐渐降低;当回溯长度逐渐增加,系统的误比特率随之逐渐降低,但是当回溯程度增加到5N时<N为编码的约束长度>,误比特率数值趋于稳定,这里的<2,1,3>卷积码在回溯长度达到15左右基本趋于稳定。因此在确定回溯长度时既要考虑到随着信噪比增加误比特率随之降低的趋势,也要考虑到译码延迟会变大,在选取回溯长度时,通常取回溯长度为5N。3.4.8判决方式对卷积码误码性能的影响采用软判决即将信道输出的编码先不立即判决,而是进行量化,量化程序如下:functiono=quantization<s,l>;o=0;ifs>1;o=2^l;elseifs<-1;o=-2^l;elsec=abs<s>;fori=1:2^l;ifc>1/2^<l+1>+<i-1>/2^l;o=o+1;endendifs<0;o=-o;endendo=<o+2^l>/2^<l+1>;再进行维特比软判决译码。从图3-11可知,采用软判决的误码率明显低于硬判决,实际上软判决译码算法的路径度量采用"软距离"而不是汉明距离。最常采用的是欧几里德距离,也就是接收波形与可能的发送波形之间的几何距离。在采用软距离的情况下,路径度量的值是模拟量,需要经过一些处理以便于相加和比较。因此,使计算复杂度有所提高。除了路径度量以外,软判决算法与硬判决算法在结构和过程上完全相同。一般而言,由于硬判决译码的判决过程损失了信道信息,软判决译码比硬判决译码性能上要好约2dB。软判决硬判决软判决硬判决图3-11不同判决方式对卷积码性能的影响4.结论及展望4.1结论卷积码是一种纠错编码,纠错编码己有五十几年历史,早在1948年,香农<Shannon>在他的开创性论文"通信的数学理论"中,首次阐明了在有扰信道中实现可靠通信的方法,提出了著名的有扰信道编码定理,奠定了纠错码的基石。以后,纠错码受到了越来越多的通信和数学工作者,特别是数学家的重视,使纠错码无论在理论上还是在实际中都得到了飞速发展。本文首先从数字通信的一些基本概念和差错控制编码理论出发,引入卷积码的一些基本理论,接着讨论了卷积码的编译码基本原理,对卷积码的表示方法和编译码算法做了简单的介绍,再通过编写卷积码的编码和解码程序,并且用MATLAB仿真软件进行仿真和纠错验证,并通过对不同码率、不同约束长度、不同回溯长度,以及不同判决方式情况下误码率的分析,得出以下结论:〔1当编码约束长度不大,当码率一定时,随着信道噪声的逐渐减小,系统的误比特率也逐渐减小。〔2当改变系统码率时,随着卷积码码率的逐渐提高,系统的误比特率也呈现出增大的趋势,也就是说码率越低,系统的误比特率就越小,误码性能就越好。对于二进制对称信道,当采用BPSK调制方式时,通常选取的码率为1/2。〔3对于码率一定的卷积码,当约束长度N发生变化时,系统的误码性能也会随之发生变化,随着约束长度的逐渐增加,系统的误比特率明显降低,所以说当码率一定时,增加约束长度可以降低系统的误比特率,但是,随着约束长度的增加,译码设备的复杂性也会随之增加。所以对于码率为1/2的卷积码,在选取约束长度时一般为3~9。〔4对于码率一定的卷积码,当反馈深度发生变化时,系统的误码率也会发生一定的变化,随着反馈深度的增加,系统的误码率呈下降趋势,但是通常在反馈深度大于或者等于约束长度的五倍时,误码率几乎不再发生变化,故常常取回溯长度为5N。〔5对于码率一定的卷积码,采用的译码判决方式不同,也会对系统的误码率产生影响,一般来说,软判决译码性能要优于硬判决译码性能,但这是以提高设备复杂性为代价的。4.2展望在本次卷积码编译码算法研究过程中,我学到了许多关于卷积码的知识,对卷积码的纠错性能有了较为深刻的认识。但是由于时间和个人能力等方面的不足,课题研究中还有些地方做的不到位,也有些领域没有研究,值得进一步完善。如在信道传输过程中,本文只是考虑了BPSK信道编码,而没有采用较为复杂的QPSK编码,所以没能研究不同的信道编码方式对卷积码误码性能的影响。卷积码的译码方法众多,本文只对Viterbi译码算法做了初步的研究,对其它的译码方式,如代数译码和序贯译码,没有进行详细的研究和比较,所以没能研究不同译码方式对卷积码误码性能的影响。卷积码自提出以来就受到人们的重视,并显现出了巨大的优越性,随着通信技术的进步,卷积码也将得到更大的发展,将提出更多形式的新型卷积码,进一步优化通信系统的性能。5.结束语刚开始拿到这个课题时,对卷积码有一定地了解。当时一想还有六个月,就没怎么上心。直到3月份的开题报告,意识到自己要认真着手了,但是由于准备不足,开题报告答辩时暴露了不少问题,也正是这些问题让我明白了紧迫要学习的东西:matlab软件知识、信道编码理论、纠错码基本原理、卷积码编译码原理。考虑到之前学过通信方面的课程,我重新看了樊昌信、曹丽娜著的《通信原理》以及郝建军的《数字通信原理》,对信源编码,信道编码,卷积码等有了一定的认识。但是光靠这些知识无法着手我的研究课题,于是陆续又借了其它书籍,由于没有专门论述卷积码的书籍,我发现除了加深对卷积码基本知识的认识外,还是无法展开。这时,我开始在网上查找资料。网上的知识非常丰富,有些数据库如万方里面也有大量的卷积码的知识,通过浏览诸多文献,我慢慢摸着了方向,许多相近的课题也给了我许多启发。我的课题也比较通畅的进行了,在课题推进中,对matlab编程语言的认识也发生了变化,从开始的几乎不懂,到慢慢的写出一些程序,再到子程序的调用和绘图及编辑,认识到了matlab强大的数据处理功能。这次课题研究也让我发现严谨思维的重要性,如编码性能的好坏,需要从科学客观的比较中得到,需要用到控制变量这个非常通用的方法,具体到卷积码,也就是既要注意到卷积码的优越性,也要注意到相关前提和假设,这样才能做出正确的判断。相信这些收获无论是在将来的学习还是工作当中,肯定裨益良多。参考文献[1]郝建军,桑林,刘丹谱,罗涛编著,《数字通信〔第2版》.北京邮电大学出版社.2010[2]张忠培,史治平,王传丹编著.《现代编码理论与应用》.北京:人民邮电出版社.2007[3]傅祖芸,赵建中编著,《信息论与编码》,电子工业出版社,2010[4]樊昌信,曹丽娜编著,《通信原理〔第6版》,国防工业出版社,2011[5]邓华

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论