本发明属于计算机技术领域,涉及一种用于fft中旋转因子乘运算的操作数地址生成方法。
背景技术:
离散傅里叶变换(dft)是数理方程、线性系统分析、信号处理与仿真等领域中的一种常见方法,特别是快速傅里叶变换(fft)作为离散傅里叶变换的快速计算手段被提出之后,有力的促进了它在科学研究与工程应用中的普及与发展。基2-fft算法是一种最常见的快速dft计算方法,它将一个n点(n=2m,其中m为正整数)的dft计算分为m级进行处理,每一级都包含n/2次形如
由于在科学与工程中的普遍应用,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)采用循环超界寻址方式是否产生超界作为旋转因子
进一步的,旋转因子的访存地址表示为:
其中aw表示旋转因子
进一步的,对于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,那么
将循环超界寻址方式是否产生超界作为旋转因子
下面以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级:
分析以上旋转因子
在一般情况下,对于n点fft计算的第m级(m=1,2,…,log2n),每读取n/2m个x(k)便会产生一次循环超界,此时旋转因子的地址增加值为n/2m。如果将源操作数x(k)的循环超界标志作为旋转因子地址变化的条件,将其关联到旋转因子的访存通道中,便能实现旋转因子的地址变化控制,实现每周期连续的地址生成。计算的执行过程中,x(k)的地址未产生循环超界时,旋转因子地址维持不便,产生循环超界时,旋转因子地址发生一次变化。旋转因子的访存地址可以表示成:
其中aw表示旋转因子
通过这种方式可以实现两个操作数的连续的地址生成,加快旋转因子乘的计算;这种将一个操作数通道的寻址状态关联到另一个操作数通道的方法称为关联寻址方法。
本发明的具体实施方式中可将旋转因子
在16点基2-fft中,计算第m级的乘旋转因子时,如果由src0和src1两个通道分别读取x(k)和
表5~表8分别给出了16点基2-fft的各级乘旋转因子的源操作数寻址过程。该例子中假设x(k)存储在0起始地址处,旋转因子
本发明公开的循环超界关联寻址方式进行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级乘旋转因子的寻址过程