西工程 turbo码编码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1/12Turbo码编码器学院:电子信息学院学号:40803030105班级:08通信1班姓名:2/12一、引言Shannon编码定理指出:如果采用足够长的随机编码,就能逼近Shannon信道容量。但是传统的编码都有规则的代数结构,远远谈不上“随机”;同时,出于译码复杂度的考虑,码长也不可能太长。所以传统的信道编码性能与信道容量之间都有较大的差距。事实上,长期以来信道容量仅作为一个理论极限存在,实际的编码方案设计和评估都没有以Shannon限为依据。二、Turbo码简介1993年两位法国教授Berrou、Glavieux和他们的缅甸籍博士生Thitimajshima在ICC会议上提出了一种全新的编码方式——Turbo码。它巧妙地将两个简单分量码通过伪随机交织器并行级联来构造具有伪随机特性的长码,并通过在两个软入/软出(SISO)译码器之间进行多次迭代实现了伪随机译码。Turbo码由于其近Shannon界的突出纠错能力,成为近年信道编码理论研究的热点问题。其编码器由两个(或多个)带反馈的系统卷积码器经一交织器并行级联而成,接收端一般采用逐位最大后验概率译码器通过反复迭代循环来译码。Turbo码有一重要特点是其译码较为复杂,比常规的卷积码要复杂的多,这种复杂不仅在于其译码要采用迭代的过程,而且采用的算法本身也比较复杂。这些算法的关键是不但要能够对每比特进行译码,而且还要伴随着译码给出每比特译出的可靠性信息,有了这些信息,迭代才能进行下去。用于Turbo码译码的具体算法有:MAP(MaximumAPosterori)、Max-Log-MAP、Log-MAP和SOVA(SoftOutputViterbiAlgorithm)算法。编码方面主要包括对并行级联编码与串行级联编码的分析,以及对混合级联方式的研究;译码方面主要包括迭代译码、译码算法(最大后验概率算法MAP、修正的MAP算法Max-Log-MAP、软输出Viterbi算法SOVA等)的研究。三、Turbo码编码原理Turbo码实际上是一种并行级联卷积码(ParallelConcatenatedConvolutionalCodes)。Turbo码编码器是由两个反馈的系统卷积编码器通过一个交织器并行连接而成,编码后的校验位经过删余阵,从而产生不同的码率的码字。如图所示:信息序列u={u1,u2,……,uN}经过交织器形成一个新序列u'={u1',u2',……,uN'}(长度与内容没变,但比特位经过重新排列),u和u'分别传送到两个分量编码器(RSC1与RSC2),一般情况下,这两个分量编码器结构相同,生成序列X和X,为了提高码率,序列X和X需要经过删余器,采用删余(puncturing)技术从这两个校验序列中周期的删除一些校验位,形成校验序列X,X,与未编码序列X'经过复用调制后,生成了Turbo码序列X.3/121.分量码的选择Turbo码的一个重要特点是它的分量码采用递归系统卷积码(RSC,RecursiveSystematicConvolutionalcode),这也是它性能优越的一个重要原因。之所以选择RSC编码器作为Turbo码的子码主要有以下原因:首先,RSC码具有系统码的优点。这一特性使用户在译码时无需变换码字而直接对接收的码字进行译码,所以,递归系统卷积码(RSC)对于非系统卷积码(NSC)而言译码简单、快速。其次,非系统卷积码(NSC)的BER性能在高信噪比时比约束长度相同的非递归系统码要好,而在低信噪比时情况却正好相反。递归系统卷积码综合了NSC码和非递归系统卷积码的特性,且然它与NSC码具有相同的trellis结构和自由距离,但是在高码率(R≥2/3)的情况下,对任何信噪比,它的性能均比等效的NSC码要好。由于系统递归卷积码具有以上特点,并且能改善误码率,所以通常选择RSC码作为Turbo码的子编码器。RSC编码器一般有2-5级移位寄存器,编码器如下图所示递归系统卷权码(RSC)不同于一般的卷积码器在于其结构中不仅有向前结构,还有向后反馈结构。2.交织器的设计Inputoutput4/12交织器是影响Turbo码性能的一个关键因素,它可以便Turbo码的距离谱细化,即码重分布更为集中。它的特性的好坏直接关系着Turbo码的性能。编码器中交织器的使用是实现Turbo码近似随机编码的关键。交织器实际上是一个一一映射函数,作用是将输入信息序列中的比特位置进行重置,以减小分量编码器输出校验序列的相关性和提高码重。通常在输入信息序列较长时可以采用近似随机的映射方式,相应的交织器称为伪随机交织器。由于在具体的通信系统中采用Turbo码时交织器必须具有固定的结构,同时是基于信息序列的,因此在一定条件下可以把Turbo码看成一类特殊的分组码来简化分析。交织是对信息序列加以重新排列的一个过程。在交织器的设计中,基本上是遵循下列原则:1)最大程度的置乱原来的数据排列顺序,避免置换前相距较近的数据在置换后仍然相距较近,特别是要避免相邻的数据在置换后仍然相邻。2)尽量提高最小码重码字的重量和减小低码重码字的数量。3)尽可能避免与同一信息位直接相关的两个分量编码器中的校验位均被删除;4)对于不归零的编码器,交织器设计时要避兔出现尾效应图案。在设计交织器时,应考虑具体应用系统的数据的大小,使交织深度在满足时延要求的前提下,与数据大小一致,或是数据帧长度的整数倍。交织器和分量码的结合可以确保Turbo码编码输出码字都具有较高的汉明重量。在Turbo编码器中交织器的作用是将信息序列中的比特顺序重置。当信息序列经过第一个分量编码器后输出的码字重量较低时,交织器可以使交织后的信息序列经过第二个分量编码器编码后以很大的概率输出较高重码字,从而提高码字的汉明重量:同时好的交织器还可以奇效地降低校验序列间的相关性。因此,交织器设计的好坏在很大程度上影响着Turbo码的性能。3.删余的设计对于数字通信领域日益紧张的带宽资源,提高码率就意味着节省带宽和降低通信费用。删余(Puncturing)是目前提高Turbo码码率的主要方法。Turbo码中,删余器通常比较简单,因为在一般的应用中,码率都是在1/2或者1/3,因此即使有删余器,它一般也只是周期性的从两个分量编码器中选择校验比特输出即可。其具体做法是:从两个RSC编码生成的校验序列中周期地删除一些校验位,然后再与未编码的信息序列复用重组成最后的编码输出序列,调制后进入信道传输。若信息序列为d1=(C11),长度为N,那么两个RSC分量编码器的输出为:5/12下图所示示为采用了删余技术的编码结构,若取RSC1输出的奇比特和RSC2的偶比特,即采用删余矩阵P=[10,01],那么编码输出长度为2N,码率提高为1/2的序列为Cp.Turbo码两个分量码编码器的输出经过删余得到的序列被称为奇偶序列,是校验序列。一个好的删余算法应该符合以下几点要求:1)不能删除信息位.删除信息位会造成较大的信息损失,从而使误码率有较大的损失;2)删余应该在时间域上均匀进行,删余同一时刻所有的比特位会造成此时刻信息损失较大,影响误码率;3)删余应该对于各分量码均匀进行,从而使信息的损失均匀分布在各分量码上,避免由于信息损失不均匀导致分量码译码性能下降。四、Turbo码与其它通信技术的结合包括Turbo码与调制技术(如网格编码调制TCM)的结合、Turbo码与均衡技术的结合(Turbo码均衡)、Turbo码编码与信源编码的结合、Turbo码译码与接收检测的结合等等。Turbo码与OFDM调制、差分检测技术相结合,具有较高的频率利用率,可有效地抑制短波信道中多径时延、频率选择性衰落、人为干扰与噪声带来的不利影响。Matlab仿真程序如下:主函数:in=input('pleaseinputcodeuncoded:')g=[1011;1101]6/12[n,K]=size(g)m=K-1nstates=2^mpuncture=1rate=1/(2+puncture)pattern_ordinal=1:length(in)alpha=jiaozhi(pattern_ordinal)[en_output,inter]=encoderm(in,g,alpha,puncture)alphaout=alphaout=en_outputinter_data=inter交织编码器:functionpattern=interleaver_3GPP(x)K=length(x);ifK=40&K=159R=5;T=[4,3,2,1,0]+1;elseif(K=160&K=200)|(K=481&K=530)R=10;T=[9,8,7,6,5,4,3,2,1,0]+1;elseif(K=2281&K=2480)|(K=3161&K=3210)R=20;T=[19,9,14,4,0,2,5,7,12,18,16,13,17,15,3,1,6,11,8,10]+1;elseR=20;T=[19,9,14,4,0,2,5,7,12,18,10,8,13,17,3,1,16,6,15,11]+1;endp_table=[711131719232931374143...4753596167717379838997...101103107109113127131137139149151...157163167173179181191193197199211...223227229233239241251257];ifK=481&K=530p=53;C=p;elseii=1;while(p_table(ii)+1)*RKii=ii+1;7/12endp=p_table(ii);%determineCifK=(p-1)*RC=p-1;elseifK(p-1)*R&K=R*pC=p;elseifKR*pC=p+1;endendifK~=R*Cx(1,(K+1):(R*C))=0;endmatrix_unpermutation=(reshape(x,C,R))';v_table=[32232523263...52222753235...25263323226...525222195232...32637763];ifK=481&K=530v=2;elsev=v_table(ii);ends(1)=1;forj=2:p-1s(j)=mod(v*s(j-1),p);endq(1)=1;q(1,2:R)=6;fori=2:Rwhile((gcd(q(i),p-1)==1)&(q(i)6)&(q(i)q(i-1)))==0q(i)=q(i)+1;end8/12endr(T)=q;fori=1:RifC==pforj=1:p-1U(i,j)=s(mod(j*r(i),p-1)+1);endU(i,p)=0;elseifC==p+1forj=1:p-1U(i,j)=s(mod(j*r(i),p-1)+1);endU(i,p)=0;U(i,p+1)=p;ifK==R*C&i==Rtemp=U(R,p+1);U(R,p+1)=U(R,1);U(R,1)=temp;endelseifC==p-1forj=1:p-1U(i,j)=s(mod(j*r(i),p-1)+1)-1;endendendfori=1:Rmatrix_intra_row_permutated(i,:)=matrix_unpermutation(i,U(i,:)+1);endfori=1:Cmatrix_interleaved(:,i)=matrix_intra_row_permutated(T,i);endk=1;fori=1:Cforj=1:Rifmatrix_interleaved(j,i)~=0pattern(k)=matrix_interleaved(j,i);k=k+1;end9/12endend并行输出以及删余程序function[en_output,inter_data]=encoderm(x,g,alpha

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功