Turbo码编码与译码方法一、前言:Turbo码自1993年被提出以来,就以其优异的纠错性能而备受关注,并被主要通信标准所采纳。
Turbo码是用短码构造等效意义的长码,以达到长码的纠错性能而减少解码复杂度。
在强噪声低洗澡比的条件下,如Eb /N=0.7dB,采用编码效率R=1/2的Turbo码,经过18次迭代解码后,仍然具有极低的误码率。
Turbo码得这一特性对于强噪声环境下数字通信与数字信号传输具有重要的应用价值。
Turbo码的发现,标志着信道编码理论与技术的研究进入了一个崭新的阶段,对现代编码理论的发展起着重要的作用。
二、Turbo码的编码原理:Turbo码编码器由两个递归系统卷积吗编码器(RSC1和RSC2)通过一个交织器并行级联而成,编码后经过删除或复用,产生不同码率的码字,进入传输信道。
Turbo码编码器结构框图如图1所示,信息序列d={d1,d2,…dN}经过N位交织器,形成一个新序列d‘={d1’,d2’,…,dN’}(长度与内容没变,但比特位置经过重新排列)。
d和d‘分别传送到两个分量码编码器(RSC1和RSC2)。
一般情况下,这两个分量码编码器结构相同,生成序列X1p和X2p。
为了提高误码率,序列X1p和X2p需要经过删除器,采用删除技术从这两个校验序列中周期地删除一些校验位,形成校验位序列X P与编码序列u(为方便表述,也用X S表示)经过复用,生成Turbo码序列。
例如,假如图中两个分量编码器的码率均是1/2,为了得到1/2码率的Turbo码,可以采用这样的删除矩阵:P=[10,01],即删除来自RSC1的校验序列X1p的偶数位置比特,与来自RSC2的校验序列X2p的奇数位置比特。
S图1交织器在Turbo码中起关键作用。
表面上看,它仅仅是将信息序列中的N个比特的位置进行随机置换,实际上,它很大程度上影响了Turbo码的性能。
通过随机交织,使得编码序列在长为2N和3N(不使用删除)比特的范围内具有记忆性,从而有简单的短码得到近似长码。
当交织器充分大时,Turbo码就具有近似于随机长码的特性。
三、Turbo码的译码原理:Turbo 码译码器采用反馈结构,以迭代方式译码。
与Turbo 编码器的两个分量码相对应,译码端应该有两个分量译码器它的结构如图2.1所示。
() ()()()译码输出对于图2 Turbo 码编码器,接收到得数据流中包含三部分内容:信息码 ,编码器1产生的校验码(经删余)和编码器2产生的校验码(经删余)。
Turbo 译码器在译码前首先要进行数据的分离——与发送端复合器逆向功能的分接处理,将数据流还原成,和3路信息。
发送端子编码器1,2的校验码由于删余并未全部传送过来,、只是、的部分信息,分接后的校验序列的部分比特位将没有数据,这样就必须根据删余的规律对接收的校验序列进行内插,在被删除的数据位上补以中间量(如0),以保证序列的完整性。
四、Turbo 的译码算法:Turbo 码有两类译码算法: 第一类就是MAP 算法以及基于MAP 算法的修正算法LOG-MAP 算法。
另一类就是软输出的维特比算法, 也就是SOVA 算法。
下边对两种译码算法进行介绍: 1、 LOG-MAP 译码算法:LOG-MAP 是改进的MAP(最大后验概率)算法,它在对数域进行计算,可以将MAP 算法中大量的乘法运算化简为加法运算,从而降低计算量。
除此之外,它的基本原理与经典MAP 算法相同。
MAP 算法由Bahl 等人于1974年提出,因此又称为BCJR 算法。
与Viterbi 算法不同,它估计出最大似然比特,而前者产生最大似然序列。
也就是说Viterbi 算法提供整体最优解,而MAP 算法则提供个体最优解。
分接/内插 DEC1 交织 交织 解交织判决 DEC2 解交织前面已经提到,卷积码编码过程实际就是一个有限状态机的状态转移过程。
设t 时刻编码器从状态S t-1转移到状态S t ,对应的输入为u t =k ,k ∈{0,1},输出校验位为x t , 它与u t 一起传输到接收端,译码器的任务就是根据接收信号y t 来尽可能恢复u t 。
图3.23示意了这一过程。
由于u t 与状态转移是对应的,因此,有∑=====-)|,,'()|(111N t t t N t y k u m S m S p y k u p (1)式中N y 1表示接收序列[y 1….y N ]。
因此,只要得到所有的)|,'(11N t t y m S m S p ==- (2)就可以通过对其中那些对应于k u t =的状态转移概率求和来得到信息比特的后验概率。
由贝叶斯定理,)(),,'()|,'(11111N N t t Nt t y p y m S m S p y m S m S p =====--(3)上式右侧分子项联合概率可作进一步化简:),,'|(),,'(),,'(1111111tt t N t t t t N t t y m S m S y p y m s m S p y m S m S p =======-+--)|(),,'(111m S y p y m S m S p t N t t t t ====+-)|(),'|,(),'(1111111m S y p y m S y m S p y m S p t N t t t t t t t =====+----)|()'|,(),'(11111m S y p m S y m S p y m S p t N t t t t t t =====+---(4)以上的化简过程中应用了马尔可夫信源的性质,即t 时刻以后的状态只与S t 及以后的输入有关,而与t 时刻之前的状态和输入无关,也就是说得到了t 时刻的状态,之后的状态转移就不再依赖于t y 1以及t-1时刻的状态。
(4)式分为三部分,可以分别定义如下,令:),()(1t t t y m S p m ==α图3.23 编码网格中一次状态转移)|()(1m S y p m t N t t ==+β)'|,(),'(1m S y m S p m m t t t t ===-γ则联合概率可写为:)(),'()'(),,'(111m m m m y m S m S p t t t N t t βγα⋅⋅===-- (5)其中,)(m t α和)(m t β可以用递归方法求出:∑===-'11),,'()(m t t t t y m S m S p m α∑----===='111111),'|,(),'(m t t t t t t y m S y m S p y m S p∑⋅=-'1),'()'(m t t m m m γα(6)∑===++''11)|,''()(m t N t t t m S y m S p m β∑+++++=====''11211),'',|()|,''(m t t t N t t t t y m S m S y p m S y m S p∑++⋅=''11)''()'',(m t t m m m βγ(7)通常,编码器的初始状态已知,对于编码器1,帧结束时网络终止,因此其终了状态了也是已知的,因此有()⎩⎨⎧==其它0010i i m m a 以及()⎩⎨⎧==其它001i i N m m β对于编码器2,由于网格不终止,可以认为它的终了状态是平均分布的。
另外,有),'|()'|(),'(11m S m S y p m S m S p m m t t t t t t =====--γ)),'(|()),'((m m x y p m m u p t t t = (8)式中),'(m m u t 为信息符号,),'(m m x t 为对应于状态转移),'(m m 的编码输出符号。
上式中)(t u p 为信息符号的先验概率,而条件概率)|(t t x y p 可由如前所述的信道模型得到。
2、 SOVA 译码算法:SOVA 算法就是软输出维特比算法,是在 1989年提出的一种改进的维特比算法, 它的特点就是找到一条可能性序列的同时,还能产生这条路径上码元的可靠性的信息,也就是我们需要的软信息, 从而使得每一个码元序列的差错概率达到最小。
相比于MAP类算法,计算更加的简单,计算量大幅度的减少。
下面分析 SOVA 算法。
状态数是, v 是编码寄存器的个数, 而每一节点有两条分支, 以为延时进行一个比特的判决,在k时刻对于状态sk ,维特比选择一条幸存路径, 这是通过计算路径最小距离而得到的。
同时,状态 sk 还对应着一条待选路径。
对于幸存路径我们将其度量标为 M1, 相应的对于待选路径的度量我们标为 M2,于是幸存路径选错的概率为(1)其中,表示的是传输不可信度,于是在 m 个路径1(幸存路径) 和路径2(待选路径)的信息比特不等的位置处, 其错误概率为, 我们可以用式子( 23) 表示(2)其中表示的是已存储路径 1 的错误概率, j = j 1,。
则对数似然比可写为(3)其中。
结合式子( 1)、 ( 2)、 ( 3) , 我们可以得到(4)a 是为了防止信噪比的增加而产生溢出。
a =, d 是码间的自由距离。
上式可以近似的写为(5)a 是为了防止信噪比的增加而产生溢出。
a = d 是码间的自由距离。
上式可以近似的写为五、Turbo 的画出编译码程序流程图:六、仿真与分析:采用log-map 算法和sova 算法对turbo 码的性能进行了仿真,其结果如下图所示。
从仿真过程看, log-map 算法比sova 算法用时较长,但其误码率较低,这说明log-map 算法比sova 算法性能更好,而sova 算法延时小,更容易实现。
初始化变量,错误帧数为0随机产生信息序列,进行随机交织对信息序列Turbo 编码Llog-MAP 算法译码SOVA 算法译码 加入高斯白噪声产生译码对译码输入复用信息序列删除校验序列,调整误码率为R计算误码率计算误码率结束Turbo码的log map和sova译码误码率信噪比矩阵为g=[111,101],帧长为400比特,最大迭代次数为5,rate为0.5的仿真图像。
在相同的帧长、生成矩阵和编码速率下,不论对哪种译码算法来说,迭代次数越大,性能越好,误比特率及误帧率越低。