背景技术
Turbo译码器被广泛应用在许多无线通讯设备中,随着无线通讯技术的发展,数据传输速率的不断提高,对Turbo译码器实时译码性能的要求也越来越高,这就要求不断降低译码时延,提高Turbo译码的吞吐率。
Turbo译码器对一帧长度为N的数据计算顺序为分支转移度量、前向状态度量、后向状态度量、对数似然比。
图1显示了Log-MAP算法译码顺序,如图1所示,Log-MAP算法是MAP算法的对数域实现,其计算步骤如下:
从k=0开始,根据下式计算分支度量值
其中,称γ为分支度量参数,k为时间下标,m为状态下标,σ为常数,xk为信道观测序列,yk为校验序列,p为的先验信息。
在k=0时,初始化前向路径度量A,并根据下式利用从k=0到k=N-1计算并存储前向路径度量
这里,称α为前向路径度量参数。
在k=N-1时,初始化后向路径度量B,并根据下式利用从k=N-2到k=0计算并存储后向路径度量
这里,称β为前向路径度量参数。
根据下式从k=0到k=N-1计算信息比特对数似然比LLR:
根据LLR计算外信息Le:
将外信息作为下一次迭代时计算的先验信息,循环迭代运算上述过程至达到最大的迭代次数,并根据最后一次迭代过程中的LLR做出相应的判决输出。
其中,max*(x,y)=ln(ex+ey)=max(x,y)+ln(1+e-|x-y|),包含求最大值运算和修正函数f(x)=ln(1+e-x)运算。
在进行Turbo译码时,往往需要先把一帧数据全部接收完,才可以开始译码。因为一帧数据的长度等于交织器的大小,所以如果交织器长度很大时,译码时延会很长,需要的存储空间很大,会限制译码效率。
使用滑窗算法,可以有效改善上述问题。滑窗算法的主要思想是:将一帧的数据分成等长的子帧,称每个子帧为一个窗口。首先计算前两个窗口的分支状态度量γ和第一个窗口的前向状态度量α。将第二窗的后向状态度量的初始值设定为一个等概值,然后以第二个滑动窗最后一个网格计算出的无效β值作为第一个滑动窗计算有效β时的初始值,逆推出第一窗每个网格时刻的有效β值。这样第一个窗口的γ、α、β值都有了,就可以计算出第一窗口的似然比LLR了。如此依次计算第二个和第三个滑动窗的有效β。
对于滑窗算法,只要保证窗口长度是所使用的卷积码约束长度的5到8倍,就可以保证译码性能的损失较小。
普通滑动窗会给***解码性能带来较大影响,其原因主要是β的逆向递推受到影响。对于未加窗的解码过程来说,***起始和结束状态都固定为零,因此α、β的初始值可以确定,而加窗后,虽然α不受影响,但β在分段逆向递推时,却由于该断点处状态不明,导致β的正确概率下降,从而影响整个解码***的性能。滑动窗的长度越短,分段越多,引入的不正确概率也越大,***性能也就越差。
滑动窗的长度若是偏差较大,则会导致流水的过程中,浪费许多时间在不同滑窗之间的等待上,从而使得译码延时增大,译码性能下降,如图2所示。
具体实施方式
以下结合附图对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图4是本发明的对Turbo译码码块进行滑窗划分的方法的简要流程图。如图4所示,该方法包括:
步骤S1、确定Turbo译码码块的大小。
步骤S2、根据所述Turbo译码码块的大小和滑窗大小间的允许偏差,确定处理所述译码码块所需的滑窗的大小和个数,以降低处理所述译码码块的时延。
所划分出的滑窗分为3类,第一类滑窗是指所划分的大小与预设值相同的滑窗,第二类滑窗是指所划分的大小与预设值的偏差恰好等于允许偏差的滑窗,第三类滑窗是指所划分的大小与预设值的偏差在允许偏差范围内的滑窗。
具体的,在一种具体实施方式中,步骤S2首先根据Turbo译码码块的大小,确定第一类滑窗的大小,然后根据第一类滑窗的大小和滑窗长度间的允许偏差,确定第一类滑窗、第二类滑窗和第三类滑窗的大小及相应的个数。
步骤S2中所述第一类滑窗的大小的选取方法为:按照所述第一类滑窗大小计算出的滑窗总数与所述滑窗长度间的允许偏差的乘积应大于等于所述第一类滑窗大小的一半,即所述第一类滑窗的大小与所述码块长度以及所述滑窗长度间的允许偏差的关系为:CB_SIZE/SW_SIZE0*δ≥SW_SIZE0/2,其中,SW_SIZE0为所述第一类滑窗的大小,CB_SIZE为所述码块的大小,δ为所述滑窗长度间的允许偏差,其中,SW_SIZE0为正整数;然后,按照所述第一类滑窗大小计算出的滑窗总数应当小于等于设定的最大滑窗个数,若所述的滑窗总个数不大于设定的最大滑窗个数,则按照计算出的滑窗总个数进行滑窗划分,若所述的滑窗总个数大于设定的最大滑窗个数,则重新选取所述第一类滑窗的大小,并计算滑窗总个数和剩余比特大小。
确定第一类滑窗大小之后,还计算滑窗总个数Num和剩余比特Len的大小。
具体来说,可以首先确定几个可选的第一类滑窗长度的预设值。该预设值可以由Turbo译码器根据具体环境自动设置或由技术人员预先设置。例如:第一类滑窗长度可以设置为16,32,64,128或随意个数组成的集合。
在Turbo译码器的实际应用中,一种实施方式是,对于给定长度的码块,选择的第一类滑窗长度与最终确定的滑窗个数成反比关系。即在滑窗划分的过程中,选择的第一类滑窗长度越短,则滑窗的个数越多,引入的不正确概率越大,***性能也越差。进一步的,根据码块长度所处的范围,进行滑窗长度的选择,可以限制滑窗个数在一定的范围内。比如,较大的码块可以选取一个较大的第一类滑窗大小,并使滑窗总数小于最大的滑窗个数。
滑窗长度间的允许偏差可以根据滑窗的大小自动设置或由技术人员手动设置。在Turbo译码器的实际应用中,对不同长度的码块可以调整设置不同的滑窗长度间的允许偏差。比如:滑窗长度间的允许偏差可以设置为4。
一种实施方式是,根据所述码块的大小和滑窗长度间的允许偏差,对码块进行切分,确定Turbo译码器处理该码块所划分的滑窗大小和个数,保证了各个滑窗之间的长度偏差限定在设定的允许偏差的范围内。与现有技术相比,能够降低在Turbo译码器在译码过程中的时延,从而达到提高译码吞吐率的目的。
在一种具体实施方式中,第一类滑窗的大小与码块大小以及允许的滑窗大小偏差的关系为:
SW_SIZE0*SW_SIZE0≤2*CB_SIZE*δ,其中,SW_SIZE0为所述第一类滑窗的大小,CB_SIZE为所述码块的大小,δ为所述允许的滑窗大小偏差。
图5是本发明的对Turbo译码码块进行滑窗划分的方法的具体流程图。如图5所示,步骤S2对于所处理的每一个码块,执行以下步骤:
步骤S201、根据所述码块的大小,确定第一类滑窗的大小和总的滑窗个数。
其中,所述SW_SIZE0应小于等于的向下取整。
所述的第一类滑窗大小SW_SIZE与码块长度及初步确定的滑窗的总个数Num的关系为:即根据所述码块大小和第一类滑窗的大小,初步确定的滑窗的总个数Num等于CB_SIZE/SW_SIZE0的向下取整。进一步的,所述的第一类滑窗的大小SW_SIZE0的值应当为正整数,所述的允许的滑窗大小偏差δ的值也应当为正整数。
例如:Turbo译码器设置滑窗间的允许偏差为4,检测出CB_SIZE=5120,则 可以取SW_SIZE0的大小为64。则滑窗的总个数为
步骤S202、判断所述的初步确定的滑窗总个数Num是否大于最大的滑窗个数Num_max,若该滑窗总个数Num大于最大的滑窗个数,则执行步骤S203,若该滑窗总个数Num不大于最大的滑窗个数,则执行步骤S204。
步骤S203,重新选取所述第一类滑窗的大小。
例如:Turbo译码器设置的最大滑窗个数为40,获取的当前准备处理的码块大小为5120,选取的滑窗长度为64,则计算出的滑窗总个数为80,大于设定的最大滑窗个数。因此,可以将滑窗数设置为最大滑窗个数40,则滑窗的大小或者直接选取滑窗的大小为160,则滑窗总个数为
步骤S204,计算剩余比特的长度Len。
其中,所述的第一类滑窗大小SW_SIZE0、所述的码块大小CB_SIZE以及剩余比特的长度Len的关系为:Len=CB_SIZE%SW_SIZE0,如图3所示。图3是对码块滑窗进行预划分的示意图。
步骤S205,判断所述的剩余比特的大小是否大于滑窗间的允许偏差δ,若是,则执行步骤S207,若否,则执行步骤S206。
步骤S206,将剩余比特的长度Len合并至前一个滑窗上,如图6所示。
具体的,设置第一类滑窗的大小SW1_SIZE为SW_SIZE0,第一类滑窗的个数Num1为Num-1;第二类滑窗的大小SW2_SIZE为SW_SIZE0+Len,第二类滑窗的个数Num2为1。
步骤S207,判断所述的剩余比特的大小是否大于Num*δ,若是,则执行步骤510,若否,则执行步骤509。
步骤S208,将Len进行划分,添加到之前的滑窗上,如图7所示。
具体的,第二类滑窗的个数与剩余比特的大小有如下关系:Num2=Len/δ。
其中,所述第二类滑窗的个数Num2等于Len/δ的向下取整。所述第二类滑窗的大小SW2_SIZE为SW_SIZE0+δ。
若Len不能被δ整除,则存在第三类滑窗。
其中,所述第三类滑窗的大小SW3_SIZE为SW_SIZE0+Len-Num2*δ,所述第三类滑窗的个数Num3为1。所述第一类滑窗的大小SW1_SIZE为SW_SIZE0,第一类滑窗的个数Num1为Num-Num2-1。
进一步的,若Len能被δ整除,则不存在第三类滑窗。
所述第一类滑窗的大小SW1_SIZE为SW_SIZE0,第一类滑窗的个数Num1为Num-Num2。
步骤S209,判断所述的剩余比特的大小是否大于SW_SIZE0-δ,若是,则执行步骤S211,若否,则执行步骤S210。
步骤S210,从之前的滑窗中取出部分比特,添加到Len上,如图8所示。
具体的,所述第二类滑窗的个数Num2与剩余比特有如下关系:
其中,Num2的个数为(SW_SIZE0-δ-Len)/δ向上取整,第二类滑窗的大小SW2_SIZE为SW_SIZE0-δ。
若(SW_SIZE0-Len-δ)不能被δ整除,则存在第三类滑窗。
所述第三类滑窗的大小SW3_SIZE为Len+Num2*δ,第三类滑窗的个数Num3为1。所述第一类滑窗的大小SW1_SIZE为SW_SIZE0,第一类滑窗的个数Num1为Num-Num2-1。
进一步的,若(SW_SIZE0-Len-δ)能被δ整除,则不存在第三类滑窗。
所述第一类滑窗的大小SW1_SIZE为SW_SIZE0,第一类滑窗的个数Num1为Num-Num2+1。
步骤S211,直接将Len视为第二类滑窗,如图9所示。
其中,设置所述第一类滑窗的大小SW0_SIZE为SW_SIZE0,第一类滑窗的个数Num0为Num。第二类滑窗的大小SW1_SIZE为Len,第二类滑窗的个数Num1为1。
本发明在指定时间内,依次确定所述Turbo译码器处理每一个码块所进行的码块划分,并依次对每一个码块进行译码,其中,译码一个码块所依据的滑窗划分即为所确定的所述Turbo译码器处理这一个码块所进行的码块划分,以减少译码时延,提高译码吞吐率。
本提供的对Turbo译码码块进行滑窗划分的方法,能够根据码块的大小和滑窗长度间的允许偏差,对码块进行切分,确定Turbo译码器处理该码块所划分的滑窗大小和个数,保证了各个滑窗之间的长度偏差限定在设定的允许偏差的范围内。与现有技术相比,本发明能够降低在Turbo译码器在译码过程中的时延,从而达到提高译码吞吐率的目的。
本发明还提供一种Turbo译码的滑窗划分装置,如图10所示,该装置包括:
码块大小获取模块1,用于确定Turbo译码码块的大小。
处理模块2,用于根据所述译码码块的大小与滑窗大小间的允许偏差,确定处理所述码块所需的滑窗大小和个数,以降低处理所述译码码块的延时。
本发明提供的对Turbo译码的滑窗划分装置,能够根据码块的大小和滑窗大小间的允许偏差,通过处理模块2确定译码每一个码块所进行的滑窗,从而使得各个滑窗之间的大小偏差限定在设定的允许偏差范围内。与现有技术相比,本发明能够降低在Turbo译码器流水译码过程中的时延,从而达到提高译码吞吐率的目的。
进一步的,所述处理模块2包括:
第一类滑窗大小计算单元21,用于根据码块长度和滑窗长度间的允许偏差,确定第一类滑窗大小,并计算最终的滑窗总数及剩余比特数。
其中,所述第一类滑窗大小SW_SIZE0应小于等于的向下取整,所述的SW_SIZE0的大小与码块长度及滑窗的个数的关系为:
进一步的,所述第一类滑窗大小计算单元21,还能够检测所述的滑窗总个数是否大于最大的滑窗个数。若不大于,则按照计算出的滑窗总个数进行滑窗划分。若大于,则重新选取所述第一类滑窗的大小,并计算滑窗总个数和剩余比特大小。
滑窗划分单元22,用于根据所述的滑窗总数和剩余比特数,确定不同类型滑窗的大小和个数。
进一步的,所述滑窗划分单元22,还能够根据设置的第一类滑窗长度和滑窗长度间的允许偏差,对码块进行切分,使得各个滑窗之间的长度偏差限定在设定的允许偏差的范围内。
译码单元23,用于按照划分后的滑窗的所述码块进行译码。
进一步的,所述译码单元23还用于依次对每一个码块进行译码,其中,译码一个码块所进行的滑窗划分是根据所述滑窗划分单元所确定的,以降低Turbo译码器在流水译码过程中的时延。
所述处理模块2,还用于在指定时间内,依次确定所述Turbo译码器处理每一个码块所进行的滑窗划分。
其中,译码一个码块所依据的滑窗划分即为所述处理模块所确定的所述Turbo译码器处理这一码块所进行的码块划分。
本实施例提供的对Turbo译码码块进行滑窗划分的装置,能够根据码块的大小和允许的滑窗大小偏差,通过处理模块确定Turbo译码器译码每一个码块所进行的滑窗划分,从而使得各个滑窗之间的长度偏差限定在设定的允许偏差范围内。与现有技术相比,本发明能够降低在Turbo译码器流水译码过程中的时延,从而达到提高译码吞吐率的目的。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。