新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 卷积编译码盘的设计与实现

卷积编译码盘的设计与实现

作者:时间:2006-05-07来源:网络收藏

摘要:本文简要介绍了(2,1,3)卷积码的编译码设计与实现、编码电路可以用FPGA实现。译码采用维特比译码算法,应用高速器TMS320C50,实时完成高速处理任务,核心算法用软件实现。通过对算法进行分解优化,译码速度快。通过加载不同的译码软件可以在同一硬件平台上实现多种信道编译码算法。在工程中具有较高的应用价值和发展远景。

本文引用地址:http://www.eepw.com.cn/article/242241.htm

关键词:维特比译码 卷积码

引言

对于一般的线性分组码(如循环码、BCH码等),它们的共同特点是:一个码字的监督单元仅与本码组的k位信息码元有关,与其它码字的码元无关。而卷积码的特点在于本组的码元不仅与当有输入的k个信息有关,而且还与前面m个时刻输入的信息有关。卷积码的纠错能力随着m的增加而增大,而差错率随着m的增加而指数下降。在编码效率与设备复杂性相同的前提下,卷积码的性能优于分组码。随着大规模集成电路技术的发展,采用维特比译码的卷积编码技术已成了广泛采用的纠错方案。在本系统中,输入卷积编码器的信息序列是32Kbit/s的比特流,经(2,1,3)卷积编码器成为64Kbit/s的比特流,再经扩频、调制、无线信道、解调、解扩,由卷积译码器经译码判决还原出32Kbit/s的信息序列。实践证明,在该系统中引入卷积编译码,大大提高了数据传输的质量。

(2,1,3)卷积码最佳编码器

编码方案

实现(2,1,3)卷积编码主要有两种方法,其生成多项式分别为:

g(1)=(1 0 0 0)

g(2)=(1 1 0 1)

和g(1)=91 0 1 1)

g(1)=(1 1 1 1)

根据梅森(Mason)增益公式分别计算其生成函数:

增益公式

其中:

是修正后状态图中环路增益之和,是两个不相连环路的环路增益乘积在所有不相连环路对上求和,是三个不相连环路的环路增益乘积在所有不相交的三重上求和。

Δi恰似Δ那样定义,但它只是和第i个前向路不相连的部分,即当计算Δi时,从图中去掉第I个前向路径上的所有状态以及与这些状态相连的所有分支。

计算出两者的生成函数分别为

其中X是输出符号中1的个数,Y是输入比特的权重,Z是分支输入比特的持续时间(每一分支在任何时刻都为1。从生成函数的第一项X的幂次可以看出,第一种编码方案(系统码)的自由距离d=4。第二种编码方案(最佳码)的自由距离d=6。因此,我们选择第二种编码方案,它的自由距离最大。

(2,1,3)卷积码编码器的实现

根据前面的分析可知,(2,1,3)最佳卷积编码器的生成多项式为:g(1)=(1 0 1 1)

g(2)=(1 1 1 1)

相应的编码电路示于图1.

编码器可完全由硬件电路实现,这样编码延时可达到最小。编码电路只需要m=3级移位寄存器,n=2个模2加法器以及用于编码器串行输出的多路器就可以了。

卷积译码器的设计

卷积码的译码方式有三种:维特比译码、序列译码和门限译码。维特比译码具有最佳性能,但硬件实现复杂;门限译码(亦称大数逻辑译码)性能最差,但硬件简单,序列译码在硬件和性能方面介于维特比译码和门限译码之间。考虑到工程的需要和实际情况,需选择造价低、性能好、结构好、体积小、易于更新换代的方法和设计产品。因此选用最佳卷积码译码方式——维特比译码。

译码器的实现

考虑到维特比译码算法的硬件实现的复杂性和本系统要求对信号进行处理的实时性,我们选用T公司芯片TMS320C50作为译码器的CPU以实现软件译码。TMS320C50是目前世界上速率最快的芯片之一,其特点是运算速率快、片内资源丰富、体积小、开发容易。实践证明,对于约束长度较短的(2,1,3)卷积码,DSP实现是最佳方案,一片单周期指令为35ns的芯片TMS320C50PQ57,可以同时完成两路维特比译码,而且外部电路简单,成本低。译码器框图示于图2.

TMS320C50具有两路串口,每一路串口又分为接收发送两部分,且这两个部分可以并行工作,时序上可以被外部提供的并行工作,时序上可以被外部提供的帧同步脉冲来控制。我们实现的卷积译码器就是利用它的两路串口来工作的,连续的数据流经串口来工作的。连续的数据流经串口接收,放到相应的内存单元中,在片内经过译码处理,现将译码判决的结果从串口的发送部分送到下一级。

译码算法

算法分解

众所周知,维特比算法的核心思想是由状态图或删格图确定幸存路径,如果在某一节点上发展某条路径已不可能获得最大似然函数,那么就放弃这条路径,然后在剩余的幸存路径上重新选择具有最小汉的明距的路径。将此算法进行分解即下面操作的重复。

如图3所示,在某一时间单元,对于状态Sn(n=0,1,2,…7)有两个“前一状态”,即编码器可能从上一时间单元的状态Sn1或状态Sn2(n1,n2=0,1,2…,7;n1≠n2)进入状态Sn。将Sn1-Sn的n比特编码输出与当前时间单元的n比特译码输入相比较,不同的比特数与状态Sn1的部分路径度量相加,便得到了从状态Sn1进入状态Sn这条路径的部分路径度量;同查也对状态Sn2进行操作。比较新产生的两个部分路径度量,取度量较小的那条路径为状态Sn的幸存路径。这一操作依次进行下去,就完成了维特比算法的主步骤。

算法优化

上述分解的实现是整个程序的关键,它的运行效率直接关系到整个译码程序的运行速度,因此必须进行优化,总体上以内存空间换取运行速度。之所以把以速度作为程序实现上的第一指标,是因为译码器需要实时地完成64Kbps比特流的译码,实时性是译码器的重要指标。我们采用下述手段来进行优化:

从维特比算法步骤2的实现上可以看出,程序需要保留两张表,一张(称为表1)存放前一时间单元各个幸存路径及其度量,另一张表(称为表2)用来存放当前时间单元新产生的各个幸存路径及其度量。在每一个时间单元译码完毕,进入下一个时间单元时,都需要将表2的内容拷贝到表1中,这是一个很大的开销,而且的确是一个可以节省的开销。在程序中,是这样来去除这个开销的:在时间单元X,表1存放时间单元x-1的幸存路径及其度量,表2存放时间单元x新产生的幸存路径及其度量;进入到时间单元x+1,表1用来存放新产生的幸存路径及其度量;再进入到时间单元x+2,表2用来存放新产生的幸存路径及其度量;……。这样一来,就可以免去两个表之间的拷贝,不过这时需要有两段程序。那么,不过这时需要有两段程序。那么,我们在处理前一段数据时,把译码产生的幸存路径有其度量存放在表1中;处理前一段数据时,则把幸存路径及其度量存放往表2中存放。就这样交替进行下去。

两路译码程序

本系统实现的是两路译码,要同时进行两路译码,实际上就是在C50上运行一个两任务的程序,最重要的是译码核心程序即要实现共享,又要尽可能做到两路数据的独立,这种设计是符合多任务原理的,两路译码程序流程图如图4所示。

结语

我们研制出的这种性能是最佳的(2,1,3)卷积编译码器,编码采用维特比算法,算法核心由软件实现,采用高速DSP作为CPU。实践证明,在系统中引入卷积编译码,大大提高了数据传输的质量。



评论


相关推荐

技术专区

关闭