基于SIMD的无限脉冲响应滤波方法和装置.pdf

上传人:大师****2 文档编号:1087546 上传时间:2018-03-30 格式:PDF 页数:27 大小:1.30MB
返回 下载 相关 举报
摘要
申请专利号:

CN200810124979.8

申请日:

2008.06.25

公开号:

CN101615897A

公开日:

2009.12.30

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回IPC(主分类):H03H 17/04申请公布日:20091230|||实质审查的生效|||公开

IPC分类号:

H03H17/04; G06F9/38

主分类号:

H03H17/04

申请人:

国际商业机器公司

发明人:

潘宁河; 曾 义; 朱振博; 余 江; 王艳琦

地址:

美国纽约

优先权:

专利代理机构:

北京市中咨律师事务所

代理人:

李 峥;周春燕

PDF下载: PDF下载
内容摘要

本发明提供了一种基于SIMD的无限脉冲响应滤波方法和装置。该方法包括:利用预先设定的滤波系数序列对输入信号序列进行无限脉冲响应滤波的循环计算;在每一次循环计算中:利用SIMD指令,对滤波系数序列和输入信号序列中对应的元素进行n次点积累计计算,其中滤波系数序列包括多个有效滤波系数、用于使该滤波系数序列位数对齐的0值以及为移位而扩展的0值,并且在n次点积累计计算中,该多个有效滤波系数在滤波系数序列中的位置分别向右移位0、1、2、……、n-1个元素;在n次点积累计计算的结果中,利用在前的结果对在后的结果进行修正;将修正后的n次点积累计计算的结果添加到输入信号序列的开始位置;其中n是这样的值:上述滤波系数序列和上述输入信号序列中一个元素所占位数的n倍等于128。

权利要求书

1.  一种基于SIMD的无限脉冲响应滤波方法,包括:
利用预先设定的滤波系数序列对输入信号序列进行无限脉冲响应滤波的循环计算;
其中,在每一次循环计算中包括:
利用SIMD指令,对上述滤波系数序列和上述输入信号序列中与该滤波系数序列对应的位置的元素依次进行n次点积累计计算,其中上述滤波系数序列包括多个有效滤波系数、用于使该滤波系数序列位数对齐的0值以及为移位而扩展的0值,并且在上述n次点积累计计算中,上述多个有效滤波系数在该滤波系数序列中的位置分别向右移位0、1、2、......、n-1个元素;
在上述n次点积累计计算的结果中,依次利用在前的点积累计计算的结果对在后的点积累计计算的结果进行修正;以及
将修正后的上述n次点积累计计算的结果添加到上述输入信号序列的开始位置,作为该输入信号序列的最开始的n个新元素;
其中n是这样的值:上述滤波系数序列和上述输入信号序列中一个元素所占位数的n倍等于128。

2.
  根据权利要求1所述的方法,其中上述n的值是根据上述滤波系数序列和上述输入信号序列中的元素的类型而确定的:在元素的类型是64位双精度类型的情况下,上述n等于2;在32位单精度类型或整数类型的情况下,上述n等于4;在16位短整型的情况下,上述n等于8;在8位字符串类型的情况下,上述n等于16。

3.
  根据权利要求1所述的方法,其中在上述n次点积累计计算的每一次中进一步包括:
利用SIMD乘指令,对上述滤波系数序列和上述输入信号序列中与该滤波系数序列对应的位置的元素,每对应的n个元素地进行点积计算;
利用SIMD加指令,将利用上述SIMD乘指令所得到的多个点积计算结果累加在一起;以及
进一步对上述SIMD加指令所得到的累加结果中所包含的n个累加和进行求和,作为本次点积累计计算的结果。

4.
  根据权利要求1所述的方法,其中上述多个有效滤波系数在上述滤波系数序列中的位置分别向右移位0、1、2、......、n-1个元素进一步包括:
上述滤波系数序列中因上述多个有效滤波系数向右移位而空出的位被置为0。

5.
  根据权利要求1所述的方法,其中依次利用在前的点积累计计算的结果对在后的点积累计计算的结果进行修正的步骤是根据下式(1)~(n-1)进行的:
V1=V0*F0+V1                     (1)
V2=V0*F1+V1*F0+V2              (2)
V3=V0*F2+V1*F1+V2*F0+V3       (3)
……
Vn-1=V0*Fn-2+V1*Fn-3+V2*Fn-4+......+Vn-2*F0+Vn-1  (n-1)
其中,V0、V1、V2、V3、......、Vn-1分别是上述n次点积累计计算的结果;F0、F1、F2、......、Fn-2是上述滤波系数序列中的多个有效滤波系数中从最左端开始的n-1个滤波系数。

6.
  根据权利要求1所述的方法,其中对于上述输入信号序列设置头指针,使其在各次循环计算中指向上述输入信号序列中参与此次循环计算的元素中的最开始元素。

7.
  根据权利要求1所述的方法,其中在将修正后的上述n次点积累计计算的结果添加到上述输入信号序列的开始位置的步骤之后包括:
移动上述头指针,使其指向所添加的上述n次点积累计计算的结果中第一个结果的位置。

8.
  根据权利要求1所述的方法,其中上述滤波系数序列的位数是128的整数倍,起始存储地址是128的整数倍;并且该滤波系数序列中为移位而扩展的0值包含128位。

9.
  根据权利要求1所述的方法,其中上述滤波系数序列中的上述多个有效滤波系数包括前馈滤波系数和反馈滤波系数,并且反馈滤波系数设置在前馈滤波系数之前。

10.
  一种基于SIMD的无限脉冲响应滤波装置,该装置利用预先设定的滤波系数序列对输入信号序列进行无限脉冲响应滤波的循环计算,其包括:
滤波系数序列保存单元,其用于保存上述预先设定的滤波系数序列,其中该滤波系数序列包括多个有效滤波系数、用于使该滤波系数序列位数对齐的0值以及为移位而扩展的0值;
点积累计计算单元,其在每一次循环计算中,利用SIMD指令,对上述滤波系数序列和上述输入信号序列中与该滤波系数序列对应的位置的元素依次进行n次点积累计计算,其中在该n次点积累计计算中,上述多个有效滤波系数在该滤波系数序列中的位置分别向右移位0、1、2、......、n-1个元素;
修正单元,其在每一次循环计算中,在上述点积累计计算单元所得到的n次点积累计计算的结果中,依次利用在前的点积累计计算的结果对在后的点积累计计算的结果进行修正;以及
输入信号序列调整单元,其在每一次循环计算中,将上述修正单元修正后的上述n次点积累计计算的结果添加到上述输入信号序列的开始位置,作为该输入信号序列的最开始的n个新元素;
其中n是这样的值:上述滤波系数序列和上述输入信号序列中一个元素所占位数的n倍等于128。

11.
  根据权利要求10所述的装置,其中上述n的值是根据上述滤波系数序列和上述输入信号序列中的元素的类型而确定的:在元素的类型是64位双精度类型的情况下,上述n等于2;在32位单精度类型或整数类型的情况下,上述n等于4;在16位短整型的情况下,上述n等于8;在8位字符串类型的情况下,上述n等于16。

12.
  根据权利要求10所述的装置,其中上述点积累计计算单元进一步包括:
SIMD乘单元,其在上述n次点积累计计算的每一次中,利用SIMD乘指令,对上述滤波系数序列和上述输入信号序列中与该滤波系数序列对应的位置的元素,每对应的n个元素地进行点积计算;
SIMD累加单元,其在上述n次点积累计计算的每一次中,利用SIMD加指令,将上述SIMD乘单元所获得的多个点积计算的结果累加在一起;以及
累计值求取单元,其在上述n次点积累计计算的每一次中,对上述SIMD累加单元所得到的累加结果中所包含的n个累加和进行求和,作为本次点积累计计算的结果。

13.
  根据权利要求10所述的装置,其中上述修正单元在每一次循环计算中,在上述点积累计计算单元所得到的n次点积累计计算的结果中,根据下式(1)~(n-1),依次利用在前的点积累计计算的结果对在后的点积累计计算的结果进行修正:
V1=V0*F0+V1                      (1)
V2=V0*F1+V1*F0+V2               (2)
V3=V0*F2+V1*F1+V2*F0+V3        (3)
……
Vn-1=V0*Fn-2+V1*Fn-3+V2*Fn-4+......+Vn-2*F0+Vn-1  (n-1)
其中,V0、V1、V2、......、Vn-1分别是上述n次点积累计计算的结果;F0、F1、F2、......、Fn-2是上述滤波系数序列中的多个有效滤波系数中从最左端开始的n-1个滤波系数。

14.
  根据权利要求10所述的装置,其中对于上述输入信号序列设置有头指针,其在各次循环计算中指向上述输入信号序列中参与此次循环计算的元素中的最开始元素。

15.
  根据权利要求14所述的装置,其中上述输入信号序列调整单元在将修正后的上述n次点积累计计算的结果添加到上述输入信号序列的开始位置之后,移动上述头指针,使其指向所添加的该n次点积累计计算的结果中第一个结果的位置。

16.
  根据权利要求10所述的装置,其中上述滤波系数序列的位数是128的整数倍,起始存储地址是128的整数倍;并且该滤波系数序列中为移位而扩展的0值包含128位。

说明书

基于SIMD的无限脉冲响应滤波方法和装置
技术领域
本发明涉及数据处理领域,具体地,涉及基于SIMD的无限脉冲响应滤波方法和装置。
背景技术
无限脉冲响应(Infinite Impulse Response,IIR)滤波是一种循环滤波,其经常应用在数字信号处理中。下面的差分方程(1)定义了在无限脉冲响应滤波中输入信号与输出信号之间的关系:
Y[n]=Σi=0Pb[i]X[n-i]+Σj=1Qa[j]Y[n-j]---(1)]]>
其中,P是前馈滤波阶数;b[i](i=0,1,......,P)是前馈滤波系数;Q是反馈滤波阶数;a[j](j=1,2,......,Q)是反馈滤波系数;X[n-i]是输入信号;Y[n]是输出信号。
根据上面的差分方程(1)可以看出,在无限脉冲响应滤波中,对于输入信号序列X1、X2、......、Xn......中当前输入信号Xn进行滤波以得到其滤波输出Yn的处理,不仅依赖于该当前的输入信号Xn,而且还依赖于在该当前的输入信号Xn之前的输入信号Xn-P、......、Xn-2、Xn-1以及之前的滤波输出Yn-Q、......、Yn-2、Yn-1
为了简单,设定反馈滤波阶数Q=1,则上面的差分方程(1)将变为:
Y[n]=Σi=0Pb[i]X[n-i]+a[1]Y[n-1]---(2)]]>
也就是说,在反馈滤波阶数Q=1的情况下,无限脉冲响应滤波中对于当前输入信号Xn的滤波处理,将依赖于该当前的输入信号Xn、在该当前的输入信号Xn之前的输入信号Xn-p、......、Xn-2、Xn-1以及前一滤波输出Yn-1
这样的无限脉冲响应滤波,可以用专用的硬件、也可以通过在数字信号处理器(DSP)上执行相应的软件实现为无限脉冲响应滤波器。软件实现的方案由于在实现的速度以及灵活性上具有硬件实现的方案所不能及的优势,所以很多设计人员都倾向于利用软件方案来实现专业的无限脉冲响应滤波器。
但是,根据上面的差分方程(1)和(2)可以看出,无限脉冲响应滤波的计算量是非常庞大的。如果利用软件方案来实现,则设计人员所面临的问题就是,就当前的大部分CPU而言,其速度一般都很难充分满足实现这样高数据速率、大型的滤波器的要求。
另一方面,在提升通用处理器的数据处理能力方面,一直以来人们作出了许多努力。单指令多数据(Single-Instruction Multiple-Data,SIMD)体系结构便是这种努力下的一个产物。与通常的单指令单数据体系结构中用单个指令只对单个数据元素进行操作(例如加载、存储、整数相加等)的情况不同,在SIMD体系结构中,在单个指令下,用一个控制器来控制多个重复设置的处理单元,利用这多个处理单元对一组数据(共128位,在32位单精度类型以及整数类型的情况下,是4个数据;在64位双精度类型的情况下,是2个数据;......)中的各个数据同时执行相同的操作,以实现空间上的数据并行性。
也就是说,在SIMD体系结构中,通过利用一条指令对并行的不同数据元素同时执行相同类型的计算,来提高处理器的数据处理性能。现有的包括多个处理单元的大多数高性能处理器都支持SIMD体系结构。
如果能够基于SIMD体系结构来实现无限脉冲响应滤波器,则将能够实现无限脉冲响应滤波的并行性,弥补软件实现方案中通用处理器所存在的速度缺陷,提升所实现的无限脉冲响应滤波器的滤波性能。
但是,前面已经提到过,在无限脉冲响应滤波中,数据之间是存在依赖性的,在当前循环的计算中,需要之前所得到的一部分滤波结果作为必不可少的计算元素。并且,要进行无限脉冲响应滤波的输入信号也并不能保证总是128位对齐的(因为SIMD体系结构始终要求操作数是128位的)。
因此,可以理解,基于SIMD体系结构来实现无限脉冲响应滤波中多个输入信号的并行滤波,是非常困难的。
发明内容
为了解决上述问题,本发明提供了一种基于SIMD的无限脉冲响应滤波方法和装置,以便通过利用SIMD指令对输入信号序列与滤波系数序列进行不同移位的多次点积累计计算,并且利用在前的点积累计计算的结果对在后的点积累计计算的结果进行修正,来实现基于SIMD的并行性能力的无限脉冲响应滤波的并行性,以减少滤波时间、提升滤波性能。
根据本发明的一个方面,提供了一种基于SIMD的无限脉冲响应滤波方法,包括:利用预先设定的滤波系数序列对输入信号序列进行无限脉冲响应滤波的循环计算;其中,在每一次循环计算中包括:利用SIMD指令,对上述滤波系数序列和上述输入信号序列中与该滤波系数序列对应的位置的元素依次进行n次点积累计计算,其中上述滤波系数序列包括多个有效滤波系数、用于使该滤波系数序列位数对齐的0值以及为移位而扩展的0值,并且在上述n次点积累计计算中,上述多个有效滤波系数在该滤波系数序列中的位置分别向右移位0、1、2、......、n-1个元素;在上述n次点积累计计算的结果中,依次利用在前的点积累计计算的结果对在后的点积累计计算的结果进行修正;以及将修正后的上述n次点积累计计算的结果添加到上述输入信号序列的开始位置,作为该输入信号序列的最开始的n个新元素;其中n是这样的值:上述滤波系数序列和上述输入信号序列中一个元素所占位数的n倍等于128。
根据本发明的另一个方面,提供了一种基于SIMD的无限脉冲响应滤波装置,该装置利用预先设定的滤波系数序列对输入信号序列进行无限脉冲响应滤波的循环计算,其包括:滤波系数序列保存单元,其用于保存上述预先设定的滤波系数序列,其中该滤波系数序列包括多个有效滤波系数、用于使该滤波系数序列位数对齐的0值以及为移位而扩展的0值;点积累计计算单元,其在每一次循环计算中,利用SIMD指令,对上述滤波系数序列和上述输入信号序列中与该滤波系数序列对应的位置的元素依次进行n次点积累计计算,其中在该n次点积累计计算中,上述多个有效滤波系数在该滤波系数序列中的位置分别向右移位0、1、2、......、n-1个元素;修正单元,其在每一次循环计算中,在上述点积累计计算单元所得到的n次点积累计计算的结果中,依次利用在前的点积累计计算的结果对在后的点积累计计算的结果进行修正;以及输入信号序列调整单元,其在每一次循环计算中,将上述修正单元修正后的上述n次点积累计计算的结果添加到上述输入信号序列的开始位置,作为该输入信号序列的最开始的n个新元素;其中n是这样的值:上述滤波系数序列和上述输入信号序列中一个元素所占位数的n倍等于128。
附图说明
相信通过以下结合附图对本发明具体实施方式的说明,能够使人们更好地了解本发明上述的特点、优点和目的。
图1是根据本发明实施例的基于SIMD的无限脉冲响应滤波方法的流程图;
图2是图1的过程的图示说明;
图3示出了一个示例性的滤波系数序列;
图4是n=4的情况下图2的方法的详细流程图;
图5是图4的过程的图示说明;以及
图6是根据本发明实施例的基于SIMD的无限脉冲响应滤波装置的方框图。
具体实施方式
本发明的主要构思是,基于SIMD体系结构来实现无限脉冲响应滤波。
下面就结合附图对本发明的各个优选实施例进行详细说明。
图1是根据本发明实施例的基于SIMD的无限脉冲响应滤波方法的流程图,图2是其图示说明。
如图1所示,首先在步骤105,获取预先设定的、用于对输入信号序列进行无限脉冲响应滤波的滤波系数序列S,并将其存储在存储器中。
如前面结合差分方程(1)和(2)已经描述过的,无限脉冲响应滤波系数包括前馈滤波系数b[i](i=0,1,......,P)和反馈滤波系数a[j](j=1,2,......,Q)。在本实施例中,在该预先设定的滤波系数序列S中,将反馈滤波系数a[j](j=1,2,......,Q)排列在前馈滤波系数b[i](i=0,1,......,P)之前,并且该反馈滤波系数a[j](j=1,2,......,Q)和前馈滤波系数b[i](i=0,1,......,P)一起作为该滤波系数序列中的多个有效滤波系数。可以理解,该反馈滤波系数a[j](j=1,2,......,Q)和前馈滤波系数b[i](i=0,1,......,P)的具体值是根据无限脉冲响应滤波的具体实现要求而设定的。
此外,在本实施例中,在上述滤波系数序列S中,除了包括上述多个有效滤波系数之外,还包括用于使该滤波系数序列S位数对齐的0值。也就是说,如前所述,SIMD指令要求操作对象是128位的,即一条SIMD指令在执行时,对于各操作对象都将一次从存储器获取由多个数据组成的128位,并且对这多个数据并行地执行相同的操作。所以,在本实施例中,为了确保能够利用SIMD指令对该滤波系数序列S中所有有效滤波系数都执行所需的操作,预先在该滤波系数序列S中增加了0值,以使该滤波系数序列的位数达到128的整数倍,从而使其尾端的有效滤波系数能够与所增加的0值一起构成满128位的数据,满足SIMD指令对于操作对象的128位对齐要求。
此外,考虑到在后面的点积累计计算中,滤波系数序列S中的有效滤波系数的位置要向右移位,所以,在本实施例中,在上述滤波系数序列S中,除了包括上述多个有效滤波系数和用于使该滤波系数序列位数对齐的0值之外,还包括为移位而扩展的0值。也就是说,在本实施例中,在预先设定的滤波系数序列S中,还增加了额外的128位并将其置为0值,以作为在有效滤波系数移位时接纳移位过来的有效滤波系数的位置,以确保所有的有效滤波系数都不被从该滤波系数序列S中移出,并确保即使有效滤波系数进行移位,该滤波系数序列的长度也不变,仍能满足SIMD指令对于操作对象的128位对齐要求。
此外,由于SIMD指令每次都是从存储器的、128的整数倍的起始地址处开始获取128位的操作对象,所以,在本实施例中,使该滤波系数序列S地址对齐,即使该滤波系数序列S在存储器中的起始存储地址是128的整数倍。
下面给出滤波系数序列S的一个具体示例。
例如,在无限脉冲响应滤波的前馈滤波阶数P=3、反馈滤波阶数Q=1的情况下,上面的差分方程(1)将变为:
Yn=b0Xn+b1Xn-1+b2Xn-2+b3Xn-3+a1Yn-1     (3)
在此情况下,设定如图3所示的滤波系数序列S。其中的每一个小格都代表该滤波系数序列S中的一个32位单精度类型或整数类型的元素。
具体地,在该滤波系数序列S中,元素a1、b3、b2、b1、b0是有效滤波系数。并且,从图3可以看出,反馈滤波系数a1被设置在前馈滤波系数b3、b2、b1、b0之前。
此外,如图3所示,在该滤波系数序列S中,除了有效滤波系数a1、b3、b2、b1、b0之外,还包括为了使该滤波系数序列S的位数达到128的整数倍而添加的0值部分c。由于如上所述,该滤波系数序列S中的一个元素占32位,所以0值部分c中包含了3个元素的量的0值,以便使剩余的最后一个有效滤波系数b0能够与这3个元素的量的0值一起构成128位。
再者,如图3所示,在该滤波系数序列S中,还包括考虑到后面步骤中有效滤波系数的移位而扩展的128位的0值部分d。由于一个元素占32位,所以图3中示出的128位的0值部分d包含4个元素,作为在有效滤波系数a1、b3、b2、b1、b0分别向右移位1、2、3个元素的量时接纳所移位过来的有效滤波系数的位置,以确保在有效滤波系数的移位后该滤波系数序列S的长度不变,仍是128的整数倍。
此外,为了满足SIMD地址对齐要求,该滤波系数序列S的起始存储地址应该是128的整数倍。
在步骤110,获得要进行无限脉冲响应滤波的输入信号序列T,并将其存储在存储器中。
如上所述,由于SIMD指令每次都是从存储器的、128的整数倍的起始地址处开始获取128位的操作对象,所以,在本实施例中,也使所获得的输入信号序列T在存储器中的地址对齐,即使该输入信号序列的起始存储地址也是128的整数倍。
接着,对于所获得的输入信号序列T,循环执行规定次数的下面的步骤115~125,以进行无限脉冲响应滤波。本领域技术人员可以理解,该规定次数是根据无限脉冲响应滤波的具体实现要求、滤波系数序列S的长度、输入信号序列T的长度以及滤波时间等条件而确定的。
具体地,在步骤115,利用SIMD指令对滤波系数序列S和输入信号序列T中对应的元素依次进行n次点积累计计算,以在各次点积累计计算中求取滤波系数序列S和输入信号序列T中每对应的n个元素的点积的累计。其中,如图2所示,在该n次点积累计计算中,滤波系数序列S中的多个有效滤波系数(F0,......)在该滤波系数序列S中的位置分别向右移位0、1、2、......、n-1个元素。
从而,经过这n次点积累计计算,将得到n个点积累计计算的结果V0、V1、V2、V3、......、Vn-1(图2中的步骤1)。
其中,上述n是这样的值:滤波系数序列S和输入信号序列T中一个元素所占位数的n倍等于128。也就是说,该n的值是根据滤波系数序列S和输入信号序列T中的元素的类型而确定的。
具体地,在滤波系数序列S和输入信号序列T中的元素是64位双精度类型的情况下,将n设定为2,利用SIMD指令对滤波系数序列S和输入信号序列T中的相应元素依次进行2次点积累计计算。并且,在这2次点积计算中,分别使滤波系数序列S中的有效滤波系数的位置向右移位0、1个元素的量。
依此类推,在滤波系数序列S和输入信号序列T中的元素是32位单精度类型或整数类型的情况下,将n设定为4,进行4次点积累计计算。并且,在这4次点积累计计算中,分别使滤波系数序列S中的有效滤波系数的位置向右移位0、1、2、3个元素的量。
在滤波系数序列S和输入信号序列T中的元素是16位短整型的情况下,将n设定为8,进行8次点积累计计算。并且,在这8次点积累计计算中,分别使滤波系数序列S中的有效滤波系数的位置向右移位0、1、2、3、......、7个元素的量。
在滤波系数序列S和输入信号序列T中的元素是8位字符串类型的情况下,将n设定为16,进行16次点积累计计算。并且,在这16次点积累计计算中,分别使滤波系数序列S中的有效滤波系数的位置向右移位0、1、2、3、......、15个元素的量。
此外,在本实施例中,如图2所示,对于输入信号序列T设置头指针(或头索引),使其在每次循环计算中指向输入信号序列T中参与此次循环计算的元素中的最开始元素。
从而,在本步骤中,在上述n次点积累计计算中,以滤波系数序列S为基准,从输入信号序列T中头指针所指向的元素开始,获取与滤波系数序列S中的元素(包括有效滤波系数和所添加的0值部分)相应数量的元素,作为输入信号序列T中与该滤波系数序列S对应的位置的元素参与这n次点积累计计算。
在步骤120,对上述点积累计计算的结果V0、V1、V2、V3、......、Vn-1进行修正(图2中的步骤2)。
具体地,在该步骤中,根据下面的公式(1)~(n-1),在点积累计计算的结果V0、V1、V2、V3、......、Vn-1中,依次利用在前的点积累计计算的结果以及滤波系数序列S中相应的有效滤波系数,对在后的点积累计计算的结果进行修正:
V1=V0*F0+V1                                        (1)
V2=V0*F1+V1*F0+V2                                 (2)
V3=V0*F2+V1*F1+V2*F0+V3                          (3)
......
Vn-1=V0*Fn-2+V1*Fn-3+V2*Fn-4+......+Vn-2*F0+Vn-1     (n-1)
其中,F0、F1、F2、......、Fn-2是滤波系数序列S中的多个有效滤波系数中从最左端开始的n-1个有效滤波系数。
在步骤125,将修正后的点积累计计算的结果V0、V1、V2、V3、......、Vn-1添加到输入信号序列T的开始位置(图2中的步骤3),作为该输入信号序列T的最开始的n个新元素。
具体地,在本实施例中,可以在步骤110获取输入信号序列T并进行存储时,在该输入信号序列T的存储空间之前为点积累计计算的结果预留出足够的存储空间。并且,在本步骤中,依次将修正后的点积累计计算的结果V0、V1、V2、V3、......、Vn-1放置到输入信号序列T之前的该预留出的存储空间内。
并且,如图2所示,在该步骤中,在将修正后的点积累计计算的结果V0、V1、V2、V3、......、Vn-1添加到输入信号序列T的开头之后,还移动了原本指向输入信号序列T中的第一个元素X0的头指针,使其指向该新添加的n个点积累计计算的结果中的第一个结果V0的位置。这样,该n个点积累计计算的结果V0、V1、V2、V3、......、Vn-1便成为了该输入信号序列T的新的前n个元素。
此外,从该步骤可以看出,在本实施例中,之所以在步骤115对滤波系数序列S和输入信号序列T中的相应元素依次进行n次点积累计计算,是为了得到n个、共128位的点积累计计算的结果。因为可以理解,每个点积累计计算的结果所占位数与滤波系数序列S和输入信号序列T中一个元素所占的位数是相同的,并且,如上所述,其n倍等于128,所以,在输入信号序列T的开头一次添加n个、共128位的点积累计计算的结果,能够使调整后的输入信号序列T仍满足SIMD的地址对齐要求。也就是说,如上所述,输入信号序列T的起始存储地址最初是128的整数倍,所以如果一次增加n个、共128位的点积累计计算的结果,则该输入信号序列包括该128位的结果后的新起始存储地址仍然可以是128的整数倍。
然后,在步骤130,判断循环计算的次数是否已经达到规定次数。如果达到,则该过程结束,否则,返回到步骤115进行下一循环的计算。
以上就是本实施例的基于SIMD的无限脉冲响应滤波方法的总体过程。
下面以滤波系数序列S和输入信号序列T中的元素是32位单精度类型或整数类型的情况为例,说明上面图1的详细过程。图4是该详细过程的流程图。图5是该详细过程的图示说明。
首先在步骤405,获取预先设定的、用于对输入信号序列进行无限脉冲响应滤波的32位单精度类型或整数类型的滤波系数序列S,并将其存储在存储器中。关于该步骤,可参照前面关于图1中的步骤105的说明。
在步骤410,获得要进行无限脉冲响应滤波的32位单精度类型或整数类型的输入信号序列T,并将其存储在存储器中。关于该步骤,可参照前面关于图1中的步骤110的说明。
下面的步骤415-435的过程是利用SIMD指令对滤波系数序列S和输入信号序列T中对应的元素依次进行n次点积累计计算(图5中的步骤1)的过程。
由于图4的过程是针对于滤波系数序列S和输入信号序列T中的元素是32位单精度类型或整数类型的情况的,所以,如上所述,n=4。也就是说,在该过程中,利用SIMD指令对滤波系数序列S和输入信号序列T中的相应元素依次进行4次点积累计计算,以得到各次点积累计计算的结果V0、V1、V2、V3。并且,如图5所示,在这4次点积累计计算中,滤波系数序列S中的多个有效滤波系数(F0,......)在该滤波系数序列S中的位置分别向右移位0、1、2、3个元素的量。
具体地,在步骤415,利用SIMD乘指令对滤波系数序列S和输入信号序列T中的相应元素进行点积计算。
在32位单精度类型或整数类型的情况下,128位的操作对象中包括4个数据。这样,一条SIMD乘指令将从滤波系数序列S和输入信号序列T中分别获取4个元素,形成4对操作数,并同时对这4对操作数进行各自的点积计算。这样,在该SIMD乘指令所得到的结果中,将同时包含这4对操作数的各自的点积结果。
从而,在如图3所示的滤波系数序列S那样元素数超过4个的滤波系数序列S的情况下,要完成该滤波系数序列S与输入信号序列T中相应元素数量的点积计算,就需要进行多次SIMD乘操作。这样,每进行一次SIMD乘操作,便会获得一组由4对元素的各自的点积结果组成的SIMD乘结果。
下面举例来进行说明。
给出:滤波系数序列S(1,2,3,4,5,6,7,8,0,0,0,0)
输入信号序列T(1,2,3,4,5,6,7,8,9,10,11,12)。
为了完成上面给出的滤波系数序列S和输入信号序列T中所有元素的点积计算,需要进行3次SIMD乘操作,即S中的元素(1,2,3,4)与T中的元素(1,2,3,4)的SIMD乘操作、S中的元素(5,6,7,8)与T中的元素(5,6,7,8)的SIMD乘操作、S中的元素(0,0,0,0)与T中的元素(9,10,11,12)的SIMD乘操作。从而,这3次SIMD乘操作将得到以下SIMD乘结果:
(1,4,9,16)、(25,36,49,64)以及(0,0,0,0)。
在步骤420,利用SIMD加指令将多次SIMD乘操作所得到的多个结果累加在一起。如果存在两个以上的SIMD乘结果,则在该步骤中需要执行多次SIMD加操作来将这些结果一一累加在一起。
并且,可以理解,由于SIMD加指令也是同时对128位的一组数据进行加运算,所以其所得到的结果中也将包含多个相应的数据和。
在图4的过程的情况下,由于上面所得到的多个SIMD乘结果各自包含4个点积结果,所以在利用SIMD加指令对这多个SIMD乘结果进行累加所得到的累加结果中,也将包含相应的4个累加和。
继续上面步骤415中的例子来进行说明。
在该例子中,由于前面的3次SIMD乘操作得到了3个SIMD乘结果:(1,4,9,16)、(25,36,49,64)以及(0,0,0,0),所以需要执行2次SIMD加操作将这些结果累加在一起。例如,可以对于前两个SIMD乘结果执行第一次SIMD加操作,将这两个SIMD乘结果中所包含的4个点积结果分别累加在一起,得到累加结果(26,40,58,80)。进而,对于该累加结果(26,40,58,80)和第三个SIMD乘结果(0,0,0,0)执行第二次SIMD加操作,得到最终的累加结果(26,40,58,80)。
当然,本发明对于SIMD乘结果的累加顺序并没有特别的限制。
在步骤425,进一步求取上述累加结果中所包含的累加和的总和,作为本次点积累计计算的结果。
继续上面步骤420中的例子来进行说明。
在该例子中,由于所得到的累加结果是(26,40,58,80),所以对该累加结果中所包含的4个累加和进一步求和,将得到最终的点积累计计算的结果(204)。
在步骤430,判断滤波系数序列S中的多个有效滤波系数的位置是否已经向右移位了3(即n-1)次。如果是,则该过程转到步骤440,否则前进到步骤435。
在步骤435,使滤波系数序列S中的多个有效滤波系数的位置向右移位1个元素的量。并且,将因该多个有效滤波系数的向右移位而空出的左侧的元素位置设置为0。
需要说明的是,在本步骤中,仅使滤波系数序列S中的多个有效滤波系数的位置向右移位,而滤波系数序列S的长度本身以及在存储器中的存储位置并不发生变化。也就是说,在本步骤中,实质上是使该滤波系数序列S中的多个有效滤波系数各自复写到其右侧的位置上,然后将原来的最左端的有效滤波系数置为0,来达到移位效果。
接着,该过程返回到步骤415,继续进行移位后的滤波系数序列S与输入信号序列T中相应元素的点积累计计算。
这样,由于是32位单精度类型或整数类型、即n=4的情况,所以上面的步骤415~435的过程将循环执行4次,即滤波系数序列S和输入信号序列T中对应的元素之间将在滤波系数序列S中的多个有效滤波系数具有不同的移位的前提下进行4次点积累计计算。从而,在步骤415~435的4次循环结束后,将得到各次点积累计计算的结果V0、V1、V2、V3。
在步骤440,对上述点积累计计算的结果V0、V1、V2、V3进行修正(图5中的步骤2)。
具体地,在该步骤中,根据下面的公式(1)~(3),在点积累计计算的结果V0、V1、V2、V3中,依次利用在前的点积累计计算的结果以及滤波系数序列S中相应的有效滤波系数对在后的点积累计计算的结果进行修正:
V1=V0*F0+V1                                        (1)
V2=V0*F1+V1*F0+V2                                 (2)
V3=V0*F2+V1*F1+V2*F0+V3                           (3)
其中,F0、F1、F2是滤波系数序列S中的多个有效滤波系数中从最左端开始的3个有效滤波系数。
在步骤445,将修正后的点积累计计算的结果V0、V1、V2、V3添加到输入信号序列T的开始位置(图5中的步骤3),作为该输入信号序列T的最开始的4个新元素。
并且,如图5所示,在该步骤中,还将输入信号序列T的头指针向左移动4个元素的量,使其指向点积累计计算的结果V0的位置。
然后,在步骤450,判断循环计算的次数是否已经达到规定次数。如果达到,则该过程结束,否则,返回到步骤415进行下一循环的计算。其中,图5中调整后的输入信号序列T中从头指针所指元素开始向右的多个元素将参与下一循环计算,其中包括了新添加的点积累计计算的结果V0、V1、V2、V3。
以上就是本实施例的基于SIMD的无限脉冲响应滤波方法在滤波系数序列S和输入信号序列T中的元素是32位单精度类型或整数类型的情况下的具体过程。
需要说明的是,在图4的过程中,虽然通过使滤波系数序列S中的有效滤波系数的位置移位来实现4次不同的点积累计计算,但是,也可以不在每次点积累计计算时使有效滤波系数移位,而是预先将有效滤波系数的位置移位0、1、2、3个元素时的不同的滤波系数序列S分别保存在存储器中,并在各次点积累计计算中从存储器直接获取相应的滤波系数序列S。这样,能够节省因有效滤波系数的移位而产生的时间和操作成本,节省滤波时间、提升滤波性能。
此外,还需要说明的是,虽然上面图4的过程是针对于滤波系数序列S和输入信号序列T中的元素是32位单精度类型或整数类型的情况而描述的,但是,对于本领域技术人员来说,可以容易地根据该过程推导出64位双精度类型、16位短整型、8位字符串类型等情况下的基于SIMD的无限脉冲响应滤波过程。
以上就是对本实施例的基于SIMD的无限脉冲响应滤波方法的详细描述。在本实施例中,通过利用SIMD指令对输入信号序列与滤波系数序列进行不同移位下的多次点积累计计算,并且利用在前的点积累计计算的结果对在后的点积累计计算的结果进行修正,能够基于SIMD的并行性能力来实现无限脉冲响应滤波的并行性,从而能够减少滤波时间、提升滤波性能。
在同一发明构思下,本发明提供一种基于SIMD的无限脉冲响应滤波装置。下面结合附图对其进行描述。
图6是根据本发明实施例的基于SIMD的无限脉冲响应滤波装置的方框图。本实施例的基于SIMD的无限脉冲响应滤波装置利用预先设定的滤波系数序列对输入信号序列进行无限脉冲响应滤波的循环计算。
如图6所示,本实施例的基于SIMD的无限脉冲响应滤波装置60包括:滤波系数序列保存单元601、输入信号序列获取单元602、点积累计计算单元603、修正单元604以及输入信号序列调整单元605。
其中,滤波系数序列保存单元601用于保存预先设定的滤波系数序列S,其中该滤波系数序列S包括多个有效滤波系数。此外,该滤波系数序列S还包括用于使该滤波系数序列位数对齐、即使该滤波系数序列的位数成为128的整数倍的0值。此外,该滤波系数序列S还包括为移位而扩展的、占128位的0值。并且,滤波系数序列保存单元601将该滤波系数序列S存储在起始存储地址是128的整数倍的位置处。
输入信号序列获取单元602用于获得要进行无限脉冲响应滤波的输入信号序列T,并将其存储在起始存储地址是128的整数倍的位置处。
点积累计计算单元602在每一次循环计算中,利用SIMD指令,对滤波系数序列S和输入信号序列T中与该滤波系数序列S对应的位置的元素依次进行n次点积累计计算。其中在该n次点积累计计算中,该滤波系数序列S中的多个有效滤波系数的位置分别向右移位0、1、2、......、n-1个元素。
其中,n是这样的值:滤波系数序列S和输入信号序列T中一个元素所占位数的n倍等于128。也就是说,该n的值是根据滤波系数序列S和输入信号序列T中的元素的类型而确定的:在元素的类型是64位双精度类型的情况下,n等于2;在32位单精度类型或整数类型的情况下,n等于4;在16位短整型的情况下,n等于8;在8位字符串类型的情况下,n等于16。
此外,在本实施例中,对于输入信号序列T设置头指针(或头索引),使其在每次循环计算中指向输入信号序列T中参与此次循环计算的元素中的最开始元素。
从而,在n次点积累计计算中,点积累计计算单元602可以以滤波系数序列S为基准,从输入信号序列T中头指针所指向的元素开始,获取与滤波系数序列S中的元素相应数量的元素,作为输入信号序列T中与滤波系数序列S相应的元素来进行n次点积累计计算。
如图6所示,点积累计计算单元603可以进一步包括:SIMD乘单元6031、SIMD累加单元6032以及累计值求取单元6033。
其中,SIMD乘单元6031在上述n次点积累计计算的每一次中,利用SIMD乘指令,对滤波系数序列S和输入信号序列T中对应的元素,每对应的n个元素地进行点积计算。
SIMD累加单元6032在上述n次点积累计计算的每一次中,利用SIMD加指令,将SIMD乘单元6031所获得的多个点积计算的结果累加在一起。
累计值求取单元6033在上述n次点积累计计算的每一次中,对SIMD累加单元6032所得到的累加结果中所包含的n个累加和进行求和,作为本次点积累计计算的结果。
修正单元604在每一次循环计算中,在点积累计计算单元603所得到的n次点积累计计算的结果V0、V1、V2、......、Vn-1中,根据下式(1)~(n-1),依次利用在前的点积累计计算的结果对在后的点积累计计算的结果进行修正:
V1=V0*F0+V1                                        (1)
V2=V0*F1+V1*F0+V2                                  (2)
V3=V0*F2+V1*F1+V2*F0+V3                           (3)
......
Vn-1=V0*Fn-2+V1*Fn-3+V2*Fn-4+......+Vn-2*F0+Vn-1   (n-1)
其中,F0、F1、F2、......、Fn-2是滤波系数序列S中的多个有效滤波系数中从最左端开始的n-1个滤波系数。
输入信号序列调整单元605在每一次循环计算中,将修正单元604修正后的n次点积累计计算的结果V0、V1、V2、......、Vn-1添加到输入信号序列T的开始位置,作为该输入信号序列T的最开始的n个新元素。并且,输入信号序列调整单元605还移动输入信号序列T的头指针,使其指向该n次点积累计计算的结果中第一个结果V0的位置。
以上就是对本实施例的基于SIMD的无限脉冲响应滤波装置的详细描述。其中,该装置60及其各个组成部分,可以由专用的电路或芯片构成,也可以通过计算机(处理器)执行相应的程序来实现。
以上虽然通过一些示例性的实施例对本发明的基于SIMD的无限脉冲响应滤波方法和装置进行了详细的描述,但是以上这些实施例并不是穷举的,本领域技术人员可以在本发明的精神和范围内实现各种变化和修改。因此,本发明并不限于这些实施例,本发明的范围仅以所附权利要求为准。

基于SIMD的无限脉冲响应滤波方法和装置.pdf_第1页
第1页 / 共27页
基于SIMD的无限脉冲响应滤波方法和装置.pdf_第2页
第2页 / 共27页
基于SIMD的无限脉冲响应滤波方法和装置.pdf_第3页
第3页 / 共27页
点击查看更多>>
资源描述

《基于SIMD的无限脉冲响应滤波方法和装置.pdf》由会员分享,可在线阅读,更多相关《基于SIMD的无限脉冲响应滤波方法和装置.pdf(27页珍藏版)》请在专利查询网上搜索。

本发明提供了一种基于SIMD的无限脉冲响应滤波方法和装置。该方法包括:利用预先设定的滤波系数序列对输入信号序列进行无限脉冲响应滤波的循环计算;在每一次循环计算中:利用SIMD指令,对滤波系数序列和输入信号序列中对应的元素进行n次点积累计计算,其中滤波系数序列包括多个有效滤波系数、用于使该滤波系数序列位数对齐的0值以及为移位而扩展的0值,并且在n次点积累计计算中,该多个有效滤波系数在滤波系数序列中的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 基本电子电路


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1