发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种应用矢量数字信号处理器的维特比译码的实现方法,充分利用矢量数字信号处理器的通用指令集,高效地实现维特比译码算法的网格图路径度量计算,有效地提高了译码吞吐率。
为实现上述目的及其他相关目的,本发明提供一种应用矢量数字信号处理器的维特比译码的实现方法,采用Radix-4蝶形运算进行网格图路径度量的计算;根据矢量数字信号处理器的数据通道宽度和指令并行度进行Radix-4蝶形运算的并行操作;采用矢量数字信号处理器中求最大值及序号的矢量指令完成状态回溯;回溯过程每次回溯2个信息比特。
根据上述的应用矢量数字信号处理器的维特比译码的实现方法,其中:每个Radix-4蝶形运算处理2次状态迁移。
根据上述的应用矢量数字信号处理器的维特比译码的实现方法,其中:Radix-4蝶形运算采用矢量数字信号处理器上矢量加和矢量间求最大值的指令实现。
根据上述的应用矢量数字信号处理器的维特比译码的实现方法,其中:求最大值及序号的矢量指令包括矢量间求最大值及序号的指令和矢量内求最大值和序号的指令。
根据上述的应用矢量数字信号处理器的维特比译码的实现方法,其中:针对分成16组的64状态的卷积码,第一个Radix-4蝶形运算表示为:
PMend=maxrow{[PMstart(0),PMstart(32),PMstart(16),PMstart(48)]+[P,-P,Q,-Q]+[S,S,-S,-S]}
其中,maxrow{ }表示对每一行求最大值;
出发状态路径度量矢量PMstart(0)、PMstart(32)、PMstart(16)和PMstart(48)分别为:
PMstart(0)=[pm(start_state=0),pm(start_state=0),pm(start_state=0),pm(start_state=0)]T
PMstart(32)=[pm(start_state=32),pm(start_state=32),pm(start_state=32),pm(start_state=32)]T
PMstart(16)=[pm(start_state=16),pm(start_state=16),pm(start_state=16),pm(start_state=16)]T
PMstart(48)=[pm(start_state=48),pm(start_state=48),pm(start_state=48),pm(start_state=48)]T
状态迁移的分支度量矢量P、Q和S分别为:
P=[p,-p,p,-p]T
Q=[q,-q,q,-q]T
S=[m,n,-m,-n]T
其中,p,q,m,n是Raidx-4蝶形运算单元中的4个分支度量,p和q是与第一个输入比特有关的分支度量;p是起始状态为0,输入比特为0的路径的分支度量;q是起始状态为16,输入比特为0的路径的分支度量;m和n是与第二个输入比特有关的分支度量;m是输入比特位0,结束状态为0的路径的分支度量,n是输入比特为0,结束比特为2的路径的分支度量。
根据上述的应用矢量数字信号处理器的维特比译码的实现方法,其中:回溯过程采用矢量数字信号处理器上的移位指令。
根据上述的应用矢量数字信号处理器的维特比译码的实现方法,其中:在最后状态的所有路径度量中找到最大值的序号,作为译码输出的路径的最末状态进行回溯操作。
根据上述的应用矢量数字信号处理器的维特比译码的实现方法,其中:回溯过程的公式如下:
State(n)=State(n+2)>>2+TB_duo_bits<<4
其中,TB_duo_bits为State(n+2)对应的回溯比特信息,State(n)表示输入比特为n时的状态,State(n+2)表示输入比特为n+2时的状态,<<表示左移位操作;>>表示右移位操作。
进一步地,根据上述的应用矢量数字信号处理器的维特比译码的实现方法,其中:TB_duo_bits是在进行每次蝶形运算时,每个结束状态从4条路径中得到的最大的路径度量的序号。
如上所述,本发明的应用矢量数字信号处理器的维特比译码的实现方法,具有以下有益效果:
(1)充分利用了矢量数字信号处理器的通用指令集,高效地实现维特比译码算法的网格图路径度量计算;
(2)有效地提高了维特比译码的吞吐率。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
由于现有技术中的viterbi译码算法的实现设计都是针对标量数字信号处理器或者硬件电路的结构,直接应用到矢量数字信号处理器上并不能充分发挥矢量数字信号处理器的能力。因此需要针对矢量数字信号处理器的架构特点改进viterbi译码的算法结构,使其在运算和数据流等方面都能最大程度的利用矢量数字信号处理器的能力,从而实现高效的译码能力。考虑到译码的具体过程与编码具体参数有关,以下描述以LTE规范中定义的卷积码生成器为例,其结构如图2所示。需要说明的是,本发明的核心内容不受卷积码生成器结构的限制。
viterbi译码过程中,主要的计算过程是在每一步状态迁移时,计算本次迁移时的各个分支度量(Branch Metric,BM)并更新各个状态的路径度量(Path Metric,PM)。根据状态迁移的特点,通常可以采用蝶形算法和加比选(ACS)运算单元来提高计算效率。其中,图5所示即为Radix-2蝶形运算单元表达状态迁移的示意图。但是,通常在矢量数字信号处理器中实现矢量的ACS运算单元成本过高,并且只能应用于Radix-2的蝶形运算中。
因此,本发明的应用矢量数字信号处理器的维特比译码的实现方法中,使用矢量DSP通用的指令集,采用Radix-4蝶形运算结构,可以有效提高计算效率。
首先,将卷积码生成器的64个状态分成16组,每一组4个状态,应用一个Radix-4蝶形运算。每个蝶形运算将处理2次状态迁移,即输入是比特n对应的状态的路径度量,输出为比特n+2对应的状态的路径度量。考虑卷积码生成器的结构,每个蝶形运算的可以分解为两阶段。
针对分成16组的64状态的卷积码,以第一个Radix-4蝶形为例,如图6所示,每个阶段内包括两个Radix-2的蝶形结构。对每一个stage n+2上的状态,都有从stage n的4个状态出发的4条路径。令4个Radix-2蝶形中的分支度量分别为p,q,m和n,则结束状态的路径度量分别为:
pm(end_state=000000)=MAX[pm(start_state=000000)+p+m,
pm(start_state=100000)-p+m,
pm(start_state=010000)+q-m,
pm(start_state=110000)-q-m)];
pm(end_state=000010)=MAX[pm(start_state=000000)-p+n,
pm(start_state=100000)+p+n,
pm(start_state=010000)-q-n,
pm(start_state=110000)+q-n)];
pm(end_state=000001)=MAX[pm(start_state=000000)+p-m,
pm(start_state=100000)-p-m,
pm(start_state=010000)+q+m,
pm(start_state=110000)-q+m)];
pm(end_state=000011)=MAX[pm(start_state=000000)-p-n,
pm(start_state=100000)+p-n,
pm(start_state=010000)-q+n,
pm(start_state=110000)+q+n)];
将公式中出发状态的路径度量和结束状态的路径度量依次表达为矢量形式,如下:
出发状态路径度量矢量:
PMstart(0)=[pm(start_state=0),pm(start_state=0),pm(start_state=0),pm(start_state=0)]T
PMstart(32)=[pm(start_state=32),pm(start_state=32),pm(start_state=32),pm(start_state=32)]T
PMstart(16)=[pm(start_state=16),pm(start_state=16),pm(start_state=16),pm(start_state=16)]T
PMstart(48)=[pm(start_state=48),pm(start_state=48),pm(start_state=48),pm(start_state=48)]T
结束状态的路径度量矢量:
PMend=[pm(end_state=0),pm(end_state=2),pm(end_state=1),pm(end_state=3)]T
其中,pm(start_state=N)表示出发状态为N的路径度量;pm(end_state=N)表示结束状态为N的路径度量。
状态迁移的分支度量矢量P、Q和S分别为:
P=[p,-p,p,-p]T
Q=[q,-q,q,-q]T
S=[m,n,-m,-n]T
其中,p,q,m,n是Raidx-4蝶形运算单元中的4个分支度量,p和q是与第一个输入比特有关的分支度量,其中p是起始状态为0,输入比特为0的路径的分支度量,q是起始状态为16,输入比特为0的路径的分支度量;m和n是与第二个输入比特有关的分支度量,其中m是输入比特位0,结束状态为0的路径的分支度量,n是输入比特为0,结束比特为2的路径的分支度量。
因此,整个Radix-4蝶形运算可以表示为:
PMend=maxrow{[PMstart(0),PMstart(32),PMstart(16),PMstart(48)]+[P,-P,Q,-Q]+[S,S,-S,-S]} (1)
其中,maxrow{ }指对每一行求最大值。
对于本领域技术人员而言,其余的Radix-4蝶形运算的方法依次类推,故在此不再赘述。
根据公式(1),Radix-4的蝶形运算可分解成2个4x4矩阵相加和一个按行求最大值的操作。4x4的矩阵相加即4个矢量相加操作。这些操作都对应矢量数字信号处理器通常的指令,包括矢量加和矢量间求最大值,因此可以容易的在矢量数字信号处理器上实现。
图7所示即为在矢量数字信号处理器上实现Radix-4蝶形运算的数据处理流程。其中,为了在完成路径度量更新的同时记录下回溯比特,矢量间求最大值的指令需要具有输出最大/最小值的序号的功能。当进行矢量比较时,矢量的顺序按照其对应的信息比特来进行,如图8所示。这样记录的最大值的序号就是信息比特,在回溯时可以直接使用。这样回溯比特记录的功能可以用求最大值及序号的矢量指令完成。
同时,从stage n到stage n+2总共16个Radix-4蝶形运算的运算结构是完全一致的。因此,可以根据矢量数字信号处理器的数据通道宽度和指令并行度进行扩展,在同样的时钟周期内处理多个Radix-4蝶形运算,从而提高译码吞吐率,如图9所示。
当完成整个网格图上的路径度量计算后,对于没有强制结束收尾比特的编码,需要在最后stage的所有路径度量中找到最大值的序号,作为解码输出的路径的最末状态,以进行回溯操作。求最大值序号的操作也可以使用矢量数字信号处理器上矢量间求最大值及序号的指令和矢量内求最大值和序号的指令完成。在64个状态下,求路径度量最大值序号的过程如图10所示。
回溯过程是根据回溯比特将整个路径从尾到头遍历一遍,同时把解码比特倒序的输出。因为路径度量计算是按照Radix-4蝶形算法每次计算2个stage(即两个信息比特)。因此回溯过程也是每次回溯2个信息比特,即从stage n的状态倒推stage n-2的状态,公式如下:
State(n)=State(n+2)>>2+TB_duo_bits<<4
TB_duo_bits即State(n+2)对应的回溯比特信息。该值即是在进行每次蝶形运算时,每个结束状态从4条路径中得到的最大的路径度量的序号,作为该状态的回溯比特被记录在内存相应的位置。
State(n)表示输入比特为n时的状态,State(n+2)表示输入比特为n+2时的状态。
<<表示左移位操作;>>表示右移位操作。
可以看出,回溯过程可以用通用的移位指令来完成。同时,由于使用的是Radix-4的路径度量计算,回溯可以每次输出2个比特,比Radix-2的方法快一倍。
以数据通道宽度为128比特,指令并行度为4发射的矢量数字信号处理器为例,设viterbi译码输入软信息为8比特,路径度量为16bit。因为每个矢量是4个16比特,所以128比特的数据通道可以支持同时两路矢量的运算;每个Radix-4蝶形有8个矢量加运算和3个求最大值运算,4发射的指令并行可支持4个蝶形运算同时进行。因此8+3=11个指令周期内最多可以完成4x2=8个Radix-4的蝶形运算。对于64个状态的网格图,从stage n到stage n+2的路径度量更新只需要22个指令周期。
在最后stage进行各状态的PM比较求最大值序号,由于数据通道为128bit,因此64个状态由8个矢量寄存器来表示。经过7次矢量间求最大值及序号和1次矢量内求最大值及序号的指令操作,再将2个指令得到的序号整理后,9个指令周期可得到路径度量最大值的序号。具体如下式表示:
{max_vector,max_idx_vector}=vintermaxvx(8vectors)
{max_value,max_idx}=vintramaxvx(max_vector)
state_idx=8*max_idx_vector(max_idx)+max_idx
同时,回溯过程中,每次状态回溯可输出2个信息比特。
综上所述,本发明的应用矢量数字信号处理器的维特比译码的实现方法充分利用了矢量数字信号处理器的通用指令集,高效地实现维特比译码算法的网格图路径度量计算;有效地提高了维特比译码的吞吐率。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。