一种卷积计算方法转让专利

申请号 : CN201810101741.7

文献号 : CN110110283A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 林江南冯雪林孙刚周一青石晶林

申请人 : 北京中科晶上科技股份有限公司

摘要 :

本发明提供了一种卷积计算方法。该方法利用矢量DSP执行第一序列x和第二序列h的卷积计算,包括以下步骤:将所述第一序列x划分为多个数据段;将所划分的第一序列x的多个数据段分别与所述第二序列h执行卷积计算,以获得多个计算结果;合并所述多个计算结果,以获得所述第一序列x和第二序列h的卷积结果。本发明的方法能够通过短卷积计算实现任意序列长度的卷积计算,提高了运算效率。

权利要求 :

1.一种卷积计算方法,该方法利用矢量DSP执行第一序列x和第二序列h的卷积计算,包括以下步骤:步骤1:将所述第一序列x划分为多个数据段;

步骤2:将所划分的第一序列x的多个数据段分别与所述第二序列h执行卷积计算,以获得多个计算结果;

步骤3:合并所述多个计算结果,以获得所述第一序列x和第二序列h的卷积结果。

2.根据权利要求1所述的卷积计算方法,其中,步骤2包括:步骤21:基于预定长度将所述第二序列h进行分组;

步骤22:将所述第一序列x的每一数据段进行分组;

步骤23:将所述第一序列x的每一数据段的各组与所述第二序列h的各组并行进行卷积计算。

3.根据权利要求2所述的卷积计算方法,其中,所述预定长度为2或3或4。

4.根据权利要求2所述的卷积计算方法,其中,所述第一序列x的各组包含的值的数量和所述第二序列h的各组包含的值的数量均为2。

5.根据权利要求4所述的卷积计算方法,其中,对于所述第一序列x的一组值{x0,x1}和所述第二序列h的一组值{h0,h1},通过以下子步骤执行一组卷积计算:将{x0,x1}依次存储于所述矢量DSP的第一矢量寄存器,将{h0,h1}依次存储于所述矢量DSP的第二矢量寄存器;

执行{x0,x1}和{h0,h1}的卷积计算,获得计算结果y0=x0·h0,y2=x1·h1,y1=(x0+x1)·(h0+h1)-y0-y2;

将y0和y1依次存储于所述矢量DSP的第三矢量寄存器,将y1和y2依次存储于所述矢量DSP的第四矢量寄存器。

6.根据权利要求5所述的卷积计算方法,其中,对于所述第三矢量寄存器和所述第四矢量寄存器的多组卷积计算结果,将前一组卷积计算结果的最后一个值与后一组卷积计算结果的第一个值相加,并将相加结果存入被加数的位置,其它位置的计算结果保持不变。

7.根据权利要求1至6中任一项所述的卷积计算方法,其中,采用单指令多数据流对所述第一序列x的每一数据段并行进行访存或计算。

8.一种卷积计算装置,其特征在于包括:

矢量DSP,用于执行第一序列x和第二序列h的卷积计算;

数据分段单元,用于将所述第一序列x划分为多个数据段;

卷积计算单元,用于将所划分的第一序列x的多个数据段分别与所述第二序列h执行卷积计算,以获得多个计算结果;

卷积结果获取单元,用于合并所述多个计算结果,以获得所述第一序列x和第二序列h的卷积结果。

9.一种计算机可读存储介质,其上存储有计算机程序,其中,该程序被处理器执行时实现根据权利要求1至中任一项所述方法的步骤。

10.一种计算机设备,包括存储器和处理器,在所述存储器上存储有能够在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至7中任一项所述的方法的步骤。

说明书 :

一种卷积计算方法

技术领域

[0001] 本发明涉及数字信号处理技术领域,尤其涉及一种卷积计算的方法。

背景技术

[0002] 在移动通信和数字信号处理领域中,卷积发挥着至关重要的作用,其是将两个离散序列h和x的有关序列值分别两两相乘再相加的一种的运算,卷积可以用于数字信号的滤波,以滤除无用的频率分量,也可以用于完成两个序列的相关,以进行信号的同步等。
[0003] 卷积通常在数字信号处理器(DSP)上实现,目前,基于矢量DSP的卷积算法主要有两种方案:一种是内循环矢量化(vectorizing the inner loop,VIL)算法,该算法将两个输入序列中的各个元素对应相乘,再将相乘结果累加,以产生单个输出,通过矢量乘法和累加操作,可以引入一定的数据级并行度。然而,该算法需要对滤波矩阵中的系数进行补零操作,会有较多0元素参与运算,从而产生了无用的运算,此外,该算法需要进行标量的存储操作,影响了整体的并行化程度,造成计算效率低下;另一种是外循环矢量化(vectorizing the outer loop,VOL)算法,该算法利用单个元素与一个序列进行相乘,从而得到多个输出,再将多个输出进行交叠相加,从输出的角度进行数据的并行,从而获得数据级并行度并避免较多的0参与相乘运算。然而,该算法虽然在输出方面做到了数据并行化,但却利用了单个元素作为输入,基本的算法结构和数据处理流程与VIL算法一致,因此也不能有效降低卷积运算的总体复杂度。
[0004] 综上所述,现有的卷积方法均利用了卷积的直接结构,因此无法缩短卷积算法的执行周期。因此,需要对现有技术进行改进以在矢量DSP上高效地执行卷积计算。

发明内容

[0005] 本发明的目的在于克服上述现有技术的缺陷,提供一种卷积计算的方法,该方法利用矢量DSP的结构,达到快速计算卷积的目的。
[0006] 根据本发明的第一方面,提供了一种卷积计算方法。该方法利用矢量DSP执行第一序列x和第二序列h的卷积计算,包括以下步骤:
[0007] 步骤1:将所述第一序列x划分为多个数据段;
[0008] 步骤2:将所划分的第一序列x的多个数据段分别与所述第二序列h执行卷积计算,以获得多个计算结果;
[0009] 步骤3:合并所述多个计算结果,以获得所述第一序列x和第二序列h的卷积结果。
[0010] 在一个实施例中,步骤2包括:
[0011] 步骤21:基于预定长度将所述第二序列h进行分组;
[0012] 步骤22:将所述第一序列x的每一数据段进行分组;
[0013] 步骤23:将所述第一序列x的每一数据段的各组与所述第二序列h的各组并行进行卷积计算。
[0014] 在一个实施例中,所述预定长度为2或3或4。
[0015] 在一个实施例中,所述第一序列x的各组包含的值的数量和所述第二序列h的各组包含的值的数量均为2。
[0016] 在一个实施例中,对于所述第一序列x的一组值{x0,x1}和所述第二序列h的一组值{h0,h1},通过以下子步骤执行一组卷积计算:
[0017] 将{x0,x1}依次存储于所述矢量DSP的第一矢量寄存器,将{h0,h1}依次存储于所述矢量DSP的第二矢量寄存器;
[0018] 执行{x0,x1}和{h0,h1}的卷积计算,获得计算结果y0=x0·h0,y2=x1·h1,y1=(x0+x1)·(h0+h1)-y0-y2;
[0019] 将y0和y1依次存储于所述矢量DSP的第三矢量寄存器,将y1和y2依次存储于所述矢量DSP的第四矢量寄存器。
[0020] 在一个实施例中,对于所述第三矢量寄存器和所述第四矢量寄存器的多组卷积计算结果,将前一组卷积计算结果的最后一个值与后一组卷积计算结果的第一个值相加,并将相加结果存入被加数的位置,其它位置的计算结果保持不变。
[0021] 在一个实施例中,采用单指令多数据流对所述第一序列x的每一数据段并行进行访存或计算。
[0022] 与现有技术相比,本发明的优点在于:通过将参与卷积计算的序列分段,能够利用矢量DSP的结构对每个数据段包含的多个值并行地操作;采用短卷积的运算结构,通过短卷积快速的构造任意长度的长卷积,从而提高了卷积计算的效率。

附图说明

[0023] 以下附图仅对本发明作示意性的说明和解释,并不用于限定本发明的范围,其中:
[0024] 图1是根据本发明一个实施例的卷积计算方法的流程图;
[0025] 图2是根据本发明一个实施例的基于矢量DSP的短卷积运算示意图。
[0026] 图3是根据本发明一个实施例的交叉叠加运算示意图。

具体实施方式

[0027] 为了使本发明的目的、技术方案、设计方法及优点更加清楚明了,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0028] 典型地,卷积运算定义为:
[0029]
[0030] 假设离散序列x长度为N,离散序列h的长度为M,则卷积结果序列y的长度为M+N-1。
[0031] 根据本发明的一个实施例,提供了一种卷积计算方法,简言之,该方法包括将参与卷积运算的序列分段;对各数据段分组执行短卷积;对多组短卷积的结果进行叠加。具体地,参见图1所示,本发明的方法包括以下步骤:
[0032] 步骤S110,将参与卷积运算的序列x划分为多个数据段。
[0033] 在此步骤中,将序列x划分为多个数据段,每个数据段可包括多个值。例如,基于矢量DSP的数据宽度将序列x进行分段,假设矢量DSP的数据宽度为L=16,序列x的长度N=32,序列h的长度为M=6,则将序列x按照DSP的数据宽度L=16分段,即共分成两个数据段,每个数据段包括16个值,将第一段数据包含的值标记为{x0,x1,...,x15},将第二段数据包含的值标记为{x16,x17,...,x31}。
[0034] 步骤S120,将参与卷积运算的序列h按照预定长度划分为多个组。
[0035] 将序列h按照预定长度划分为多个组,预定长度可设置为2、3、4等,例如,当将序列h按照长度为2分组时,对于长度为M=6的h序列,共分为3组,每组包含的值分别标记为{h0,h1}、{h2,h3}和{h4,h5}。
[0036] 需要说明的是,在序列x和序列h不能被整数倍分段/分组的情况下,可通过补零的方式扩展序列的长度。
[0037] 步骤S130,将序列x的每个数据段分组,并对序列x和序列h的分组执行短卷积计算。
[0038] 在此步骤中,将序列x的每个数据段分组,以进行更细粒度的划分,例如,也分为2、3或4个数据一组,对序列x的各组与序列h的各组执行短卷积计算。在下文中,对于序列x和序列h,均以两个数据为一组进行说明,即执行2*2的短卷积。
[0039] 为了清楚地示意利用矢量DSP进行数据存储和计算的过程,参见图2所示,将序列x和h的各个数据存储于DSP的矢量寄存器vr1和vr2,其中,示意了将序列x的第一段数据的x0、x1、x2、x3等依次存储于矢量寄存器vr1的不同地址,对应于序列x的第一段数据,将序列h的第一组数据{h0,h1}重复的存储于DSP的矢量寄存器vr2,类似地,将序列h的第二组数据{h2,h3}重复地存储于DSP的矢量寄存器vr2。通过这种方式,对应于序列x的每一段数据,将序列h的各组数据重复的进行存储,,这种数据存储方式,有利于后续的交叉叠加。
[0040] 对矢量寄存器vr1和vr2中的数据进行分组,形成2个数据一组的逻辑概念,仍参见图2所示,其中,{x0,x1}和{h0,h1}作为一个短卷积组,标记为分组0,{x2,x3}和{h0,h1}作为一个短卷积组,标记为分组1,其余各数据的分组方式类似,在此不再赘述。
[0041] 对矢量寄存器vr1和vr2中的每组数据,执行2*2的短卷积计算,计算结果对应存储于矢量寄存器vr3和vr4中,结果的存放方式参见图2所示,其中,每组运算结果用上标来表示分组号,例如, (表示一组卷积计算结果的第一个元素)、(表示一组卷积计算结果的第二个元素)、 (表示一组卷积计算结果的
最 后一 个元素) ,共需要四次乘法运算。在另一个实施例中,将 表示为通过这种方式可以减少短卷积的乘法运算次数,从而提
高计算速度。
[0042] 经过分组之后,可以并行执行各组数据的短卷积计算,从而提高运算效率。
[0043] 需要说明的是,序列x的各组包含的数据数量可以不等于序列h的各组包含的数据数量。
[0044] 步骤S140,将每组数据的计算结果进行交叉叠加。
[0045] 对于矢量寄存器vr3和vr4中的每组数据,将两个矢量寄存器相邻位置(地址)对应的元素交叉相加,即对于多组卷积计算结果,将前一组卷积计算结果的最后一个元素与后一组卷积计算结果的第一个元素相加,并将相加结果存入两个被加数的位置,其他位置元素保持不变,通用地,该交叉相加过程可表示为:vr3(2i+1)=vr3(2i+1)+vr4(2i),vr4(2i)=vr3(2i+1),其中,i是从1开始计数的自然数,用于表示寄存器的地址。具体地,参见图3所示,将寄存器vr3的第3个地址的对应的元素 与vr4中第二个地址对应的元素 相加(此时i=1),即执行 将得到的相加结果 存储于被加数 和 的位置,依次类推,能够获得每个分组的叠加结果。
[0046] 在此步骤中,每组数据的交叉叠加也可并行执行,从而进一步提高的运算速度。
[0047] 步骤S150,将叠加结果进行级联
[0048] 将计算得到的vr3和vr4中的数据,按照数据下标进行级联,形成长度为L+1=17的单次输出,例如,对于序列x的第一段数据{x0,x1,...,x15},进行级联之后获得的卷积结果是
[0049] 上述过程可以快速完成一次L*2的卷积,卷积输出长度为L+1。通过这种方式,将矢量寄存器的各个分组执行相同的操作,可以将短卷积直接构造成长卷积。例如,将序列x划分成长度为L=16的多个数据段时,能够多次获得长度为L+1=17的结果,按照分段卷积原理进行交叠相加,最终形成长度为M+N-1=37的卷积结果。
[0050] 在本发明的实施例中,可采用具有SIMD(单指令多数据)结构的DSP,DSP中矢量寄存器的数据槽个数L=16,每个数据槽可表示32-bit的定点复数,其中,实部用16bit表示,虚部用16bit表示,此外,也可以采用不同数据槽个数的寄存器。
[0051] 综上所述,在上述实施例中采用了分段卷积和短卷积两种技术手段,其中,对序列x进行分段,可利用矢量DSP的SIMD结构,即通过一条指令,同时对多个数据进行操作,例如,对序列x的每一数据段包含的多个值同时进行矢量化访存和矢量化计算,以提高运算速度。另一方面,计算短卷积的过程和对短卷积的结果进行交叉叠加的过程可以通过设计专用的DSP指令来实现,以达到卷积在矢量DSP上的高效计算。需要说明的是,仅选择分段卷积或短卷积中的一种,也能达到提高计算效率的效果,即仅对序列x进行分段,而不对序列h进行分组,将每一数据段分别与序列h进行卷积,或者,不对序列x进行分段,仅对序列x和序列h进行分组以进行短卷积。
[0052] 最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求所界定的保护范围为准。
[0053] 需要说明的是,虽然上文按照特定顺序描述了各个步骤,但是并不意味着必须按照上述特定顺序来执行各个步骤,实际上,这些步骤中的一些可以并发执行,甚至改变顺序,只要能够实现所需要的功能即可。
[0054] 本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
[0055] 计算机可读存储介质可以是保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以包括但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。
[0056] 以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。