《无线通信原理设计课程设计信道编码Turbo码(附源程序).doc》由会员分享,可在线阅读,更多相关《无线通信原理设计课程设计信道编码Turbo码(附源程序).doc(38页珍藏版)》请在三一办公上搜索。
1、 无线通信原理设计 Turbo码编译原理(报告)源程序代码,联系153893706设计题目: 信道编码-Turbo码 学生姓名 学生学号 专业班级 通信工程1班 指导老师 2012年5月1日目录:引言.1一、 3G通信系统的特点.21.13G移动通信系统的特点.21.2 Turbo码在第三代移动通信中的中的应用.3二、 Turbo码的分类3三、 Turbo码编译码原理.3四、Turbo码的各种译码算法及比较.54.1MAP算法54.2Max-Log-MAP与Log-MAP算法.114.3 Log-MAP.134.4 SOVA算法.144.5 各种算法的比较.174.6比较结论.20五、Turb
2、o码仿真主调用程序代码.20六、运行经过&结果显示.326.1初始化界面.336.2计算等待.336.3运行结果显示.336.4参数重置&关闭窗口.34七、总结.35参考文献.36引言未来的无线通信系统必须能为用户提供高速率、高质量、实时的多媒体业务,然而无线信道,特别是移动无线信道是典型的随机时变信道,其在时间域、频率域以及空间角域均存在着随机性的扩散,这些扩散将造成接收信号在相对应的频率域、时间域以及空间域产生严重的衰落现象,衰落将严重地恶化无线通信系统的传输可靠性及频谱效率。为了实现高效、可靠的无线数据传输,两种手段是必要的:利用各种分集对抗衰落,利用信道编码实现差错控制。频率分集、时间
3、分集、空间分集是主要的分集手段,充分利用这些分集方法将衰落信道尽可能地改造为AWGN信道,然后利用信道编码进行检错和纠错。一般的信道编译码方案,难以在无线通信中以较低的信噪比达到数据业务的服务质量(QoS)(例如 一般要求误比特率 BER),即使在以前的无线移动通信系统中通常采用的码与卷积码串行级联的信道编码方案,与香农(C.E. Shannon)界有较大的差距,直到1993年出现的Turbo码的性能与香农界的差距仅为0.5dB。他们发明的Turbo码的创新之处在于:用两个递归系统卷积成员码并行级联编码,这两个系统递归卷积成员码之间用一个伪随机交织器相连接,并且采用软入软出(SISO, Sof
4、t-In-Soft-Out)的迭代译码算法。从此,Turbo码就成为编码界的一个研究热点。S. Ten Brink在2得到的Turbo码的性能与香农界的差距仅为0.1dB。一、3G移动通信系统的特点&Turbo码的应用1.13G移动通信系统的特点第三代移动通信系统的数据速率可从几kbps到2 Mbps;高速移动时为144 kbps;慢速移动时为384 kbps;静止时为2 Mbps。多媒体化:提供高质量的多媒体业务,如话音、可变速率数据、活动视频和高清晰图像等多种业务,实现多种信息一体化。全球性:公用频段, 全球漫游, 大市场。 在设计上具有高度的通用性,该系统中的业务以及它与固定网之间的业务
5、可以兼容,拥有足够的系统容量和强大的多种用户管理能力,能提供全球漫游。是一个覆盖全球的、具有高度智能和个人服务特色的移动通信系统。综合化:多环境、灵活性,能把现存的寻呼、无绳、蜂窝(宏蜂窝、微蜂窝、微微蜂窝)、卫星移动等通信系统综合在统一的系统中(具有从小于50m的微微小区到大于500km的卫星小区) ,与不同网络互通,提供无缝漫游和业务一致性。网络终端具有多样性。平滑过渡和演进:与第二代系统的共存和互通,开放结构,易于引入新技术。智能化:主要表现在优化网络结构方面(引入智能网概念)和收发信机的软件无线电化。个人化:用户可用唯一个人电信号码(PTN)在任何终端上获取所需要的电信业务,这就超越了
6、传统的终端移动性,真正实现个人移动性目前,Turbo码的理论和应用研究仍在进行,这些研究将主要集中在如下几个方面: 1)最优分量码与交织器的联合设计。 2)低复杂性译码算法。 3)译码迭代过程的优化,收敛性以及迭代停止准则的设计。 4)联合信道估计/多用户检测/均衡和译码算法。 5)Turbo码与高阶调制技术的结合。 6)Turbo编译码器的硬件实现。7)Turbo码在无线通信,移动通信以及多媒体通信中的应用, 特别是在移动通信网络,IMT-2000及加密系统中的应用等等。1.2 Turbo码在第三代移动通信中的中的应用WCDMA和cdma2000都同时采用了卷积码和并行级联卷积Turbo码(
7、PCCC)作为纠错编码。Turbo码主要用于对时延要求不高的高速数据业务。并行级联卷积码Turbo码的对应的两个相同的递归系统卷积成员码的生成多项式如34中所规定的, 。在cdma2000-1XHDR中, 串行级联卷积Turbo码(SCCC)作为信道编码方案,其内码是递归系统卷积码,生成多项式是, ,外码是非递归卷积码,生成多项式是, 。由于移动环境的复杂性,为了保证数据业务的QoS, WCDMA和cdma2000都引入了重传机制,如HSDPA中的利用基于RCPT(Rate Compatible Punctured Turbo Code)的HARQ解决方案。三、 Turbo码的分类现在广义的T
8、urbo码是指采用级联或乘积编码方法并利用迭代译码方法的编译码方案。迭代译码的基本思想是将一个的复杂的长的译码步骤分解为多个相对简单的迭代译码步骤而且在迭代译码步骤之间信息概率的转移或者是软信息的传递确保几乎没有信息损失。根据其成员码和级联的方法的不同,Turbo码的分类 P_SCR并行级联卷积Turbo码(Parallel Serial Concatenated Convolutional code) SCC串行级联卷积Turbo码(Serial Concatenated Convolutional code) HCC混合级联卷积Turbo码(Hybrid Concatenated Conv
9、olutional code) SCC分组码卷积码串行级联编码 (Serial Concatenated Convolutional and Block code) 分组码Turbo码 通用的实现迭代译码 的“SISO”译码模块的输入包括信道的软信息和先验信息,这种“SISO”译码模块的输出信息可以分解为三部分: 信道的软信息、先验信息和外部信息(又称边信息),而外部信息可以作为下一次迭代译码的先验信息。各种迭代译码算法的主要差别就在于输出软信息的计算,实际上也就是外部信息的度量。并行级联卷积码的软入软出(SISO)迭代译码算法有: MAP (Maximum A Posteriori最大后验概
10、率, 基于网格图) LOG-MAP MAX-LOG-MAP SOVA (Soft-Output-Viterbi-Algorithm)其中对于卷积级联Turbo码中研究的最多的是并行级联卷积Turbo码,其次是串行级联卷积Turbo码;在分组码Turbo码中,Turbo乘积码(Turbo Product Code)和LDPC码(Low-Density Parity-Check codes)是研究较多的两种。四、 Turbo码编译码原理Turbo码编码器是由两个或两个以上的子编码器(又称组成编码器)并行连接形成的,其中的子编码器最开始是一种递归系统卷积码(RSC)。两个码率均为R=1/2的RSC编
11、码器通过交织器(Interleaver)分隔开,分别对输入的数据并行处理,如图3(a)所示。这种编码器属于系统编码器,因为编码器1#的上面一部分输出就是输入的数据(与之对应的编码器2#的输出被取消)。图中,若Turbo码未进行收缩(Puncturing, 即通过MUX多路选择器有选择地删除校验输出位),则总的码率为r=1/3。由于有交织器,进入下面那个编码器的数据与输入数据的顺序不同,因此,Turbo码的最优(最大似然)译码相当复杂,是不实用的。然而,文3中提出的次最优(Suboptimal)迭代译码算法大大降低了译码的复杂性,而且取得了好的性能。其译码的思想是:将整个译码问题分成更小的问题对
12、其中的每个码进行译码,获得局部最优解,并以迭代(Iterative)的方式共享信息。译码器以后验比特概率(APP, A posteriori bit probabilities)的形式产生软输出信息。Turbo码译码器的结构如图1(b)所示。图中,译码器1接收数据信息,译码输出软判决信息,经交织后,将此信息送至译码器2。译码器2则将输出的软判决信息反馈给译码器1,作为下一次迭代的先验信息,同时,译码器2输出硬比特判决结果。就这样,迭代译码继续进行下去,直到获得所需要的性能为止。一般,迭代5-10次即可得到很好的结果。然而,随着迭代的进行,后一次迭代产生的附加编码增益比前一次要小,以至达到一个极
13、限,因此,并不是迭代次数越多性能就会有相应多的改善。Turbo译码一般使用软判决译码方法,软比特判决一般用后验对数似然比(LLR)的形式表示:Li = log在输入端接收先验信息、在输出端产生后验信息的译码算法称为软输入软输出(SISO, Soft-input and soft-output)译码算法。Viterbi算法和MAP算法经过改造可以成为SISO算法。设有一个码率为1/2、由RSC码构成的SISO译码器,它接收3个输入:系统通过噪声信道接收到的系统比特xi (未编码)、通过噪声信道接收到的校验输入比特yi和接收比特的先验信息La(i) (来自于另一个译码器的输出),产生LLR输出Li
14、。对于二元相移键控(BPSK)形式的调制,其输入输出之间的关系为:y = a(2x-1) + n式中,a为衰落幅度,(2x-1)是BPSK已调码元符号,Es是每个码元符号的能量(若码率为r,则它与每比特的能量符号Eb的关系是:Es = r Eb),n为零均值、方差= N0/2的Gaussian随机变量。若a为常数,则为加性白高斯噪声(AWGN)信道。否则,称为慢衰落信道,不同的衰落类型a有不同的分布,常见的是Rayleigh分布和Rician分布。上式有另一种更为方便的表示形式:y = a(2x-1) + n式中,噪声n的方差成为 = N0/2Es利用此信道模型在SISO译码器输出端的对数似然
15、输出为:Li = + La (i) + Le (i) 式中,xi为通过噪声信道接收到的未编码系统比特;La(i)为先验信息,它来自于另一个译码器;Le(i)为外部信息,它表示当前译码得到的“新息(new information)”。对于第一次迭代译码,第一个译码器没有先验信息,即La1(i) = 0于是,得到:Li1 = + Le1(i)对于第二个译码器,第一次译码的先验信息La2(i)为来自于第一个译码器的外部信息Le1(i),因此有Li2 = + Le1(i) + Le2(i)对于第二次迭代,Le2(i)又作为第一个译码器的先验信息,就这样进行迭代循环。由于开始迭代时的外部信息是统计独立的
16、,因此,迭代次数增加,增益也增大。但是,随着迭代次数的增加,两个译码器之间传递的信息之间的相关性也增加,从而,增益的增加将越来越小。迭代的软输出判决为与两个外部信息之和。硬判决输出则根据门限值进行比较,对于BPSK调制,门限值取为0,硬判决比较输出规则为:Li 0,则输出1;Li 0,则输出0。这样,就可以得到译码结果。四、Turbo码的各种译码算法及比较Turbo码有一重要特点是其译码较为复杂,比常规的卷积码要复杂的多,这种复杂不仅在于其译码要采用迭代的过程,而且采用的算法本身也比较复杂。这些算法的关键是不但要能够对每比特进行译码,而且还要伴随着译码给出每比特译出的可靠性信息,有了这些信息,
17、迭代才能进行下去。用于Turbo码译码的具体算法有:MAP(Maximum A Posterori)、Max-Log-MAP、Log-MAP和SOVA(Soft Output Viterbi Algorithm)算法。MAP算法是1974年被用于卷积码的译码,但用作Turbo码的译码还是要做一些修改;Max-Log-MAP与Log-MAP是根据MAP算法在运算量上做了重大改进,虽然性能有些下降,但使得Turbo码的译码复杂度大大的降低了,更加适合于实际系统的运用;Viterbi算法并不适合Turbo码的译码,原因就是没有每比特译出的可靠性信息输出,修改后的具有软信息输出的SOVA算法,就正好适
18、合了Turbo码的译码。这些算法在复杂度上和性能上具有一定的差异,系统地了解这些算法的原理是对Turbo码研究的基础,同时对这些算法的复杂度和性能的比较研究也将有助于Turbo的应用研究。4.1MAP算法MAP算法最初是用来估计无记忆噪声下的马尔可夫过程的,它是一种最优的算法。Bahl等人于1974年把它用于线性分组码和卷积码的译码中,在用于卷积码的译码时,对于给定接收序列,它不像Viterbi算法那样以栅格路径上的比特组错误最少为目的,而是以译码出来的符号的错误最少为目的。即, (1.1) 不过在大多情况下,它和Viterbi算法的作用是一致的。由于在卷积码的译码中,MAP算法要考虑栅格图中
19、的所有可能路径,这样运算量就非常大,实际系统中很少用到。这样虽然MAP算法早在1974年就被提出,但一直未被得到充分利用,只有到了1993年Turbo码被提出来,MAP算法被用于Turbo码的译码之后,这种算法才得到广泛的应用。MAP算法不仅能译出序列的比特值,在译码的同时还能输出关于每比特译出的可靠性信息。这种特点正好符合了Turbo码的迭代译码特性,所以才被用于Turbo码的译码中。下面我们来看看MAP算法是如何用于二进制Turbo码的译码的。MAP算法是要根据接收到的序列,找出每信息比特是“”(1)或“”(0)的概率,这等同于计算序列下的对数似然比值(LLR),如式1.2, (1.2)在
20、栅格图中假设前一状态和当前状态,输入比特引起的状态转移,根据贝叶斯(Bayes)准则,可由式1.2得式1.3, (1.3)上式中表示所有由引起状态转移的集合;同样表示由引起的状态转移的集合。接收序列可以被分成三部分、和,分别表示时刻之前接收码字序列、当前接收码字和之后接收码字序列。所以, (1.4)利用贝叶斯公式可得式1.5, (1.5)式1.5中用了式1.6、1.7、1.8的定义, (1.6)表示接收序列是,时刻状态是的概率,我们称之为前向概率。 (1.7)表示时刻状态为且之后接收序列是的概率,我们称之为后向概率。 (1.8)表示由给定状态转移到并且此时接收码字为的状态转移概率。因此计算LL
21、R的式1.3可被分成前向概率转、状态转移概率和后向概率三部分,如式1.9所示, (1.9)可以看出,用MAP译码算法译接收序列的关键是要计算出和各时刻有关的所有的、,还有所有可能的状态转移的概率。、的计算仍旧非常复杂,在下面的推导中我们可以看到、的计算可以用递规的方法。的计算根据的定义,有式1.10成立, (1.10)“”表示所有的状态。假设信道为无记忆信道,则的概率只和前一状态有关,而和无关。并利用贝叶斯公式,有式1.11成立, (1.11)由此看出可由前向递归计算得出。递归计算存在初始化的问题,初始状态由式1.12给出, (1.12)的计算类似的计算推导,后向概率也可以由递归计算得出,不过
22、这次是后向递归, (1.13)的初始状态由式1.14给出, (1.14)的计算计算可根据当前接收码字和先验信息(a-priori)计算得出。设在编码时刻输入信息比特,编码状态由转移到,并得到码字为,经信道传输后接收到,则 (1.15)概率直接由引起状态转移的输入比特的先验概率决定。定义的先验概率对数似然比, (1.16)当,则 (1.17) (1.18)当时,则 (1.19)设,则 (1.20)比特的先验信息,一般从上一次译码输出信息中获得的;在第一次译码时,由于没有什么信息可以获得,只有先假设为“”(1)或“”(0)的概率相同,即。设信道噪声为高斯白噪声,方差为,所要传输的信息比特的平均能量
23、是,编码速率为R (编码后每比特的平均能量为),则可由式1.21计算, (1.21)n表示一个码字中信息位与校验位加在一起所有比特的数量。关于和的递归计算及其与的关系,可由图1.1更直观的看出来。这是一个有4种状态的编码,图中的加粗线是在计算中所需要考虑的栅格路径。图4.1 递归计算和的示意图用于迭代的MAP算法正如上章中看到,在Turbo码的译码迭代过程中,每个SISO译码模块输出的信息中一定要有一部分作为下次的先验信息输入,所以要从式1.9计算出分离出所需要的信息。如式1.22我们把它分成三部分, (1.22)其中为信道可靠度(置信度)。在双边带功率谱密度是的加性高斯白噪声信道下, (1.
24、23)被称为先验信息。接收到, (1.24)其中,是离散的加性高斯白噪声。被称为的外在(extrinsic)信息。 (1.25)其中, (1.26)由此看来所得到的后验概率被分成三部分:先验信息、系统比特信息和外在信息:1、 先验信息,如上文所述,一般由前一次迭代译码输出获得,第一次迭代时,由于无先验信息可用,为零。2、 系统比特信息是从信道中直接获得的关于系统比特的信息,当系统的信噪比()比较高时,在中占用份量就越大,换句话说就是直接从信道中获得的信息就越可靠;反之,就越不可靠。3、 可以被理解为除了上述两项和直接相关的信息之外的信息,由式1.25 和式1.26可以看出,此信息在Turbo码
25、的译码中被用作下一个成员译码器的先验信息输入。从式1.22可以看出,MAP译码算法实际上用上了所有和有关的信息(,)来计算的LLR。4.2Max-Log-MAP与Log-MAP算法从上节中可以看到MAP算法非常复杂,运算量极大,运算中不仅有大量的乘法和加法,还有在数字电路中较难实现的指数和对数运算,这极大的影响了MAP算法的实用。Koch和Baier及Erfanian等人提出Max-Log-MAP算法,大大地简化了MAP算法的复杂性,由于计算中做了一定地近似,这种算法不是最优的。Robertson等人对Max-Log-MAP算法做了一定地修正,被称作Log-MAP算法。Max-Log-MAP对
26、MAP所做的修改是直接在对数域里对、和进行计算,省去了许多指数和对数运算,大大简化了运算量。首先定义、和, (1.27) (1.28) (1.29)在Max-Log-MAP要用到一重要的近似等式1.30, (1.30)表示取最大值。则, (1.31) (1.32)根据式3.15和3.21,在对数域的计算如式3.33, (1.33) 式中C为常数。称为栅格图中的分支度量(branch metrics)。的计算变为加减法运算,如式3.34(1.34)可以看出Max-Log-MAP在译时,把所有可能的的状态转移路径分成两部分:一部分是引起的,一部分是引起的。并在这两部分中分别找出为最大值的路径,LL
27、R的计算就是比较这两条路径的差。总结Max-Log-MAP的计算步骤就是:通过前向递归计算出(式1.31);后向递归计算出(式1.32);用式1.33计算出分支度量;再通过式1.34就可计算出比特的LLR。Max-Log-MAP译码过程极象Viterbi算法,都是要在栅格图中寻找最优路径,不过它还要多寻找一条最有竞争力的次优路径,这条次优路径在时刻和最优路径给出完全不同的关于的判决。4.3 Log-MAPLog-MAP是对Max-Log-MAP作了一定的修正,由式1.35给出修正方法, (1.35)其中定义修正函数, (1.36)的函数图如图1.2所示,图4.2 修正函数的曲线图可以看出关于x
28、0偶对称,在或时,非常小。因此在实际计算中可通过查表法完成,Robertson指出只要在这个表中存储8个数据即可,x的范围是05,过多的数据存储对译码结果并没有太大的改善。由此看来,Log-MAP算法仅仅比Max-Log-MAP算法多了些查表和加法运算,复杂度仅仅多了一点点,而性能却有较大提高,这将在后续小节的各种译码算法性能比较中看到。4.4 SOVA算法Viterbi算法也是一种估计无记忆噪声中马尔可夫过程最优的算法,它不同于MAP算法的特点在于其最优的准则不同,它是给定接收序列, (1.37)Viterbi算法找出了错误最少的发送序列。SOVA(Soft Output Viterbi A
29、lgorithm)是对原Viterbi算法做了一定的修改,使其适合于Turbo码的迭代译码。所作的修改主要有两个方面:1、 在栅格图中选择最大似然路径时要把先验信息考虑进去;2、 不仅要把每个比特是1或1译码出来,同时也要给出译码的可靠度,以LLR形式给出,作为“Soft output”,从中可以获得一些关于的先验信息,为下次迭代所使用。这正是此算法被命名为SOVA的原因。设接收到的码字序列为,是栅格图中某条路径所经过的所有状态组成的序列,且在k时刻到达状态,Viterbi算法的出发点就是要寻找为最大的路径,被称为幸存路径。选取某条路径的概率是, (3.38)显然对于所有的路径均一样。因此寻找
30、最大的路径等价于寻找为最大的路径。根据贝叶斯公式和的定义式1.8,有 (1.39)定义分支度量(metric)为, (1.40)由此看来可以利用前向递规的方法求得,类似于Max-Log-MAP算法中的的计算。 (1.41)C为常数,计算中可以省去。因此, (1.42)比传统的Viterbi算法多了等式右边的第二项,利用上了的先验信息。下面来看一下SOVA算法对Viterbi算法的所作的第二项修改。设是栅格图中不同于幸存路径的另外一条路径,它也在k时刻到达状态,换句话说就是在k时刻重合于幸存路径。由于幸存路径是到达状态的累计分支度量最大的路径,所以有式1.43成立, (1.43)称为两路径的差异
31、度。在状态下我们选择路径作为幸存路径而丢弃的正确可靠度,可用下面的概率表示, (1.44)需要注意的是,这里假设了编码速率是,即在栅格图中进入每个状态的路径只有两条。当进入每个状态的路径不止两条时,需要从所有非幸存路径中选择度量最大的那一条路径。根据的定义,并把式1.43带入,则 (1.45)由此看来,k时刻正确判决的LLR仅有一个参数决定。在Viterbi译码过程中,某时刻2所有的幸存路径一般都是从前某个时刻1的同一路径中分支出来,一般某时刻2与某时刻1的间隔一般最多不超过56倍的个时间单位,其中为卷积码的约束长度。而这条同一路径正是最大似然路径。因此译比特时要等到时刻才作判决,在这时间内有
32、许多幸存路径又回归到了最大似然路径上去并随后消失了,而这些路径在时刻给出的判决和最大似然路径给出的判决有相同的,也有不同的。这些不同的判决影响着我们在最大似然路径上对判决的可靠度,因此在求的LLR时要把它们考虑进去。可由式1.46来近似计算, (1.46)其中是最大似然路径上所做的判决值。在i(其中)时刻重合于最大似然路径的幸存路径在k时刻给出的判决为,是这些将要消失的幸存路径与最大似然路径之间的差异度。Hagenauer 指出是由那些当中最小的一个决定。通过图1.3可以更好的理解关于计算的过程。图4.3 SOVA算法中计算示范图在图4.3中假设最上面的粗虚线是最大似然路径,可以看出有5条路径
33、(分别标示了数字)都在一定时刻汇合于最大似然路径。现在我们要计算k时刻的,可以看出,最大似然路径对的判决是,而路径1、2、4、5这4条路径对的判决是,路径3对所作的判决和最大似然路径的判决是一样。这样在计算时,需要考虑这4条路径,而第3路径就不在考虑之列了。这四条路径和最大似然路径的差异度分别是、,从中找出最小值并乘以就是要计算的。4.5 各种算法的比较为了更好地理解这四种算法,在这一节中对这些算法进行比较研究。下面是这些算法的相同点和不同点:相同点:1、这些算法都接收信道传来的软判决信息和信息比特的先验信息作为译码输入,译码输出不仅可以给出判决,而且也可以给出的后验概率LLR值(),可以统称
34、它们为SISO(soft in soft out)算法。2、从单次译码结果来看,Max-Log-MAP和SOVA都是在栅格图中寻找到了最大似然路径,二者在一定程度上具有一致性。3、 MAP算法和Log-MAP算法在理论基础上是一致的,都是在栅格图中考虑了所有的可能路径。而MAX-Log-MAP是在Log-MAP算法上做了近似,从而省去了大量加法运算。不同点:1、MAP算法是Turbo码成员编码器的最优的译码算法,Log-MAP算法是把MAP算法转移到对数域内进行计算,这样极大的降低了译码的复杂度。译码过程中,对于每个信息比特,它们把栅格图所有可能的路径分成两类,一类为路径,一类为路径,所有路径
35、概率之和与所有路径概率之和的比值的对数就是要求的的后验概率;同样,在计算和时也要考虑所有可能存在的状态转移。2、Max-Log-MAP算法的复杂度又比Log-MAP低一些。二者主要区别在于修正函数上。在计算的后验概率时,它只考虑两条路径,一条是最大概率的路径,一条是最大概率的路径,二者之中有一条是最大似然路径,另一条我们暂时可称其为最具竞争力路径;在译不同时刻的时,最大似然路径一般都会不变,只是继续地向后延伸,而最具竞争力路径会不停的改变。在计算和时,也只考虑了最有可能的一种状态转移。3、SOVA的译码复杂度最低,它的目的很明确,就是要寻找最大似然路径。其计算的方法和Max-Log-MAP一致
36、,不过它不计算。它所比较的两条路径,一条是最大似然路径,但另一条不一定是最具竞争力路径,而是一条给出判决不同于最大似然路径的且会重合于最大似然路径的路径,那些比这更具有竞争力的路径可能在译码过程中被丢弃了,所以它给出的不如Max-Log-MAP精确,在迭代译码过程中,这样不利于后续比特的译码,这正是SOVA的译码性能比Max-Log-MAP降低的原因。图1.4给出了这些算法在栅格图中的译码过程,从中可以看出它们的异同点,图中加粗的线条为译码中选择的路径。图4.4 Turbo码各种算法译码示意图另外,在表1.1中给出了三种算法计算复杂度的比较。MAP由于过于复杂,一般实际中都不大使用,常用Log
37、-MAP算法来替代。Log-MAP算法中的修正函数是由上文中所述的查表法获得,只在表中存了05之间的8个数据。表1.1中的M指Turbo码成员编码器的寄存器的长度。表中比较的是译每比特的运算量。运 算Log-MAPMAX-Log-MAPSOVA比 较52M252M23(M+1)+ 2M加 法152M9102M1122M8乘 法88 8位 比 较6(M+1)查 表52M2表4.5 Turbo码各种算法复杂度比较表从表1.1可以看到,在每比特译出的计算中,Log-MAP算法最复杂,它不仅比MAX-Log-MAP算法多了一些查表的运算,而且也多了一些加法运算。而SOVA算法最简单,但它有一些特殊的运
38、算如位比较运算,这在数字电路里非常容易实现。图4.6 帧长为1648的Turbo码各种译码算法译码性能比较图4.6示出了帧长是1648的Turbo码在各种算法下的译码性能。从图中可以看出,MAP算法最好,Log-MAP稍微有些差,它和MAP算法的差异很小,有0.1dB左右;Max-Log-MAP算法比MAP算法大概有0.3dB的恶化,而SOVA性能最差,比MAP有0.6dB的差异。4.6比较结论本节给出了各种译码算法的原理,然后对这些算法进行了详细的比较研究。从图1.4中可以清楚的了解到各种算法的工作过程和它们的异同点。通过译码复杂度的比较,得出MAP算法最为复杂,Log-MAP次之,Max-
39、Log-MAP较为简单,SOVA最简单的结论。从仿真结果上看性能比较,MAP算法最好,Log-MAP稍微有些差,Max-Log-MAP算法大概有0.3dB的恶化,而SOVA比MAP有0.6dB的差异。因此在实际运用中,需要对性能和运算量上 进行折中考虑,从而决定使用何种算法。 五、Turbo码仿真主调用程序代码function varargout = codegui(varargin)% Copyright 2002-2003 Tomeson%Author Tangsheng communication engineering , Hunan University%Tutor Luo Zhin
40、ian% Edit the above text to modify the response to help codegui% Last Modified by GUIDE v2.5 09-Jun-2006 01:25:29% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, codegui_OpeningFcn, . gui_OutputFcn, c
41、odegui_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before codegui is made visible.title=dd;functio