一种低时延Turbo码的编码器设计与实现
2015-02-01李超
李 超
(中国电子科技集团公司第20研究所, 西安 710068)
一种低时延Turbo码的编码器设计与实现
李超
(中国电子科技集团公司第20研究所, 西安 710068)
摘要:简要介绍了一种Turbo码的编码原理,并对螺旋交织器与分量编码器所采用的咬尾卷积码结构进行了分析,说明了编码器的实现结构,同时采用Xilinx公司的K7325T芯片完成了方案验证,结果表明在系统时钟为64 MHz的情况下编码时延仅为4.8 μs。
关键词:Turbo码;咬尾卷积码;低时延
0引言
在1993年瑞士日内瓦召开的国际通信会议上,Berrou提出了一种新型的信道编码方案——Turbo码。根据仿真结果发现,当码长为65536bit并采用软译码方式迭代18次情况下,Turbo码性能与香农限仅差0.7 dB,由于其优异的性能而引起了业内的广泛重视[1]。经过20余年的发展,Turbo码的研究逐步成熟,目前它已成为第3代与第4代移动通信的主流标准之一,并在卫星通信与军事通信中扮演着越来越重要的角色。
1编码原理
Turbo码是将信息序列分为交织序列与未交织序列后,分别通过分量编码器级联而成。本文中Turbo码的分量编码器采用咬尾卷积码[2-3],其原理框图如图1所示。
图1 编码原理框图
从图1可以看出,Turbo编码器由四相符号映射模块、初始状态计算模块、分量编码器模块和复接模块构成。其编码流程如下:
(1) 将输入信息序列按每2 bit为单位进行符号映射,并将映射后的符号分别传输给编码器A和编码器B。
(2) 对编码器A信号进行初始状态计算,计算出编码寄存器的初始状态。
(3) 将映射后数据分为前后相等的2包,并将寄存器初始状态值同时送入分量编码器A1与A2进行编码。
(4) 将分量编码器A1与A2编码后的数据进行复接,完成编码器A的编码工作。
(5) 编码器B工作流程与编码器A相似,只是在编码前应先进行符号交织。
(6) 将编码器B输出与编码器A进行复接,完成整个编码流程。
下面对其中的主要模块进行介绍。
1.1 初始状态计算
通常使用的卷积码需要额外的零尾比特,而咬尾卷积码中移位寄存器初始值与结束值相同,好处是可以消除码率的损失,不需要传输额外比特。本编码使用的分量编码器采用了咬尾卷积码,所以在编码前需对卷积码的寄存器初始状态进行搜索。 搜索过程如下:
base=zech[B%(S-1)-1];
acc1=0;
for(i=0;i
acc1=acc1_lookup[data[i]][acc1];
initial_state=init_state_lookup[base][acc1];
其中B为编码序列总长度,S为寄存器的状态个数,zech、acc1_lookup、init_state_lookup表见参考文献[4]。
1.2 交织器
交织可以使编码后的数据随机化,对码重起到整形作用。交织器根据交织方式分为固定交织器、随机交织器、分组交织器等3类[5],本文采用了螺旋交织器。螺旋交织器属于分组交织器的一种,其螺旋式读取数据的方式使得输出码字可以得到较大码距,且实现较为简单,便于工程实现[6]。
其交织过程可分为以下3步实现:
(1) 将输入信息序列按照先行后列的方式写入一个m×n矩阵中,其中m与n互为素数。
(2) 当开始读取数据时,从矩阵的左上方开始向右下方顺序进行,同时每向下一行读取顺序右移一位。
(3) 若读取到矩阵边缘,则返回后继续按照左上方向右下方的顺序读取数据。
螺旋交织器的读取顺序表达式为:
(1)
式中:ri为第i个符号的行索引;ci为第i个符号的列索引;i=1,2,…,N-1,ri与ci的初始值均为0。
1.3 分量编码器
分量编码器A与分量编码器B采用的均是卷积码,本文支持1/3、1/6和1/10 3种码率,3种码率的实现未采用删余的方式,而是通过查询编码映射表与状态转移表的方式实现[7]。分量码的状态转移表如表1所示。
表1 分量码的状态转移表
2现场可编程门阵列(FPGA)实现
本方案设定原始信息位为1 024 bit,码率为1/3、1/6和1/10 3种,交织器采用螺旋交织方式,编码后码长对应分别为3 072 bit、6 144 bit和1 0240 bit。整个编码器的结构框图如图2所示。
从图2可以看出,当外部启动编码开始信号后,编码器首先从缓存随机存储器(RAM)中读取一帧共1 024 bit信息位,并按照2 bit位宽进行输出从而完成符号映射。将映射后的512个信息符号分成前后相等的2包,每包长度为256。计算2包信息符号的初始状态并分别送入到分量编码器A1与A2中进行独立编码,并由编码控制模块控制编码码率。以1/3码率为例,编码器A1与A2查询内部编码映射表与状态转移表后输出码字长度均为768 bit,并将A1与A2编码后码字复接为1 536 bit进行输出。编码器B与编码器A工作流程类似,分为B1与B2分量编码器,只是在前端加有交织器,其输出码字长度也是1 536 bit。最后将编码器A与编码器B输出复接后完成整个编码流程。
图2 编码器的结构框图
为了尽量减小系统时延与现场可编程门阵列(FPGA)逻辑单元的使用,初始状态计算模块、交织器模块和分量编码器模块均采用查表法,其中分量编码器包括了1/3、1/6、1/10 3个编码映射表,并统一使用一个状态转移表。为了尽量做到流水处理,在进行待编码数据从缓存RAM读取的同时就要开始初始状态计算,当初始状态计算完毕后分量编码器A1即可流水进行编码操作。当分量编码器A1与A2输出编码后数据时,交织器同时开始工作,保证了编码器B在较短时延后输出结果。
在Vivado环境下,采用Xilinx公司K7系列的K7325T芯片进行Turbo编码器设计与硬件实现,其中资源占用情况为:Flip Flops为1 665,LUT Element为640,Block RAM为2,编码模块最高时钟速率为331 MHz。编码器的时序仿真图如图3所示。
图3 编码器的时序仿真图
从图3可以看出,本设计系统时钟采用64 MHz,编码总时延约为4.8 μs,4个分量编码器的工作时间均为4 μs。当start_coding脉冲产生后编码器开始工作,并将编码器工作状态busy信号置高。经过20.4 μs后编码器产生一个finish_coding脉冲标志并将busy信号置低,这标志着一次编码工作结束。
3结束语
本文对一种特殊的Turbo卷积码编码方式进行了理论分析与研究,对编码器中各子模块的原理与实现方法进行了说明,最后采用Xilinx公司K7系列的K7325T芯片进行了方案验证,结果表明该编码器占用逻辑资源较少,在系统时钟为64 MHz的情况下,时延仅为4.8 μs。
参考文献
[1]王新梅,肖国镇.纠错码原理与方法[M].修订版.西安:西安电子科技大学出版社,2001.
[2]周建钦,王喜凤,谢振飞,等.嵌入法构造线性分组码咬尾网格[J].电子学报,2009,37(8):1751-1756.
[3]吴伟陵.通向信道编码定理的Turbo码及其性能分析[J].电子学报,1998(7):35-40.
[4]Chen Yiqi.Computation of initial state for tail-biting trellis[J].IEEE Transactions on Communications,2004,53(4):1268-1278.
[5]白宝明,马啸,王新梅,等.随机交织器的设计与实现[J].通信学报,2000,21(6):6-11.
[6]史治平,靳蕃.高码率Turbo码中确定性交织器的设计[J].西南交通大学学报,2002,37(5):544-547.
[7]宋英杰.Turbo高速编译码技术研究[J].现代导航,2015(1):47-52.
Coder Design and Realization of A Low Time Delay Turbo Code
LI Chao
(The 20th Research Institute of CETC,Xi’an 710068,China)
Abstract:This paper introduces the coding principle of a kind of Turbo code,and analyses the structure of tail-biting convolutional code used in helical interleaver and sub-encoder,explains the realization structure of coder,and uses K7325T chip of Xilinx Co. to perform the project validation.The result shows that the coding time delay is only 4.8 μs when the sytem clock is 64 MHz.
Key words:Turbo code;tail-biting convolutional code;low time delay
收稿日期:2015-03-22
DOI:10.16426/j.cnki.jcdzdk.2015.03.031
中图分类号:TN911.22
文献标识码:A
文章编号:CN32-1413(2015)03-0114-03