一种通过矢量处理器实现viterbi解码的方法

申请号 CN201611059469.8 申请日 2016-11-25 公开(公告)号 CN106452461A 公开(公告)日 2017-02-22
申请人 江苏宏云技术有限公司; 发明人 李炜; 陶建平; 刘勇;
摘要 本 申请 提供一种通过矢量处理器实现viterbi解码的方法,该系统利用自定义的Viterbi分支度量指令、Viterbi加比选指令以及Viterbi回溯指令,通过矢量处理器中的矢量运算单元可以实现Viterbi解码。同时本 发明 还设计了高效的地址 指针 变换模式,能够方便快速的进行Viterbi输出和输入数据的存取,从而实现高效的Viterbi的解码运算。
权利要求

1.一种通过矢量处理器实现viterbi解码的方法,其特征在于,利用自定义的Viterbi分支度量指令、Viterbi加比选指令以及Viterbi回溯指令,通过矢量处理器中的矢量运算单元可以实现Viterbi解码。所述方法包括:
接收待解码信号,并通过预设的viterbi分支度量指令,利用矢量运算单元对所述待解码信号进行分支度量值计算;
通过预设的viterbi加比选指令,对经过所述分支度量值计算的待解码信号进行viterbi加比选计算;
通过预设的viterbi回溯指令,对经过所述viterbi加比选计算的待解码信号进行viterbi回溯操作,完成解码。
2.如权利要求1所述的方法,其特征在于,所述通过预设的viterbi分支度量指令,利用矢量运算单元对所述待解码信号进行分支度量值计算,包括:
将所述待解码信号由软比特量化为有符号整数;
通过预设的viterbi分支度量指令对所述有符号整数进行分支度量计算。
3.如权利要求2所述的方法,其特征在于,所述有符号整数的数值越大表示软比特值越接近0,越小表示越接近1。
4.如权利要求1所述的方法,其特征在于,所述解码的码率包括:1/2码率和/或1/3码率。
5.如权利要求1~4任一项所述的方法,其特征在于,如果viterbi编码为1/2码率,则将Viterbi输入的两个相邻的软比特送入矢量处理单元分别作加法和减法,得到的两个结果就是分支度量的四个结果中的两个结果,分支度量的另外两个结果是刚才得到的结果取反;以及
如果viterbi编码为1/3码率,则在1/2码率分支度量结果的基础上,利用1/2码率情况下分支度量没有取反的两个结果和Viterbi输入的另一个软比特送入矢量处理单元分别作加法和减法,得到的四个结果就是分支度量的八个结果中的四个结果,分支度量的另外四个结果是刚才得到的结果取反。
6.如权利要求1所述的方法,其特征在于,Viterbi加比选指令将两个初始状态的旧的路径度量值矢量和对应的分支度量值矢量送入矢量运算单元,利用Viterbi加比选指令同时计算出两个目标状态节点的四条路径的新路径度量值,之后做比较选择,将每个状态节点的路径度量值较大的路径作为幸存路径。
7.如权利要求1所述的方法,其特征在于设置了多个存储器地址指针,并为每个存储器地址指针设置了独立的模式寄存器,通过配置对应的存储器地址指针模式寄存器为自增模式或保持模式,可对Viterbi解码运算过程中输入和输出数据的地址变换进行设定,方便进行数据读取。
8.如权利要求1所述的方法,其特征在于存储器的地址指针变换模式设定好之后,每次存储器读取指令和存储器存储指令执行之后,对应的地址指针变会根据所设定的模式进行变换。

说明书全文

一种通过矢量处理器实现viterbi解码的方法

技术领域

[0001] 本申请涉及通信数据处理领域,尤其涉及一种通过矢量处理器实现viterbi解码的方法。

背景技术

[0002] Viterbi算法作为一种最大似然算法,可以在网格图上找出最大似然的状态转移路径,从而对噪声环境中的接受信号进行纠错译码。由于他的前向纠错性能,Viterbi译码器广泛应用于各种数字通信系统如:卫星通信系统、GSM、3G、DVB标准和ATSC标准等各种通信系统中。
[0003] 传统意义上的Viterbi译码器通常包含五部分:分支度量计算单元(Branch Metric Uint,BMU),加比选单元(Add Compare Select,ACS),累加度量值存储RAM,幸存信息存储RAM和回溯判决模(Traceback)。分支度量单元接受经过信道传输的卷积编码序列,计算分支度量值送给加比选单元,对于每一个状态,ACS单元从累加度量RAM中读出转移到该状态的前两个状态的累加度量值和相应的分支度量值进行加比选运算,得到新的累加值存入到累加度量RAM,同时得到1比特的幸存信息送入缓存器,等所有状态都完成运算后一起存入幸存信息RAM。当达到回溯深度后,回溯判决单元根据幸存信息RAM的幸存信息用回溯的办法往前回溯即可得到信息比特。
[0004] 由于实时性的要求,Viterbi译码的传统实现方式通常是将Viterbi译码器做成一个专用的硬件加速器,这种实现方式增加了硬件开销而且通用性差。发明内容
[0005] 有鉴于此,本申请提供一种通过矢量处理器实现viterbi解码的方法和系统,以解决现有技术viterbi解码方式增加了硬件开销而且通用性差的问题。
[0006] 具体地,本申请是通过如下技术方案实现的:
[0007] 本发明提供一种通过矢量处理器实现viterbi解码的方法,利用自定义的Viterbi分支度量指令、Viterbi加比选指令以及Viterbi回溯指令,通过矢量处理器中的矢量运算单元实现Viterbi解码。所述方法包括:
[0008] 接收待解码信号,并通过预设的viterbi分支度量指令,利用矢量运算单元对所述待解码信号进行分支度量值计算;
[0009] 通过预设的viterbi加比选指令,对经过所述分支度量值计算的待解码信号进行viterbi加比选计算;
[0010] 通过预设的viterbi回溯指令,对经过所述viterbi加比选计算的待解码信号进行viterbi回溯操作,完成解码。
[0011] 本发明还设置了多个存储器地址指针,并为每个存储器地址指针设置了独立的模式寄存器,通过配置对应的存储器地址指针模式寄存器为自增模式或保持模式,可对Viterbi解码运算过程中输入和输出数据的地址变换进行设定,方便进行数据读取。
[0012] 本发明实施例,通过预设的viterbi分支度量指令对待解码信号进行分支度量值计算,对经过分支度量值计算的待解码信号进行viterbi加比选计算,对经过viterbi加比选计算的待解码信号进行viterbi回溯操作,完成解码,使得viterbi解码只需矢量处理器即可,不再需要专用的viterbi硬件加速器,节省了硬件资源。本方案所设计的Viterbi译码装置,只需要调用本方案设计的指令,通过软件编程即可快速完成Viterbi译码,简化了Viterbi译码器的设计。附图说明
[0013] 图1是本申请一示例性实施例示出的矢量处理器的系统架构图;
[0014] 图2是本申请一示例性实施例示出的矢量寄存器单元的结构图;
[0015] 图3是本申请示出的卷积编码器的结构图;
[0016] 图4是本申请示出的编码器的状态转移图;
[0017] 图5是本申请示出的编码器的第一类状态转移图;
[0018] 图6是本申请示出的编码器的第二类状态转移图;
[0019] 图7是本申请示出的编码器的第三类状态转移图;
[0020] 图8是本申请示出的编码器的第四类状态转移图;
[0021] 图9是本申请一示例性实施例示出的一种通过矢量处理器实现viterbi解码的方法的流程图
[0022] 图10是本申请示出的1/2码率下通过矢量运算单元进行viterbi分支度量计算的过程示意图;
[0023] 图11是本申请示出的1/3码率下通过矢量运算单元进行viterbi分支度量计算的过程示意图;
[0024] 图12是本申请示出的viterbi加比选指令计算的过程示意图;
[0025] 图13是本申请示出的viterbi路径度量值读取和存储地址变换示意图;
[0026] 图14是本申请示出的viterbi解码流程示意图。

具体实施方式

[0027] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
[0028] 在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0029] 应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0030] 如图1所示为本申请一示例性实施例示出的矢量处理器的系统架构图,所述矢量处理器包括:指令存储器106、取指单元107、译码单元108、矢量寄存器单元100、数据交换网络101、矢量运算单元102、地址产生单元103、数据存取单元104、数据存储器105。利用自定义的Viterbi分支度量指令、Viterbi加比选指令以及Viterbi回溯指令,通过矢量处理器中的矢量运算单元102可实现高效Viterbi解码运算。地址产生单元103则用于产生Viterbi解码过程中软比特的读取地址、分支度量值的存取地址以及最后解码出的硬比特的存储地址。
[0031] 如图2所示为本申请示出的矢量寄存器单元的结构图,该矢量寄存器单元100由8个64bit的矢量寄存器(v0~v7)或者16个32bit的寄存器(d0~d15)或者32个16bit寄存器(s0~s31)组成。每个v寄存器由两个d寄存器组成,每个d寄存器由两个s寄存器组成,每个s寄存器都叫做矢量的一个元素。例如:v0是一个64bit的矢量寄存器,它的低32bit为d0寄存器,高32bit为d1寄存器。d0寄存器的低16bit为s0寄存器,高16bit为s1寄存器。d1寄存器的低16bit为s2寄存器,高16bit为s3寄存器。s0~s3分别对应v0寄存器的四个元素(e0~e3)。该矢量寄存器包含4个bank,每个v寄存器的元素e0构成bank0,元素e1构成bank1,元素e2构成bank2,元素e3构成bank3。矢量运算单元102具有4个并行的ALU单元,可对矢量寄存器单元100中的矢量数据进行并行计算。矢量运算单元102和数据存取单元104可对矢量寄存器单元100进行读写操作,每次读写操作可针对v寄存器(ld64或st64)、d寄存器(ld32或st32)或s寄存器(ld16或st16)。
[0032] 如图3所示为本申请示出的卷积编码器的结构图,图中含有6个编码寄存器,其约束长度为7。对这六个编码寄存器做如下的状态标定:将距编码输入端最近的寄存器设为状态标号的最高位,将距编码输出端最近的寄存器设为状态标号的最低位,按照这种标定方法,编码器的状态转移图如图4所示,S后面括号内的数值表示编码寄存器组成的状态号,连线上的数值表示编码器的输入比特,连线上括号内的数值表示编码器的输出。可以看到,共有四类状态转移。第一类如图5所示,编码器的输出依次为:(00,11,11,00),第二类如图6所示,编码器的输出依次为(11,00,00,11),第三类如图7所示,编码器的输出依次为(01,10,10,01),第四类如图8所示,编码器的输出依次为(10,01,01,10)。
[0033] 如图9所示为本申请一示例性实施例示出的一种通过矢量处理器实现viterbi解码的方法的流程图,所述方法包括以下步骤:
[0034] 步骤S901,接收待解码信号,并通过预设的viterbi分支度量指令,利用矢量运算单元对所述待解码信号进行分支度量值计算。
[0035] 在本发明实施例中,矢量处理器接收发送端发送的待解码信号,通过本地预设的viterbi分支度量指令对待解码信号进行分支度量值计算。其中,预设的viterbi分支度量指令,若Viterbi编码为1/2码率,根据软比特量化的方法可知,将Viterbi输入的两个相邻的软比特分别作加法和减法,得到的两个结果就是分支度量的四个结果中的两个结果,分支度量的另外两个结果是刚才得到的结果取反;若Viterbi编码为1/3码率,在1/2码率分支度量结果的基础上,将1/2码率情况下分支度量没有取反的两个结果和Viterbi输入的三个相邻的软比特中最后一个软比特分别作加法和减法,得到的四个结果就是分支度量的八个结果中的四个结果,分支度量的另外四个结果是刚才得到的结果取反。
[0036] 所述通过预设的viterbi分支度量指令对所述待解码信号进行分支度量值计算,包括:
[0037] 1.将所述待解码信号由软比特量化为有符号整数,所述有符号整数的数值越大表示软比特值越接近0,越小表示越接近1;
[0038] 2.通过预设的viterbi分支度量指令对所述有符号整数进行分支度量计算。
[0039] 在本发明实施例中,对于不同的码率,使用不同方法进行viterbi分支度量计算。对于1/2码率:首先需要将接收到的软比特(x,y)提前扩散存放至矢量寄存器单元100中的两个矢量寄存器中,之后送至矢量运算单元进行计算。计算结果BM00=(x+y),表示接受到的软比特和期望值00的接近程度;计算结果BM10=(x-y),表示接受到的软比特和期望值10的接近程度;另外两个分支度量值无需计算,只需要将刚才计算的分支度量值取反即可得到。也就是说BM11=-BM00,BM01=-BM10;对于1/3码率:在1/2码率下分支度量计算结果的基础上,将1/2码率下分支度量计算结果以及接收到的软比特z送至矢量运算单元进行计算,可计算出四个分支度量值,另外四个分支度量值只需要将刚才计算的分支度量值取反便可得到。所以无论在1/2码率下还是1/3码率下,本方案的分支度量指令只计算出一半的分支度量值,另一半分支度量值通过取反便可得到。
[0040] 步骤S902,通过预设的viterbi加比选指令,对经过所述分支度量值计算的待解码信号进行viterbi加比选计算。
[0041] 在本发明实施例中,Viterbi加比选运算需要将两个初始状态的旧的路径度量值矢量和对应的分支度量值矢量送入矢量运算单元,利用Viterbi加比选指令同时计算出两个目标状态节点的四条路径的新路径度量值,之后做比较选择,将每个状态节点的路径度量值较大的路径作为幸存路径。
[0042] 其中,viterbi加比选计算的过程,具体如下:首先需要从矢量寄存器单元100中读出S(2K)和S(2K+1)状态的旧的路径度量值,并通过矢量数据交换网络101进行数据的旋转扩散。同时从矢量寄存器单元100中读出计算好的分支度量值,并也通过矢量数据交换网络101进行数据的旋转扩散。之后将扩散好的矢量数据送至矢量运算单元102中进行加减运算,得到两个目标状态S(K)和S(K+32)节点的四条路径的新路径度量值,最后通过两个比较器选出路径度量值较大者作为目标节点的新的路径度量值。两个目标状态S(K)和S(K+32)节点的新的路径度量值会存放到两个不同的目的寄存器中,具体存放到目的寄存器的哪个元素中,是通过一个元素指针elem_ptr来指定的。每完成一次加比选指令,元素指针elem_ptr会加一,四个Viterbi加比选指令完成之后,两个目的寄存器会被填满,此时便可将填满的寄存器存放至数据存储器中。另外,在Viterbi加比选指令执行完之后,会将比较的结果存放至vt寄存器中,vt寄存器是一个64bit的寄存器,用于存放Viterbi加比选指令的比较结果。如果选择了S(2K),那么vt中对应的bit就为0,如果选择了S(2K+1)这条路径,那么vt中对应的bit就为1。例如:如果S(2K)加分支度量值的结果大于S(2K+1)减分支度量值的结果,那么vt[K]=0,否则vt[K]=1;如果S(2K+1)加分支度量值的结果大于S(2K)减分支度量值的结果,那么vt[K+32]=1,否则vt[K+32]=0。
[0043] 步骤S903,通过预设的viterbi回溯指令,对经过所述viterbi加比选计算的待解码信号进行viterbi回溯操作,完成解码。
[0044] 在本发明实施例中,对于viterbi回溯操作,首先需要定义一个5位的Viterbi状态寄存器state,这个状态寄存器用来记录回溯过程中Viterbi状态的变换,初值为0。Viterbi回溯指令每执行一次,回溯出一个硬比特,并将这个硬比特通过移位的方式存放至目的矢量寄存器vd中。例如,如果回溯过程中先计算出的硬比特是高位,那么Viterbi回溯指令完成以下操作:
[0045] {vd[62:0],state[5]}->vd[63:0]
[0046] (state[5:0]*2+vt[state[5:0]])->state[5:0]。
[0047] 需要指出的是,为了便于Viterbi解码过程中路径度量值的读取和存储,本方案设置了多个存储器地址指针,并为每个存储器地址指针设置了独立的模式寄存器,通过配置对应的存储器地址指针模式寄存器为自增模式或保持模式,可对Viterbi解码运算过程中路径度量值的读取和存储地址变换进行设定,方便进行数据读取。
[0048] 在进行路径度量值读取和存储前,需要设置选用的存储器地址指针(dpx)的指针变换模式(dpx.mode)、地址指针的初始地址(dpx.addr)以及地址的指针偏移值(dpx.offset)。例如,如果进行路径度量值读取,ld64[dpx.addr]用于读取存储器中位于地址dpx.addr的四个状态的路径度量初始值。在数据读取前,需要将地址指针的初始地址设置为0,并设置存储器的地址指针变换模式。在dpx.addr寻址模式下,地址指针变换模式为自增模式,每次读取完毕之后,地址指针指向接下来一个状态的路径度量初始值。如果进行新的路径度量值存储,根据之前的介绍,当连续执行四个Viterbi加比选指令之后,新的路径度量值S(K)、S(K+1)、S(K+2)、S(K+3)会存放到目的矢量寄存器1中,新的路径度量值S(K+32)、S(K+33)、S(K+34)、S(K+35)会存放到目的矢量寄存器2中。所以在存储数据之前,需要将地址指针的初始地址设置为0,指针偏移需要设置为28,之后利用st64[dpx.addr]以及st64[dpx.addr+dpx.offset]进行数据的存储。在dpx.addr寻址模式下,地址指针变换模式为自增模式,在dpx.addr+dpx.offset寻址模式下,地址指针变换模式为保持模式。
[0049] 如图10所示为本申请示出的1/2码率下通过矢量运算单元进行viterbi分支度量计算的过程示意图。
[0050] 如图11所示为本申请示出的1/3码率下通过矢量运算单元进行viterbi分支度量计算的过程示意图。
[0051] 如图12所示为本申请示出的viterbi加比选指令计算的过程示意图。
[0052] 如图13所示为本申请示出的viterbi路径度量值读取和存储地址变换示意图。
[0053] 如图14所示为本申请示出的viterbi解码流程示意图。首先进行Viterbi分支度量计算,在进行Viterbi加比选运算之前,需要将S(2k)到S(2k+7)八个状态的旧的路径度量值读入矢量寄存器中,之后计算出S(K)、S(K+1)、S(K+2)、S(K+3)以及S(K+32)、S(K+33)、S(K+34)、S(K+35)的新的路径度量值,并存放至两个不同的目的矢量寄存器中。之后通过存储器存储指令将新的路径度量值存入数据存储器中。当完成所有的路径度量值计算之后,最后进行Viterbi回溯计算。
[0054] 本发明实施例,通过预设的viterbi分支度量指令对待解码信号进行分支度量值计算,对经过分支度量值计算的待解码信号进行viterbi加比选计算,对经过viterbi加比选计算的待解码信号进行viterbi回溯操作,完成解码,使得viterbi解码只需矢量处理器即可,不再需要专用的viterbi硬件加速器,节省了硬件资源。
[0055] 以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0056] 以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
QQ群二维码
意见反馈