本科毕业设计说明书(论文)第1页共35页1引言卷积码的概率码最早始于1961年由Wozencraft提出的序列译码,这是第一个实用的概率译码方法,1963年Fano对序列译码进行改进,提出Fano算法,从而推动了序列译码的实际应用。1967年Viterbi提出了另一种概率译码算法:Viterbi算法,它是一种最大似然译码算法。在码的约束比较小时,它比序列译码算法效率更高、速度更快,译码器也较简单。因而自Viterbi算法提出以来,无论在理论上还是实践上都得到了极其迅速的发展,并广泛应用于各种数据传输系统,特别是卫星通信系统中。1.1卷积码的发展卷积码是深度空间通信系统和无线通信系统中常用的一种编码。卷积码与分组码不同,它的本码组的校验元不仅与本组的信息元有关,而且还与以前各时刻输入至编码器的信息组有关。在编码过程中,卷积码充分利用了各码字间的相关性,而且它的信息元和校验元也比分组码小,在与分组码同样的码率R和设备复杂性条件下,无论从理论上还是从实践上都证明卷积码的性能至少不比分组码差;而且卷积码在实现最佳译码也较分组码容易。所以从信道编码定理来看,卷积码是一种非常有前途的码类。在IS-95.CDMA的无线数字蜂窝标滩中都采用了卷积码;在第三代无线通信系统的蜂窝结构中所采用的Turbo码,也是源自卷积码。卷积码是由伊利亚斯(P.Elias)发明的一种非分组码。通常它更适用于前向纠错,因为对于许多实际情况它的性能优于分组码,而且运算简单。卷积码是一种线性树码,由于该码的输出序列是输入序列和编码器的冲击响应的离散时间卷积,故名卷积码。其一般结构包括:一个由N段组成的输入移位寄存器,每段k个,共Nk个移位寄存器、一组n个模2和相加器,一个由n级组成的输出移位寄存器。对应于每段k个比特的输入序列,输出n个比特。卷积码常记为(n,k,N-1),当k等于1时,N-1就是寄存器的个数。卷积编码器是由记忆的,即一组信息码元的校验码元不但取决于本组信息元,而且还与前m=N-1组信息码元有关。其中m被称为编码存贮,N=m+1被称为编码约束长度。一个卷积码不但可以通过增加校验码元(相应地降低编码效率)来改善纠错性能,更可以用增加编码约束长度的方法提高纠错能力[1]。卷积码的概率译码方法主要有两种:viterbi译码算法和序列译码算法(费诺算本科毕业设计说明书(论文)第2页共35页法)。其中,viterbi算法的复杂度和编码约束度成指数关系,所以只适合m较小的卷积码或者误码率高于10-5的应用。由于该算法的收敛性与信道干扰程度无关,所以计算量是固定的,译码实时性较好;另外该算法适合软判决译码,可以获得额外的编码增益。序列译码(费诺算法)的复杂度与m无关,适合大编码约束长度(即具有较大自由距离)的卷积码或者误码率低于10-6的业务需求。这种算法的收敛速度与信道干扰程度有关,译码实时性较差,使用软判决较为复杂[2]。本文主要研究(2,1,7)卷积码的viterbi译码,其中码率为1/2,约束长度为7,共有64个状态。1.2数字信号处理(DSP)20世纪60年代以来,随着大规模集成电路、数字计算机等信息技术的飞速发展。数字信号处理(DigitalSignalProcessing,DSP)技术应运而生并得到快速的发展。在过去的20多年里,DSP在理论和应用方面不断地进步和完善,在越来越多的应用领域中迅速取代传统的模拟信号处理方法,并且开辟出许多新的应用领域。目前数字信号处理技术已经在通信、雷达、航空航天、工业控制、生物医学工程、网络及家电领域得到极为广泛的应用,数字时代正在到来。由于DSP技术应用非常广泛,迫切需要一种能高效完成复杂数字信号处理或数字系统控制,能够作为DSP系统核心的器件。因此,众多半导体厂商投入到高性能数字信号处理器(DigitalSignalProcessors,DSPs)芯片的研发当中。1982年,美国德州仪器公司(TexasInstrumentsIncorporation,简称TI公司)推出了该公司的第一款DSPs芯片,很快DSPs芯片就以其数字器件特有的稳定性、可重复性、可大规模集成和易于实现DSP算法等优点,为数字信号处理技术带来了更大的发展和应用前景。采用各种类型DSPs实现系统的数字化处理和控制已经成为了未来发展的趋势,并且随着DSPs运算能力的不断提高,数字信号处理的研究重点也由最初的非实时应用转向高速实时应用[3]。本文主要讲用到TI公司的C54X系列的DSPs芯片,并将在CCS2000(for5000)平台上进行仿真、运行。在TMS320C54系列DSP的应用设计中,DSP的运行速度是衡量系统性能的一项重要指标,要达到预期的运行速度,就要给DSP系统的程序空间设计一个高速程序存储空间。常用的存储器件分为停电数据丢失和停电数据不丢失两类。停电数据丢失的器件有RAM;停电数据不丢失的有ROM,EPROM,FLASH等,其中FLASH因读写方便快速而较常用。本科毕业设计说明书(论文)第3页共35页在对DSP硬件进行编程时,有时C语言不如汇编语言方便,有时根本不能用C语言进行编程。因此,对实时性要求较高或需对硬件直接控制的功能,如A/D采用程序及数字信号处理的核心算法等,可由汇编语言实现;而对运行速度和代码效率要求不高但要求可读性强维护容易的程序,如系统初始化、用户操作界面等,则用C语言编写。因此,混合编程法已成为开发TMS320C54XDSP应用程序的常用方法。要想开发基于C54XDSP系统,首先要有C54XDSP的仿真器,才能实现程序的下载及调试。在没有仿真器的情况下,也同样可以开发DSP系统,因为C54XDSP提供JTAG口和HPI口用于程序的下载,可以根据相应协议设计自己的开发系统。其中,HPI是8位的数据总线接口,由于C5000系列DSP是16位,所以与主机通信的数据都是由2个连续的字节组成[4]。C54X主要特点如下:具有先进的多总线结构,一条程序总线三条16位数据总线和四条地址总线;40位算术逻辑单元(ALU),包括一个40位桶形移位器和两个40位累加器;一个17*17乘法器和一个40位专用加法器,允许16位带/不带符号的乘法;整合viterbi加速器,用于提高viterbi编译码的速度;单周期正规化及指数译码;8个辅助寄存器及一个软件栈,允许使用业界最先进的定点DSPC语言编译器;数据/程序寻址空间1M*16bit,内置4k*16bitROM和16k*16bitRAM;低功耗,工作电压为1.8V/3.3V。1.3本文研究对象本文所设计的viterbi译码是基于C54XDSP实现的。在此之前,要先运用matlab软件对viterbi译码程序进行仿真,再在ccs2000(for5000)环境下进行软件仿真。在viterbi译码器的设计中,采用了并行加比选(ACS)碟形算法来完成对分支度量、路径度量的计算,以及对幸存路径的选择和路径溢出的控制,在对幸存路径的处理上,有两种经典的算法,一种是寄存器交换(registerexchange)算法,另一种是回溯(trace_back)算法,本文所设计的viterbi译码采用回溯算法。同时viterbi译码器还同时支持硬判决和软判决。通过matlab和ccs上的仿真,我们将具体呈现viterbi译码的正确性和实用性,以及viterbi译码器的误码性能。本科毕业设计说明书(论文)第4页共35页2卷积码卷积码至今尚未建立像线性分组码那样有严密而完整的数学分析体系,分析它的方法也很多,但都有一定的局限性。描述卷积码的方法大致可以分为解析表示法和图形表示法。解析法又分为生成矩阵法、码多项式法等;图形表示法也可以分为状态图法、树图法、网格图法等。2.1卷积码的编码及其应用2.1.1卷积码的编码表达形式对于一个信道,最不确定的因素就是噪声干扰,引起差错的往往也是噪声。就噪声引发差错的统计规律而言可分为随机差错信道和突发差错信道。对于随机差错信道,它的差错主要是由加性高斯白噪声(AWGN)引起的。根据编码信道的输出是二电平、多电平或是模拟量(多电平数的极限)它可分为:二进制对称信道(BSC)、离散无记忆信道(DMC)、离散输入连续输出信道。BSC信道输入输出都是二进制的,也就是检测器实行门限硬判决;DMC信道的输入是二进制输出是多进制的,也就是检测器进行多电平量化,亦即所谓软判决:离散输入连续输出信道是DMC的极限情况。从香农(Shannon)信道编码定理可以看出要降低误码率,通过某种规则加入冗余信息(编码)是常用途径之一。常用的这些编码“规则”有:分组编码、卷积编码等等。寻找好的编码方法一直是信息论研究的重点与核心。在相同误码率的条件下,编码比不编码可以节省几个dB的信号功率,也就是说在同样的信噪比条件下编码以后可以降低发射和接收功率。卷积编码是在实际中应用极为广泛的一种编码方法,可以用(n,k,m)来表示。其编码器是一个由k个输入端、n个输出端且具有m-1级移位寄存器所构成的有限状态的有记忆系统,m称之为编码约束长度,它表示编码码字的产生受m个信息分组的制约;k/n表示编码效率[5]。图2.1是卷积码的编码流程,卷积码至今尚未建立像线性分组码那样有严密而完整的数学分析体系,分析它的方法也很多,但都有一定的局限性。描述卷积码的方法大致可以分为解析表示法和图形表示法。解析法又分为生成矩阵法、码多项式法等;图形表示法也可以分为状态图法、树图法、网格图法等。本科毕业设计说明书(论文)第5页共35页图2.1卷积码编码程序流程图下面结合(2,1,3)卷积码来说明常用的几种表示法:树状图、状态图法和网格图法。起点信息01aababcdaabbcCcCdd000000001111100111100111001001111001110010010011100111001001abcdaaabbbcccddda=00b=01c=10d=11状态图2.2(2,1,3)卷积码树状图按照习惯的做法,码树的起点节点位于左边;移位寄存器的初始状态为00,分别用a,b,c和d表示寄存器1m,2m的4种状态:00,01,10和11,作为树状图中每条支程序开始定义变量初始化四个寄存器输入1比特信息存放在寄存器0中,代入3,4两式,得到V1,V2将D0,D1,D2中的值依次向后传递一位,输出V1,V2,并返回,进行下一次运算本科毕业设计说明书(论文)第6页共35页路的节点。以全零状态a为起点,当第1位输入信息为零时,输出码元为00,寄存器保持状态a不变。输入第二个比特为1时,输出码元为11,寄存器则转移到状态b。然后再分别以这两条支路的终节点a和b作为处理下一位输入信息比特的起点,从而得到4条支路。以此类推,可以得到整个树状图。显然,对于第i个输入信息比特,途中将会出现2i条支路。从第4位信息开始,树状图的上半部和下半部完全相同,这意味着此时的输出码元己和第1位信息无关,由此可以看出把卷积码的约束长度定义为N-1的意义。顾名思义,状态图法就是对编码寄存器做相应的状态标定,然后讨论编码规则的方法[6]。0S(00)1S(10)2S(01)3S(11)11(1)11(0)10(0)10(1)00(1)01(0)00(0)01(1)图2.3(2,1,3)卷积码的状态图从图2.3可以看出寄存器总的状态数为4种,其状态标号为S0=00,S1=10,S2=01,S3=11。由于每次的输入有两种可能:0或者1,所以每次更新后的状态和编码输出可能也只有两个。四个圆圈内的分别表示状态及对应的寄存器信息,状态之间的连线与箭头表示状态转移方向,分支上的数字表示状态转移时相应的编码输出(码字),而括号内的数字则表示相应的输入信息。例如,假定初始状态为s0(00),若输入信息位为1,则输出码字为11,下一时刻的状态为S1(10);若输入信息位为0,则输出码字00,下一时刻的状态仍旧是S0(00)。它实际上就是一个有限状态机。状态转移图虽然表现了各状态转移的去向,但不能记录状态转移随时间的轨迹。另一种描述法一网格图法(也称栅格图法)可以弥