APP下载

一种导航信号用Turbo码编译码FPGA实现

2015-01-01罗显志高东博

无线电工程 2015年3期
关键词:译码器交织译码

罗显志,高东博

(河北省卫星导航技术与装备工程技术研究中心,河北石家庄050081)

0 引言

Turbo码又称并行级联卷积码(Parallel Concatenated Convolutional Codes,PCCC),1993 年由 Berro[1]等人在ICC国际会议上提出。由于其充分利用了Shannon信道编码定理的随机化编码条件,因此获得几乎接近Shannon理论极限的译码性能。Turbo码在低信噪比应用环境下有着如此优异性能,这使得其在卫星通信中有着很大的应用前景[2,3]。新一代卫星导航系统导航信号体制也将Turbo码作为信道编码的方案之一。但是,Turbo码存在着译码复杂度大、译码时延长的问题,这使得实现和应用都受到了一定的局限。本文实现了一种导航信号用的码长为588、码率为1/2的Turbo码的FPGA编码器和译码器的布局布线、综合优化。实现结果表明,编码器消耗逻辑资源少于1%,存储器资源少于1%,最高主频高于200 MHz,在最大译码迭代次数为5时,译码器消耗逻辑资源1%,存储器资源少于1%,最高主频高于200 MHz。

1 导航用Turbo码结构

Turbo优异的译码性能源自于它独特的编码结构和迭代译码的思想。在Turbo码编码器中,为了得到更好的编码性能,一般采用递归系统卷积码(Recursive System Convolutional Codes,RSC)作为分量编码器。为了避免重复输出原比特序列,Turbo码的子编码器采用了RSC而不是非系统码(Nonsystem Convolutional Codes,NSC),这样对于相同的限制长度,虽然两者具有相同的最小自由距离,但在较小的信噪比时,前者的性能要略好一些。和传统的卷积码相比较,RSC码最大的特点是它存在着反馈。常用的RSC编码器一般由2~4级移位寄存器构成,如图1所示。

图1 下行导航信号编码器结构

编码器输入信息位294 bit,编码开始后,在294个连续的时钟内输出588 bit,在随后的6个时钟内输出12个卷尾比特,同时编码器归零。编码过程还包括交织器[4]和删余操作[5],向上进行信息编码,向下进行卷尾编码。分量码编码器内包含3个寄存器,即编码器记忆深度为3,状态数为8,整体是一个RSC码编码器,其生成多项式矩阵为:

式中,第1项的1表示信息位,即Turbo码是系统码;第2项分子多项式即对应于前馈多项式,分母对应于反馈多项式。Turbo内交织器的交织深度为294。删余表中0表示该比特删除,1表示该比特输出。删余表的信息比特和卷尾比特的删余规则如表1所示。

表1 Turbo编码器顶层端口说明

交织深度为294,输入分辨率为5 bit,迭代次数为5,采用Max-Log-MAP算法的译码器性能曲线如图2所示。

图2 下行导航信号Turbo码误码率曲线

图2中的曲线表明,在输入信号信噪比为3.5 dB时,Turbo译码器就能将误码率从3.38×10-2降低到 1.85 × 10-7。

2 Turbo编码器FPGA实现

编码器的硬件实现结构如图3所示。首先地址产生器获取帧长信息,完成交织地址生成的准备过程,同时信息序列被依次写入双口RAM,在待一帧数据写完后,地址产生器开始生成顺序地址和交织地址,双口RAM按2个地址读取信息序列X和交织后的信息序列X'进行RSC编码,最后经删除与复接单元输出。

图3 Turbo编码器硬件实现结构

Turbo编码器RTL级原理如图4所示。编码器包含1个控制模块,负责控制整体的时序逻辑;1个交织ROM,用于存储交织图样;1个消息RAM,用于缓存输入消息段数据帧;2个RSC编码器,进行1/2码率的Turbo编码,对2个RSC输出的码字中校验位进行删余,得到码率1/2的Turbo码,并进行适当的控制,输出12个卷尾比特,完成编码。

图4 Turbo编码器RTL级原理

Turbo编码器在ModelSim下的仿真波形如图5所示。图5中,clk为时钟信号,rst为复位信号,din为编码输入数据,ipt_rqs为编码数据输入帧头,ipt_vld为编码数据输入有效标志,opt_vld编码输出有效标志,code为编码输出。具体细节这里不再给出,经过局部放大,可以验证,编码无误。

编码器消耗寄存器数量为44,RAM资源均为3 234 bit,在Altera EP4SE360F35I4芯片上实现编码器消耗逻辑资源少于1%,内存资源少于1%,最高主频高于 257.56 MHz。

图5 Turbo编码器ModelSim仿真波形

3 Turbo译码器FPGA实现

目前,Turbo码译码算法主要分为两大类:由Viterbi演化而来的软输出维特比算法(Soft Output Viterbi Algorithm,SOVA)[6]算法 和性 能优 异 的BCJR算法[7]。SOVA是一种最大似然算法(ML),具有最低的译码复杂度,但是性能最差,并且译码性能不够稳定。BCJR则是最大后验概率算法(MAP)。BCJR算法具有最优的译码性能,但是由于计算中存在着大量的乘法和指数运算,译码复杂度高,不便于硬件实现,通常作为理论分析的参考。这2类算法在研究发展中自身也演变出很多算法,SOVA类的有传统SOVA、滑动窗SOVA和双向SOVA 等[6],MAP 类的有 MAP、Log-MAP 和 Max-Log-MAP[8-10]。Log-MAP 算法和 Max-Log-MAP 算法都是由MAP算法简化而来,通过将原来的运算转化到对数域进行,从而将乘法运算变成了加法运算,避免了指数运算,大大降低了译码复杂度。就译码性能而言,Log-MAP算法仅仅次于MAP算法,Max-Log-MAP算法略微次于Log-MAP算法。就译码复杂度而言,Max-Log-MAP算法的译码复杂度低于 Log-MAP算法,更易于硬件实现,特别是 FPGA实现[11,12]。

这里不再详细给出Turbo译码算法的推导过程,仅给出Turbo码译码Max-Log-MAP算法的FPGA实现方案。与编码器相对应的基于FPGA的Turbo译码器结构如图6所示,译码器1和译码器2分别与分量编码器1和分量编码器2相对应,交织器和解交织器与编码器中的交织器交织规则一致。译码器1软判决输出经交织后作为译码器2的先验信息Λ2( dk),与y2k和y1k一起进行译码;译码器2软判决输出经解交织后又反馈回译码器1作为其先验信息Λ1( dk),参与下一轮迭代,这样构成了一个循环迭代译码结构。

图6 Turbo译码器硬件实现结构

但是考虑到具体FPGA实现时,如果将一个完整的码字存入RAM计算α、β和γ,需要的RAM资源将随着码长显著增长,从而在实际实现时考虑滑窗处理。滑窗算法示意如图7所示。图7中,dummyBeta表示Beta的训练过程。滑窗算法要求计算dummyBeta是因为将数据分为多个窗口会打破传统译码器后向分支量度计算的连贯性,使得窗口初始值的设定成为困难,如果想减少由于初始化造成的性能降低,则必须对后向分支量度进行训练。这里为了减少后期对数据翻转的操作要求,采用在每个窗口内逆序输入训练所需数据。滑窗算法的每个操作窗口内,顺序输入数据用于Alpha计算的同时,逆序输入数据用于dummyBeta的计算来训练Beta,与此同时,Beta从dummyBeta的上一个操作窗口获得训练后的初始化值,计算后向分支度量,并计算LLR和Le,直到最后一个窗口,Beta的初始化值将来自尾比特的初始化过程tbInit。

图7 滑窗算法示意

Turbo译码器RTL级原理如图8所示。Turbo译码器包含1个译码器控制模块,用于译码器总体的时序逻辑控制;1个软输入软输出译码器(Soft Input Soft Output,SISO),用于 Max-Log-MAP 译码算法的计算和译码判决输出。译码器的量化采用分集量化处理,迭代次数为5,外层信道信息LLR量化为5 bit,其中1位表示符号位,2位表示整数位,2位表示小数位;中层先验信息(外信息)LLR量化为7 bit,其中1位表示符号位,4位表示整数位,2位表示小数位;内层状态量度信息量化为10 bit,其中1位表示符号位,6位表示整数位,3位表示小数位。具体的参数确定基于前期的量化仿真结果。滑窗的窗口长度选择为21,故而码长294×2+12=600的码字,每个分量码在卷尾初始化后的294个数据深度中,可以分为294/21=14个窗口。

图8 Turbo译码器RTL级原理

Turbo译码器在ModelSim下的仿真波形如图9所示。图中,clk为时钟信号;rst为复位信号;data为译码输入数据;rding为译码输入数据有效标志;opting为译码输出有效标志;infodec译码输出信号。具体细节这里不再给出,经过局部放大,可以验证,译码无误。

图9 Turbo译码器ModelSim仿真波形

该译码器消耗寄存器数量为991,RAM资源均为23 832 bit,在Altera EP4SE360F35I4芯片上实现编码器消耗逻辑资源少于1%,内存资源少于1%,最高主频达到217.89 MHz。

4 结束语

本文给出了一种应用于卫星导航系统的码率为1/2、交织深度为294、采用 RSC作为分量编码器Turbo编译码FPGA实现方案,采用了优化的编译码算法,降低了译码复杂度和译码延时,具有较高的实用价值。在Altera EP4SE360F35I4芯片内,编码器和译码器消耗逻辑资源少于1%,内存资源少于1%,最高主频高于200 MHz。

[1] BERROU C,GLAVIEUX A,THITIMAJSHIMA P.Near Shannon Limit Error-correcting Coding and Decoding:Turbo Codes[C]∥ ICC’93,Geneva,Switzerland,1993:1 064-1 070.

[2] 殷云志,韩明钥,张玉琴.Turbo乘积码在衰落信道中的应用[J].无线电通信技术,2014,40(3):72 -75.

[3] 冯 战,侯孝民,郑海昕,等.基于CCSDS标准的Turbo码译码性能仿真研究[J].无线电工程,2014,44(4):7-9,66.

[4] 杨 亮,胡家佺,马腾飞.Turbo码随机性交织器设计[J].无线电工程,2011,41(6):36 -39.

[5] 吴 丹,唐秋菊,梁保卫.删余Turbo乘积码的编译码算法分析[J].无线电工程,2011,41(12):26 -28.

[6] CHAIKALIS C,NORAS J M.Implementation of an Improved Reconfigurable SOVA/Log-MAP Turbo Decoder[C]∥ 3GPP.3G Mobile Communication Technologies,Third International Conference,2002:146 -150.

[7] BAHL L R,COKE J,JELINEK F,et al.Optimal Decoding of Linear Codes for Minimizing Symbol Error Rate[J].IEEE Trans.Inform Theory,1974:284 -287.

[8] SONG H,VIJAYA KUMAR B V K,KURTAS E.Effect of Transition Noise on Turbo Decoding for Optical Data Storage[C]∥ SPIE Int.Symp.Optical Memory and Optical Data Storage,2000:283 -288.

[9] VOGT,KOORA J,FINGEA K,et al.Comparison of Different Turbo Decoder Realizations for IMT-2000[C]∥IEEE GLOBECOM 99,Rio de Janeiro,1999:2 706 -2 708.

[10] AHMED I,ARSLAN T,BALOCH S.Improved Memory Strategy for Log-map Turbo Decoders[C]∥ SOC Conference,2005:103 -104.

[11]张永超,蒋 博,张志丽.Turbo码的 DSP和 FPGA实现之比较[J].无线电通信技术,2013,39(2):83 -86.

[12]罗少兰.基于C语言的Turbo码的DSP实现[J].计算机与现代化,2006,130(6):28-31.

猜你喜欢

译码器交织译码
“新”与“旧”的交织 碰撞出的魅力“夜上海”
分段CRC 辅助极化码SCL 比特翻转译码算法
基于校正搜索宽度的极化码译码算法研究
交织冷暖
高速码率兼容DVB-S2的LDPC译码器的FPGA实现
编码器和译码器综合实现数字显示
跟踪导练(一)5
金融骗局虚实交织
从霍尔的编码译码理论看弹幕的译码
奥运梦与中国梦交织延展