基于C54某DSP的viterbi译码技术_第1页
基于C54某DSP的viterbi译码技术_第2页
基于C54某DSP的viterbi译码技术_第3页
基于C54某DSP的viterbi译码技术_第4页
基于C54某DSP的viterbi译码技术_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

{管理信息化BI商务智能}基于C54某DSP的viterbi译码技术1引言卷积码的概率码最早始于1961年由Wozencraft1963年FanoFano1967年Viterbi提出了另一种概率译码算法:Viterbi它比序列译码算法效率更高、速度更快,译码器也较简单。因而自Viterbi应用于各种数据传输系统,特别是卫星通信系统中。1.1卷积码的发展的码率R从信道编码定理来看,卷积码是一种非常有前途的码类。在IS-95.CDMA的所采用的Turbo码,也是源自卷积码。卷积码是由伊利亚斯(P.Elias)发明的一种非分组码。通常它更适用于前向纠错,因为对于许多实际情况它的性能优于分组码,而且运算简单。N段组成的输入移位寄存器,每段k个,共Nk个移位寄存器、一组n个模2和相加器,一个由nknn,k,N-1k等于1时,N-1就是寄存器的个数。息元,而且还与前m=N-1组信息码元有关。其中m被称为编码存贮,N=m+1力[1]。卷积码的概率译码方法主要有两种:viterbi译码算法和序列译码算法viterbi只适合m较小的卷积码或者误码率高于10-5与m率低于10-6时性较差,使用软判决较为复杂[2]。2,1,7viterbi1/2长度为7,共有64个状态。1.2数字信号处理(DSP)20世纪60年代以来,随着大规模集成电路、数字计算机等信息技术的飞速发展。数字信号处理(DigitalSignalProcessing,DSP)技术应运而生20多年里,DSP在理论和应用方面不断地进步字时代正在到来。由于DSPDSP投入到高性能数字信号处理器(DigitalSignalProcessors,DSPs发当中。1982TexasInstrumentsIncorporation,简称TI公司)推出了该公司的第一款DSPs芯片,很快DSPs芯片就以其数字器件特有的稳定性、可重复性、可大规模集成和易于实现DSP算法等优点,为数字信号处理技术带来了更大的发展和应用前景。采用各种类型DSPs实现系统的数字化处理和控制已经成为了未来发展的趋势,并且随着DSPs运速实时应用[3]。本文主要讲用到TI公司的C54X系列的DSPs芯片,并将在CCS2000(for5000TMS320C54系列DSP的应用设计中,DSP的运行速度是衡量系统性能的一项重要指标,要达到预期的运行速度,就要给DSP为停电数据丢失和停电数据不丢失两类。停电数据丢失的器件有RAM;停电数据不丢失的有ROM,EPROM,FLASHFLASH因读写方便快速而较常用。在对DSPC能用C如A/D用户操作界面等,则用C语言编写。因此,混合编程法已成为开发TMS320C54XDSP应用程序的常用方法。要想开发基于C54XDSPC54XDSPDSPC54XDSP提供JTAG口和HPIHPI是8C5000系列DSP是16位,所以与主机通信的数据都是由2个连续的字节组成[4]。C54X主要特点如下:具有先进的多总线结构,一条程序总线三条16位数据总线和四条地址总线;40位算术逻辑单元(ALU40位桶形移位器和两个4017*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)计的viterbiviterbi译码器还同时支持硬判决和软判决。通过matlab和ccs上的仿真,我们将具体呈现viterbi译码的正确性和实用性,以及viterbi译码器的误码性能。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严密而完整的数学分析体系,分析它的方法也很多,但都有一定的局限性。图法等。图2.1卷积码编码程序流程图下面结合(2,1,3)卷积码来说明常用的几种表示法:树状图、状态图法和网格图法。图2.2(2,1,3)卷积码树状图00abc和d4种状态:000110和11a1位输入信息为零时,输出码元为00a1为11ba和b作4到整个树状图。i2i4位信第1位信息无关,由此可以看出把卷积码的约束长度定义为N-1的意义。顾名思义,状态图法就是对编码寄存器做相应的状态标定,然后讨论编码规则的方法[6]。图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)。它实际上就是一个有限状态机。的轨迹。另一种描述法一网格图法(也称栅格图法)可以弥补这一缺陷.它可码字(输入信息)k=1的情况还可以用箭头的虚实来表示导致状态转移的输入是0还是101上首尾相连以体现时间的变化。如图2.4S0为U=()S0->S1->S2->S1->S3->S3->S2->S0应的编码输出为(11,01,00,10,01,10,11)找到唯一的一条路径(轨迹)也就知道对应的输入信息。因此如果事先知道了状态转移路径为S0->S2->S1->S2->S3->S3->S1->S0,则必然输入的信息序列为()。这对于卷积码的Viterbi译码中很重要,译码时就是根据最大似然准则找到这条路径,找了这条路径也就找到了相应的输入信息序列。图2.4(2,1,3)卷积码的网格图上述三种表示方法各有千秋,是理解卷积码编译码方法的基础。2.1.2卷积码的解析表示2.1.2.1生成矩阵一个卷积码完全由一个监督矩阵H或生成矩阵G积码的生成矩阵。以(3,1,3)为例来讨论生成矩阵[7]。当第一信息比特输入时,若移位寄存器起始状态全为零。那么三个输出比特为(2.1)第二个信息比特输入时,右移一位,那么输出比特为(2.2)当第j个(j3)信息比特输入时,输出为:(2.3)式2.1可写成矩阵形式(2.4)其中系数矩阵(2.5)由上看到,在第一和第二信息比特输入时,存在过渡过程,此时有(2.6)(2.7)类同线性码的输出序列矩阵与输入序列矩阵的关系有(2.8)式2.8中=[……]为输入序列矩阵=[……]为输出序列矩阵为生成矩阵,这里和显然是半无限矩阵。总括上面的编码过程,生成矩阵应该是(2.9)式2.9中矩阵空白区元素都为0。显然,该生成矩阵是半无限矩阵,常记为。2.1.2.2多项式模2和的连接关系。在一般情况下,输入序列可表示为(2.10)这里……为二进制表示(1或0它标志着位置状况。我们可以用多项式表示移位寄存器各级与模2存器与模2加相连接,则相应多项式的系数为1;反之,无连接线时的多项式项系数为0。以(3,1,3)编码器为例[7],相应的生成多项式为(2.11)得到输出序列。设输出序列为111……,借助上述输出多项式来求输出序列如下。输入序列多项式为(2.12)所以(2.13)即有序列=111……=010……=001……(2.14)于是输出序列=111,110,010,100,001,100,001,100,110,101,……为方便起见,人们常用八进制序列和二进制序列来表示生成多项式,比如(2.15)2.1.3卷积码的应用出的码型,广泛应用于各种领域如:数字卫星通信系统、遥测外测系统、GSM(GroupSpecialMobile)3G(第三代移动通信)例如:绝大多数卫星通信采用的是(2,1,7)卷积码:GSM采用了(2,1,5)卷积CDMA的IS-95标准采用的是(2,1,9)3GPP(第三代移动通信伙伴关系)的WCDMA正向信道采用的是(2,l,9)(3,1,9)卷积码;CCSDS(空间数据系统咨询委员会)也把卷积码作为实时要求较高业RS码作为一对黄金搭档常常级连使用S码做为外码卷积码作为内码用于DVB(欧洲数字视频广播)标准和ATSC(美国先进电视)标准等等。积码等等,但这些不是本文研究的范畴。本文主要研究viterbi译码在DSP中的仿真以及在matlab环境下的仿真实验。2.2卷积码的译码原理用的概率译码方法有维特比译码和序列译码。2.2.1代数译码代数译码[8]误,如果错误图样是已知的,则一定满足R=C+E(R为接收码元序列,C为发送码元序列,E为误码序列)码字有没有错误可以用监督矩阵H来检验,RCE之间有如式2.16关系式(2.16)因为是一个码字,所以有,则。令或,称为伴随式或校验字。当时,判无错;当时,判有错。所产生的错误图样有关,而与发送的是哪一个码字无关。任何一个错误图样都可由公式(2.16)使用场合,常用的有门限译码法。2.2.2最大似然译码卷积码概率译码的基本思路是[9]它与其他所有可能出现的、连续的网格图路径的距离,选出其中可能性(概率)最大的一条作为译码估值输出。概率最大在大多数场合可解释为距离最(NLDMaximumLikelihoodDecoding)与分组码的最大似然译码在原理上是一组的相似度,而卷积码是求码字序列之间的相似度。度(BMBranchMetric)(PMPathMetric),那么在相同序列长度下(长度L应足够大)译码估值序列输出。2.2.3维特比译码的原理维特比译码一种最大似然译码算法[13],最大似然译码过程就是根据接个过程也就是译码器计算、寻找最大似然函数(2.17)BSC(二进制对称信道)而言,计算、寻找有最大度量的路径,等价于寻找与R有最小汉明距离的路径,即寻找(2.18)而对二进制输入Q进制输出的DMCR有最小软距离的路径,此时的度量就是软判决距离(2.19)式2.19中,与是接收序列R与序列的Q进制表示。L=50=3=2图上共有=>=100个信息元,则信息传输率只有100bit/s(或汉明距离)计算每一似然函数的时间小于s,这根本无法实现。Viterbi译码算法正是在解决上述困难时所引入的一种最大似然译码算函数的序列。2.3卷积码的译码卷积码的译码方式主要有三种:1963年Massey1963年有Fano改进的序列译码,这是基于码的树状图结构的一种准最佳概率译码。1967年Viterbi提出的Viterbi法,是一种最佳概率译码。于计算是用到了信道的统计特性.因而提高了译码性能,但这种性能的提高硬件简单;序列译码在性能和硬件方面介于维特比译码和门限译码之间。viterbi译码算法是一种卷积码的解码算法。缺点就是随着约束长度的增加算法的复杂度增加很快。约束长度N为7时要比较的路径就有64条,为8时路径变为128条。(2<<(N-1))viterbi译码一般应用在约束长度小于10的场合中。先说编码(举例约束长度为7):编码器7个延迟器的状态(0,1)组成了整个编码器的64个状态。每个状态在编码器输入0或1时,会跳转到另一个之中。比如110100输入1时,变成101001t时刻收到的数据都要进行6464入0或164条幸存路径就增加了一步。在译码结束的时候,从64条幸存路径中选出卷积码概率译码的基本思路是:以接收码流为基础,逐个计算它与其他然译码在原理上是一样的,但实现方法上略有不同。主要区别在于:分组码能获得最大对数似然函数,就放弃这条路径,然后在剩下的“幸存路径中重新选择路径。在整个viterbi译码过程中一般是一下几个步骤[10]:(1)量化。将接收机接收的模拟信号转化成数字信号。(2)码同步。检测码元帧的边界以及码元标志。(3(4)状态度量更新。用各个状态新的路径度量代替前一时刻的路径度量。(5)幸存路径存储。将Viterbi译码所需的网格图上所走过的路径记录下来。(6)输出判决。根据幸存路径存储的信崽,产生译码序列的输出。息序列输出。图2.5为viterbi译码流程图。图2.5viterbi译码流程图2,1,3U=(),编码器输出C=(11,10,00,01,10,01,11)BSC信道送入译码器的的序列R=(10,10,00,01,11,01,11)Viterbi算法来求U的估值序列U'。基于图2.4的网格图,Viterbi译码器接收序列R的过程如图2.6所示。图中画出了各时刻进入每一状态的的留选路径和其度量值d〔这里是最小汉明距离),以及相应的译码估计信息序列U'。到了第七时刻,留选路径就剩一条,相应的信息估值序列为U'=()[11],接收时的两个错误得到纠正。图2.6Viterbi译码器接收序列R的过程3viterbi译码器根据上面的算法,工程上实现Viterbi译码器的原理图如图3.1所示。从图中可以看出整个译码器按照功能主要分成7块(BMG,BranchMetricGeneration),加比选模块(ACS,AdditionComparisonSelection),状态路径存储管理模块(MMU,MetricMemoryManagementUnit,路径回溯模块(TB,Traceback储模块(SMU,SurvivorMemoryManagementUnit,输入输出模块再加上一个控制电路模块组成。图3.1viterbi译码系统框图由图3.1可以看到整个viterbi的具体作用[12]。后,最后得到的解码序列从输出端送出,在经过其他处理输出。ACS模块:AddCompareSelect模块,即“加比选”模块。它是Viterbi译码器中运算量最大的部分,大量的运算都是在这个模块完成的。ACS接收较小的一条,将它作为当前的状态度量。BMG模块:BranchMetricGenerator模块,即路径度量模块。这个模块BSC信道的硬判决Viterbi译码过程中,就是计算接收值与期望值之间的汉明距离。TB模Traceback模块,路径回溯模块。这个模块当译码开始一段序列后,按照路径回溯算法,历经各个状态,得到译码输出。MMU模MetricMemoryManagementUnit,路径度量存储管理模块。这个模块主要负责对路径度量的存取进行管理,负责幸存路径的存储和读取。SMU模SurvivorMemoryManagementUnit,幸存路径存储管理模块。这个模块负责对幸存路径RAM进行管理,负责幸存路径的存储和读取。Control以保证时钟上同步,流水线不堵塞,提高系统并行能力。由于在卷积码的译码过程中,viterbi译码算法的复杂度和寄存器状态ACS模块、MMU模块、SMU模块和TB模块上。基于DSP的viterbi在viterbi(ACS),路径计算部件(BMG)以及度量储存模块或者寄存器模块的不同。当然具体的软判决与硬判决的优缺点在本文中将不会涉及。本文主要介绍viterbi算法及其译码流程以及在C54XDSP上的实现。综合以上,不难发现viterbi译码器设置的主要模块是:加比选模块、的viterbi译码过程中重点考虑。4基于DSP的viterbi译码技术目前,卷积码编码和Viterbi理器(DSP)实现和可编程专用集成电路(ASIC)实现。ASIC属于硬件实现,可以完成非常高速的Viterbi译码器的设计。DSP实现属于软件实现,其运算用广泛。4.1DSP芯片TMS320VC5409简介MS320VC5409是TI公司生产的低功耗、高性能的定点可编程DSP芯片,其主要应用是无线通信系统等。其主要特点包括[14][16]:(1)运算速度快。指令周期为lOns,运算能力为100MIPS。(2)优化的CPU结构。1条程序总线(PB)3条数据总线(CBDBEB),4条地址总线(PAB、CAB、DAB、EAB)和240位的算术逻辑单元(ALU)以及一个40位的桶形移位器和两个40位的累加器(A、B),支持32位或双1617位x17位的硬件乘法器与一个40位专用加法器相连,构成乘法器/加法器单元,可以在一个流水线周期内完成一次乘法和累加(MAC)运算;专用的指数编码器(EXPencoder)能够在一个周期内完成累加器中40位数值的指数运算;单独的数据地址产生单元(DAGEN)和程序地址(PAGEN)产生单元,能够同时进行三个读操作和一个写操作。此外,比较、DSP结构可高效地实现无线通信系统中的许多功能。(3)大的存储空间。TMS320VC5409有192K字16位的存储器空间:64K字的程序空间,64K字的数据空间和64K字的I/O空间。(4)智能片内外设。TMS320VC5409还提供了3个多通道缓冲串行口McBSP(Multi-channelBufferedSerialPort)和1个增强的8位主机接口(HPI-8),方便与外部器件的数据传输。4.2matlab环境下viterbi译码仿真实验MATLAB是美国Mathworks公司开发的新一代科学计算软件;MATLAB是英文MATrixLABoratory(矩阵实验室);MATLAB是一个专门为科学计算而设语言只有通过复杂编程才能实现的数值计算和图形显示。4.2.1matlab简介MATLAB[13]是一种既可交互使用又能解释执行的计算机编程语言。所谓需像C可执行文件。MATLAB工作效率。MATLAB代码能够很方便地转化为可重用的函数或过程。MATLAB带来任何机器误差,但是需要耗费更多的计算机内存和时间。另外,利用MATLAB软件包中的Simulink等组件,能够对各种动态系统进行仿真分析,发周期。MATLAB软件是由主包和各种工具箱构成。其中,主包基本上是一个用C/C++等语言编写成的函数库。该函数库提供矩阵(或数组)的各种算法以箱则从深度和广度上大大扩展了MATLAB主包的功能和应用领域。从使用角箱通用于各个学科领域,如“符号工具箱”等。此外,市场上还有大量不断涌现的基于MATLAB的第三方软硬件产品。本次viterbi了程序代码的书写以及资源的浪费。4.2.2matlab仿真本文主要将用到matlab中的函数库主要程序是:Viterbi的编码函数:Trellis=poly2trellis(7,[133,171]);Code=convenc(m1,trellis);其中m1为输入,code为输出,poly2trellis为matlab自带的函数库,convenc为matlab自带的卷积运算函数。Viterbi译码函数:Codeout=vitdec(code,trellis,tbl,'term','hard');图4.1matlab下viterbi译码函数仿真图在图4.1中m1为输入,codeoutviterbi译码的时候,将主要将m1与codeout进行对比,看看他们的相似度是多少,是否完全相同。在进行仿真时,由上述的viterbi编码程序可以得到当m1=[1,0,1,0,1,0,0]时,code(即编码后的输出序列)为[1,1,0,1,0,0,1,0,0,0,0,0,0,0]一共14输出codeout与输入m1惊人的相识,这说明viterbi译码是一种纠错能力很强的译码方法。从上述的几段主要代码我们可以看出matlab在软件仿真上的巨大优势,直接调用函数库就可以轻松完成编码、译码的函数编写。4.3维特比译码算法的处理过程维特比译码算法的处理过程如图4.2所示。图4.2维特比译码算法的处理过程首先输入的序列是编码后的序列,得到这些序列可以是软判决输入或硬可得到恢复编码过程,得到原信息序列。接下来详细分析每个步骤的处理过程。4.3.1分支度量值的更新度量值的更新部分包括:(1)计算每一个可能路径的每一步的距离值;(2)对每个新状态,将分支度量值与旧状态的度量值相加,得到新状态的度量值;(3)选择并且保存累加值最小的那条路径;(4)每收到一个符号就进行状态转移。4.3.1.1分支度量计算Viterbi译码算法必须计算前一个状态到各个新状态的分支度量值。在当输入数据是多个比特时采用软判决输入,分支度量值用欧式距离表示。2.2dB(4比特4.1列出了三个比特量化时的数值及有效位[13]。这些数值来自维特比方程式,可以减少符号间的冲突,通过比较接收数据与期望数据的不同度可以获得接收数据的可信度。程序中采用软判决,对于编码速率为R=1/C的卷积码来说,其欧式距离为(4.1)入值,是路径指示值,为编码速率的倒数[9]。表4.1软判决数值数值意义011最可信的正值010001000最不可信的正值没有值111最不可信的负值110101100最可信的负值将式4.1展开得(4.2)不加以考虑。这样就有简化的分支度量值(4.3)省去式4.3率为1/2的卷积码,其分支度量值为(4.4)其中,与均用双极性表示,即0用+1表示,而1用-1表示。在DSPTO和T1获得输入符号到各个信号点之间的局部码距。4.3.1.2蝶形运算由大多数卷积编码器的格状图可以看出卷积码编译码是由若干个蝶形结构组成的,这样就可以采用类似于快速Fourier变换(FFT)的蝶形运算来简化运算过程。在(133,171)卷积码译码中,共有64个状态,这样就会有32个蝶形。在描述编码器状态时,我们用编码器寄存器的数值来表示,如、等。(133,171)卷积码译码的基本蝶形如图4.3所示。图4.3(133,171)卷积码基本蝶形图在信道均衡和解码中经常会使用到Viterbi算法,C54x为此提供了专门的硬件和指令。根据输入信号确定分支似然概率增加量D1/D2,放在T寄存器中,TRN(ACS)运算时,更改T寄存器中的数值就可以顺利完成每次32次的蝶形运算。(1)状态的变更:在(133,171)卷积码编码中,总共有个状态。我们可以通过MATLAB软件编程仿真来获得编码过程。%encode217.mG0=[];G1=[];input=[];output0=mod(conv(input,G0),2);outputl=mod(conv(input,G1),2);顺序改变input[]中的数值即得到所要获得的状态更改与编码输出过程。根据图4.3中蝶形的有关性质,我们只需知道前32个状态的编码过程,所以我们获得寄存器状态为S0至S31时的编码过程,这在后面的确定蝶形运算结构是必须的。更改INPUT数组中的数值,运行MATLAB卷积码程序,即得到表4.2中的编码过程[15]。表4.2(2,1,7)卷积码编码状态转移表状态S0S1S2S3S4S5S6S7S8S9S10输入0编码输出0001111011100001000111编码后状态S0S2S4S6S8S10S12S14S16S18S20输入1编码输出1110000100011110111000编码后状态S1S3S5S7S9S11S13S15S17S19S21状态S11S12S13S14S15S16S17S18S19S20S21输入0编码输出1011100001101101000100编码后状态S22S24S26S28S30S32S34S36S38S40S42输入1编码输出0100011110010010111011编码后状态S23S25S27S29S61S33S35S37S39S41S43状态S22S23S24S25S26S27S28S29S30S31输入0编码输出10111011010001001011编码后状态S44S46S48S50S52S54S56S58S60S62输入1编码输出01000100101110110100编码后状态S45S47S49S51S53S55S57S59S61S63(2)蝶形运算数据存储的顺序:是顺序的。图4.4数据存储顺序示意由图4.4可知,只要将蝶形右侧的下面数据往后加32个地址空间存储每接收到2个的数据就通过上述的32储起来。4.3.2回溯在进行蝶形运算后整个路径选择的信息就通过TRN些信息,就可以选出最佳路径。TRN中数据各位代表含义如表4.3所示[9]。表4.3TRN各位代表含义各个比特的顺序15141312111098002k-212k-2+122k-2+232k-2+3182k-2+892k-2+9A2k-2+AB2k-2+B

T2102k-2+10112k-2+11122k-2+12132k-2+13

R……

N字2k-2-12k-2-82k-2-82k-2-72k-2-72k-2-62k-2-62k-2-52k-2-5各个比特的顺序76543210042k-2+452k-2+562k-2+672k-2+71C2k-2D2k-2+DE2k-2+EF2k-2+FT2142k-2152k-2+15162k-2+16172k-2+17

RN……字2k-2-12k-2-42k-2-42k-2-32k-2-32k-2-22k-2-22k-2-12k-2-1N-1后肯定是状态S0。这样在回溯的时候,可以肯定的将初始状态定为零。1331716416比特,K=7来说各位代表的含义如表4.4所示[10]。表4.4K=7时TRN各位代表含义各个比特的顺序151413121110980032133234335TRN184094110421143字21648174918501951……2456255726582759各个比特的顺序765432100436537638739TRN11244134514461547字22052215322542355……2860296130623163为7的编码器,有64个状态,可用N-1位表示。如图4.5所示,最高有效位N-2位和最低3个有效位一起表示了状态的“位号,其余的位表示“字号”。我们可以通过下面的公式计算出相应的字值和比特值。WORD#=(STATE>3)&MASK其中,MASK=BIT#=2*STATE+[STATE>k-2]&1图4.5状态变量描述关系5系统程序设计实现5.1卷积码编码程序设计根据卷积码编码的原理编写卷积码编码程序。其中,函数的参数为信息图如图5.1所示。图5.1编码程序流程图对于(133,171)卷积码的编码,异或操作得到G0、G1,有(5.1)(5.2)比较G0、G1的运算结构,G0与G1中只有和不同。设(5.3)5.4)这里的加是模二加,有一个非常有用的性质(5.5)首先得到G,而后算出(5.6)由式5.6转化得(5.7)算出(5.8)编码程序如下:LD*frame_ptr+,16,A;OR*frame_ptr-,A;装载输入序列LD*frame_ptr+,16,B;OR*frame_ptr,B;装载输入序列XORB,2,A;XORB,3,A;XORB,6,A;XORB,5,A;STHA,*output_ptr+;保存G0XORB,5,A;XORB,1,A;STHA,*output_ptr+;保存G15.2维特比译码程序设计根据卷积码的原理编写卷积码的维特比译码程序,译码的流程图如图5.2所示。图5.2维特比译码函数流程图在度量值更新过程,首先要获得局部码距,这一部分的程序如下:LD*AR2+,16,A;A=SD(2*i)SUB*AR2,16,A,B;B=SD(2*i)-SD(2*i+1)STHB,*sp(DIFF);保存差ADD*AR2+,16,A,B;B=SD(2*i)+SD(2*i+1)STHB,*sp(SUM);保存和接着要获得各个编码的路径选择信息,采用蝶形算法来简化运算。程序如下:BFLY_DIR.macroDADST*oldm_ptr,ADSADT*oldm_ptr+%,BCMPSA,*newm_ptr+%CMPSB,*m_ptr+%.endmBFLY_REV.macroDSADT*oldm_ptr,ADADST*oldm_ptr+%,BCMPSA,*newm_ptr+%CMPSB,*m_ptr+%.endm根据确定的数据存储顺序,就可以根据对应的编码过程选择蝶形结构,完成度量值的更新,蝶形运算程序如下(以前四个蝶形为例):LD*sp(SUM),TBFLY_DIRLD*sp(DIFF),TBFLY_REVLD*sp(SUM),TBFLY_DIRLD*sp(DIFF),TBFLY_REV通过度量值的更新过程得到卷积码的路径选择信息,通过回溯读取这些信息来获得原始的信息序列。在卷积码的编码时,编码的一帧序列的最后N-1位为零,这样编码结束的最终状态为S0,所以在回溯的时候,将初状态定为S0。接下来就可以通过当前状态和存储下来的路径选择信息得到下一个状态,并获得译码输出。程序如下:SFTLA,-5,B;B=STATE>>(K-2)AND#1,B;B=B&1=MSBofSTATEADDA,1,B;BIT#=2*STATE+[STATE>k-2]&1STLMB,T;保存比特值SFTLA,-3,B;B=STATE>>3AND#3,B;B=B&MASKSTLMB,AR0;保存字值MAR*+AR2(-4)MAR*AR2+0BITT*AR2-0;ROLTCA;获得对应比特位路径转移值5.3程序测试完成各个程序函数的编写之后,需要测试程序的功能是否可以实现。5.3.1编码测试编码函数是将输入序列进行卷积码编码,而后输出。所以如果程序功能正确,输入测试序列即可得到正确编码数据。输入编码序列为intframe[FRAME_WORD_SZ]={0x0000,0xACDC,0x2345,0xBABE,0x789A};其中,有效的比特位为70个,最后的6比特数据为零。这样,调用卷积码编码函数后得到编码数据为0x0039,0x002D,0xD5C1,0x17FD,0x0DA7,0x239B,0x7DE5,0x5F56,0x6BE2,0x8996。5.3.2维特比译码测试当回溯深度为64646比特0结尾,共70比特。当

温馨提示

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

评论

0/150

提交评论