基于matlab的turbo码编码的结题报告姓名:彭锦程学号:10021230同组人:李世斌学号:10021229指导老师:徐小平一:引言自从香农的信道编码定理提出之后,人们对设计出好的信道码的探索与研究就从未间断。
1993 年,在国际通信会议上法国学者C Berrou 等人首次提出了Turbo 码。
在加性高斯白噪声的环境下,采用编码效率R=1/2、交织长度为65536 的Turbo 码,经过18 次迭代译码后,在Eb/N0=0.7dB 时,其误码率已低于10-5,与香农极限只相差0.7dB。
Turbo 码以其优异的性能引起各国研究学者的强烈关注,成为研究的热点课题。
在第3 代移动通信系统的建议中,无论是UMTS(WCDMA)还是IS2000(CDMA2000),都已将Turbo 码作为高速率、高质量数据传输中信道编码方案的标准。
虽然至今Turbo 码在数学上的机理还没有定论,但是,Turbo 码的优越性能及其迭代译码算法的思想,很大程度上已经被人们所理解。
Shannon 编码定理指出:如果采用足够长的随机编码,就能逼近Shannon 信道容量。
而Turbo 码以其接近Shannon 理论极限的译码性能,已被采纳为3G移动通信系统的信道编码标准之一。
Turbo 码巧妙地将两个简单分量码通过伪随机交织器并行级联来构造具有伪随机特性的长码,并通过在两个软输入/ 软输出(SISO) 译码器之间进行多次迭代实现了伪随机译码。
采用迭代译码的方法来提高通信系统的译码性能是Turbo 码的最大特点。
Turbo 码的编码器、译码器结构繁琐,是一种非常复杂的信道编码方案,这使得对Turbo 码的理论分析十分困难,且只能对运算复杂度作宏观分析,对Turbo码的具体实现并没有一个清楚的度量。
因此,使用计算机对Turbo 码进行仿真分析是十分必要的。
考虑到Turbo 码系统编译码的数据处理量很大,利用生成矩阵对信息序列进行编码、译码时的迭代计算等等,都涉及了矩阵运算,故采用Matlab/ Simulink 来进行建模仿真,同时分析了迭代次数、交织长度及不同译码算法对Turbo 码性能的影响。
二:Turbo 码的编码器和译码器原理Turbo 码编码器组成Turbo 码的编码器的基本结构如图1 所示。
图1 Turbo 码的编码器结构图Turbo 码编码器主要由两个递归系统卷积编码器(RSC) 、一个交织器与一个删余和复用单元组成。
递归系统卷积编码器是指带有反馈的系统卷积编码器,其码率可设为R = k/ n ;交织器用来改变信息序列的排列顺序,获得与原始信息序列内容相同,但排列不同的信息序列;删余和复用单元的作用是从总体上改善Turbo码码率,因此通过删余和复用单元, Turbo 码可以获得不同码率的码字。
编码器的码字通过信道输出到译码器内。
Turbo 码译码器原理Turbo 码译码器基本结构如图2 所示。
Turbo 码译码器由两个软输入/ 软输出( SISO) 译码器DEC1 和DEC2 串行级联组成,交织器与编码器中所使用的交织器相同。
译码器DEC1 对分量码RSC1进行最佳译码,产生关于信息序列中每一比特的似然信息,并将其中的“新信息”经过交织送给DEC2 ,译码器DEC2 将此信息作为先验信息,对分量码RSC2 进行最佳译码,产生关于交织后的信息序列中每一比特的似然比信息, 然后将其中的“外信息”经过解交织送给DEC1 ,进行下一次译码。
这样,经过多次迭代,DEC1或DEC2 的外输出信息趋于稳定,似然比渐近值逼近于对整个码的最大似然译码,然后对此似然比进行硬判决,即可得到信息序列的最佳估计值。
图2 Turbo 码译码器结构图在 CDMA2000 系统中,Turbo 编码器有三种不同的编码速率,即1/2,1/3,1/4,它们的转换函数可以表示成式中,反馈函数d(D) = 1+ D + D2 ,卷积编码器的两个生成多项式分别为n (D) = 1+ D + D3。
n (D) = 1+ D + D2+D3图3所示是CDMA2000 系统中的Turbo 编码器。
图3:CDMA2000 中的Turbo 编码器在CDMA2000 系统中,Turbo 码编码器的输入信号一方面进入第一个卷积编码器进行卷积编码,另一方面输入信号通过一个Turbo 交织器,产生的交织信号再通过第二个卷积编码器。
这两个卷积编码器的约束长度都等于4,并且产生3 个卷积编码信号(X、Y0、Y1 以及X'、Y0'、Y1')。
这六个输出信号并不是都能够成为输出信号,CDMA2000 通过信号抽取和重复技术抽取其中的某些数据组成 Turbo 编码信号。
Turbo 交织器是一种块交织器。
假设Turbo 交织器输入信号的个数等于N,每个输入元素依次编号为0,1,2,…,N-1,则交织器输出信号中第i 个元素就等于第A(i)个输入信号。
在计算A(i)的过程中,Turbo 交织器采用了一个长度为n+5 个bit 的计数器counter,其中n 满足条件2 n+5≥N。
计数器counter 的初始值等于0,并且在后面的计算过程中依次递增。
如果把counter 写成in+4in+3…i0,则可以把它分成两部分,即长度为n 的最高有效位(Maximal Significant Bit,MSB )(in+4…i0)和5 个bit 的最低有效位(LeastSignificant Bit,LSB)(记为i4…i0)。
Turbo 交织器以LSB 为下标查表[2]得到的一个n 个bit 的数值,这个数值与最高有效位MSB 模2n 加1的结果相乘,乘积中的最低n 比特tn+1…t0 就构成了A(i)的低n 位。
同时,计数器counter 的最低有效位LSB在实施位反转操作(即把i4…i0 变为i0…i4)之后得到的5 个bit 成为A(i)的5 个最高有效位。
如果这个过程中得到的A(i)大于输入信号的最大序号N-1,Turbo 交织器将丢弃这个数值,同时将计数器counter 加1 之后重新计算A(i),这个过程一直持续到A(i)满足条件为止。
图4是Turbo 交织器的工作流程。
在任意一个时刻,两个卷积编码器分别输出3bit 的编码符号,这些符号按顺序组合成XY0Y1X'Y0'Y1',然后由Turbo 编码器的抽取和重复模块(Puncture and Repetition)抽取其中的某些信号作为Turbo 编码输出。
抽取和重复操作是以两个符号周期为单位进行的,即对于卷积编码符号XY0Y1X'Y0'Y1'XY0Y1X'Y0'Y1',码率为1/2 的Turbo 编码器产生的输出信号为XY0X Y0',码率为1/3 的Turbo 编码器产生的输出信号为XY0Y0'XY0Y0',而码率为1/4 的Turbo 编码器产生的输出信号为XY0Y1Y1'XY0Y0'Y1'。
元素抽取的方式:当码率为1/2 时,pattern = [1 1 0 0 0 0 1 0 0 0 1 0];当码率为1/3 时,pattern = [1 1 0 0 1 01 1 0 0 1 0];当码率为1/4 时,pattern = [1 1 1 0 0 1 1 1 0 0 1 1]。
当所有的输入信号都进入 Turbo 编码器完成交织和编码之后,两个卷积编码器还需要运行6 个符号周期,产生36 个输出符号。
这些输出符号仍然要执行抽取和重复操作。
对于前3 个周期的输出符号XY0Y1X'Y0'Y1',1/2 码率的Turbo 编码器输出XY0,1/3 码率的Turbo 编码器输出XX Y0,1/4 码率的Turbo 编码器则输出XXY0Y1。
对于后三个周期的输出符号XY0Y1X'Y0'Y1',1/2 码率的Turbo 编码器输出X'Y0',1/3 码率的Turbo 编码器输出X'X'Y0',1/4 码率的Turbo 编码器则输出X'X'Y0'Y1'。
这样,对于长度为N 的输入信号,码率为1/n,n=2,3,4 的Turbo 编码器产生的编码符号数等于(N + 6)×n图4:Turbo 交织器的工作流程三:仿真模型的建立仿真模型包括信源、编码器、信道、译码器和信宿五个部分。
在模型中,可以任意改变的参数值为:N :交织器的大小,即Turbo 码的分组长度,也即每个分组所包含的信息序列的长度。
信道类型选择: Simulink 模块中可以选择设置高斯白噪声信道(AWGN) 或多径瑞利衰落信道(ReyleighFading) 。
译码算法选择:Log2MAP ,Max2Log2MAP 和SO2VA 三种译码算法。
SNR :信号与噪声强度比值。
迭代次数:迭代次数的不同对译码器输出有着一定的影响。
Turbo 编码模块:本模型中Turbo 码编码器采用两个相同的分量编码器通过交织器并行级联而成。
分量编码器是码率为R = 1/ 2 的循环系统卷积码。
首先用贝努利发生器(Bernoulli Binary Genera2tor) 产生序列,从参数面板调节帧大小和采样率。
原始序列进入第1 卷积编码器(Convolutional Encoder) ,并经过随机交织器(Random Interleaver) 后进入第2 卷积编码器(Convolutional Encoder1) 。
删余模块1 ,2 同时接在第1 卷积编码器的后面。
删余模块1 (p unct ure1)的输出为第1 卷积编码输出的奇序列, 删余模块2 (p unct ure2) 的输出为第1 卷积编码输出的偶序列。
第3 个删余模块(p uncture3) 接在第2 卷积编码器的后面,其输出第2 卷积编码输出的偶序列。
这3 路序列经过串并变换后合成一路序列,作为Turbo 编码输出。
信道模块:信道模块包含有调制模块、信道及噪声模型、解调模块。
调制方式可以采用四相相移键控(QPSK) 。
噪声模型可以选择设置为高斯白噪声信道(AWGN) 或多径瑞利衰落信道(Reyleigh Fading) 。
Turbo 译码模块:Turbo 码的编码部分由两个子编码器组成,因此在其译码部分也就相应有两个子译码器。
该模块可以调用Log2MAP 译码子程序、Max2Log2MAP 算法译码子程序、SOVA 算法子程序[5 ] 供译码模块调用。
这些算法通过仿真模块中的S 函数实现。
四:仿真原程序附录五:仿真结果分析5.1:交织器大小对Turbo 码性能的影响仿真过程中,选取译码算法为Max2Log2MAP ,分别设置交织长度为150 ,600 ,1 200 。
三种交织长度的误码率如图5所示。
图5:Max2Log2MAP 算法下不同交织长度误码率比较从图5中很明显看出,当信噪比SNR 比较小时,不同的交织长度下译码性能的区别并不是很明显,由此可见,信噪比对译码的影响是很大的。