基于SSE的咬尾卷积码Viterbi译码方法

文档序号:7511196阅读:339来源:国知局
专利名称:基于SSE的咬尾卷积码Viterbi译码方法
技术领域
本发明涉及无线通信技术领域,尤其涉及一种基于SSE的咬尾卷积码Viterbi译码方法。
背景技术
在通信技术的发展过程中,人们对通信的准确性提出了很高的要求,为此,在数据传输过程中都采用信道编码技术。由于卷积码编码简单,性能优良被广泛采用。卷积码分为两种,一种是零尾卷积码Ovktl,m+1),在信息比特位编码结束后还要输入m个O ;另一种是咬尾卷积码,在编码前,用信息位的最后m个比特来初始化卷积码编码器,编码时具有相同的开始状态和结束状态。由于咬尾卷积码不用在每段信息位编码结束后输入m个0,所 以编码效率更高,在下一代通信系统中被广泛采用。例如在分时长期演进(Time DivisionLong Term Evolution, TD-LTE)中,其下行广播信道和控制信道均采用咬尾卷积码进行信道编码。尽管咬尾卷积码编码效率高,但其开始和结束状态均不未知,所以其译码算法比零尾卷积码复杂得多。为了减少复杂度,一般采用改进型循环维特比(Viterbi)译码算法进行译码,其算法思想是取原接收数据的前t时间内的码字序列复制拼接到原接收数据的尾部;取原接收数据的最后t时间内的码字序列复制到原接收数据的首部,把所有的状态看做起始和终止状态进行Viterbi译码。Viterbi算法是一种最大似然译码,在译码过程中要遍历所有可能的状态,所以其计算复杂度很高。例如(3,1,7)咬尾卷积码在使用Viterbi算法进行译码时,在每一时间内,要遍历64种状态,如此大的运算量对终端的处理速度提出了很高的要求。现有的实现方法大多数是采用单指令单数据流(Single Instruction Single Data, SISD)串行处理Viterbi译码算法中的加-比-选,遍历每一种状态。这种方法效率低,对通信带来的时延很大,仅适用于低速、小容量,对实时性要求低的通信系统。但是,随着通信技术的发展,低速、小容量的通信显然不能满足人们的需求,人们更希望速率高、实时性好的通信系统。在新提出的TD-LTE标准中,其下行的峰值速率是100Mbps,上行的峰值速率是50Mbps,这对终端的信号处理速度是一个巨大的挑战。自从Intel公司推出单指令多数据流扩展(StreamingSIMD Extensions, SSE)之后,人们逐渐开始研究利用SSE进行算法优化。SSE是一套专门为单指令多数据架构设计的指令集,它可以实现数据的并行处理,效率极高。例如,SSE使用处理器上128位的寄存器,一次可实现4对单精度浮点数的并行计算,其速度是SISD的4倍。例如(3,1,7)咬尾卷积码在使用Viterbi算法进行译码时,利用SSE对Viterbi算法进行优化,在每一时间内,要遍历64种状态,只需循环16次就行了,比用SISD处理快4倍。可见,利用SSE对算法进行优化,能提高信号处理的速度,减少时延,满足现代的高速率、大容量通信
发明内容
(一 )要解决的技术问题本发明要解决的技术问题是提供一种能够速度快、信号处理时延少的基于SSE的咬尾卷积码Viterbi译码方法。( 二 )技术方案为解决上述问题,本发明提供了一种基于SSE的咬尾卷积码Viterbi译码方法,该方法包括步骤SI.取原接收数据前t时间内的码字序列复制拼接到原接收数据的尾部,取原接收数据最后t时间内的码字序列复制拼接到原接收数据的首部,将每个接收码字序列时刻的一个码段内的Iltl个单精度浮点值分别复制Hltl份,分别存放到一个M位的寄存器内,每个寄存器存放Hltl个相同的值;
S2.对于每个接收码字序列时刻,在当前时刻内对所有可能状态,分别在假设当前时刻编码时输入为O和I的情况下,根据咬尾卷积码编码输出值和当前时刻接收到的数据,并行计算分支度量值,并将计算得到的分支度量值与前一时刻留存路径的度量值相加得到当前时刻的度量值,每次计算Hltl个度量值,Hl0为寄存器的位数除以单精度浮点数所占的位数;S3.对每两次计算得到的度量值进行并行比较,选择具有较大度量值的路径作为当前时刻的留选路径;S4.在最后一个时刻,选择具有最大度量值的状态为译码终止状态,进行回溯判决。优选地,所述t时间为5m_7m,其中,m为卷积码的编码约束长度。优选地,步骤S2进一步包括S2. I对每一时刻,将2m个状态分成2m/ (2m0)个块,对于每一块,按其状态的奇偶分成两组;S2. 2在假设当前时刻编码时输入为O的情况下,对于每一组的Hitl个状态,根据咬尾卷积码编码输出值与当前时刻接收到的数据,计算得到Hltl个分支度量的值,并将其放到一个M位的寄存器中;S2. 3将与步骤S2. 2中所述的每一组的Hitl个状态相连的前一时刻的度量值放到一个M位的寄存器中,与步骤S2. 2得到的Hitl个分支度量并行相加,得到编码时输入为O情况下当前时刻的Hltl个度量值;S2. 4在假设当前时刻编码时输入为I的情况下,对于每一组的Hitl个状态,根据咬尾卷积码编码输出值与当前时刻接收到的数据,计算得到Hltl个分支度量的值,并将其放到一个M位的寄存器中;S2. 5将与步骤S2. 4中所述的每一组的Hitl个状态相连的前一时刻留选路径的度量值放到一个M位的寄存器中,与步骤S2. 4得到的Hitl个分支度量并行相加,得到编码时输入为I情况下当前时刻的Hitl个度量值。优选地,所述Hltl个分支度量的值的计算方法为将所述Hltl个状态所对应的在输入为^情况下的编码输出的码段(σο,αι, η)的最闻位按倒序排列(α ()ο,···,βι ),α >),将这mQ个值放到一个M位的寄存器中,与步骤SI中存放的Hitl个单精度浮点值做与运算,一个码段内的其他的值按照此规律计算,将与运算之后的全部结果相加得到Hitl个分支度量值。
优选地,所述咬尾卷积码编码输出值根据卷积码的生成多项式矩阵,按照咬尾卷积码的编码原理计算得出。优选地,所述Hitl个分支度量的值的计算方法为将Hitl个状态所对应的在输入为I情况下的编码输出的码段KA,···凡,,)的最高位按倒序排列为(〃_···,% ,〃《>),这个值可以事先计算出来,将这Hltl个值放到一个M位的寄存器中与步骤SI中存放的Hltl个单精度浮点值Itl做与运算,一个码段内的其他的值按照此规律计算。然后再将与运算之后的结果相加得到Hltl个分支度量值。优选地,步骤S3进一步包括S3. I在假设当前时刻编码时输入为O的情况下,把每一块的奇数组和偶数组分别放到M位的寄存器中,进行并行比较,选择当前时刻的留选路径。S3. 2在假设当前时刻编码时输入为I的情况下,把每一块的奇数组和偶数组分别放到一个M位的寄存器中,进行并行比较,选择此时刻留选路径。优选地,在步骤S3. I中,选择当前时刻的留选路径的方法为在假设此时刻编码时输入为O的情况下,当前状态的下一状态只能是O 2-4-1中的一个,且满足状态a的前一个状态只能是(a << 1,(a << I) I I) 二者其中的一个,a e
,a取整数,a< < I表示a左移一位,在比较之后保存路径时,保存O或者I,保存度量值时选择较大值保存。优选地,在步骤S3. 2中,选择当前时刻的留选路径的方法为当前状态的下一状态只能是[2-4,2--1]中的一个,且满足状态a的前一个状态只能是(a<< 1,(a<< D I I) 二者其中的一个,a e [2m^,2m-l], a取整数,若a左移I位后,其值不在f1,2m-l]中,则将a的最高位去掉,比较之后保存路径时,保存O或者I,保存度量值时选择较大值保存。优选地,在步骤S4中,在回溯判决时,把所得到的状态a与2°"1比较,当a大于或等于2"1-1时,判为1,反之判为O。(三)有益效果本发明的基于SSE的咬尾卷积码Viterbi译码方法采用并行的每次计算都采用M位并行处理,显著提高了译码的速度,缩短了信号处理时间。


图I为依照本发明一种实施方式的基于SSE的咬尾卷积码Viterbi译码方法流程图。
具体实施例方式本发明提出的基于SSE的咬尾卷积码Viterbi译码方法,结合附图及实施例详细说明如下。如图I所示,依照本发明一种实施方式的基于SSE的咬尾卷积码Viterbi译码方法包括步骤SI.取原接收数据前t时间内的码字序列复制拼接到原接收数据的尾部,取原接收数据最后t时间内的码字序列复制拼接到原接收数据的首部,对每个接收码字序列时间内,假设此时刻的一个码段内的码长为IV将Iitl个单精度浮点值复制Hitl (m0为寄存器的位数除以单精度浮点数所占的位数)份,分别存放到Iitl个M位的寄存器内,每个寄存器存放Hltl个相同的值,t时间为5m-7m,其中,m为卷积码的编码约束长度。S2.对于每个接收码字序列时刻,在当前时刻,对所有可能状态,在假设当前时刻编码时输入为O的情况下,根据卷积码的生成多项式矩阵,按照咬尾卷积码的编码原理事先计算出编码输出值,根据计算的编码输出值和当前时刻接收到的数据,采用并行计算分支度量值,再与前一时刻的留存路径的度量值相加得到当前时刻的度量值,每次计算Hltl个度量值;在假设此时刻编码时输入为I的情况下,根据事先计算的编码输出值与接收到的数据,采用并行计算分支度量值,再与前一时刻留存路径的度量值相加得到当前时刻的度量值,每次计算Hl0个度量值。S3.对每两次计算得到的度量值进行并行比较,选择具有较大度量值的路径作为此时刻的留选路径。S4.在最后一个时刻内,选择具有最大度量值的状态为译码终止状态,进行回溯判 决。步骤S2进一步包括S2. I对每一时刻,将2m个状态分成2m/ (2m0)个块,对于每一块,按其状态的奇偶分成两组。S2. 2在假设当前时刻编码时输入为O的情况下,对于每一组,有Hitl个状态。对这mQ个状态,根据卷积码的生成多项式矩阵,按照咬尾卷积码的编码原理事先计算的编码输出值与当前时刻接收到的数据,计算得到Hi0个分支度量的值,将其放到一个M位的寄存器中。令^為,…,纥为根据卷积码的生成多项式矩阵,按照咬尾卷积码的编码原理事先计算的某个状态在当前时刻假设编码输入为O的情况下的编码输出的IItl个值,W,···又。为接收到的一个码段,则其分支度量值等于~&4()+61&1+- + \1&4。由于在步骤51中Λ4,-Jno已复制存放到%个M位的寄存器中。根据上述规律,计算得到Hltl个分支度量的值的方法为首先将Hitl个状态所对应的在输入为O情况下的编码输出的码段(Α),%·夂)的最高位按倒序排列为(《^^%七),化;),这个值可以根据卷积码的生成多项式矩阵,按照咬尾卷积码的编码原理事先计算出来,将这Hitl个值放到一个M位的寄存器中与步骤SI中存放的Hltl个单精度浮点值Itl做与运算,一个码段内的其他的值按照此规律计算。然后再将与运算之后的结果相加得到Hltl个分支度量值。S2. 3将与每组的Hitl个状态相连的前一时刻的度量值放到一个M位的寄存器中,与步骤S2. 2得到的Hitl个分支度量并行相加,得到假设输入O情况下当前时刻的Hitl个度量值。S2. 4在假设此时刻编码时输入为I的情况下,对于每一组,有Hi0个状态,根据卷积码的生成多项式矩阵,按照咬尾卷积码的编码原理事先计算的编码输出值与接收到的数据,按照步骤S2. 2中介绍的规律计算,得到Hitl个分支度量的值,将其放到一个M位的寄存器中。S2. 5将与这Hitl个状态相连的前一时刻留选路径的度量值放到一个M位的寄存器中,与步骤S2. 4得到的Hitl个分支度量并行相加,得到假设输入I情况下当前时刻的Hitl个度量值。
步骤S3进一步包括S3. I在假设当前时刻编码时输入为O的情况下,把第一块的奇数组和偶数组分别放到M位的寄存器中,然后进行并行比较,并按如下规律选择当前时刻的留选路径,余下的每一块都按照此规律比较。在咬尾卷积码编码时,把数据输入端的存贮器看做状态a的最高位,在假设此时刻编码时输入为O的情况下,当前状态的下一状态只能是O 2-4-1中的一个,且满足,状态a的前一个状态只能是(a << 1,(a << I) | I) 二者其中的一个,这里a e
,a取整数,a << I表示a左移一位。在假设此时刻编码时输入为I的情况下,则其当前状态的下一状态只能是[2^,2--1]中的一个,且满足,状态a的前一个状态只能是(a<< 1,(a<< I) I I) 二者其中的一个,这里a e [2^2--1],a取整数,若a左移I位后,其值不在 [2-12--1]中,则将a的最高位去掉。所以在比较之后保存路径时,只需要保存O或者I就行了,保存度量值时选择较大值保存S3. 2在假设当前时刻编码时输入为I的情况下,把第一块的奇数组和偶数组分别放到一个M位的寄存器中,然后进行并行比较,并按照步骤S3. 2中介绍的规律选择此时刻留选路径,余下的每一块都按照此规律比较。在步骤S4中,在回溯判决时,把所得到的状态a与2°"1比较,当a大于或等于21"1时,判为1,反之判为O。以下通过具体的实例来进一步说明本发明的方法。该方法包括步骤Al.取原接收数据的前5m时间内的码序列复制连接到原接收数据的最后面;取原接收数据的最后5m时间内的码序列复制连接到原接收数据的最前面,把所有的状态看作是开始和结束状态。对每个接收码字序列时间内,将此时刻的一个码段内%个单精度浮点值复制4份,分别存放到Iitl个128位的寄存器内,每个寄存器存放4个相同的值。A2.对每一时刻,将2m个状态分成2m/8个块,对于每一块,按其状态为奇为偶分成两组。A3.对于每一组的4个状态,在假设此时刻编码时输入为O的情况下,根据事先计算的编码输出值,按如下规律计算,得到4个分支度量的值,将其放到一个128位的寄存器中。令 ···,\为事先计算的某个状态在此时刻假设编码输入为O的情况下的编码输出的Iitl个值,W,…人为接收到的一个码段,则其分支度量值等于
+A &40-ι + ···+\ & 4。首先将4个状态所对应的在输入为O情况下的编码输出的码段K,的最高位按倒序排列(《^,…,化為。),这个值可以事先计算出来,将这4个值放到一个128位的寄存器中与步骤Al中存放的4个Itl做与运算,一个码段内的其他的值按照此规律计算。然后再将与运算之后的结果相加得到4个分支度量值。Α4.将与这4个状态相连的前一时刻的度量值放到一个128位的寄存器中,与步骤A3得到的4个分支度量并行相加,得到假设输入O情况下的、当前时刻的4个度量值。Α5.在假设此时刻编码时输入为I的情况下,对于每一组,有4个状态,根据事先计算的编码输出值,按照步骤A3中介绍的规律计算,得到4个分支度量的值,将其放到一个128位的寄存器中。Α6.将与这4个状态相连的前一时刻留选路径的度量值放到一个128位的寄存器中,与步骤A5得到的4个分支度量并行相加,得到假设输入I情况下的、当前时刻的4个度量值。A6.在假设此时刻编码时输入为O的情况下,把第一块的奇数组(1,3,5,7)和偶数组(2,4,6,8)分别放到128位的寄存器中,然后进行并行比较,并按如下规律选择此时刻的留选路径,余下的每一块都按照此规律比较。在咬尾卷积码编码时,把数据输入端的存贮器看做状态a的最高位,在假设此时刻编码时输入为O的情况下,则其当前状态的下一状态只能是O 2-4-1中的一个,且满足,状态a的前一个状态只能是(a<< 1,(a<< I) |1) 二者其中的一个,这里a e
,a取整数,a << I表示a左移一位。在假设此时刻编码时输入为I的情况下,则其当前状态的下一状态只能是[2^,2--1]中的一个,且满足,状态a的前一个状态只能是(a<< 1,(a<< I) I I) 二者其中的一个,这里a e [2^,2--1],a取整数,若a左移I位后,其值不在[2-12--1]中,则将a的最高位去掉。所以在比较之后保存路径时,只需要保存O或者I就行了,保存度量值时选择较大值保存 A7.在假设此时刻编码时输入为I的情况下,把第一块的奇数组(1,3,5,7)和偶数组(2,4,6,8)分别放到一个128位的寄存器中,然后进行并行比较,并按照上一步中介绍的规律选择此时刻留选路径,余下的每一块都按照此规律比较。AS.在最后一个时刻内,选择具有最大度量值的状态为译码终止状态,进行回溯判决,在回溯判决时,把所得到的状态a与21^1比较,当a大于或等于21^1时,判为1,反之判为O0选取TD-LTE协议中规定的(3,1,7)形式的咬尾卷积码按照上述方法进行解码,编码个数分别为100,400,800。用T优化旨表示使用传统的Viterbi译码方法译码的时间,T优化Jg表不使用本发明的Viterbi译码方法译码的时间,用T优化帛T优化旨/T优化自表不优化倍数。在试验中,分别选取了 100,400和800个比特进行编码。为了比较容易看出结果,每次译码时,重复译码10000次,然后算出重复译码10000次的运行前后的时间差,每次试验对1000个时间差求平均,得到的结果如表I所示。从表I可以看出,不论编码个数是100,400还是800,其优化前的时间是优化后的将近10倍。表I实验结果对比
权利要求
1.一种基于SSE的咬尾卷积码Viterbi译码方法,其特征在于,该方法包括步骤 51.取原接收数据前t时间内的码字序列复制拼接到原接收数据的尾部,取原接收数据最后t时间内的码字序列复制拼接到原接收数据的首部,将每个接收码字序列时刻的一个码段内的no个单精度浮点值分别复制Hitl份,分别存放到ー个M位的寄存器内,每个寄存器存放Hitl个相同的值,m0为寄存器的位数除以单精度浮点数所占的位数; 52.对于每个接收码字序列时刻,在当前时刻内对所有可能状态,分别在假设当前时刻编码时输入为O和I的情况下,根据咬尾卷积码编码输出值和当前时刻接收到的数据,并行计算分支度量值,并将计算得到的分支度量值与前一时刻留存路径的度量值相加得到当前时刻的度量值,毎次计算Hitl个度量值; 53.对每两次计算得到的度量值进行并行比较,选择具有较大度量值的路径作为当前时刻的留选路径; 54.在最后ー个时刻,选择具有最大度量值的状态为译码终止状态,进行回溯判決。
2.如权利要求I所述的方法,其特征在于,所述t时间为5m-7m,其中,m为卷积码的编码约束长度。
3.如权利要求2所述的方法,其特征在于,步骤S2进ー步包括 S2. I对姆ー时刻,将2m个状态分成2m/ (2m0)个块,对于姆ー块,按其状态的奇偶分成两组; S2. 2在假设当前时刻编码时输入为O的情况下,对于每ー组的Hitl个状态,根据咬尾卷积码编码输出值与当前时刻接收到的数据,计算得到Hltl个分支度量的值,并将其放到ー个M位的寄存器中; S2. 3将与步骤S2. 2中所述的每ー组的Hitl个状态相连的前一时刻的度量值放到ー个M位的寄存器中,与步骤S2. 2得到的Hitl个分支度量并行相加,得到编码时输入为O情况下当前时刻的Hltl个度量值; S2.4在假设当前时刻编码时输入为I的情况下,对于每ー组的Hitl个状态,根据咬尾卷积码编码输出值与当前时刻接收到的数据,计算得到Hltl个分支度量的值,并将其放到ー个M位的寄存器中; S2.5将与步骤S2. 4中所述的每ー组的Hitl个状态相连的前一时刻留选路径的度量值放到ー个M位的寄存器中,与步骤S2. 4得到的Hitl个分支度量并行相加,得到编码时输入为I情况下当前时刻的Hi0个度量值。
4.如权利要求3所述的方法,其特征在于,所述咬尾卷积码编码输出值根据卷积码的生成多项式矩阵,按照咬尾卷积码的编码原理计算得出。
5.如权利要求3所述的方法,其特征在于,所述Hitl个分支度量的值的计算方法为 将所述Hltl个状态所对应的在输入为O情况下的编码输出的码段(《0,Α,···,、)的最高位按倒序排列(fiV A,%>),将这Hitl个值放到ー个M位的寄存器中,与步骤SI中存放的mQ个单精度浮点值做与运算,一个码段内的其他的值按照此规律计算,将与运算之后的全部结果相加得到Hi0个分支度量值。
6.如权利要求3所述的方法,其特征在于,所述Hitl个分支度量的值的计算方法为 将Hltl个状态所对应的在输入为I情况下的编码输出的码段為,…,夂)的最高位按倒序排列为0 %e,···為、為O),这个值可以事先计算出来,将这Hltl个值放到ー个M位的寄存器中与步骤SI中存放的HItl个单精度浮点值Itl做与运算,一个码段内的其他的值按照此规律计算。然后再将与运算之后的结果相加得到Hltl个分支度量值。
7.如权利要求I所述的方法,其特征在于,步骤S3进ー步包括 S3.I在假设当前时刻编码时输入为O的情况下,把每ー块的奇数组和偶数组分别放到M位的寄存器中,进行并行比较,选择当前时刻的留选路径。
S3.2在假设当前时刻编码时输入为I的情况下,把每ー块的奇数组和偶数组分别放到ー个M位的寄存器中,进行并行比较,选择此时刻留选路径。
8.如权利要求7所述的方法,其特征在于,在步骤S3.I中,选择当前时刻的留选路径的方法为 在假设此时刻编码时输入为O的情况下,当前状态的下ー状态只能是O 2^-1中的一个,且满足状态a的前一个状态只能是(a<< 1,(a<< I) |1) 二者其中的ー个,a e [O,2m^-l],a取整数,a << I表示a左移一位,在比较之后保存路径时,保存O或者1,保存度量值时选择较大值保存。
9.如权利要求8所述的方法,其特征在于,在步骤S3.2中,选择当前时刻的留选路径的方法为 当前状态的下ー状态只能是DnriJni-I]中的ー个,且满足状态a的前一个状态只能是(a<< 1,(a<< I) I I) 二者其中的ー个,a e [2"1'2m_l],a取整数,若a左移I位后,其值不在[212--1]中,则将a的最高位去棹,比较之后保存路径时,保存O或者1,保存度量值时选择较大值保存。
10.如权利要求9所述的方法,其特征在于,在步骤S4中,在回溯判决时,把所得到的状态a与21^1比较,当a大于或等于21^1时,判为1,反之判为O。
全文摘要
本发明公开了一种基于SSE的咬尾卷积码Viterbi译码方法,涉及无线通信技术领域。包括步骤S1.取原接收数据前t时间内和最后t时间内的码字序列分别复制拼接到原接收数据的尾部及首部,将每个接收码字序列时刻的一个码段内的n0个单精度浮点值分别复制m0份,放到n0个M位的寄存器内;S2.在当前时刻内对所有可能状态,分别在假设此时刻编码时输入为0和1的情况下,并行计算分支度量值,将分支度量值与前一时刻留存路径的度量值相加得到当前时刻的度量值;S3.选择当前时刻的留选路径;S4.选择具有最大度量值的状态为译码终止状态,进行回溯判决。本发明的方法显著提高了译码的速度,缩短了信号处理时间。
文档编号H03M13/23GK102684710SQ20121014726
公开日2012年9月19日 申请日期2012年5月11日 优先权日2012年5月11日
发明者李云洲, 王京, 肖立民, 肖若贵, 赵熠飞, 钟晓锋 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1