基于MATLAB的卷积码编译码器设计_第1页
基于MATLAB的卷积码编译码器设计_第2页
基于MATLAB的卷积码编译码器设计_第3页
基于MATLAB的卷积码编译码器设计_第4页
基于MATLAB的卷积码编译码器设计_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊基于MATLAB的卷积码编译码器设计基于MATLAB的卷积码编译码器设计第第页第一章绪论1.1引言1.1.1卷积码发展背景概述卷积码又称连环码,最早于1955年由Elias等人提出。而后1957年Wozencraft提出了一种有效的译码方法即序列译码。1963年Messey提出了一种性能稍差但比较实用的大数逻辑译码即门限译码,使卷积码开始应用与实际。1967年Viterbi提出了最大似然译码算法,被称为Viterbi译码。Viterbi译码作为最优译码算法,有如下特点:(1)维特比算法是最大似然的序列译码算法(2)译码复杂度与信道质量无关(3)运算量与码长呈线性关系(4)存贮量与码长呈线性关系(5)运算量和存贮量都与状态数呈线性关系(6)状态数随分组大小k及编码深度m呈指数关系卷积码在现代通信中已被广泛应用。1.1.2本课题意义在移动通信系统中,数字信号在无线信道中传输时,由于信道自身条件特性的不理想,会受到诸多噪声干扰的影响,因而产生误码。为了在已知信噪比的情况下达到一定的误码率指标,除在合理设计基带信号,选择调制解调方式,并采用信道均衡,分集等措施的基础上,还应使用信道编码与交织,使误码率进一步的降低。差错控制编码已经十分成熟的应用于信道编码技术之中。卷积码和分组码是差错控制编码的两种主要形式,在编码器复杂度相同的情况下,卷积码的性能优于分组码,因此卷积码几乎被应用在所有无线通信的标准之中。如:(1)低码率卷积码应用于扩频通信系统(2)VD及VLSI的实现(3)卷积码UEP方案用于分等级传输(4)语音压缩(5)卷积码纠错用于多媒体广播系统1.2本课题主要研究内容熟练掌握卷积码的编码及Viterbi译码原理:编码原理:卷积码在编码时将k比特的信息段编成n个比特的码组,监督码元不仅和当前的k比特信息段有关,而且还同前面m=(N-1)个信息段有关。通常将N称为编码约束长度,表示编码过程中相互约束的码段个数。编码过程中相互关联的码元有n*N个。R=k/n为编码效率。约束长度和编码效率是衡量卷积码的两个重要参数。一般来说,卷积码中k和n的值是比较小的整数,而N可取较大。将卷积码记作(n,k,N)。维特比译码算法基本原理是:将接收到的信号序列和所有可能的发送信号序列比较,选择其中汉明距离最小的序列认为是当前发送序列。在此基础上运用MATLAB对卷积码的编译码进行仿真并分析其性能。卷积码的相关概念2.1信道编码2.1.1信道编码的原理信道编码是为了与信道的统计特性相匹配,并区分通路和提高通信的可靠性,而在信源编码的基础上,按一定规律加入一些新的监督码元,以实现纠错的编码。信道编码大致分为两类:①信道编码定理,从理论上解决理想编码器、译码器的存在性问题,也就是解决信道能传送的最大信息率的可能性和超过这个最大值时的传输问题。②构造性的编码方法以及这些方法能达到的性能界限。编码定理的证明,从离散信道发展到连续信道,从无记忆信道到有记忆信道,从单用户信道到多用户信道,从证明差错概率可接近于零到以指数规律逼近于零,正在不断完善。编码方法,在离散信道中一般用代数码形式,其类型有较大发展,各种界限也不断有人提出,但尚未达到编码定理所启示的限度,尤其是关于多用户信道,更显得不足。在连续信道中常采用正交函数系来代表消息,这在极限情况下可达到编码定理的限度。不是所有信道的编码定理都已被证明。只有无记忆单用户信道和多用户信道中的特殊情况的编码定理已有严格的证明;其他信道也有一些结果,但尚不完善。信道编码还有以下几类方式:按字码的功能分为纠错码和检错码;按监督码元与信息码元分为线性码和非线性码;按照对信息码元和监督码元的约束关系的不同又分为分组码和卷积码,按照信息码元在编码后是否保持原来的形式分类,有系统码和非系统码。线性分组码是差错控制码,由于认识此种码的思路与概念直观而条理清晰,并对编码中的一些重要参量和纠错能力提供一系列明确的概念,从而也为介绍其它差控码奠定有力基础。分组码是一组固定长度的码组,可表示为(n,k),通常它用于前向纠错。在分组码中,监督位被加到信息位之后,形成新的码。在编码时,k个信息位被编为n位码组长度,而n-k个监督位的作用就是实现检错与纠错。当分组码的信息码元与监督码元之间的关系为线性关系时,这种分组码就称为线性分组码。对于长度为n的二进制线性分组码,它有种可能的码组,从种码组中,可以选择M=个码组(k<n)组成一种码。这样,一个k比特信息的线性分组码可以映射到一个长度为n码组上,该码组是从M=个码组构成的码集中选出来的,这样剩下的码组就可以对这个分组码进行检错或纠错。线性分组码是建立在代数群论基础之上的,各许用码的集合构成了代数学中的群,它们的主要性质如下:(1)任意两许用码之和(对于二进制码这个和的含义是模二和)仍为一许用码,也就是说,线性分组码具有封闭性;(2)码组间的最小码距等于非零码的最小码重。RS码即里德-所罗门码,它是能够纠正多个错误的纠错码。前向纠错码(FEC)的码字是具有一定纠错能力的码型,它在接收端解码后,不仅可以发现错误,而且能够判断错误码元所在的位置,并自动纠错。这种纠错码信息不需要储存,不需要反馈,实时性好。所以在广播系统(单向传输系统)都采用这种信道编码方式。RS码为(204,188,t=8),其中t是可抗长度字节数,对应的188符号,监督段为16字节(开销字节段)。实际中实施(255,239,t=8)的RS编码,即在204字节(包括同步字节)前添加51个全“0”字节,产生RS码后丢弃前面51个空字节,形成截短的(204,188)RS码。RS的编码效率是:188/204。卷积码非常适用于纠正随机错误,但是,解码算法本身的特性却是:如果在解码过程中发生错误,解码器可能会导致突发性错误。为此在卷积码的上部采用RS码块,RS码适用于检测和校正那些由解码器产生的突发性错误。所以卷积码和RS码结合在一起可以起到相互补偿的作用。卷积码分为两种:(1)基本卷积码:基本卷积码编码效率为,η=1/2,编码效率较低,优点是纠错能力强。(2)收缩卷积码:如果传输信道质量较好,为提高编码效率,可以采样收缩截短卷积码。有编码效率为:η=1/2、2/3、3/4、5/6、7/8这几种编码效率的收缩卷积码。编码效率高,一定带宽内可传输的有效比特率增大,但纠错能力越减弱。1993年诞生的Turbo码,单片Turbo码的编码/解码器,运行速率达40Mb/s。该芯片集成了一个32×32交织器,其性能和传统的RS外码和卷积内码的级联一样好。所以Turbo码是一种先进的信道编码技术,由于其不需要进行两次编码,所以其编码效率比传统的RS+卷积码要好。2.1.2信道编码的分类信道编码有多种分类方式,主要有按照关系、范围及用途三种。(1)根据纠错码各码组信息元和监督元的函数关系,可分为线性码和非线性码。如果函数关系是线性的,即满足一组线性方程式,则称为线性码,否则为非线性码。(2)根据上述关系涉及的范围,可分为分组码和卷积码。分组码的各码元仅与本组的信息元有关;卷积码中的码元不仅与本组的信息元有关,而且还与前面若干组的信息元有关。(3)根据码的用途,可分为检错码和纠错码。检错码以检错为目的,不一定能纠错;而纠错码以纠错为目的,一定能检错。2.2差错控制编码2.2.1差错控制码的基本概念和分类在实际信道上传输数字信号时,由于信道传输特性不理想和噪声的影响,所收到的数字信号不可避免地会发生错误。可以通过合理设计基带信号、加大发送功率、选择合适的调制解调方式、采用均衡等措施,来降低码元的误码率。若仍难以满足要求,则需考虑采用差错控制编码技术。差错控制编码属于信道编码,其目的是用信道编码的方法检测和纠正误码,降低误码率。从差错控制角度来看,根据加性干扰引起的错码分布规律的不同,信道可以分为随机信道、突发信道和混合信道三类。随机信道:信道中错码的出现是随机的,且错码之间是统计独立的。突发信道:信道中错码是成串集中出现的。混合信道:信道中既存在随机错码、又存在突发错码。对于不同类型的信道,应采用不同的差错控制技术。常用的差错控制方式:1、检错重发(ARQ)接收端按一定规则对收到的码组进行有无错误的判别。若发现有错,则通知发送端重发,直到正确收到为止。2、前向纠错(FEC)发送端将信息序列编码成能够纠正错误的码,接收端根据编码规则进行检查,如果有错自动纠正。3、混合纠错检错(HEC)是检错重发和前向纠错的结合。发端发出同时具有检错和纠错能力的码,收端收到后,检查错误情况:如果错误在纠错能力之内,则自动纠正;若超出纠错能力,但在检错能力之内,则经反向信道要求重发。4、信息反馈(IRQ)又叫反馈校验方式。收端把收到的数据序列全部经反向信道送回发端,发端比较发出和送回的数据序列,从而发现有否错误,并把有错误的数据序列再次传送,直到发端没有发现错误。差错控制编码分类:根据分类依据的不同,差错控制编码可划分如下:按监督码元和信息码元关系:线性码、非线性码按监督码元和信息码元之间的约束关系:分组码、卷积码按差错控制编码的功能:检错码、纠错码、纠删码按纠正错误的类型:纠随机错误的码、纠突发错误的码按编码的数学方式不同:代数码、几何码、算术码2.2.2线性分组码及循环码的简单介绍线性分组码线性分组码中的线性是指码组中码元间的约束关系是线性的,而分组则是对编码方法而言,即编码时将每k个信息位分为一组进行独立处理,变换成长度为n(n>k)的二进制码组。线性分组码的编码过程可以简单描述成一个矢量和一个矩阵相乘的结果,即C=mG,其中C是经过编码后得到的n维编码输出{c0,c1,…,cn-1},m是信息序列分组{m0,m1,…,mk-1},G是由k个n维矢量{g0,g1,…,gk-1}构成的矩阵。线性分组码编码问题的核心就是如何在n维线性空间Vn中找出满足一定要求的、由2k个矢量组成的k维线性子空间,也就是说,在满足给定码字最小距离或编码速率的前提下,如何根据已知的k个信息比特求得r=n-k个校验比特。通过对码字生成矩阵G的初等变换,可以得到惟一的行简化梯形矩阵,再经过列交换可以得到如下形式的生成矩阵。(2.1)其中P是k×(n-k)的矩阵。这种形式的生成矩阵G称为标准生成矩阵,按照标准矩阵生成的码字为(2.2)其中前n-k-1个比特为校验比特,其值为(2.3)后面k个比特就是信息比特。这种在生成码字中包含信息序列的编码码字称为线性系统分组码,简称为系统码。系统码的编码结构相当简单,以系统(7,4)为例,其生成矩阵为:(2.4)系统码的编码结构非常简单,比如对系统(7,4)码,根据上面的生成矩阵G,只要在输入编码器的每组k个数字的后面,附加上(n-k)个监督码元就可得到所编出的n个码字。系统(7,4)码对应的监督矩阵为(2.5)假如发送的码字为c=(1001011),而接收到的码字为Y=(1001001),信道传输中产生的错误为e=(0000010)。由S=y·HT可求出S=(1,1,1)。循环码循环码是线性分组码中最重要的一类,循环码是指码集合中的任一码字经过循环移位后得到的码字仍然是码集合中的码字。循环码的码字可以用矢量的形式表示,即:(2.6)也可用码多项式表示,即:(2.7)循环码c向右移一位的码字可由下式得出(2.8)循环码可由它的生成多项式(2.9)唯一确定。信息序列也可以表示成多项式(2.10)那么生成码字可表示成(2.11)由于多项式乘法等价于多项式系数的卷积,故(2.12)循环码编码则可以通过移位寄存器组成的乘法电路结构实现。由数论知识可知,(n,k)循环码的生成多项式g(x)一定是xn-1的n-k次因式:(2.13)反之,若g(x)为n-k次多项式,且xn-1能被g(x)整除,则g(x)一定能生成一个(n,k)循环码。以g(x)为生成多项式所构成的(n,k)循环码中g(x),xg(x),…,xk-1g(x)(2.14)等七个多项式必定是线性无关,则循环码的生成矩阵G为(2.15)循环码的编码也可以通过移位寄存器组成的除法电路结构实现。以(7,4)循环码为例,选(7,4)码生成矩阵g(x)=g3(x)=1+x+x3(2.16)它除尽1+x7,若输入信息码元为m(x)=1+x3则由(2.17)因此,码多项式为(2.18)对应的码字为C=(0111001)其中最右边的4位是信息元,详细的编码过程如下:三级移位寄存器初始状态为000,此时门打开,信息组以(2.19)即1001次序分两路进入编码器:一路直接输出;另一路送入g(x)除法电路。经4次移位后,信息组1001全部输出,它就是系统码的4个信息元;另一路则将全部信息元送入g(x)除法电路,并完成除法运算,这时移位寄存器中的状态就是余式r(x)系数,即为码的监督元(c0c1c2)。输出开关倒向上面2,经3次移位,移位器由监督元(c0c1c2),跟在信息元(c3c4c5c6)后面依次输出为C=(c0c1c2c3c4c5c6)=(0111001)。送入第二组信息元,重复上述过程。该码最小距离为3,它能纠正7个码元一组中任何单个错误,这7种错误图样和全零矢量一起组成译码表的陪集首,它组成了所有可能纠正的图样。现假设接收的多项式为(2.20)即Y=(1111001)。译码器工作步骤如下:将移位寄存器清零。(2)输入Y分两路进入译码器:一路进入缓存器;另一路经门1进入伴随式计算电路与寄存器,并分别计算S0、S1、S2值。(3)在输出Y的同时,S0、S1、S2依次循环移位。无错误时,错误检测电路无输出,最后输出的码字C的码元与Y相对应码元一致,有错误时,S0=S2=1,S1=0,错误检测电路输出为“1”,它正好与Y中错误位在输出端的模2加中相遇,并予以纠正后再输出。2.3卷积码2.3.1卷积码的基本概念卷积码(convolutionalcode)是由伊利亚斯(P·Elias)发明的一种非分组码。它与前面一节所讨论的分组码不同,是一种非分组码。通常它更适用于前向纠错,因为对于许多实际情况它的性能优于分组码,而且运算简单。在分组码中,编译器产生的n个码元的一个码组,完全取决于这段时间中k比特输入信息。这个码组中的监督位仅监督本码组中的k个信息位。卷积码则不同。卷积码在编码时虽然也是把k个比特的信息段编成n个比特的码组,但是监督码元不仅和当前的k比特信息段有关,还与前面m=(N-1)个信息段有关。所以一个码组中的监督码元监督着N个信息段。通常将N称为编码约束度,并将nN称为编码约束长度。一般说来,对于卷积码,k和n的值是比较小的整数。我们将卷积码记作(n,k,N)。码率则仍定义为k/n。卷积码是一种性能优越的信道编码,它的编码器和解码器都比较易于实现,同时还具有较强的纠错能力,这使得它的使用越来越广泛。我们在一些资料上可以找到关于分组码的一些介绍,分组码的实现是将编码信息分组单独进行编码,因此无论是在编码还是译码的过程中不同码组之间的码元无关。卷积码和分组码的根本区别在于,它不是把信息序列分组后再进行单独编码,而是由连续输入的信息序列得到连续输出的已编码序列。即进行分组编码时,其本组中的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.3.2卷积码的基本原理卷积码的图形描述图2-1卷积码编码器以图2-1的(3,1,3)卷积码编码器为例说明卷积码编码器的工作过程:图2-1卷积码编码器S输出序列m1,m2,…mj,…y1,jy2,j输入序列y3,j3触点转换开关和一组3位移存器及模2加法器组成每输入一个信息比特,经该编码器后产生3个输出比特。为方便起见,先假设该移位寄存器的起始状态全为零,当第一个输人比特为”0”时,输出比特为OO0;若第一个输人比特为I时,则输出比特为111当输人第二比特时,第一比特右移一位。此时的输出比特显然与“当前输人比特和前一输人比特”有关当输人第成比特时,第一和第二比特皆右移一位,可看到此时的输出比特与“当前输入比特和前二位愉人比特”有关。当第四比特输人时,原第一输人比特已移出移位寄存器而消失,即第一输人比特已不再影响当前的输人比特,如图2-2所示,以上编码器在移位过程中可能产生的各种序列,可用树状图、网格图或状态图来描述。tt输出输入t图2-2编码器输入-输出关系码树图图2-3给出了(3,1,3)卷积码的树状图。按照习惯的做法。码树的起始节点位于左边;移位寄存器的初始状态取00,取M1M2=00,用a来表示,并把该a标注于起始节点处。当输人码元是0时,则由节点出发走上支路;当输人码元是1时.则由节点出发走下支路。例如,当该编码器第一输入比特为0时,则走上支路,此时移存器的输出码“000”就写在上支杈ddcbbaa000a011110001110001000111000111111000100101010ababccddadcbbaa111a01111010110001001110000111100011100101010ababccdd图2-3(3,1,3)卷积码的树状图的上方;当该编码器第一输人比特为1时,则走下支路,此时移存器的输出码“111”就写在图中下支杈的上方。在输人第二比特时,移位寄存器右移一位,此时上支路情况下的移位寄存器的状态为00,即a,并标注于上支路节点处;此时下支路情况下的移位寄存器状态为O1,即b,并标注于下支路节点处;同时上下支路都将分两杈。以后每一个新输人比特都会使上下支路各分两杈。经过4个输人比特后,得到的该编码器的树状图如图2-3所示。树状图中,节点上标注的a表示M1M2=00,b表示M1M2=O1,。C表示M1M2=10,d表示M1M2=11。状态图当网格图达到稳定状态后,取出两个节点间的一段网格图,即得到图2-4(a)的状态转移图。此后,再把目前状态与下一节拍状态合并起来,即可得到图2-4(b)的最简的状态转移图,称之为卷积码状态图。bbdcabdca100011110001010101111000a000adcb111100011010110110101b图2-4(3,1,3)卷积码状态图3)网格图由树状图看到,对于第j个输人信息比特,相应出现有条支路,且在时树状图出现节点,自上而下重复取4种状态。又看到,当j变大时,图的纵向尺寸越来越大。于是提出一种网格图,注意到码树状态的重复性,使图形变得紧凑。上例(3,1,3)码的网格图示于图2-5。网格图中,把码树中具有相同状态的节点合并在一起;码树中的上支路用实线表示,下支路用虚线表示;支路上标注的码元为输出比特;自上而下的4行节点分别表示a,b,c,d的四种状态。网格图中的状态,通常有种状态。从第N个节点开始.图形开始重复,且完全相同。aabcd000000000000000111111111111111011001001110010010010010010010110110110011011011011100图2-5(3,1,3)卷积码网格图卷积码的解析表述一个二元(2,1,4)卷积码的编码器,它是由k=1,即一个输入位(端),n=2,即两个输出位(端),K=4,m=3即三级移位寄存器所组成的有限状态的有记忆系统。(1)离散卷积若输入信息序列为(这里的卷积码是u0首先输入)(2.21)则对应输出为两个码字序列(2.22)其相应编码方程可写为(2.23)其中“*”表示卷积运算,g①、g②表示编码器的两个脉冲冲击响应,即编码可由输入信息序列u和编码器的两个冲击响应的卷积得到,故称为卷积码[7]。这里的脉冲冲击响应是指,当输入信息为u=(100…)时,所观察到的两个输出序列值。由于编码器有m=3级寄存器,故冲激响应至多可持续到K=m+1=3+1=4位,且可写成:(2.24)在一般情况下有:(2.25)经编码器后,两个输出序列合并为一个输出码字序列为:(2.26)若输入信息序列为:(2.27)则有:(2.28)(2.29)最后输出的码字为:(2.30)(2)生成矩阵上述冲激响应g①g②又称为生成序列,若将该生成序列g①g②按如下方法排列,构成如下生成矩阵(当K=4,m=3时):(2.31)上述矩阵中,其中空白部分均为0。则上述编码方程可改为矩阵形式(2.32)G为卷积码的生成矩阵,若输入信息序列为一无限序列时,即u=(10111…),生成矩阵则为一个半无限矩阵,即有起点无终点,因此称它为半无限。若:(2.33)则:(2.34)(3)码多项式若将生成序列表达成多项式形式,有(2.35)输入信息序列也可表达为多项式形式(2.36)则卷积码可以用下列码多项式形式表达(2.37)(2.38)2.3.3卷积码的译码卷积码的译码方式可以分为两类:代数译码和概率译码。代数译码是利用编码本身的代数结构进行译码,不考虑信道的统计特性。大数逻辑译码,又称门限译码,是卷积码代数译码的最主要一种方法,也可以应用于循环码的译码。大数逻辑译码对于约束长度较短的卷积码最为有效,而且设备较简单。概率译码(又称最大似然译码)则是基于信道的统计特性和卷积码的特点进行计算。首先由沃曾克拉夫特针对无记忆信道提出的序贯译码就是概率译码方法之一;另一种概率译码方法是维特比(Viterbi)算法。当码的约束长度较短时,它比序贯译码算法的效率更高、速度更快,目前得到广泛的应用。维特比译码算法是维特比于1967年提出的。这种算法的基本原理是将接收到的信号序列和所有可能的发送信号序列比较,选择其中汉明距离最小的序列认为是当前发送信号序列。若发送一个k位序列,则有2k种可能的发送序列。当K较大时,存储量太大,使实用受到限制。维特比算法对此作了简化,使之能够实用。设发送信息位为:1101,为了使图2-1中移存器的信息位全部移出,需要在信息位后面加入三个“0”,故经过编码后的发送序列为111110010100001011000,并且假设接收序列为111010010110001011000,其中第4和第11个码元为错码。由于这是一个(n,k,N)=(3,1,3)卷积码,发送序列的约束度N=3,所以首先需要考察nN=9。第一步考察接收序列前9位“111010010”。由此码的网格图2-6可见,沿路径每一级有4种状态a,b,c,d。每种状态只有两条路径可以到达。故4种状态有8条到达路径。现在比较网格图中的这8条路径和接收序列之间的汉明距离。例如,由出发点状态a经过三级路径后到达状态a的两条路径中上面一条为“000000000”。它和接收序列“111010010”的汉明距离等于5;下面一条为“111001011”,它和接收序列的汉明距离等于3。同样,由出发点状态a经过三级路径后到达状态b,c,d的路径分别都有两条,故总共有8条路径。在表2.1中列出了这8条路径和汉明距离。a111a111001100b110c010d图2-6(3,1,3)卷积码编码路径举例序号路径对应序列汉明距离幸存否1aaaa0000000005否2abca1110010113是3aaab0000001116否4abcb1110011004是5aabc0001110017否6abdc1111100101是7aabd0001111106否8abdd1111101014是表2.1现在将到达每个状态的两条路径的汉明距离作比较,将距离小的一条路径保留,称为幸存路径。若两条路径的汉明距离相同,则可以任意保存一条。这样就剩下4条路径了,即表中第2,4,6和8条路径。第二步将继续考察接收序列中的后继3位“110”。现在计算4条幸存路径上增加一级后的8条可能路径的汉明距离。计算结果列于表2.2中。序号路径原幸存路径的距离新增路径段新增距离总距离幸存否1abca+a3aa25否2abdc+a1ca23是3abca+b3ab14否4abdc+b1cb12是5abcb+c4bc37否6abdd+c4dc15是7abcb+d4bd04是8abdd+d4dd26否表2.2维特比算法解码第二步计算结果表2.2中最小的总距离等于2,其路径是abdc+b,相应序列为111110010100。它和发送序列相同,故对应发送信息位1101。按照表2.2中的幸存路径画出的网格图示于图2-7中。图中粗线路径是汉明距离最小(等于2)的路径。aa111b100011100001c110010110d010101010图2-7对应信息位“1101”的幸存路径网格图为了使输入的信息位全部通过编码器的移存器,使移存器回到初始状态,在信息位1101后面加了三个“0”。若把这三个“0”仍看作是信息位,则可以按照上述算法继续解码。这样得到的幸存路径网格图示于图2-8中,图中的粗线仍然是汉明距离最小的路径,但是,若已知这三个码元是(为结尾而补充的)“0”。则在解码计算时就预先知道在接收这三个“0”码元后,路径必然应该回到状态a。而由图可见,只有两条路径可以回到a状态。所以,这时图2-8可以简化成图2-9。aa000000111011011011001100100001001110010010101101101b000000111011011011001100100001001110010010101101101bccdd图2-8对应信息位“1101000”的幸存路径网格图000000000000111011011011001100100001001110010010101101abcd图2-9对应信息位“1101”及以“000”结束的幸存路径网格图MATLAB基础与其在通信系统中的应用3.1MATLAB简介MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。MATLAB工作界面是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户直接进行下载就可以用。MATLAB主要功能有:数值分析、数值和符号计算、工程与科学绘图、控制系统的设计与仿真、数字图像处理、数字信号处理、通讯系统设计与仿真、财务与金融工程等。3.2MATLAB程序设计随机计算技术的发展,各种各样的应用软件越来越多,比如能够支持数学计算的软件就有多种:MATLAB、Mathmatica、Scilab等。MATLAB以其强大的矩阵计算能力使它在科学计算与工程设计中更具备竞争力,MATLAB集成了众多基本的数据处理功能,可以完美支持数值与非数值运算,本小节学习基于MATLAB的基本编程语法。由MATLAB语句构成的程序通常作为文件保存在后缀为.m的文件中,称为M文件,可以使用任何一种文本编辑器来编写M文件。M文件的文件名不能用汉字,也不能用数字开头,只能用英文字符开头,后缀数字等,长度可达255个字符。M文件一般有两种类型:script文件(称为正本文件)与function文件(称为函数文件)。正本文件: 正本文件是由用户编写的一个包含一系列MATLAB正本的文本文件,在MATLAB工作空间的命令行提示符“>>”后敲入这个M文件的文件名就可以依次执行这个M文件中的每条语句。当需要从命令行中执行多条命令时可以使用script文件,为此你只需要将希望执行的命令逐行写入script文件中,并保存在MATLAB工作目录下。概括起来正本文件有如下特点:不需要任何实参代入,也不能返回任何输出参数;其中的变量作用于整个工作空间;使用工作空间中的数据;不需要用到任何MATLAB关键字,直接在其中写可以执行的MATLAB语句;可以利用百分号作注释。不能包含任何自定义函数。函数文件 可以利用MATLAB系统中的关键字与内部函数来构造用户自己的函数即自定义函数,并将这个函数保存在一个function文件中,它也以.m为扩展名,但要求文件名与函数名相同。概括起来function文件有如下特点:(1)文件第一行必须由关键字function开头,后面紧跟函数原型:function[返回变量表]=函数名(形式参数表)比如二分法求非线性方程根,函数定义语句为function[x,abx]=cbisectionrule(f,interval,epsilon,N)其中function是关键字,返回变量多于两个时要用方括号,这里有两个返回变量x,abx;函数名为cbisection_rule;形式参数为:f,interval,epsilon,N共四个。(2)函数体可以由任何MATLAB语句构成;(3)被包括在函数文件中的变量只能作用在这个函数文件内部,不能被外部访问,在MATLAB工作空间中用whos命令无法显示函数文件中的变量,这与scripts文件不同。(4)同一个function文件中可以定义多个自定义函数,第一个function定义的函数称为主函数,它的名字应当和文件同名,第二个function及以后各个function定义的函数称为子函数,它们只能被主函数调用,不能从文件外部访问,但主函数可以被外部访问。(5)有些函数文件可以直接在MATLAB命令行中通过敲入文件名来直接执行;但是一些只包含形式参数的函数文件只能被其它函数文件调用。变量 MATLAB编程过程中必然要用到变量,使用MATLAB变量时要注意如下特点:(1)使用时不必预先声明它的类型,而是直接对它进行赋值,这与C语言不同。变量的类型由表达式运算结果类型决定。(2)变量名必须以字母开头,后缀任何字母、数字、下画线,长度最多可达63个字符。(3)变量名中大小写是有区别的,比如:Ab、aB,AB,ab是完全不同的四个变量。(4)用户可以使用函数isvarname()来确定用户给出的变量名是否合法,如果合法就返回1否则返回0。比如:8th_column就不是一个合法的函数名。(5)不要用MATLAB内部的名字来命名自定义变量,比如MATLAB的缺省变量名、内部函数名、关键字等。(6)每一个变量都有自己的作用域范围,因此就有局部变量与全局变量之分,但是要尽量少用或不用全局变量,将每个变量的作用域限制在较小范围之内,变量之间的数据交换使用子函数来进行,这样也使得程序的模块性更强,便于阅读与分析。(7)MATLAB中的几个特殊变量可以返回几个重要特殊数值,可以直接在MATLAB语句中调用它们。3.3通信系统仿真3.3.1通信仿真的概念现代的通信系统越来越复杂,对这个系统做出的任何改变,如改变某个参数的设置或系统结构等都可能影响整个系统的性能和稳定。因此,在对原有的通信系统做出改进或建立一个新系统前,通常需要对这个系统进行建模和仿真,通过仿真结果衡量方案的可行性,从中选择最合理的系统配置和参数设置,然后再应用于实际系统中。这个过程就是通信仿真。通信系统的仿真往往涉及较多的研究领域,包括通信原理、数字信号处理、概率论、信号检测与估计、随机过程理论、信号系统理论等等。掌握通信原理是通信系统仿真的关键,而数字信号处理是用于开发构成通信系统仿真模型的算法,现代通信系统的许多新技术都涉及算法,如多天线系统中波束成形算法、信道均衡中的算法等。通信系统的性能指标通常以概率形式表示,如比特差错概率。在许多情况下,仿真要处理的信号和噪声均是随机过程的一个样本,而且,对于无线信道的描述也需要随机过程理论。3.3.2通信仿真的基本方法从本质上讲,仿真方法论是很难系统化的,但除了最简单的情况外,所有仿真问题都要涉及一些基本步骤:将给定问题映射为仿真模型;把整个问题分解为一组子问题;选择合适的建模、仿真和估计方法,并将其用于解决这些子问题;综合各子问题的解决结果以提供对整个问题的解决方案。对整个通信系统的仿真是一个复杂的问题,往往需要把问题进行分层,不同层次的仿真,其方法与目的不同。可以把仿真分为四个层次:系统级仿真、子系统级仿真、原件级仿真和电路级仿真。越高层次的仿真,抽象越多,涉及的模型细节越少;越低层次的仿真,越与实际硬件相近,涉及的硬件细节和参数越多。对于电路级仿真,人们更多的使用硬件原型来进行验证和测试,在通信系统波形级仿真,很少涉及这一层次。通常情况下,人们尽可能高的抽象程度来仿真。因为越高的抽象意味着越少的参数和越高效的仿真。3.3.3仿真通信系统模型为了模拟实际通信系统,需要建立通信系统模型,仿真通信系统框图如图3-1所示,其中序列为随机输入的二进制码元,卷积编码即是通过MATLAB仿真的部分。信道为简单的加性高斯白噪声信道,即产生误码的原因。调制方式为BPSK调制,译码方式采用了Viterbi算法的卷积码译码,也是通过MATLAB仿真的部分。最终的信息输出即为接收端。序列序列产生信道编码BPSK

调制AWGN信道传输BPSK

解调Viterbi译码信息输出图3-1仿真通信系统框图模型第四章卷积码编译码的MATLAB仿真4.1卷积码的编码仿真在程序设计中,我们没有采用MATLAB自带的编码函数而是采用了自己的编码函数codec对(2,1,3)卷积码编码,其参数m为输入信息序列,g1,g2为两个输出端口的冲激响应序列。编码程序如下: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)输出为:cod=[110101001011]仿真结果如图4-1图4-1(2,1,3)卷积码编码4.2卷积码的译码仿真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从该序列中除掉。根据算法绘出程序流程图如图4-2示:程序初始化,将路径信息和当前累计度量值清零,统计码长程序初始化,将路径信息和当前累计度量值清零,统计码长对前两步进行汉明距度量并保存路径信息是否解码完成计算能到达当前状态的两条路径将两条路径a,b输出与输入比较汉明距,并累加到路径度量a路径累计度量是否小于b选a为当前点的最优到达路径选b为当前点的最优到达路径选取度量值最小路径输出是否否是图4-2Viterbi译码流程图从Viterbi算法中可以看到,对于一个长信息序列解码时,解码延时和所需要的存储量都是无法接受的。直到整个序列全被接收,解码才能开始,而且还不得不将总的留存路径存储起来。实际上,不会引起这些问题的次优解倒是很希望的。一种称为路径存储截断的办法是:在每一级编码器在网格图中仅往会搜索w级,而不回到网格图的出发点。用这种办法在第(w+1)级解码器对相应于网格图第1级的输入比特作出判决,并且未来的接收比特不改变这个判决。这意味着解码延时是k0w比特,需要保存的路径只相应于最后W级的路径。计算机仿真已经表明,如果W>5n,由于路径存储截断造成的性能下降可忽略不计。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);将程序在matlab中进行仿真,对于(2,1,3)译码,G=[111;101],channel_output=recv,此时令信噪比snr_db=12,得到仿真图形如图4-3所示:图4-3viterbi译码输出的是正确结果[1101],由理论分析知,信道编码经过bpsk调制,由于信道噪声的干扰,在信号解调后会产生一定的差错,维特比译码虽然有具有纠错功能,但是毕竟是有限的,所以信噪比对viterbi译码性能将产生影响,且信噪比越大,维特比译码越准确。为了验证上述推论,将信噪比减小,令SNR=6。MATLAB仿真结果如图4-4所示:当信噪比降低到SNR=6时,译码输出变为[0111],产生了差错。验证了上述推论。图4-4调整信噪比后的译码结果卷积码的性能分析5.1信噪比对卷积码译码性能的影响上述过程只是可以看出信噪比会影响维特比译码的性能,为了进一步得到两者更加直观的联系,我们可以通过编程得到信噪比与误码率之间的函数关系,同时将没有进行卷积码的信号也计算其误码率。代码如下: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中运行,得到仿真图如图5-1所示,该图直观的反映了经过卷积码编码和没有经过卷积码编码的误码率之间的区别。从图中可以看出,当信噪比较小时,未编码的误码率反而比采用编码的误码率低,这是因为误比特太多导致接收到的信息几乎无效。但是当信噪比稍高后卷积码编码译码的误码率就大大降低了。图5-1信噪比对误码率的影响5.2码率对卷积码译码性能的影响卷积码的码率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])。从图5-2中的误比特率曲线可以看出,当码率一定时,随着信道噪声的逐渐减小,系统的误比特率也逐渐减小,对比两条曲线可清楚地得出(3,1,3)卷积码的性能要比(2,1,3)卷积码要好。于是可以得出如下结论:当改变系统码率时,随着卷积码码率的逐渐提高,系统的误比特率也呈现出增大的趋势,也就是说,码率越低,系统的误比特率就越小,误码性能就越好。图5-2码率对卷积码性能的影响5.3约束长度对卷积码性能的影响对于码率一定的卷积码,当约束长度N发生变化时,系统的误码性能也会随之发生变化,我们以码率R=1/2的(2,1,3)和(2,1,7)卷积码为例展开分析。(2,1,7)卷积码只需将trellis结构改成poly2trellis(7,[171133])即可。从下图5-3中的误比特率曲线可以清楚地看到,在低信噪比时,(2,1,3)卷积码的的性能要好于(2,1,7)卷积码的性能。然而当信噪比高于一定值后,(2,1,7)卷积码的的性能要好于(2,1,3)卷积码的性能,随着约束长度的逐渐增加,系统的误比特率明显降低,所以说当码率一定,信噪比高于一定值时,增加约束长度可以降低系统的误比特率,但是随着约束长度的增加,译码设备的复杂性也会随之增加,所以对于码率为1/2的卷积码,我们在选取约束长度时一般为3~9。图5-3约束长度对卷积码性能的影响5.4回溯长度对卷积码性能的影响回溯长度是在Viterbi译码过程中一个很重要的参数,它决定了维特比译码的精度,同时也影响着译码延迟(即在输出第一个解码数据之前输出的0的个数),随着它的不断变化误码性能也随之改变。这里采用(2,1,3)卷积码为例,将反馈深度分别取值为5,15和35。仿真结果如图5-4。图5-4回溯长度对卷积码性能的影响从图中的误比特率曲线可以清楚地看到,当回溯长度一定时,随着信道噪声的逐渐减小,系统的误比特率逐渐降低;当回溯长度逐渐增加,系统的误比特率随之逐渐降低,但是当回溯程度增加到5N时(N为编码的约束长度),误比特率数值趋于稳定,这里的(2,1,3)卷积码在回溯长度达到15左右基本趋于稳定。因此在确定回溯长度时既要考虑到随着信噪比增加误比特率随之降低的趋势,也要考虑到译码延迟会变大,在选取回溯长度时,通常取回溯长度为5N。5.5判决方式对卷积码性能的影响采用软判决即将信道输出的编码先不立即判决,而是进行量化,量化程序如下: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);再进行维特比软判决译码。从图5-5可知,采用软判决的误码率明显低于硬判决,实际上软判决译码算法的路径度量采用“软距离”而不是汉明距离。最常采用的是欧几里德距离,也就是接收波形与可能的发送波形之间的几何距离。在采用软距离的情况下,路径度量的值是模拟量,需要经过一些处理以便于相加和比较。因此,使计算复杂度有所提高。除了路径度量以外,软判决算法与硬判决算法在结构和过程上完全相同。一般而言,由于硬判决译码的判决过程损失了信道信息,软判决译码比硬判决译码性能上要好约2dB。图5-5判决方式对卷积码性能的影响结论卷积码是一种纠错编码,纠错编码己有五十几年历史,早在1948年,香农(Shannon)在他的开创性论文“通信的数学理论”中,首次阐明了在有扰信道中实现可靠通信的方法,提出了著名的有扰信道编码定理,奠定了纠错码的基石。以后,纠错码受到了越来越多的通信和数学工作者,特别是数学家的重视,使纠错码无论在理论上还是在实际中都得到了飞速发展。本文首先从数字通信的一些基本概念和差错控制编码理论出发,引入卷积码的一些基本理论,接着讨论了卷积码的编译码基本原理,对卷积码的表示方法和编译码算法做了简单的介绍,再通过编写卷积码的编码和解码程序,并且用MATLAB仿真软件进行仿真和纠错验证,并通过对不同码率、不同约束长度、不同回溯长度,以及不同判决方式情况下误码率的分析,得出以下结论:(1)当编码约束长度不大,当码率一定时,随着信道噪声的逐渐减小,系统的误比特率也逐渐减小。(2)当改变系统码率时,随着卷积码码率的逐渐提高,系统的误比特率也呈现出增大的趋势,也就是说码率越低,系统的误比特率就越小,误码性能就越好。对于二进制对称信道,当采用BPSK调制方式时,通常选取的码率为1/2。(3)对于码率一定的卷积码,当约束长度N发生变化时,系统的误码性能也会随之发生变化,随着约束长度的逐渐增加,系统的误比特率明显降低,所以说当码率一定时,增加约束长度可以降低系统的误比特率,但是,随着约束长度的增加,译码设备的复杂性也会随之增加。所以对于码率为1/2的卷积码,在选取约束长度时一般为3~9。(4)对于码率一定的卷积码,当反馈深度发生变化时,系统的误码率也会发生一定的变化,随着反馈深度的增加,系统的误码率呈下降趋势,但是通常在反馈深度大于或者等于约束长度的五倍时,误码率几乎不再发生变化,故常常取回溯长度为5N。(5)对于码率一定的卷积码,采用的译码判决方式不同,也会对系统的误码率产生影响,一般来说,软判决译码性能要优于硬判决译码性能,但这是以提高设备复杂性为代价的。在本次卷积码编译码算法研究过程中,我学到了许多关于卷积码的知识,对卷积码的纠错性能有了较为深刻的认识。但是由于时间和个人能力等方面的不足,课题研究中还有些地方做的不到位,也有些领域没有研究,值得进一步完善。如在信道传输过程中,本文只是考虑了BPSK信道编码,而没有采用较为复杂的QPSK编码,所以没能研究不同的信道编码方式对卷积码误码性能的影响。卷积码的译码方法众多,本文只对Viterbi译码算法做了初步的研究,对其它的译码方式,如代数译码和序贯译码,没有进行详细的研究和比较,所以没能研究不同译码方式对卷积码误码性能的影响。卷积码自提出以来就受到人们的重视,并显现出了巨大的优越性,随着通信技术的进步,卷积码也将得到更大的发展,将提出更多形式的新型卷积码,进一步优化通信系统的性能。致谢时间如梭,转眼毕业在即。回想在大学求学的四年,心中充满无限感激和留恋之情。感谢母校为我们提供的良好学习环境,使我们能够在此专心学习,陶冶情操。谨向我的论文指导老师王副教授致以最诚挚的谢意!王老师不仅在学业上言传身教,而且以其高尚的品格给我以情操上的熏陶。本文的写作更是直接得益于他的悉心指点,从论文的选题到体系的安排,从观点推敲到字句斟酌,无不凝聚着他的心血。滴水之恩,当以涌泉相报,师恩重于山,师恩难报。我只有在今后的学习、工作中,以锲而不舍的精神,努力做出点成绩,以博恩师一笑。

另外,我必须感谢我的父母。焉得谖草,言树之背,养育之恩,无以回报。作为他们的孩子,我秉承了他们朴实、坚韧的性格,也因此我有足够的信心和能力战胜前进路上的艰难险阻;也因为他们的日夜辛劳,我才有机会如愿完成自己的大学学业,进而取得进一步发展的机会。

最后,我必须感谢我的朋友们,四年时光有如白驹过隙,刚入学时的情景仿佛发生在昨天,历历在目。感谢四年中有他们的陪伴,并且在学习与生活中帮助我,与我分享喜悦,承担痛苦。参考书目[1]郝建军,桑林,刘丹谱,罗涛编著,《数字通信(第2版)》.北京邮电大学出版社.2010[2]张忠培,史治平,王传丹编著.《现代编码理论与应用》.北京:人民邮电出版社.2007[3]傅祖芸,赵建中编著,《信息论与编码》,电子工业出版社,2010[4]樊昌信,曹丽娜编著,《通信原理(第6版)》,国防工业出版社,2011[5]邓华.Matlab通信仿真及应用[M].北京:人民邮电出版社,2000.[6]王新梅,肖国镇.纠错码一原理与方法.西安,西安电子科技大学出版社,2001,4[7]孟夏,申敏,王飞.TD-SCDMA中(2,1,9)卷积编码及其VITERBI译码算法的SIMULINKS-FUNCTION实现[J].通信技术,2008,41(8):26-30.[8]徐文燕.通信原理[M].北京:北京邮电学院出版社,2008[9]张忠培,史治平,王传丹编著.现代编码理论与应用.北京:人民邮电出版社.2007[10](美)S.LinandD.J.Costello著.晏坚,何元智,潘亚汉等译.差错控制编码.[11]张忠培,史治平,王传丹编著.现代编码理论与应用.北京:人民邮电出版社.2007[12]仇佩亮.《信息论与编码》高等教育出版社.[13]徐文燕.通信原理[M].北京:北京邮电学院出版社,2008[14]C.E.Shannon.“Amathematicaltheoryofcommunication”.BellSystemsTechnicalJournal,vol.27,pp.379-423,July1948.[15]C.Berrou,A.Glavieux,andP.Thitimajshima.“Nearshannonlimiterr

温馨提示

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

评论

0/150

提交评论