Turbo码的各种译码算法及比较
- 格式:doc
- 大小:771.50 KB
- 文档页数:15
Turbo码的编译码算法仿真汇总电子信息类实践课III 通信系统仿真题目Turbo码的编译码算法仿真专业学号姓名日期注:本报告仅供参考111由于多径和移动台运动等影响因素,使得移动信道对传输信号在时间、频率和角度上造成了色散,如时间色散、频率色散、角度色散等等。
根据不同无线环境,接收信号包络一般服从几种典型分布,如瑞利分布、莱斯分布和Nakagami-m 分布。
在仿真衰落信道时,最重要的参数是多径扩展和多普勒频移。
通常在离基站较远、反射物较多的地区,发射机和接收机之间没有直射波路径,存在大量反射波;到达接收天线的方向角随机且在(0~2pi)均匀分布;各反射波的幅度和相位都统计独立。
图3 瑞利分布概率分布密度3、设计与实现过程1图4、程序一框图●具体实现过程:按照流程图中的各方面(模块)内容进行代码级的详细说明,例如:●衰落信道的设计在进行仿真的过程中尝试使用了两种不同的编写方式:a. Create Rayleigh fading channel object.chan_ray = rayleighchan(1/10000,100);fadedSig = filter(chan_ray,modSignal); % Apply the channel effectshChan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)');hChan.SNR = EbNo_db(n);fadedSig = filter(chan_ray,modSignal); % Apply the channel effectsreceivedSignal = step(chan,fadedSig); % Apply the channel effectsb.调用改进JAKES模型产生单径平坦型瑞利衰落信道子程序2nsamp = 8;%脉冲抽样点数ts = 1/(num*nsamp);%抽样时间间隔t = (0:num*nsamp-1)*ts;%抽样时间序列···h = rayleigh(10,t);%调用瑞利衰落子程序,输入为(最大多普勒频移,抽样时间序列)···modSignal = rectpulse(modSignal,nsamp);%矩形脉冲形成modSignal = h'.*modSignal;%通过瑞利信道receivedSignal = intdump(receivedSignal,nsamp); %匹配滤波相干解调使用matlab函数rayleighchan●程序一:a.调用turbo编码器解码器encoder =comm.TurboEncoder('InterleaverIndicesSource','Inputport');decoder =comm.TurboDecoder('InterleaverIndicesSource','Inputport', ...'NumIterations',4);b.调用AWGN信道chan = comm.AWGNChannel('EbNo',EbNo_db,'BitsPerSymbol',log2(M)); c. 进行编码解码Turbo编码:encodedData = step(encoder,msg,index);···调制编码···过信道receivedSignal = step(chan,modSignal);···解调···Turbo译码:receivedBits = step(decoder,-demodSignal,index);●程序二code_length = 1024;%码长rate = 1/2;%码率niter = 4;%迭代次数a.信道:AWGNEbN0_db = 2:6;3en = 10^(EbN0_db(nEN)/10);L_c = 4*en*rate;%信道置信度sigma = 1/sqrt(2*rate*en);%AWGN信道标准差过信道:r = encoder_out + sigma*randn(1,code_length*(2));b.Turbo编码器%第一个分量RSC编码output1 = rsc_encode(G,msg,1);%1*2048y(1,:) = output1(1:2:2*code_length);%系统比特y(2,:) = output1(2:2:2*code_length);%校验比特%第二个分量RSC编码a = reshape(y(1,:),32,32);y_inv = reshape(a',1,1024);output2 = rsc_encode(G,y_inv,-1);%输入1024 输出1*2048y(3,:) = output2(2:2:2*code_length);%校验比特输出删余生成码率为1/2的码encoder_out(1:2:end) = y(1,:);encoder_out(2:4:end) = y(2,1:2:end);encoder_out(4:4:end) = y(3,2:2:end);%删余,奇为系统比特c.Turbo译码器通过解复用生成每个分量译码器的译码输入数据;初始化外部信息L_e(1:code_length)后。
Turbo码的几种译码算法及性能比较
武冬冬;赵刚
【期刊名称】《仪器仪表用户》
【年(卷),期】2008(015)003
【摘要】本文主要描述了Turbo码译码的具体算法和实现的性能,几种算法
是:MAP、Max-Log-MAP、Log-MAP和SOVA算法.MAP算法被用于卷积码的译码,但用作Turbo码的译码还是要做一些修改;Max-Log-MAP与Log-MAP是根据MAP算法在运算量上做了重大改进,更加适合于实际系统的运用;Viterbi算法并不适合Turbo码的译码,修改后的具有软信息输出的SOVA算法,就正好适合了Turbo码的译码.这些算法在复杂度上和性能上具有一定的差异,系统地了解这些算法的原理是对Turbo码研究的基础,同时对这些算法的复杂度和性能的比较研究也将有助于Turbo的应用研究.
【总页数】3页(P98-100)
【作者】武冬冬;赵刚
【作者单位】四川大学,电子信息学院,成都,610064;四川大学,电子信息学院,成都,610064
【正文语种】中文
【中图分类】TN911
【相关文献】
1.卷积码和Turbo码在视频传输中的性能比较 [J], 刘星成;张光昭
2.基于AWGN多次迭代的Turbo码与卷积码性能比较 [J], 王辉;王中训;段中华
3.一种易于实现的Turbo码乘积码译码算法 [J], 潘玲;白振兴
4.基于RADIX-4的Turbo码全并行译码算法 [J], 赵瑞祥;潘克刚;王欣婷
5.水声信道中LDPC码和Turbo码性能比较研究 [J], 刘胜兴;付强
因版权原因,仅展示原文概要,查看原文内容请购买。
译码器在数字通信中的应用摘要:译码器可以用来实现组合电路,也可以用来实现码制转换。
译码器就是把种代码转换为另一种代码的电路。
随着现代电子技术的发展,译码器作为最基本的电子元器件之一,已广泛应用于数字通信系统中。
关键词:译码器,数字通信,维特比译码,Turbo码1 引言在数字电路中,能够实现译码功能的逻辑部件称为译码器(Decod6r)。
实际上,译码器就是把一种代码转换为另一种代码的电路。
译码器是一种组合逻辑电路。
它的输入代码的组合将在某一个输出端产生特定的信号。
译码是编码的逆过程,在编码时,每一种二进制代码状态都赋予了特定的含义,即都表示了一个确定的信号或者对象。
把代码状态的特定含义翻译出来的过程称为译码,实现译码操作的电路称为译码器,或者说译码器是将输入二进制代码的状态翻译成输出信号,以表示其原来含义的电路。
实际上,译码器就是把种代码转换为另一种代码的电路。
随着现代电子技术的发展,译码器作为最基本的电子元器件之一,其应用领域越来越广泛,尤其是数字通信中的应用。
2原理(1)译码器的原理译码器的原理:用来表示输入变量状态的译码器是一种二进制译码器,输入输出代码之间的关系可由真值表表示。
n个输入代码就有2n个输入状态,因此译码器就有2n个输出和输入状态相对应。
每个输出的特定电位状态表示输入代码的一种组合。
(2)数字通信系统数字通信系统是利用数字信号来传递信息的通信系统。
如下图所示,数字通信主要涉及信编码和译码,信道编码与译码,同步及加密等等。
通信系统中信道编码的目的是增强数字信号的抗干扰能力。
接受端的信道译码器按相应的逆规则进行解码,从中发现错误或纠正错误,提高通信系统的可靠性。
纠错编码的基本思想是:在编码过程中,通过给所传输的信息设置附加的校验位,即增加其冗余度,使原来无规律或规律性不强的一组信息具有某种相关性;接收信息时再依据这种相关性译码,使编码信息具有检测或纠错性能,而用来检测或纠错的冗余码被称为纠错码。
Turbo 码的各种译码算法及比较Turbo 码有一重要特点是其译码较为复杂,比常规的卷积码要复杂的多,这种复杂不仅在于其译码要采用迭代的过程,而且采用的算法本身也比较复杂。
这些算法的关键是不但要能够对每比特进行译码,而且还要伴随着译码给出每比特译出的可靠性信息,有了这些信息,迭代才能进行下去。
用于Turbo 码译码的具体算法有:MAP(Maximum A Posterori)、Max-Log-MAP 、Log-MAP 和SOV A(Soft Output Viterbi Algorithm)算法。
MAP 算法是1974年被用于卷积码的译码,但用作Turbo 码的译码还是要做一些修改;Max-Log-MAP 与Log-MAP 是根据MAP 算法在运算量上做了重大改进,虽然性能有些下降,但使得Turbo 码的译码复杂度大大的降低了,更加适合于实际系统的运用;Viterbi 算法并不适合Turbo 码的译码,原因就是没有每比特译出的可靠性信息输出,修改后的具有软信息输出的SOV A 算法,就正好适合了Turbo 码的译码。
这些算法在复杂度上和性能上具有一定的差异,系统地了解这些算法的原理是对Turbo 码研究的基础,同时对这些算法的复杂度和性能的比较研究也将有助于Turbo 的应用研究。
MAP 算法MAP 算法最初是用来估计无记忆噪声下的马尔可夫过程的,它是一种最优的算法。
Bahl 等人于1974年把它用于线性分组码和卷积码的译码中,在用于卷积码的译码时,对于给定接收序列Y ,它不像Viterbi 算法那样以栅格路径上的比特组错误最少为目的,而是以译码出来的符号i x 的错误最少为目的。
即,(){}arg max ii i x x P x Y = (1.1)不过在大多情况下,它和Viterbi 算法的作用是一致的。
由于在卷积码的译码中,MAP 算法要考虑栅格图中的所有可能路径,这样运算量就非常大,实际系统中很少用到。
摘要:本文介绍了差错控制编码——Turbo码,介绍了编译码原理及其应用,并详细说明了仿真过程,译码采用了两种算法Log-MAP算法和SOVA算法,比较了不同迭代次数对Turbo码性能的影响,及不同译码算法下Turbo码的性能。
关键词:差错编码;Turbo码;RSC编码器;交织器;Log-MAP算法;SOV A算法1 引言1948年,现代数字通信的奠基人Shannon在其“通信的数学理论”一文中提出并证明了著名的有噪信道编码定理,指出只要随机编码的码长足够大,就可以进行无限逼近信道容量C的通信并使错误概率任意小。
他证明:对于平稳离散无记忆有噪声信道,如果数据源的速率R低于信道容量C时,则一定存在一种编码方法,使当平均码字长度足够长时,用最大似然译码可达到任意小的错误概率。
但随机编码的译码复杂度随码长指数增长以致于不可实现。
1993年C.Berrou等人提出的Turbo码通过对子码的伪随机交织实现大约束长度的编码,具有接近随机编码的特性,采用迭代译码取得了中等的译码复杂度,它的误码性能在10-5数量级上逼近了Shannon极限。
Turbo码通过在编码器中引入随机交织器,使码字具有近似随机的特性;通过分量码的并行级联实现了通过短码(分量码)构造长码(Turbo码)的方法;在接收端虽然采用了次最优的迭代算法,但分量码采用的是最优的最大后验概率译码算法,同时通过迭代过程可使译码下接近最大似然译码。
本文介绍Turbo码编译码原理、应用及其性能的仿真。
2 编译码原理Turbo码的最大特点在于它通过在编译码器中交织器和解交织器的使用,有效地实现了随机编码的思想,通过短码的有效结合实现长码,达到了接近Shannon理论极限的性能。
2.1 Turbo码的编码Turbo码的编码器可以分为三种结构:PCCC(并行级联卷积码)、SCCC(串行级联卷积码)和HCCC(混合级联卷积码)。
C.Berrou等人最初提出的Turbo码采用的是并行级联卷积码的结构,即PCCC。
T u r b o 码的各种译码算法及比较Turbo 码有一重要特点是其译码较为复杂,比常规的卷积码要复杂的多,这种复杂不仅在于其译码要采用迭代的过程,而且采用的算法本身也比较复杂。
这些算法的关键是不但要能够对每比特进行译码,而且还要伴随着译码给出每比特译出的可靠性信息,有了这些信息,迭代才能进行下去。
用于Turbo 码译码的具体算法有:MAP(MaximumAPosterori)、Max-Log-MAP、Log-MAP和SOVA(SoftOutputViterbiAlgorithm)算法。
MAP 算法是1974年被用于卷积码的译码,但用作Turbo 码的译码还是要做一些修改;Max-Log-MAP 与Log-MAP 是根据MAP 算法在运算量上做了重大改进,虽然性能有些下降,但使得Turbo 码的译码复杂度大大的降低了,更加适合于实际系统的运用;Viterbi 算法并不适合Turbo 码的译码,原因就是没有每比特译出的可靠性信息输出,修改后的具有软信息输出的SOVA 算法,就正好适合了Turbo 码的译码。
这些算法在复杂度上和性能上具有一定的差异,系统地了解这些算法的原理是对Turbo 码研究的基础,同时对这些算法的复杂度和性能的比较研究也将有助于Turbo 的应用研究。
MAP 算法MAP 算法最初是用来估计无记忆噪声下的马尔可夫过程的,它是一种最优的算法。
Bahl 等人于1974年把它用于线性分组码和卷积码的译码中,在用于卷积码的译码时,对于给定接收序列Y ,它不像Viterbi 算法那样以栅格路径上的比特组错误最少为目的,而是以译码出来的符号i x %的错误最少为目的。
即,(){}arg max ii i x x P x Y =%不过在大多情况下,它和Viterbi 算法的作用是一致的。
由于在卷积码的译码中,MAP 算法要考虑栅格图中的所有可能路径,这样运算量就非常大,实际系统中很少用到。
这样虽然MAP 算法早在1974年就被提出,但一直未被得到充分利用,只有到了1993年Turbo 码被提出来,MAP 算法被用于Turbo 码的译码之后,这种算法才得到广泛的应用。
MAP 算法不仅能译出序列的比特值,在译码的同时还能输出关于每比特译出的可靠性信息。
这种特点正好符合了Turbo 码的迭代译码特性,所以才被用于Turbo 码的译码中。
下面我们来看看MAP 算法是如何用于二进制Turbo 码的译码的。
MAP 算法是要根据接收到的序列Y ,找出每信息比特k u 是“1+”(1)或“1-”(0)的概率,这等同于计算序列Y 下k u 的对数似然比值(LLR)()k L u Y ,如式,()()()1ln 1k k k P u Y L u Y P u Y ⎛⎫=+= ⎪ ⎪=-⎝⎭在栅格图中假设前一状态1k S s -'=和当前状态k S s =,输入比特k u 引起s s '⇒的状态转移,根据贝叶斯(Bayes)准则,可由式得式,()()()()()11,111,1,,ln ,,k k k k s s u k k k s s u P S s S s Y L u Y P S s S s Y --'⇒=+--'⇒=-⎛⎫'==⎪= ⎪'==⎝⎭∑∑ 上式中(),1k s s u '⇒=+表示所有由1k u =+引起s s '⇒状态转移的集合;同样(),1k s s u '⇒=-表示由1k u =-引起的状态转移的集合。
接收序列Y 可以被分成三部分j k Y <、k Y 和j k Y >,分别表示k 时刻之前接收码字序列、当前接收码字和之后接收码字序列。
所以,()()11,,,,,,j k k j k k k P S s S s Y P s s Y Y Y <>--''===利用贝叶斯公式可得式,()()()()()()()()()()111,,,,,,,,,,,,j k k j k k k j k j k k j k k j k k k k P S s S s Y P s s Y Y Y P Y s P s s Y Y P Y s P s Y s P s Y s s s s βγα<>--><><-''==='=''=''=式中用了式、、的定义,()()11,j k k k s P S s Y α<--''==表示接收序列是j k Y <,1k -时刻状态是s '的概率,我们称之为前向概率。
()()j k k k s P Y S s β>==表示k 时刻状态为s 且之后接收序列是j k Y >的概率,我们称之为后向概率。
()()1,,k k k k s s P S s Y S s γ-''===(),k s s γ'表示由给定状态s '转移到s 并且此时接收码字为k Y 的状态转移概率。
因此计算LLR 的式可被分成前向概率转、状态转移概率和后向概率三部分,如式所示,()()()()()()()()()()()()()11,111,11,11,1,,ln ,,,ln ,kk kk k k s s u k k k s s u k k k s s u k k k s s u P S s S s Y L u Y P S s S s Y s s s s s s s s αγβαγβ--'⇒=+--'⇒=--'⇒=+-'⇒=-⎛⎫'==⎪= ⎪'==⎝⎭⎛⎫''⋅⋅⎪= ⎪''⋅⋅⎝⎭∑∑∑∑可以看出,用MAP 译码算法译接收序列Y 的关键是要计算出和各时刻有关的所有的()1k s α-'、()k s β,还有所有可能的s s '⇒状态转移的概率(),k s s γ'。
()k s α、()k s β的计算仍旧非常复杂,在下面的推导中我们可以看到()k s α、()k s β的计算可以用递规的方法。
()k s α的计算根据()k s α的定义,有式成立,()()()()11,,,,,,j k j k k k k k j k k k k alls s P S s Y P S s Y Y P Ss S s Y Y α<+<<-'===='===∑“all s '”表示所有的状态s '。
假设信道为无记忆信道,则(),k s Y 的概率只和前一状态s '有关,而和j k Y <无关。
并利用贝叶斯公式,有式成立,()(){}{}()(){}()()()()11,,,,,,,,,j k k k k k alls kj kj kalls kj kalls k kalls s P Ss S s Y Y P s Y s Y P s Y P s Y s P s Y s s s ααγ<-'<<'<'-''===''=⋅''=⋅''=⋅∑∑∑∑由此看出()k s α可由()1k s α-'前向递归计算得出。
递归计算存在初始化的问题,初始状态()00S α由式给出,()000010S S S α=⎧=⎨≠⎩ ()k s β的计算类似()k s α的计算推导,后向概率()k s β也可以由递归计算得出,不过这次是后向递归,()()()()()()()()()11,,,,,j k j k k k j kj k k allsj kk allsk kallss P Y s P Y Y s P Ys P Y Y s s P Ys P Y s s s s s ββγ>->->>>'''=='='='=⋅∑∑∑()k s β的初始状态()N N S β由式给出, ()10N N N N S S S β=⎧=⎨≠⎩ (),k s s γ'的计算(),k s s γ'计算可根据当前接收码字和先验信息(a-priori )计算得出。
设在编码k 时刻输入信息比特k u ,编码状态由s '转移到s ,并得到码字为kx ,经信道传输后接收到ky ,则()(){}()(){}()()()(),,,,k k k k k k s s P s Y s P Y s s P s s P Y s s P s s P y x P s s γ''''==⋅''=⋅'=⋅概率()P s s '直接由引起状态转移的输入比特k u 的先验概率决定。
定义k u 的先验概率对数似然比()k L u ,()()()1ln 1k k k P u L u P u ⎛⎫= ⎪ ⎪=-⎝⎭@ 当()1,1k p u s s '==,则()()()()()1ln ln 11k k k P s s P u L u P u P s s ⎛⎫'⎛⎫== ⎪ ⎪ ⎪ ⎪'=--⎝⎭⎝⎭@ ()()()1k k L uL u e P s s e'=+ 当()1,1k p u s s '==-时,则()()()11k k L uL ue P s s e '=-+ 设()()/21k k L uL u e eρ=+,则 ()()()()()()/2/2/21,11,1k k k k L u k u L u L u k e p u s s P s s ee p u s s ρρρ⋅-⎧'==+⎪'==⎨'==-⎪⎩比特k u 的先验信息()k L u ,一般从上一次译码输出信息中获得的;在第一次译码时,由于没有什么信息可以获得,只有先假设k u 为“1+”(1)或“1-”(0)的概率相同,即()0k L u =。
设信道噪声为高斯白噪声,方差为2σ,所要传输的信息比特的平均能量是b E ,编码速率为R (编码后每比特的平均能量为b E R ),则()kkP y x 可由式计算,()()()22121k k b kl kl nkl kl l E R ny x l P y x P y x σ=⎛⎫-- ⎪⎝⎭===∏n 表示一个码字中信息位与校验位加在一起所有比特的数量。