码率可配置Turbo译码器设计与实现
2015-12-31宋英杰
宋英杰
(中国电子科技集团公司第二十研究所,西安 710068)
0 引言
文章[1]提出了一种高速Turbo编译码方法,本文围绕这种译码方法介绍码率可配置Turbo译码器的具体设计与实现。译码器支持固定迭代次数译码和动态停止迭代译码,并可灵活支持1/3、1/6、1/10三种码率。图1为设计的Turbo译码器的总体结构框图。它主要包含输入缓存模块、译码逻辑控制模块、SISO译码模块、交织/解交织模块、停止迭代判决模块、硬判决模块和输出缓存模块。
1 输入缓存模块设计
译码器需要存储整块译码数据供给译码过程使用,所以需要输入缓存模块。此缓存器采用四个双口RAM分别供给SISO译码器A1、A2、B1、B2使用。此处Turbo译码采用(6,2)量化方式,每个双口RAM深度为256,数据位宽为60bit,(对于1/3码率来说,每个地址中的数据包含3个编码符号即低18bit有效对于1/6码率来说,每个地址中的数据包含6个编码符号即低36bit有效;对于1/10码率来说,每个地址中的数据包含10个编码符号即60bit有效)。这样设计保证了1/3、1/6、1/10三种码率数据存储深度相同,方便译码逻辑控制模块对整个译码流程的控制。
2 SISO译码模块
图1 Turbo译码器的总体结构框图
采用子块整体法进行译码[3],其基本思想是将接收到的子块数据序列作为一个整体进行译码。子块整体法的具体步骤如下:
(1)顺序读取译码输入信息,计算前向递归Alpha和分支度量Gamma并存储。
(2)当整个子块的Alpha和Gamma计算完成后,逆序读取Gamma,计算后向递归Bata,同时逆序读取Alpha,继而计算对数似然比和外信息。
2.1 Gamma计算模块
Gamma计算模块的功能是计算译码中每一时刻的分支度量值,计算出来的Gamma值将用于计算前向状态度量Alpha和后向状态度量Bata。对于三种码率的可配置功能可通过选择器实现。编码输出不同每种码率的Gamma计算也不同,根据译码类型选择对应的接收数据进入相应Gamma计算部分。例如译码类型为1/3码率,则选择接收数据y1、y2和y3进入1/3码率Gamma计算部分。实现框图如图3所示。
为了兼容三种码率和考虑到实现的稳定性,每一时刻Gamma值计算需要4个时钟周期。Gamma时刻1的值单独计算,Gamma时刻2至256的值和Alpha时刻1至255的值同时计算以节约时间。
图3 Gamma计算模块实现框图
2.2 Alpha计算模块
此模块的功能是在给定一个初始值的情况下,利用Gamma计算模块所计算出来的分支度量Gamma值做连续递推得出每一个时刻的前向状态度量。计算后一时刻Alpha值需要前一时刻计算出来的Alpha值,所以Alpha计算模块要进行的是一种递推运算,而在连续递推的过程中,可能会导致定点数的溢出,所以在特定的时刻对计算出来的Alpha值进行归一化来防止溢出。
本次实现的Turbo码有16个状态,在任一时刻需要计算所有状态的前向状态度量值,在此设计中任一时刻需要计算16个前向度量值即16个Alpha值。假设每一个前向度量值称为一个节点,任一时刻需要计算16个节点的Alpha值。任一节点的计算都需要求出4个求和项的最大值,所有码率采用相同的状态转移图,所以Alpha计算模块可共用。以任一节点的计算为例来说明Alpha值的计算过程,如图4所示。
命题2.4 设伪BCI-代数X的犹豫模糊集,则为X的犹豫模糊反群滤子当且仅当对任意γ ∈ P([0,1]), 要么 ∅, 要么为X的反群滤子.
图4 Alpha计算模块实现框图
gamma00、gamma01、gamma10、gamma11 是4个分支度量的输入,alpha00、alpha01、alpha10、alpha11是4个前向度量值的输入,对输入按下式进行相加运算:
然后比较器对sum1~sum4做比较选出2个极大值max1和max2,再经过一次比较器选出max1和max2的最大值max,这个max也就是sum1~sum4的最大值。将max进行归一化,归一化后的值作为此节点的前向状态度量值输出,并且反馈到下一时刻作为输入端前向度量值。为了节约译码时间,系统在运算时采用同一时刻16个节点同时进行的方式。
每一时刻Alpha值计算需要4个时钟周期,故256时刻共用1024个时钟周期。
Bata计算模块实现方法和Alpha计算模块类似,此处不再赘述。需要说明的是Bata计算与对数似然比和外信息计算同时进行。
2.3 对数似然比和外信息计算模块
此模块的功能是计算下一分量译码所需要的外信息和用于硬判决所需要的对数似然比。此模块的运算过程[2]首先是计算系统比特对“00”、“01”、“10”、“11”的对数似然比 llr00、llr01、llr10、llr11,利用这4个值和先验信息la1、la2求出每个比特的对数似然比和外信息。之后将对数似然比和经限幅后外信息输出。所有码率采用相同的状态转移图,所以对数似然比和外信息计算模块可共用。图5是此模块的结构示意图。
图5 对数似然比和外信息计算模块结构示意图
由上图可以看出此计算模块主要由alpha、bata、gamma相加运算、Max1_16、对数似然比计算和外信息计算组成。相加运算是求出16个alpha+bata+gamma的求和项;Max1_16是求出这16个求和项的最大值;对数似然比计算是由llr00、llr01、llr10、llr11计算出信息比特对中每个信息比特的对数似然比llr1和llr2;外信息le1和le2计算是由llr1、llr2、la1和la2计算出外信息,然后将外信息乘以一个比例因子,限幅处理后输出。
Max1_16模块的功能是求出 16个alpha+bata+gamma的求和项的最大值。这个模块分为第一级比较、第二级比较、第三级比较和第四级比较。
每一时刻对数似然比和外信息计算需要11个时钟周期,共用1027个时钟周期,详细计算时间如图7所示。
图6 Max1_16内部结构示意图
图7 详细计算时间示意图
2.4 Alpha存储模块和Gamma存储模块
Alpha存储模块是由16个双口RAM(AlphaStoreMem)组成。每个AlphaStoreMem的数据宽度为每个Alpha数据的宽度18bit,深度为256,用于存储每个时刻计算出来Alpha值。
Gamma存储模块由64个双口RAM(Gamma StoreMem)组成。每个GammaStoreMem的数据宽度为每个Gamma数据的宽度17bit,深度为256,用于存储每个时刻计算出来的Gamma值。存储的每一个子块的Gamma值会被逆序读出用于计算后向状态度量Bata、对数似然比和外信息。
2.5 Alpha初始值存储模块和Bata初始值存储模块
初始值存储模块的功能是将本次迭代译码分块边界处计算所得的前向状态度量Alpha和后向状态度量Bata的值保存起来,也就是说将Alpha计算模块最后一次(256次)迭代计算出的16个Alpha值和Bata计算模块最后一次迭代计算出的16个Bata值用寄存器保存起来,用作下次译码迭代Bata和Alpha递归计算的初始值。保存Alpha和Bata的初始值的寄存器在第一次加载之前都需要初始化。因初始和结束状态未知所以每个子块Alpha初始值都置为0,Bata初始值也置为0。
3 其余模块
译码逻辑控制模块在译码流程中对各个模块起控制作用,为各个模块提供相应的配置信息。
交织/解交织模块主要用于产生交织或者解交织过程所用到的交织地址。交织/解交织是根据SISO译码的需要完成外信息和对数似然比的交织/解交织处理。
由于要支持动态停止迭代译码机制,因此引入了停止迭代判决模块。当迭代后的译码结果满足停止迭代判决条件时,就产生停止迭代信号。
硬判决模块实际上就是在停止迭代后,根据B分量译码器输出的对数似然比符号硬判决成信息比特1或0。
输出缓存模块将硬判决后的译码结果经过串并转换成8bit后存入双口RAM中。双口RAM数据位宽8bit,深度为128。
图8 1024比特吞吐量波形
4 译码器的资源占用和吞吐量
4.1 资源占用
在ISE Design Suit 14.4下码率可配置Turbo译码器的资源占用情况如下表所示。选用Xilinx公司的XC7K325T-2FFG900I器件,译码器占用寄存器单元61242个,LUT单元98824个,RAM块64个。
4.2 吞吐量
对帧长1024比特的待译码数据的仿真波形如图8所示。
表1 译码器资源消耗
图8中,第一条线是译码开始时刻,第二条线是译码结束时刻。则两条线之间的时钟周期个数就是译一帧所用的时钟周期,为2215个clk,工作时钟频率为128MHz,周期为0.0078125us,则迭代一次时,译码器吞吐量为:
5 结束语
本文提出了码率可配置Turbo译码器硬件实现方案,详细介绍了硬件实现方案中的核心模块SISO译码模块的实现过程。最后给出译码器硬件资源消耗情况,并给出里译码器的吞吐量。
[1]宋英杰.Turbo高速编译码技术研究[J].现代导航,2015(1).47-52
[2]张婷.无线信道可配置Turbo译码组件技术研究[D].西安电子科技大学硕士学位论文,2009.
[3]郗莉.LTE系统Turbo高速译码算法研究[D].西安电子科技大学硕士学位论文,2010.