Turbo编译码的Matlab实现
3 Turbo码的产生及研究现状
Turbo码是一类新型的信道编码。Turbo码在编码领域里有三大特点,(1)使用递归系统卷积码作为编码器的编码单元;(2)使用随机交织器;(3)在译码器中使用内部信息和外部信息。
3.1 Turbo码的产生背景
1948年香农在《通信的数学理论》中提出了香农第二定理(也称信道编码定理),具体表述为:设信道容量为C,对于任何R?C的信息传输速率R,都存在长为n的分组码可使错误译码概率P(E)满足下式:
?nE(R)bP(E)?2
(3-1)
式中的指数项Eb(R)是一个在R?C下的R的正函数,并且该项只与信道的特性有关。上式说明,对于任何低于C的传输速率,可在码率不变的前提下增加分组码的长度n,使差错概率为任意小。对卷积码也有类似的界限式,其中n由码的约束长度k代替。在极限情况下n趋向无穷,要求带宽趋向无穷。由信息论的基本知识可知,信道容量
C?Blog2[1?S] Bn0 (3-2)
由于
B??limC?limBlog2(1?B??E?RSSS (3-3) )?log2e?1.44?1.44bn0Bn0n0n0由上式可知,当信噪比
Eb大于-1.6dB,信道容量C大于信息速率R,此时就可实n0现高斯白噪声信道下的无误传输。这就是带宽无限高斯白噪声信道的极限传输能力,称为香农限。
香农在导出上式时,是以随机编码论证为基础的。该界限是对随机选取编码总体上的差错概率取平均得到的。由于总体中肯定存在一些超过平均性能的码,因此这个定理保证存在一些能达到上式界限的码。
但是需要考虑的实际问题是一、编码定理并未给出构造有效码的方法;二、当要求的差错率很低时,将迫使采用非常长的码,这导致译码算法非常复杂。因此在过去的几十年内,编码领域中的研究工作主要围绕两个关键问题,即寻求不同长度下具有良好性
Turbo编译码的Matlab实现
能的码类,以及复杂程度能够接受下的能实现码的固有性能的译码算法。香农理论已经指出,增加分组码的长度或卷积码的约束长度可以提高码的纠错性能。但是由于最大似然译码的复杂度随n增加而增加,以至于物理不可实现,这样人们就试图构造出具有大的等效分组长度,性能强大,同时译码算法又不至于过于复杂的码。如乘积码、级联码、大约束长度的卷积码等都是这方面尝试,因此传统的级联码等及其译码与信道的极限之间还有着很大差距。
1993年,法国的C.Berrou 等提出了一种新的纠错码------Turbo码。Turbo码一经提出,就以其优异的性能被编码界专家认为是近几年来最令人兴奋和最具有潜力的重大发展。Turbo码与以往所有的码的不同之处在于它通过一个交织器的作用,达到接近随机编码的目的,并且使等效分组长度很大。香农指出“随机码”是一种好码,因此Turbo码也必然是一种好码。此外它所采用的迭代译码策略,使得译码复杂性大大降低。它采用两个子译码器通过交换称为边信息(或外部信息)的辅助信息,相互支持,从而提高译码性能。边信息的交换是在迭代译码的过程中实现的,前一次迭代产生的边信息经交换后将作为下一次迭代的先验信息。
3.2 Turbo码的研究现状
自从Turbo码提出以来,Turbo码很快就成为纠错编码界研究的热点。它的研究目前主要集中在以下几个方面:
1编码器的研究
目前编码器的研究着重于: ①子码的选择;②非二元Turbo码,即子码用q(q?2)元码代替二元码;③编码器结构的研究,如提出采用多子编码器结构;④为适应语音、图象等的传输,提出不等能力纠错的Turbo编码,即对信息比特和校验比特的功率分配进行优化。
2迭代译码算法的研究
目前的一些译码算法存在以下几个主要问题。①虽然由于Turbo码采用了迭代译码的思想,每个迭代单元的译码并不是非常复杂,但是要使误码率达到一定要求,迭代次数必须较多,从而使译码时延增大。如果要将Turbo码用于语音传输,时延将不可忍受;②译码复杂性随卷积码的约束长度或分组码的码字长度增加而呈指数增加。因此迭代译码算法的研究主要是在保证一定算法性能的前提下,寻找译码复杂性与约束长度无关的
Turbo编译码的Matlab实现
算法,并且简化算法,使其便于用硬件实现。同时减少时延,以能用于实时语音通信中。目前的改进集中在以下几方面:
(1)通过减少非线性运算减少算法计算量,如提出对数域的MAP算法,使得性能优异的MAP算法便于硬件实现;
(2)改进SOVA算法,尤其是减少SOVA算法在短交织长度下和MAP算法的性能差距,使得短交织长度下SOVA算法能以可接受的性能取代MAP算法;
(3)采用对偶码的概念译码,避免译码复杂性与约束长度或分组码码字长度成指数关系。
(4)改进迭代过程中信息传递的方式,提出了并发(concurrent)算法、双向Viterbi译码方法等,从而加速译码过程;
(5)寻找判决迭代收敛的规则,及时结束译码迭代; (6)将神经网络计算器用于Turbo码译码。
Turbo编译码的Matlab实现
4 Turbo码编码
由于编码方式的不同将直接影响译码的方式、方法,所以,在本章里,将详细介绍有关Turbo码编码器的结构及具体编码方法的算法。
Turbo码的基本思想是利用短码构造等效长度意义上的长码。一个典型的Turbo码编码器如图4-1所示。
图4-1 Turbo码编码器基本结构
编码是通过两个相同的编码器和一个交织器组成。第一个编码器直接对信源信息序列进行编码,第二个编码器则对经过交织器后的信息序列进行编码,交织器对输入的原信息序列进行随机交织后输出。在编码时,为使编码器初始状态置于全零状态,需要在信息序列之后加m个比特尾信息(tail bits),而要使两个编码器同步归零,必须设计合适的交织器。(实际上,在本文中后边对SOVA具体实现时,使得第一个编码器最终的状态归零了,而第二个未归零,但仍可以用类似的方法译码)。
4.1 编码器各部分介绍
1成员编码器(component encoder)
成员编码器(component encoder)也叫子编码器。一般一个Turbo码编码器由两个(可以多个)子编码器C1和C2通过交织器的作用并行级联组成.子编码器的结构可以不同,但一般取相同结构,以简化译码.子码可以是卷积码或者是分组码。
2交织器(interleaver)
Turbo码中交织器的主要作用是减少校验比特间的相关性, 进而在迭代译码过程中降低误比特。其基本的原则是: 通过增加交织器的长度, 可使译码性能得到提高交织器应该使输入序列尽能地随机化, 从而避免编码生成码字的信息序列交织后, 编码仍旧生成
Turbo编译码的Matlab实现
低重码字, 导致Turbo码的自由距离减少。
交织器一般有这样几种:分块交织、伪随机交织以及两者结合的交织方式。 分块交织分为两种:Ⅰ型,采用行顺序写入、列顺序读出方式;Ⅱ型写入顺序与Ⅰ型交织器的写入顺序一致,但读出顺序是以列的倒序来完成的。即从最后一列向第一列读出,而每一列则是从最后一行向第一行的顺序来读出。
伪随机交织器。本文中实现的算法就是采用的这种方式,所以在这里详细的介绍一下。伪随机交织器反映的实际上是一种映射关系。其工作过程是:对于长为n的信息序列,首先标记每个比特的位置,然后生成n个[0,1]之间的随机数,按产生的顺序排列成序列X,每个随机数都对应于信息序列中的信息比特。然后把X中元素按一定的规则重新排列得到新的序列Y,并按Y中元素的顺序读出相应的信息比特,这样就完成了交织。比如伪随机序列[0.7621 0.4565 0.0185 0.8214 0.4447],它对应信息序列X为[d1 d2
d3 d4 d5]。将随机序列按升序排列得到[0.0185 0.4447 0.4565 0.7621 0.8214],则现在对应的信息序列Y为[d3 d5 d2 d1 d4]。这样,就完成了交织。
4.2 编码原理及算法
1编码原理
如果一个码率为1/n的卷积码的生成矩阵为:
G(D)?(g0(D)g1(D)....gn?1(D)) (4-1)
则其对应的递归系统卷积码的生成矩阵为:
Gsys(D)?(1g1(D)gn?1(D)....) (4-2) g0(D)g0(D)1?D?D2?D3)(也可以表示为g=[1 1 0 1;1 1 1 1])的如以生成矩阵为Gsys(D)?(11?D?D3递归系统卷积码作为子码,它对应的Turbo码结构如图4-2所示。