CN103699515B - 一种fft并行处理装置和方法 - Google Patents
一种fft并行处理装置和方法 Download PDFInfo
- Publication number
- CN103699515B CN103699515B CN201310740883.5A CN201310740883A CN103699515B CN 103699515 B CN103699515 B CN 103699515B CN 201310740883 A CN201310740883 A CN 201310740883A CN 103699515 B CN103699515 B CN 103699515B
- Authority
- CN
- China
- Prior art keywords
- butterfly computation
- data
- butterfly
- fft
- level
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Complex Calculations (AREA)
Abstract
本发明提供一种FFT并行处理装置和方法,该装置支持一种或多种基数的蝶形运算,包括FFT控制器和蝶形运算器。其中,FFT控制器用于根据并行度将FFT运算分解为一级或多级蝶形运算,所述并行度是所述装置支持的一种或多种基数的倍数。蝶形运算器用于顺序执行每一级蝶形运算,其中在每一级蝶形运算中执行一次或多次蝶形运算,并且每一次蝶形运算的基数是所述装置支持的基数。利用本发明提供的装置和方法,可在保持访存并行度与系统并行度一致的情况下,通过简单的地址运算来避免访存冲突问题。此外,还可以支持较高的FFT并行化程度,在提高运算速度的同时将硬件资源保持在较低的水平。
Description
技术领域
本发明属于数字信号处理领域,尤其涉及快速傅里叶变换(Fast Four ierTransform,FFT)领域,更具体地,涉及一种FFT并行处理装置和方法。
背景技术
离散傅里叶变换(Discrete Fourier Transform,DFT)及其逆变换(InverseDiscrete Fourier Transform,IDFT)常被运用于数字信号处理领域,它们是将信号的时域和频域联系起来的桥梁。然而由于DFT的复杂度过大,导致其实用性受到了限制。随着DFT的各种快速算法FFT的出现,将DFT算法的复杂度从O(n2)下降到了O(nlogn),从而加速了将DFT从理论运用到实践。
目前,在现代通信技术和数字信号处理领域,FFT的应用非常广泛。在正交频分复用系统(Orthogonal Frequency Division Multiplexing,OFDM)中,可以根据多载波的特性利用IFFT或FFT变换对一个OFDM符号进行调制或解调。基于IFFT/FFT的多载波调制技术已被大大扩展到不同类型的通信系统中,如数字音频广播、数字视频广播、无线局域网等。在最新的第四代(4th Generation,4G)移动通信系统中,也采用了OFDM技术。由于4G对数据的吞吐量要求比较高,所以OFDM符号的周期设计得比较短。例如,在20MHz带宽的LTE(LongTerm Evolution,长期演进)系统中,一个OFDM符号的周期为71.3微秒,这对FFT的处理速度提出了更高的要求。另外,LTE系统中还必须支持从128到2048的5种长度为2n的FFT,因此,提高FFT处理效率以及灵活性具有很高的实际应用价值。
FFT算法一般采用库里—图基算法,利用分治的思想将长的数据序列转化为短的数据序列再进行变换。在转化的过程中,由于较长的序列可以重复利用较短序列计算出的结果,从而可以减少乘法和加法的次数。以一个长度为16点的序列为例,假设短序列的长度为4并满足16=42。这里短序列的长度“4”代表一个基/基数(Radix),即一个基4的蝶形运算;上标“2”代表长序列可以划分为这类短序列的级数,即这个16点的序列可以划分为两级的基4蝶形运算。又如对于一个长度为2048点的序列,2048=162×8,即长度为2048的序列可以划分为两级基16的蝶形运算以及一级基8的蝶形运算。从上述两个例子中可以看到,虽然级与级之间的蝶形运算有所不同,但是每一级中的蝶形运算对数据的操作却具有高度的相似性,因此可以通过并行化的方式来提高FFT的处理效率。
基于库里—图基的FFT算法有一个特点,即级与级之间的数据具有高度的依赖关系,下一级蝶形运算必须等到上一级蝶形运算完成之后才能进行。因此,大部分FFT装置采用的方式是使各级蝶形运算串行执行并最大化每级蝶形运算的并行度。然而,传统FFT装置在实现时存在两个问题。一个问题是前一级数据在送到下一级进行运算前往往需要进行数据倒换,在倒换的过程中常常存在访存冲突的问题。解决这个问题的方法目前有两种:一种是不进行数据倒换,直接利用复杂的地址产生单元来产生下一级蝶形运算需要的数据所在的地址,并直接将数据从存储器中读出;另一种方法是提高存储器的访存端口并利用结构化的存储结构来避免访存冲突。在前一种方法中,数据仍然是以串行的方式从存储器中取出,访存的并行度低;后一种方案可以在不损失并行度的情况下解决访存冲突,但是带来了巨大的硬件开销。另外一个问题是系统并行度设计过大会造成较大的硬件复杂度。传统FFT装置使用的蝶形运算单元支持的基与装置的并行度相同,即如果装置的并行度为4,那么装置就支持基4的蝶形运算。装置并行度越高,蝶形运算的硬件资源消耗也就越大。
发明内容
为解决上述问题,根据本发明的一个实施例,提供一种FFT并行处理装置,其支持一种或多种基数的蝶形运算,该装置包括:
FFT控制器,用于根据并行度将FFT运算分解为一级或多级蝶形运算;其中,所述并行度是所述装置支持的一种或多种基数的倍数;
蝶形运算器,用于顺序执行每一级蝶形运算;其中,在每一级蝶形运算中执行一次或多次蝶形运算,并且每一次蝶形运算的基数是所述装置支持的基数。
在一个实施例中,所述FFT控制器用于根据下式将N点FFT运算分解为m级点数为n或n'的蝶形运算:
N=N1×N2×…×Nm
其中,N1,N2,...Nm-1=n,Nm=n',m为正整数,n为并行度,n'小于等于n且为所述装置支持的一种或多种基数的倍数。
在一个实施例中,所述FFT控制器还用于确定每一级蝶形运算中执行蝶形运算的次数以及每一次蝶形运算的基数;其中,每一级蝶形运算的点数等于该级蝶形运算中每一次蝶形运算的基数的乘积。
在一个实施例中,所述装置还包括:
向量数据存储器,用于在执行每一级蝶形运算前对参与该级蝶形运算的数据进行处理,使其符合该级蝶形运算的输入顺序,并且将处理后的数据按顺序发送到所述蝶形运算器。
在进一步的实施例中,所述向量数据存储器还包括:数量为并行度n的存储单元,其中,每个存储单元的每一行依次存储序号相差为n的输入数据;
其中,在执行每一级蝶形运算前,所述向量数据存储器每次重排n个数据直到所有输入数据均被重排,使得重排后参与每一级蝶形运算的一组数据存放在每个存储单元的同一行;
所述向量数据存储器按行取出每个存储单元的同一行数据,将每个存储单元的同一行数据存储到其另一块空间。
在进一步的实施例中,所述向量数据存储器将每个存储单元的同一行数据存储到其另一块空间之前,还对所述每个存储单元的同一行数据进行数据移位。
在一个实施例中,所述向量数据存储器还用于在所述蝶形运算器执行最后一级蝶形运算后对所述蝶形运算器输出的数据进行倒换,并且存储倒换后的数据。
在一个实施例中,所述蝶形运算器包括:
数据重排单元,用于在执行每一次蝶形运算之前,对参与该次蝶形运算的数据进行重排,并且在执行最后一次蝶形运算之后,对运算后的数据进行重排;以及
蝶形运算单元,用于执行一次蝶形运算。
在进一步的实施例中,所述FFT控制器还用于根据对FFT运算所作的分解确定每一次蝶形运算的重排规则。
在一个实施例中,所述装置还包括:旋转因子存储器,用于在执行每一级蝶形运算前将相应的旋转因子发送到所述蝶形运算器。在另一个实施例中,所述装置还包括:外部数据接口,用于所述向量数据存储器和外部进行数据交互。
根据本发明的一个实施例,还提供一种用于数字信号处理的FFT并行处理方法,其支持一种或多种基数的蝶形运算,所述方法包括:
步骤1)、根据并行度将对于所述数字信号的FFT运算分解为一级或多级蝶形运算;其中,所述并行度是所述方法支持的一种或多种基数的倍数;
步骤2)、顺序执行每一级蝶形运算;其中,在每一级蝶形运算中执行一次或多次蝶形运算,并且每一次蝶形运算的基数是所述方法支持的基数。
在一个实施例中,在步骤1)中,根据下式将N点FFT运算分解为m级点数为n或n'的蝶形运算:
N=N1×N2×…×Nm
其中,N1,N2,...Nm-1=n,Nm=n',m为正整数,n为并行度,n'小于等于n且为所述装置支持的一种或多种基数的倍数。
在一个实施例中,步骤1)还包括:
确定每一级蝶形运算中执行蝶形运算的次数以及每一次蝶形运算的基数;其中,每一级蝶形运算的点数等于该级蝶形运算中每一次蝶形运算的基数的乘积。
在一个实施例中,步骤2)还包括:在执行每一级蝶形运算前对参与该级蝶形运算的数据进行处理,使其符合该级蝶形运算的输入顺序。
在进一步的实施例中,在步骤2)之后,还包括:在执行最后一级蝶形运算后对运算后的数据进行倒换,并且存储倒换后的数据。
在一个实施例中,步骤2)还包括:在执行每一次蝶形运算之前,对参与该次蝶形运算的数据进行重排,并且在执行最后一次蝶形运算之后,对输出的数据进行重排。
在进一步的实施例中,步骤1)还包括:根据对FFT运算所作的分解,确定每一次蝶形运算的重排规则。
采用本发明可以达到如下的有益效果:
由蝶形运算器在每一级蝶形运算完成若干个基相同或不同的蝶形运算,以支持较高的FFT并行化程度,在提高运算速度的同时将硬件资源保持在较低的水平。此外,利用向量数据存储器完成数据的倒换工作,在保持访存并行度与装置并行度一致的情况下,通过简单的地址运算避免了访存冲突的问题。
附图说明
图1是根据本发明一个实施例的FFT并行处理装置的框图;
图2是根据本发明一个实施例的FFT并行处理方法的流程图;
图3是使用本发明提供的FFT并行处理装置和方法执行2048点FFT并行处理的流程图;
图4是根据本发明一个实施例的倒换数据的示意图;
图5是使用本发明提供的FFT并行处理装置和方法执行2048点FFT的第一级蝶形运算的流程图;
图6是使用本发明提供的FFT并行处理装置和方法执行2048点FFT的第一级蝶形运算的数据流示意图;以及
图7是使用本发明提供的FFT并行处理装置和方法执行2048点FFT的第三级蝶形运算的数据流示意图。
具体实施方式
下面结合附图和具体实施方式对本发明加以说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
根据本发明的一个实施例,提供一种FFT并行处理装置。如图1所示,该装置包括FFT控制器101、向量数据存储器102、蝶形运算器103、旋转因子存储器104和外部数据接口105。该FFT并行处理的装置可用于实现N点FFT的并行运算,其中点数N取决于该装置支持的基数,如基数为2,则N=2i;如基数为3,则N=3i;如基数同时有2和3,则N=2i×3j。下面,将对这五个模块分别进行描述:
一、FFT控制器101
FFT控制器101用于FFT执行过程中的流程控制,包括数据的输入和输出、数据在模块之间的交互、数据在向量存储器中存放地址的计算、FFT分解级数的确定、每一级中蝶形运算的次数和基数的确定、倒换规则的确定、每次蝶形运算前重排规则的确定,以及旋转因子的选取与导入控制等等。
在一个实施例中,FFT控制器101可根据装置的并行化程度(简称并行度)n确定一个长度为N点的FFT所要分解的级数m,即N可以分解为:
N=n×n×…×n×n'
等式右边共m项。其中,除最后一级外,每一级都可以看成一个基n的FFT蝶形运算。由于FFT长度N不一定刚好是n的整次幂,因此最后一级可能是一个小于n的基n'且并行化程度为n的蝶形运算。
二、向量数据存储器102
向量数据存储器102可与蝶形运算器103以及外部数据接口105交互,用于存储每一级蝶形运算的输入和输出数据,并且还可以执行数据在内存中的倒换。
由FFT的分解规则可知,参与每一级蝶形运算的数据在FFT的数据序列中不是连续排列的,因此需要在执行每一级蝶形运算前将参与蝶形运算的每一组数据从FFT的数据序列中挑选出来并顺序地存放在向量数据存储器102中,以方便进行后续的蝶形运算。
在一个实施例中,可在向量数据存储器102内进行数据倒换以实现将数据按顺序输入蝶形运算器103。FFT控制器101在分解FFT后即可确定参与每一级蝶形运算的数据在向量数据存储器102中的倒换规则。例如,N点FFT可首先分解为N=N1×n,其中n为并行化程度,则参与下一级蝶形运算的数据需要从每N1个数据中挑出一个来且每次挑出n个送入蝶形运算器103。
要实现上述倒换,在一个实施例中,可将向量数据存储器102构造为包括多个存储单元,每个存储单元可以存储FFT数据序列中的多个数据。如图4所示,可以将每个存储单元(即bank)表示为列,每个存储单元(每列)可以有多行,每行可存储一个数据。所有的存储单元可以在一个时钟周期内被同时访问,但是同一个存储单元内部的不同地址不能在一个时钟周期内被同时访问。存储单元的个数等于装置的并行化程度n,使得访存并行度能够与装置的并行化程度一致。输入(外部输入或蝶形运算单元输出)的n个数据可以依次存储在每个存储单元中的一行,一行存储完之后,后续数据可以依次存储在每个存储单元的下一行。例如,下标(序号)为0-15的数据分别存储在存储单元0-15(bank0-bank15)的第0行,下标为16-31的数据分别存储在存储单元0-15的第1行,以此类推。
利用上述向量数据存储器102的存储单元特性,可以以n为访存并行度将外部输入的FFT数据在向量数据存储器102中进行重排列,使得参与蝶形运算的每组数据可以按行排列,其中所有存储单元的每一行的数据是参与一级蝶形运算的一组(或多组)数据。倒换后,接着可以从向量数据存储器102中按行取出这些数据,根据由FFT控制器101初始化的行指针将这些数据存储到向量数据存储器102中的另一块空间。在输出时,可以从这块空间按顺序取出数据发送给蝶形运算器103。
在一个实施例中,由于在一个时钟周期只能将数据写入不同的存储单元。因此在倒换存储单元中的n个数据时,需要将n个数据写入不同的存储单元(即列),因此,倒换后的数据在每一行中的位置与参与蝶形运算的排列规则不同。然而,在取数的时候只需要顺序按行取出再进行一定的数据移位即可保持一致。
在蝶形运算器103执行完所有蝶形运算后,向量数据存储器102还需要对从蝶形运算器103发送来的数据进行倒换并存储,使得能够按顺序向外输出这些数据。
这里的装置并行化程度n是由该装置支持的基数决定的,装置的并行化程度通常是基数的倍数。在一个实施例中,如果装置支持多种基,则装置的并行化程度是基数的公倍数。例如,装置支持基2和基3,则该装置的并行化程度可以设计为6、12等等。
三、蝶形运算器103
蝶形运算器103可用于完成一个基数r由装置确定的、点数由并行化程度确定的n点FFT运算。由于装置的并行化程度n是装置所支持的基数的倍数,因此在要在一级蝶形运算中完成n点FFT运算,需要将这n点运算划分为一次或多次基r的蝶形运算,即:
n=r×r×...×r
其中,r可以是单一的数值,也可以是多种基数。例如,对于并行度为16,且装置支持基4和基2的蝶形运算时,可将一级16点的蝶形运算分解为16=4×4、16=2×2×2×2或者其他组合方式。可由FFT控制器101来配置蝶形运算器103得到每一级蝶形运算的组合方式,即由FFT控制器101确定每一级蝶形运算中调用蝶形运算器103的次数、每次蝶形运算的基以及重排规则,从而进行每一级的蝶形运算。
在一个实施例中,蝶形运算器103可包括数据重排单元1031和蝶形运算单元1032。其中,数据重排单元1031可以根据由FFT控制器101确定的重排规则对进入蝶形运算器103的一组数据的顺序进行重排列,它是对数据按照位反转的规则进行乱序排列的重要部件,表1示出了四位二进制数进行按位反转的规则。在数据重排单元1031对数据进行重排列之前,FFT控制器101需要先配置数据重排单元1031的重排规则,保证数据按照预定的方式进行重排列。在确定了每一级蝶形运算的次数后,数据重排单元1031在每一次蝶形运算前进行一次数据重排。并且在这一级的蝶形运算完成后,在将数据输出到向量数据存储器102之前,还要进行一次数据重排。由于数据重排单元1031的重排作用,从蝶形运算器103的外部来看,数据是顺序进入蝶形运算器103且按顺序输出的。
表1
蝶形运算单元1032可以进行基r的蝶形运算,其中r可以是单一的基数,也可以是多种基数,它是在设计装置时确定的。蝶形运算单元1032的并行化程度也就是该装置的并行化程度。假设装置的并行化程度为n,且每次蝶形运算的基都为r,则蝶形运算单元一级可以完成n/r个蝶形,其中保证n/r为整数。在一个实施例中,如果蝶形运算单元1032支持多种基数的蝶形运算,则需要由FFT控制器101配置每一级的蝶形运算次数以及每次蝶形运算的基。
如上所述,FFT控制器101可以多次调用蝶形运算器103内部的蝶形运算单元1032并配置数据重排单元1031的重排规则以完成多次蝶形运算的组合,最终完成一个点数为并行化程度n的蝶形运算。从蝶形运算器103的外部来看,蝶形运算器103在形式上似乎完成了一个基n的蝶形运算;而从蝶形运算器的内部可知,该基n是由多个基r1、基r2……基rn/r组合而成。例如,对于并行化程度为16并且蝶形运算单元103从硬件上实际只支持基4的蝶形运算的实例来说,利用本发明提供的装置可以完成一个基16的蝶形运算。从外部来看,蝶形运算单元1032似乎是完成了一个基16的蝶形;而从内部来看,该基16的蝶形运算是由蝶形运算单元1032分两个基4蝶形组合完成。又如,装置的并行化程度为8并且蝶形运算单元支持基4和基2的FFT运算,则完成一个基8的蝶形运算可以由一级基4和一级基2构成,当然该基8蝶形运算也可以由三级基2蝶形组合而成。优选地,选择蝶形运算次数较少的组合方式。
蝶形运算器103的这种结构可以保证蝶形运算的基与装置的并行度一致,而用于支撑蝶形运算的硬件单元资源消耗却很少。
四、旋转因子存储器104
旋转因子存储器104用于存储每一级蝶形运算中所需使用的旋转因子,它可以在FFT控制器101的控制下将当前蝶形运算器103中需要参与运算的旋转因子送入蝶形运算器103的蝶形运算单元1032中。
五、外部数据接口105
外部数据接口105用于向量数据存储器102与外部进行数据交互。
根据本发明的一个实施例,还提供一种使用上述装置进行FFT并行处理方法。图2示出了该方法的具体步骤,概括来说该方法包括:
步骤A、根据装置的并行化程度n确定一个长度为N点的FFT所要分解的级数m,即N可以分解为N=n×n×…×n×n'。
步骤B、根据上一步中FFT的分解规则由FFT控制器101确定参与下一级蝶形运算的数据在向量数据存储器102中的倒换规则,并在向量数据存储器102中对数据进行倒换,然后依次送入蝶形运算器103。
在数据倒换时,首先利用FFT控制器101初始化向量数据存储器102的行指针;接着,将参与蝶形运算的每组数据按行排列,其中所有存储单元的每一行数据是参与蝶形运算的一组(或多组)数据;最后,基于初始化好的行指针将排列好的数据按行存储到向量数据存储器102中的另一块空间。
步骤C、FFT控制器101确定在每一级蝶形运算中,蝶形运算器103中数据重排单元1031的重排规则、蝶形运算器被调用的次数K,及每次蝶形运算对应的基。
在一个n点的FFT运算中,根据蝶形运算的需要重排数据。而蝶形运算器103中的数据重排单元1031只负责数据的重排,且蝶形运算单元1032只负责对数据进行蝶形运算。因此数据的重排可以变得很灵活,例如,数据既可以按自然顺序输入、位反转输出;又可以按位反转输入、自然顺序输出。蝶形运算器103的这种结构可以保证从其外部来看数据都是顺序输入且顺序输出的。
在一个实施例中,根据装置支持的基本蝶形运算类型可确定每一级蝶形运算中蝶形运算器103被调用的次数K。如并行化程度为8且装置支持基4和基2的蝶形运算,则如果只用基2的蝶形运算单元,需要调用三次蝶形运算器103以完成8点的FFT;如果利用基4和基2的蝶形,则需要调用两次蝶形运算器103。优选地,调用两次蝶形运算器103。
步骤D、蝶形运算器103进行一级蝶形运算,待蝶形运算器103被调用K次之后,完成本级蝶形运算并且进入下一级的蝶形运算,即重复步骤B至D,直到计算完m级蝶形运算。
在每一级蝶形运算中,在每一次的蝶形运算前由数据重排单元1031按重排规则进行数据重排,并且在这一级的蝶形运算结束后,仍需要由数据重排单元1031按重排规则进行一次数据重排,以按一定顺序输出到向量数据存储器102。
步骤E、完成了m级蝶形运算之后,向量数据存储器102还需要对输出的数据进行倒换使其能够按顺序输出。
以上对本发明提供的FFT并行处理装置和方法进行了描述。下面将以2048点FFT为例,结合附图对本发明提供的FFT并行处理装置和方法进行详细描述。
如上文所述,对一个N点的FFT可以作如下分解:
N=N1×N2×…×Nm
其中,m是FFT级数,Ni是第i级FFT的点数。
在本实施例中,假设装置支持基2和基4的蝶形运算,取数据的并行化程度为16,即一次可以完成16个数据的读、写、运算等操作。由并行化程度可以确定FFT分解的级数m=3,其中每一级蝶形运算的FFT点数分别为N1=16、N2=16、N3=8,即一个2048点的FFT可以分解为3个蝶形运算阶段:第一个阶段完成一个基16的蝶形运算;第二个阶段完成一个基16的蝶形运算;第三个阶段完成一个基8的蝶形运算。在蝶形运算器103内部,该基16的蝶形运算可由两个基4蝶形构成,也可以用四个基2蝶形或者其它方式构成。考虑到装置的调度和运算开销,可利用两个基4蝶形构成一个基16的蝶形。同理,基8蝶形运算由一个基4蝶形和一个基2蝶形构成。因此,在每一级蝶形运算中,蝶形运算器103都需要被调用两次。
图3示出了2048点FFT并行处理方法实例的流程,包括以下步骤:
步骤301,根据第一级蝶形运算规则将FFT输入数据倒换成所需的顺序。在从外部数据接口105导入时,FFT数据是按顺序导入到向量数据存储器102中的。第一级蝶形运算的分解规则如下:
由式(1)可知,参与第一级运算的数据需要从输入的数据中每128个数据取一个出来,每次共取16个数送入蝶形运算器103进行运算。利用向量数据存储器102的特性可以完成该倒数的工作:
首先根据式(1)中示出的分解规则,利用FFT控制器101初始化向量数据存储器102的行指针。如图4所示,对于下标为0的数据(图中以0示出),它应该参与第一组基16的蝶形运算,因此它应该被放入向量数据存储器102的bank0的第一行。再如对于下标为1(图中以1示出)的数据,它应该参与第二组基16的蝶形运算,因此它应该被放入向量数据存储器102的bank0的第二行。但此时下标为0的数据和下标为1的数据都需要访存bank0,会发生访存冲突。为了避免这种冲突,将下标为1的数据错开写入到bank1的第二行,以此类推。在倒数的过程中,每次顺序从向量数据存储器102中取出一行数据,再根据初始化好的地址存入向量数据存储器102中另一块空间。从表面来看,数据在向量数据存储器102中的位置似乎与参与蝶形运算数据的排列规则不同,然而在取数的时候只需要顺序按行取出再进行一定的数据移位即可保持一致。
步骤302,将倒换好顺序的数据依次送入蝶形运算器103进行计算。由式(1)进一步推导可得
令k=16k′+k1,则可以进一步分解为
令 则式(3)变为:
由式(3)和式(4)可知,在第一级蝶形运算中,每16个数据需要进行一个16点的FFT运算。蝶形运算器103可以完成一个基4或者基2的蝶形运算,因此,FFT控制器101需要两次调用蝶形运算器103的基4蝶形运算单元1032,以组合成一个基16的蝶形用以完成16点的FFT运算。另外,FFT控制器101还需要提前配置蝶形运算器103中数据重排单元1032的数据重排模式并从旋转因子存储器104中选取相应的旋转因子送入蝶形运算器103中参与运算。
图5示出了蝶形运算器中计算16点基16(4x4)的FFT流程。由于上述向量数据存储器102进行了数据倒换,数据是顺序输入到蝶形运算器103中的,因此首先需要对参与蝶形运算的这16个数据进行倒序重排;然后进行基4-FFT运算;在基4-FFT运算后,还需要进行倒序重排;接着再完成一个基4-FFT;在最后一个基4-FFT完成后,数据是按位反转的方式输出的,因此最后还需要进行倒序重排,保证最终的输出数据是顺序的。
图6示出了利用本发明提出的FFT并行化处理装置来完成一个基4的16点FFT示意图。由并行度和基数可知,三次数据重排的重排模式是一样的,因此FFT控制器101只需要配置一次数据重排单元1032的数据重排模式。在完成一个16点FFT的过程中,数据重排单元1031完成数据的重排;蝶形运算单元1032完成基4-FFT的运算。在FFT控制器的流程控制下,数据在这两个单元之间来回交换从而完成16点基16的FFT。
步骤303,根据第二级蝶形运算规则将第一级输出数据倒换成合理顺序。根据第二级蝶形运算的分解规则
参与第二级运算的数据需要从输入的数据序列中每8个数据取一个出来,每次共取16个数送入蝶形运算器103进行运算。可以利用步骤301中类似的方法在计算完一个16点的FFT后,通过初始化向量数据存储器102的行指针将数据按行存入向量数据存储器102中数据所在的对应位置,取数的时候顺序取出再进行一定的数据移位即完成数据的倒换。
步骤304,将数据依次送入第二级蝶形运算器103进行计算。与步骤302类似,在FFT控制器101的配置下,蝶形运算器103完成一个16点基16的FFT。在蝶形运算器103内部,蝶形运算单元1031的基4单元也是被调用了两次,从而利用两个基4蝶形单元组合成一个基16的蝶形以完成一个16点的FFT运算。
步骤305,根据第三级蝶形运算规则,参与第三级蝶形运算的数据是从输入的数据中连续取8个用以完成一个基8的8点FFT。考虑装置的并行化程度为16,则可以一次计算2个基8的蝶形。因此在数据倒置的时候可以利用步骤301中类似的方法在计算完上一级16点蝶形运算后,通过初始化向量数据存储器的行指针存入向量数据存储器102中数据所在的对应位置以完成数据的倒换。
步骤306,将数据依次送入第三级蝶形运算器103进行计算。在第三级蝶形运算中,每16个数据需要进行2个基8的FFT运算。图7示出了基8-FFT运算的数据流图,注意该基8蝶形运算实际上是由一个基4蝶形和一个基2蝶形封装而成。不同于步骤302中的蝶形运算,第二次和第三次数据重排中重排规则有所不同,FFT控制器101需要重新配置数据重排单元1031完成对应的数据重排。数据进入蝶形运算器103后,首先进行倒序重排,然后再进行基4-FFT运算。之后FFT控制器101需要重新配置数据重排单元1031的重排规则,再进行第二次倒序重排,接着完成一个基2-FFT,最后在FFT控制器101配置后进行第三次倒序重排。从而完成了一个基8的16点FFT。
步骤307,倒换输出数据的顺序使其在向量数据存储器102中按顺序存储。由FFT变换的特性可知,完成三级蝶形运算后的输出数据不是按其自然顺序存放在向量存储器102中的,最后还需要利用向量数据存储器102将数据倒换成顺序存放并最终输出。
最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对本技术方法进行限制。任何熟悉FFT算法的工程技术人员都能够很容易地将本发明中的思想推广并应用到不同FFT点数、不同基、不同并行化程度的实施方案中。当然,本发明提供的方法和装置同样也适用于IFFT的实现。因此本发明在应用上延伸为其他的修改、变化、应用和实施例都在本发明的精神和教导范围内。
Claims (15)
1.一种FFT并行处理装置,其支持一种或多种基数的蝶形运算,所述装置包括:
FFT控制器(101),用于根据并行度将FFT运算分解为一级或多级蝶形运算;其中,所述并行度是所述装置支持的一种或多种基数的倍数;
蝶形运算器(103),用于顺序执行每一级蝶形运算;其中,在每一级蝶形运算中执行一次或多次蝶形运算,并且每一次蝶形运算的基数是所述装置支持的基数;
向量数据存储器(102),用于在执行每一级蝶形运算前对参与该级蝶形运算的数据进行处理,使其符合该级蝶形运算的输入顺序,并且将处理后的数据按顺序发送到所述蝶形运算器(103),还包括:数量为并行度n的存储单元,其中,每个存储单元的每一行依次存储序号相差为n的输入数据;
其中,在执行每一级蝶形运算前,所述向量数据存储器(102)每次重排n个数据直到所有输入数据均被重排,使得重排后参与每一级蝶形运算的一组数据存放在每个存储单元的同一行;
所述向量数据存储器(102)按行取出每个存储单元的同一行数据,将每个存储单元的同一行数据存储到其另一块空间。
2.根据权利要求1所述的装置,其中,所述FFT控制器(101)用于根据下式将N点FFT运算分解为m级点数为n或n'的蝶形运算:
N=N1×N2×…×Nm
其中,N1,N2,...Nm-1=n,Nm=n',m为正整数,n为并行度,n'小于等于n且为所述装置支持的一种或多种基数的倍数。
3.根据权利要求1或2所述的装置,其中,所述FFT控制器(101)还用于确定每一级蝶形运算中执行蝶形运算的次数以及每一次蝶形运算的基数;其中,每一级蝶形运算的点数等于该级蝶形运算中每一次蝶形运算的基数的乘积。
4.根据权利要求1所述的装置,其中,所述向量数据存储器(102)将每个存储单元的同一行数据存储到其另一块空间之前,还对所述每个存储单元的同一行数据进行数据移位。
5.根据权利要求1所述的装置,其中,所述向量数据存储器(102)还用于在所述蝶形运算器(103)执行最后一级蝶形运算后对所述蝶形运算器(103)输出的数据进行倒换,并且存储倒换后的数据。
6.根据权利要求1或2所述的装置,其中,所述蝶形运算器(103)包括:
数据重排单元(1031),用于在执行每一次蝶形运算之前,对参与该次蝶形运算的数据进行重排,并且在执行最后一次蝶形运算之后,对运算后的数据进行重排;以及
蝶形运算单元(1032),用于执行一次蝶形运算。
7.根据权利要求6所述的装置,其中,所述FFT控制器(101)还用于根据对FFT运算所作的分解,确定每一次蝶形运算的重排规则。
8.根据权利要求1或2所述的装置,还包括:
旋转因子存储器(104),用于在执行每一级蝶形运算前,将相应的旋转因子发送到所述蝶形运算器(103)。
9.根据权利要求1或2所述的装置,还包括:
外部数据接口(105),用于所述向量数据存储器(102)和外部进行数据交互。
10.一种用于数字信号处理的FFT并行处理方法,其支持一种或多种基数的蝶形运算,所述方法包括:
步骤1)、根据并行度将所述数字信号的FFT运算分解为一级或多级蝶形运算;其中,所述并行度是所述方法支持的一种或多种基数的倍数;
步骤2)、顺序执行每一级蝶形运算;其中,在执行每一级蝶形运算前对参与该级蝶形运算的数据进行处理,使其符合该级蝶形运算的输入顺序;在每一级蝶形运算中执行一次或多次蝶形运算,并且每一次蝶形运算的基数是所述方法支持的基数;
其中,在执行每一级蝶形运算前,每次重排n个数据直到所有输入数据均被重排,使得重排后参与每一级蝶形运算的一组数据存放在n个存储单元的每个存储单元的同一行,其中n为并行度;按行取出每个存储单元的同一行数据,将每个存储单元的同一行数据存储到另一块空间。
11.根据权利要求10所述的方法,在步骤1)中,根据下式将N点FFT运算分解为m级点数为n或n'的蝶形运算:
N=N1×N2×…×Nm
其中,N1,N2,...Nm-1=n,Nm=n',m为正整数,n为并行度,n'小于等于n且为所述方法支持的一种或多种基数的倍数。
12.根据权利要求10所述的方法,其中,步骤1)还包括:
确定每一级蝶形运算中执行蝶形运算的次数以及每一次蝶形运算的基数;其中,每一级蝶形运算的点数等于该级蝶形运算中每一次蝶形运算的基数的乘积。
13.根据权利要求10所述的方法,在步骤2)之后,还包括:
在执行最后一级蝶形运算后对运算后的数据进行倒换,并且存储倒换后的数据。
14.根据权利要求10所述的方法,其中,步骤2)还包括:
在执行每一次蝶形运算之前,对参与该次蝶形运算的数据进行重排,并且在执行最后一次蝶形运算之后,对输出的数据进行重排。
15.根据权利要求14所述的方法,其中,步骤1)还包括:
根据对FFT运算所作的分解,确定每一次蝶形运算的重排规则。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310740883.5A CN103699515B (zh) | 2013-12-27 | 2013-12-27 | 一种fft并行处理装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310740883.5A CN103699515B (zh) | 2013-12-27 | 2013-12-27 | 一种fft并行处理装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103699515A CN103699515A (zh) | 2014-04-02 |
CN103699515B true CN103699515B (zh) | 2017-01-18 |
Family
ID=50361047
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310740883.5A Active CN103699515B (zh) | 2013-12-27 | 2013-12-27 | 一种fft并行处理装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103699515B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104657335A (zh) * | 2015-02-04 | 2015-05-27 | 航天科工深圳(集团)有限公司 | 一种基于fft的数据采样方法和装置 |
DE112018001789T5 (de) * | 2017-03-29 | 2019-12-19 | Ab Initio Technology Llc | Systeme und verfahren zum durchführen von datenverarbeitungsoperationen unter verwendung von parallelität variabler grade |
CN109388061B (zh) * | 2017-08-11 | 2020-07-10 | 中国科学院计算技术研究所 | 一种自适应调优的稀疏傅里叶变换方法和系统 |
CN107480099A (zh) * | 2017-08-21 | 2017-12-15 | 叶军 | 基于可编程逻辑控制的快速傅里叶变换装置 |
US12032631B2 (en) | 2018-05-30 | 2024-07-09 | Ab Initio Technology Llc | Systems and methods for dataflow graph optimization |
CN110750249B (zh) * | 2018-07-24 | 2021-08-20 | 华为技术有限公司 | 一种快速傅里叶变换代码的生成方法及装置 |
CN112163185B (zh) * | 2020-09-30 | 2023-11-28 | 中国科学院计算技术研究所 | Fft/ifft运算装置及基于该装置的fft/ifft运算方法 |
CN112328958B (zh) * | 2020-11-10 | 2024-06-21 | 河海大学 | 一种基于基-64的二维fft架构的优化数据重排方法 |
CN112511480B (zh) * | 2020-11-10 | 2022-11-01 | 展讯半导体(成都)有限公司 | 二次fft或ifft变换方法及相关产品 |
CN112765536B (zh) * | 2021-01-26 | 2023-09-19 | 中国科学院半导体研究所 | 一种可配置的fft架构系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1504890A (zh) * | 2002-12-03 | 2004-06-16 | 中国科学院计算技术研究所 | 数据全并行的fft处理器地址映射方法和系统 |
CN101339546A (zh) * | 2008-08-07 | 2009-01-07 | 那微微电子科技(上海)有限公司 | 地址映射方法和操作数并行的fft处理系统 |
CN101504637A (zh) * | 2009-03-19 | 2009-08-12 | 北京理工大学 | 一种点数可变实时fft处理芯片 |
CN101571849A (zh) * | 2008-05-04 | 2009-11-04 | 中兴通讯股份有限公司 | 一种快速傅立叶变换处理器及其方法 |
CN102087640A (zh) * | 2009-12-08 | 2011-06-08 | 中兴通讯股份有限公司 | 傅里叶变换的实现方法和装置 |
CN102541813A (zh) * | 2011-12-31 | 2012-07-04 | 中国科学院自动化研究所 | 一种多粒度并行fft蝶形计算的方法及相应的装置 |
CN103268308A (zh) * | 2013-06-06 | 2013-08-28 | 中国科学院计算技术研究所 | 支持混合基dft的计算装置及方法 |
-
2013
- 2013-12-27 CN CN201310740883.5A patent/CN103699515B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1504890A (zh) * | 2002-12-03 | 2004-06-16 | 中国科学院计算技术研究所 | 数据全并行的fft处理器地址映射方法和系统 |
CN101571849A (zh) * | 2008-05-04 | 2009-11-04 | 中兴通讯股份有限公司 | 一种快速傅立叶变换处理器及其方法 |
CN101339546A (zh) * | 2008-08-07 | 2009-01-07 | 那微微电子科技(上海)有限公司 | 地址映射方法和操作数并行的fft处理系统 |
CN101504637A (zh) * | 2009-03-19 | 2009-08-12 | 北京理工大学 | 一种点数可变实时fft处理芯片 |
CN102087640A (zh) * | 2009-12-08 | 2011-06-08 | 中兴通讯股份有限公司 | 傅里叶变换的实现方法和装置 |
CN102541813A (zh) * | 2011-12-31 | 2012-07-04 | 中国科学院自动化研究所 | 一种多粒度并行fft蝶形计算的方法及相应的装置 |
CN103268308A (zh) * | 2013-06-06 | 2013-08-28 | 中国科学院计算技术研究所 | 支持混合基dft的计算装置及方法 |
Non-Patent Citations (2)
Title |
---|
A Polyphase-filter-based FFT for DFT Calculation in LTE uplink;Yanbin Yao et al.;《IEEE ICC 2013 - Signal Processing for Communications Symposium》;20130609;第4771-4775页 * |
FFT Traffic Classification-Based Dynamic Selected IP Traffic Offload Mechanism for LTE HeNB Networks;Xue Han et al.;《Mobile Netw Appl》;20121222;第18卷;第477-487页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103699515A (zh) | 2014-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103699515B (zh) | 一种fft并行处理装置和方法 | |
US7752249B2 (en) | Memory-based fast fourier transform device | |
US20080208944A1 (en) | Digital signal processor structure for performing length-scalable fast fourier transformation | |
CN105045766B (zh) | 基于3072点快速傅里叶变换的数据处理方法及处理器 | |
CN103777896A (zh) | 基于3d存储器的地址生成器 | |
CN111737638A (zh) | 基于傅里叶变换的数据处理方法及相关装置 | |
WO2018027706A1 (zh) | Fft处理器及运算方法 | |
WO2013097219A1 (zh) | 一种用于并行fft计算的数据存取方法及装置 | |
CN101894096A (zh) | 一种适用于cmmb和dvb-h/t的fft运算电路结构 | |
CN104699624A (zh) | 面向fft并行计算的无冲突存储访问方法 | |
CN103034621B (zh) | 基2×k并行fft架构的地址映射方法及系统 | |
US20170103042A1 (en) | System and method for optimizing mixed radix fast fourier transform and inverse fast fourier transform | |
US8023401B2 (en) | Apparatus and method for fast fourier transform/inverse fast fourier transform | |
CN104268124A (zh) | 一种fft实现装置和方法 | |
US8209485B2 (en) | Digital signal processing apparatus | |
CN106339353B (zh) | 一种支持4375点和3780点fft/ifft的处理器 | |
US20150331634A1 (en) | Continuous-flow conflict-free mixed-radix fast fourier transform in multi-bank memory | |
Sorokin et al. | Conflict-free parallel access scheme for mixed-radix FFT supporting I/O permutations | |
WO2013097436A1 (zh) | 一种fft/dft的倒序排列系统与方法及其运算系统 | |
US9268744B2 (en) | Parallel bit reversal devices and methods | |
EP2144174A1 (en) | Parallelized hardware architecture to compute different sizes of DFT | |
KR20140142927A (ko) | 혼합 기수 파이프라인 fft 프로세서 및 이를 이용한 fft 프로세싱 방법 | |
EP2538345A1 (en) | Fast fourier transform circuit | |
CN113591022B (zh) | 一种可分解数据的读写调度处理方法和装置 | |
CN111291315A (zh) | 一种数据处理方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20190311 Address after: 100190 No. 10 South Road, Zhongguancun Academy of Sciences, Haidian District, Beijing Patentee after: Beijing Zhongke Polytron Technologies Inc Address before: 100190 South Road, Zhongguancun Science Academy, Haidian District, Beijing 6 Patentee before: Institute of Computing Technology, Chinese Academy of Sciences |