一种用于FFT中旋转因子乘运算的操作数地址生成方法与流程

文档序号:17477834发布日期:2019-04-20 06:14阅读:1277来源:国知局
一种用于FFT中旋转因子乘运算的操作数地址生成方法与流程

本发明属于计算机技术领域,涉及一种用于fft中旋转因子乘运算的操作数地址生成方法。



背景技术:

离散傅里叶变换(dft)是数理方程、线性系统分析、信号处理与仿真等领域中的一种常见方法,特别是快速傅里叶变换(fft)作为离散傅里叶变换的快速计算手段被提出之后,有力的促进了它在科学研究与工程应用中的普及与发展。基2-fft算法是一种最常见的快速dft计算方法,它将一个n点(n=2m,其中m为正整数)的dft计算分为m级进行处理,每一级都包含n/2次形如的旋转因子乘运算和n/2次形如x(k)±g的蝶形运算,有效减少了dft原始算法的计算量。以16点的fft计算为例,如图1所示,基2-fft算法将其分为四级,每一级中包含8次旋转因子乘运算和8次蝶形运算。

由于在科学与工程中的普遍应用,fft算法在计算机上的实现研究也极为广泛,大多都围绕着如何高效快速的实现fft计算来设计相应的软件和硬件。已经公开的专利“一种面向通用处理器的fft计算地址产生方法(申请号:cn201210363936.1)”中发明了一种循环超界寻址方法,用于fft计算中每一级的蝶形运算操作数地址的连续生成。对于n点fft的蝶形运算,循环超界寻址可以表示为:

其中m=1,2,…,log2n,表示当前运算的级数;an表示第n个操作数的原始访存地址,an_new表示更新后的第n个操作数的访存地址。蝶形运算有两个源操作数,所以n=0和1,分别表示源操作数0和源操作数1。

假设n点基2-fft的待计算数据存储在0起始地址处,计算第m级的蝶形运算首先需要在地址寄存器中设置好初始地址值(a0,a1)=(0,2m-1),地址增量寄存器设置为i0=i1=2m,循环界限寄存器设置为m0=m1=n。表1~表4分别表示了16点基2-fft计算中,按照式(公式1)的循环超界寻址方式产生的第1~4级的蝶形操作数对的过程,表中产生超界时生成的地址用(*)标出。这里需要注意,当m为1时,表示对第1级执行蝶形运算,循环超界寻址方法虽然同样适用,但是需要事先对操作数进行位反排序,如图1和表1所示。实际操作中,一般在第1级不用循环超界寻址方式,而是直接用位反寻址进行蝶形运算,可以避免单独的排序过程,这里为了计算完整性,仍然将第1级用循环超界的寻址方式列出来。循环超界寻址方式能够按照计算前所设定的初始地址值,连续的产生后续操作数的访存地址,能有效解决fft中蝶形运算的操作数寻址问题。循环超界寻址方式配合蝶形运算指令,能够实现高效的蝶形运算,提升对fft的处理性能。而操作数地址生成问题一直都是fft算法实现的难点,同时也是该算法中的研究热点。



技术实现要素:

本发明的目的在于提供一种用于fft中旋转因子乘运算的操作数地址生成方法,解决fft计算中旋转因子乘运算的操作数地址快速生成问题。

为达到上述目的,本发明采用如下技术方案:

一种用于fft中旋转因子乘运算的操作数地址生成方法,源操作数x(k)采用循环超界寻址方式依次产生每个源操作数x(k)的访存地址,根据源操作数x(k)采用循环超界寻址方式是否产生超界作为旋转因子的地址生成的控制条件,实现旋转因子乘运算的每周期不间断访存地址生成。

进一步的,根据源操作数x(k)采用循环超界寻址方式是否产生超界作为旋转因子的地址生成的控制条件:如果x(k)的地址未产生超界,采用寄存器间接寻址方式产生访存地址;如果x(k)的地址产生了超界,那么采用前变址寻址方式产生访存地址。

进一步的,旋转因子的访存地址表示为:

其中aw表示旋转因子的地址,ak表示源操作数x(k)的地址。

进一步的,对于n点fft计算的第m级,m=1,2,…,log2n,每读取n/2m个x(k)便会产生一次循环超界,此时旋转因子的地址增加值为n/2m;将源操作数x(k)的循环超界标志作为旋转因子地址变化的条件,将循环超界标志关联到旋转因子的访存通道中,便能实现旋转因子的地址变化控制,实现每周期连续的地址生成。

进一步的,将fft每一级中的任意两次旋转因子乘运算的计算先后顺序按照如下条件来进行排列:

如果n0≤n1且k0<k1,那么先于进行计算;

其中n0和n1为旋转因子的指数,k0和k1为序列数据的编号。

与现有技术相比,本发明具有以下有益的技术效果:

本发明一种用于fft中旋转因子乘运算的操作数地址生成方法,能实现fft中旋转因子乘运算的操作数地址的连续生成,对fft中旋转因子乘运算的计算顺序进行优化,将循环超界寻址方式应用于需要进行fft变换的数据的地址生成,而将循环超界寻址方式是否产生超界作为旋转因子的地址生成的控制条件,用于控制旋转因子的地址变化,形成一种关联寻址方式,有效解决旋转因子的寻址问题,本发明可以应用于各种数字信号处理器的设计中,实现fft旋转因子乘运算的操作数地址的连续生成,有效提升对fft的处理性能,本发明公开的循环超界关联寻址方式进行n点fft计算,只需要在每一级乘旋转因子之前设置好与寻址相关的寄存器,地址产生单元便可以根据循环超界加1寻址方式和关联寻址方式自主连续的寻址操作数,程序中配合复数乘法指令可以实现旋转因子乘的快速流水计算。

附图说明

图1为16点基2-fft算法的分级计算流程。

图2为fft中旋转因子乘运算的关联寻址示意图。

具体实施方式

下面结合附图对本发明做进一步详细描述:

本项发明将上述已有的循环超界寻址方式引入旋转因子乘运算中,提供一种用于fft中旋转因子乘运算的操作数地址生成方法,有效解决了旋转因子乘运算的操作数地址连续生成问题:对fft中旋转因子乘运算的计算顺序进行优化:

将fft每一级中的任意两次旋转因子乘运算的计算先后顺序按照如下条件来进行排列:

如果n0≤n1且k0<k1,那么先于进行计算;其中n0和n1为旋转因子的指数,k0和k1为序列数据的编号;

将循环超界寻址方式是否产生超界作为旋转因子的地址生成的控制条件:如果x(k)的地址未产生超界,那么采用寄存器间接寻址方式产生访存地址;如果x(k)的地址产生了超界,那么采用前变址寻址方式产生访存地址。

下面以16点基2-fft的计算为例来说明本项

技术实现要素:

结合图1,在16点基2-fft的计算中,每一级中旋转因子乘运算的排列顺序如下:

第1级:

第2级:

第3级:

第4级:

从以上的列举可见,源操作数x(k)与旋转因子的获取地址不具备连续递增性,且每一级的地址增长规律也不尽相同。为此,本项发明针对上述复杂且无明显规律的寻址操作,对每一级中旋转因子乘运算的顺序进行优化调整。将每一级的任意两次旋转因子乘运算的排列先后顺序按照如下两个条件来进行处理:

如果n0≤n1且k0<k1,那么先于进行计算。

其中n0和n1为旋转因子的指数,k0和k1为序列数据的编号。

这样将每一级的乘法运算顺序进行重新优化排列如下:

第1级:

第2级:

第3级:

第4级:

分析以上旋转因子与源操作数x(k)的排列规律,可以发现:如果源操作数x(k)按照循环超界寻址,每发生一次超界,旋转因子地址就产生一次变化且同一级中的每次变化的地址增量相同,否则旋转因子地址保持不变;例如,第3级中源操作数x(k)的寻址产生了三次超界,每次超界时旋转因子产生一次访存变化,且地址增量都为2。

在一般情况下,对于n点fft计算的第m级(m=1,2,…,log2n),每读取n/2m个x(k)便会产生一次循环超界,此时旋转因子的地址增加值为n/2m。如果将源操作数x(k)的循环超界标志作为旋转因子地址变化的条件,将其关联到旋转因子的访存通道中,便能实现旋转因子的地址变化控制,实现每周期连续的地址生成。计算的执行过程中,x(k)的地址未产生循环超界时,旋转因子地址维持不便,产生循环超界时,旋转因子地址发生一次变化。旋转因子的访存地址可以表示成:

其中aw表示旋转因子的地址,ak表示源操作数x(k)的地址。

通过这种方式可以实现两个操作数的连续的地址生成,加快旋转因子乘的计算;这种将一个操作数通道的寻址状态关联到另一个操作数通道的方法称为关联寻址方法。

本发明的具体实施方式中可将旋转因子作为源操作数1(src1),将x(k)作为源操作数0(src0),关联寻址的时候将src1关联到src0,如图2所示,当然也可以反过来,将src0关联到src1。这里结合图2,并以图1的16点基2-fft计算为例来说明本发明的具体实施方式。

在16点基2-fft中,计算第m级的乘旋转因子时,如果由src0和src1两个通道分别读取x(k)和进行复数乘法操作,如图1所示,那么src0通道采用循环超界寻址模式实现x(k)的地址生成。这里所采用的循环超界寻址方式简记为:*ar0++(ir0)%1,它按照(公式1)的方法实现地址生成,循环超界后地址增量为1;ar0的初始值设置为x(2m-1)所在的地址(第一个复数乘法为),且地址偏移寄存器ir0=2m,超界限制寄存器imr0=n(这里假设x(k)存储在0起始地址处,那么超界地址为n)。src1采用关联寻址模式,按照(公式2)的方法实现的地址生成,这里所采用的关联寻址模式可简记为:*++ar1(ir1)|*ar1(relatedsrc0)。当src0通道中x(k)的地址未产生超界时,采用“*ar1”的寄存器间接寻址方式,用ar1中的值作为地址去访存,且ar1中的值保持不变;x(k)的地址产生超界时,采用“*++ar1(ir1)”的前变址模式,即先将ar1的值更新为ar1+ir1,并用这个更新后的地址作为访存地址,实现了的地址变化。

表5~表8分别给出了16点基2-fft的各级乘旋转因子的源操作数寻址过程。该例子中假设x(k)存储在0起始地址处,旋转因子存储在0x2000起始地址处,src0的循环超界以及src1的地址变化均用(*)符号进行了标注,并且src0和src1分别采用ar0和前变址的ar1new的地址进行访存。表5中的第1级旋转因子乘运算是针对位反排序后的操作数进行的,但是所乘的旋转因子均为常数1,所以第1级旋转因子乘运算可以省略而直接用位反寻址进行第1级的蝶形运算,此处为了保持计算的完整性,仍然列出了第1级中采用关联寻址实现旋转因子的乘运算。

本发明公开的循环超界关联寻址方式进行n点fft计算,只需要在每一级乘旋转因子之前设置好与寻址相关的寄存器,地址产生单元便可以根据循环超界加1寻址方式和关联寻址方式自主连续的寻址操作数,程序中配合复数乘法指令可以实现旋转因子乘的快速流水计算。

表116点基2-fft的第1级循环超界寻址的蝶形操作数对

表216点基2-fft的第2级循环超界寻址的蝶形操作数对

表316点基2-fft的第3级循环超界寻址的蝶形操作数对

表416点基2-fft的第4级循环超界寻址的蝶形操作数对

表516点基2-fft的第1级乘旋转因子的寻址过程

表616点基2-fft的第2级乘旋转因子的寻址过程

表716点基2-fft的第3级乘旋转因子的寻址过程

表816点基2-fft的第4级乘旋转因子的寻址过程

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1