一种fft并行处理装置和方法

文档序号:6526327阅读:165来源:国知局
一种fft并行处理装置和方法
【专利摘要】本发明提供一种FFT并行处理装置和方法,该装置支持一种或多种基数的蝶形运算,包括FFT控制器和蝶形运算器。其中,FFT控制器用于根据并行度将FFT运算分解为一级或多级蝶形运算,所述并行度是所述装置支持的一种或多种基数的倍数。蝶形运算器用于顺序执行每一级蝶形运算,其中在每一级蝶形运算中执行一次或多次蝶形运算,并且每一次蝶形运算的基数是所述装置支持的基数。利用本发明提供的装置和方法,可在保持访存并行度与系统并行度一致的情况下,通过简单的地址运算来避免访存冲突问题。此外,还可以支持较高的FFT并行化程度,在提高运算速度的同时将硬件资源保持在较低的水平。
【专利说明】一种FFT并行处理装置和方法
【技术领域】
[0001]本发明属于数字信号处理领域,尤其涉及快速傅里叶变换(Fast Four ierTransform, FFT)领域,更具体地,涉及一种FFT并行处理装置和方法。
【背景技术】
[0002]离散傅里叶变换(DiscreteFourier Transform, DFT)及其逆变换(InverseDiscrete Fourier Transform, IDFT)常被运用于数字信号处理领域,它们是将信号的时域和频域联系起来的桥梁。然而由于DFT的复杂度过大,导致其实用性受到了限制。随着DFT的各种快速算法FFT的出现,将DFT算法的复杂度从O (η2)下降到了 O (nlogn),从而加速了将DFT从理论运用到实践。
[0003]目前,在现代通信技术和数字信号处理领域,FFT的应用非常广泛。在正交频分复用系统(Orthogonal Frequency Division Multiplexing, OFDM)中,可以根据多载波的特性利用IFFT或FFT变换对一个OFDM符号进行调制或解调。基于IFFT/FFT的多载波调制技术已被大大扩展到不同类型的通信系统中,如数字音频广播、数字视频广播、无线局域网等。在最新的第四代(4th Generation,4G)移动通信系统中,也采用了 OFDM技术。由于4G对数据的吞吐量要求比较高,所以OFDM符号的周期设计得比较短。例如,在20MHz带宽的LTE (Long Term Evolution,长期演进)系统中,一个OFDM符号的周期为71.3微秒,这对FFT的处理速度提出了更高的要求。另外,LTE系统中还必须支持从128到2048的5种长度为2n的FFT,因此,提高FFT处理效率以及灵活性具有很高的实际应用价值。
[0004]FFT算法一般采用库里一图基算法,利用分治的思想将长的数据序列转化为短的数据序列再进行变换。在转化的过程中,由于较长的序列可以重复利用较短序列计算出的结果,从而可以减少乘法和加法的次数。以一个长度为16点的序列为例,假设短序列的长度为4并满足16=42。这里短序列的长度“4”代表一个基/基数(Radix),即一个基4的蝶形运算;上标“2”代表长序列可以划分为这类短序列的级数,即这个16点的序列可以划分为两级的基4蝶形运算。又如对于一个长度为2048点的序列,2048=162X 8,即长度为2048的序列可以划分为两级基16的蝶形运算以及一级基8的蝶形运算。从上述两个例子中可以看到,虽然级与级之间的蝶形运算有所不同,但是每一级中的蝶形运算对数据的操作却具有高度的相似性,因此可以通过并行化的方式来提高FFT的处理效率。
[0005]基于库里一图基的FFT算法有一个特点,即级与级之间的数据具有高度的依赖关系,下一级蝶形运算必须等到上一级蝶形运算完成之后才能进行。因此,大部分FFT装置采用的方式是使各级蝶形运算串行执行并最大化每级蝶形运算的并行度。然而,传统FFT装置在实现时存在两个问题。一个问题是前一级数据在送到下一级进行运算前往往需要进行数据倒换,在倒换的过程中常常存在访存冲突的问题。解决这个问题的方法目前有两种:一种是不进行数据倒换,直接利用复杂的地址产生单元来产生下一级蝶形运算需要的数据所在的地址,并直接将数据从存储器中读出;另一种方法是提高存储器的访存端口并利用结构化的存储结构来避免访存冲突。在前一种方法中,数据仍然是以串行的方式从存储器中取出,访存的并行度低;后一种方案可以在不损失并行度的情况下解决访存冲突,但是带来了巨大的硬件开销。另外一个问题是系统并行度设计过大会造成较大的硬件复杂度。传统FFT装置使用的蝶形运算单元支持的基与装置的并行度相同,即如果装置的并行度为4,那么装置就支持基4的蝶形运算。装置并行度越高,蝶形运算的硬件资源消耗也就越大。

【发明内容】

[0006]为解决上述问题,根据本发明的一个实施例,提供一种FFT并行处理装置,其支持一种或多种基数的蝶形运算,该装置包括:
[0007]FFT控制器,用于根据并行度将FFT运算分解为一级或多级蝶形运算;其中,所述并行度是所述装置支持的一种或多种基数的倍数;
[0008]蝶形运算器,用于顺序执行每一级蝶形运算;其中,在每一级蝶形运算中执行一次或多次蝶形运算,并且每一次蝶形运算的基数是所述装置支持的基数。
[0009]在一个实施例中,所述FFT控制器用于根据下式将N点FFT运算分解为m级点数为η或η’的蝶形运算:
[0010]N=N1XN2X …XNni
[0011]其中,N1, N2,…N^^n, Nm=n,,m为正整数,η为并行度,η’小于等于η且为所述装
置支持的一种或多种基数的倍数。
[0012]在一个实施例中,所述FFT控制器还用于确定每一级蝶形运算中执行蝶形运算的次数以及每一次蝶形运算的基 数;其中,每一级蝶形运算的点数等于该级蝶形运算中每一次蝶形运算的基数的乘积。
[0013]在一个实施例中,所述装置还包括:
[0014]向量数据存储器,用于在执行每一级蝶形运算前对参与该级蝶形运算的数据进行处理,使其符合该级蝶形运算的输入顺序,并且将处理后的数据按顺序发送到所述蝶形运算器。
[0015]在进一步的实施例中,所述向量数据存储器还包括:数量为并行度η的存储单元,其中,每个存储单元的每一行依次存储序号相差为η的输入数据;
[0016]其中,在执行每一级蝶形运算前,所述向量数据存储器每次重排η个数据直到所有输入数据均被重排,使得重排后参与每一级蝶形运算的一组数据存放在每个存储单元的同一行;
[0017]所述向量数据存储器按行取出每个存储单元的同一行数据,将每个存储单元的同一行数据存储到其另一块空间。
[0018]在进一步的实施例中,所述向量数据存储器将每个存储单元的同一行数据存储到其另一块空间之前,还对所述每个存储单元的同一行数据进行数据移位。
[0019]在一个实施例中,所述向量数据存储器还用于在所述蝶形运算器执行最后一级蝶形运算后对所述蝶形运算器输出的数据进行倒换,并且存储倒换后的数据。
[0020]在一个实施例中,所述蝶形运算器包括:
[0021]数据重排单元,用于在执行每一次蝶形运算之前,对参与该次蝶形运算的数据进行重排,并且在执行最后一次蝶形运算之后,对运算后的数据进行重排;以及
[0022]蝶形运算单元,用于执行一次蝶形运算。[0023]在进一步的实施例中,所述FFT控制器还用于根据对FFT运算所作的分解确定每一次蝶形运算的重排规则。
[0024]在一个实施例中,所述装置还包括:旋转因子存储器,用于在执行每一级蝶形运算前将相应的旋转因子发送到所述蝶形运算器。在另一个实施例中,所述装置还包括:外部数据接口,用于所述向量数据存储器和外部进行数据交互。
[0025]根据本发明的一个实施例,还提供一种用于数字信号处理的FFT并行处理方法,其支持一种或多种基数的蝶形运算,所述方法包括:
[0026]步骤I)、根据并行度将对于所述数字信号的FFT运算分解为一级或多级蝶形运算;其中,所述并行度是所述方法支持的一种或多种基数的倍数;
[0027]步骤2)、顺序执行每一级蝶形运算;其中,在每一级蝶形运算中执行一次或多次蝶形运算,并且每一次蝶形运算的基数是所述方法支持的基数。
[0028]在一个实施例中,在步骤I)中,根据下式将N点FFT运算分解为m级点数为η或η’的蝶形运算:
[0029]N=N1XN2X …XNni
[0030]其中,N1, N2,...Nlrt=Ii, Nm=n’,m为正整数,η为并行度,η’小于等于η且为所述装置支持的一种或多种基数的倍数。
[0031 ] 在一个实施例中,步骤I)还包括:
[0032]确定每一级蝶形运算中执行蝶形运算的次数以及每一次蝶形运算的基数;其中,每一级蝶形运算的点数等于该级蝶形运算中每一次蝶形运算的基数的乘积。
[0033]在一个实施例中,步骤2)还包括:在执行每一级蝶形运算前对参与该级蝶形运算的数据进行处理,使其符合该级蝶形运算的输入顺序。
[0034]在进一步的实施例中,在步骤2)之后,还包括:在执彳丁最后一级蝶形运算后对运算后的数据进行倒换,并且存储倒换后的数据。[0035]在一个实施例中,步骤2)还包括:在执行每一次蝶形运算之前,对参与该次蝶形运算的数据进行重排,并且在执行最后一次蝶形运算之后,对输出的数据进行重排。
[0036]在进一步的实施例中,步骤I)还包括:根据对FFT运算所作的分解,确定每一次蝶形运算的重排规则。
[0037]采用本发明可以达到如下的有益效果:
[0038]由蝶形运算器在每一级蝶形运算完成若干个基相同或不同的蝶形运算,以支持较高的FFT并行化程度,在提高运算速度的同时将硬件资源保持在较低的水平。此外,利用向量数据存储器完成数据的倒换工作,在保持访存并行度与装置并行度一致的情况下,通过简单的地址运算避免了访存冲突的问题。
【专利附图】

【附图说明】
[0039]图1是根据本发明一个实施例的FFT并行处理装置的框图;
[0040]图2是根据本发明一个实施例的FFT并行处理方法的流程图;
[0041]图3是使用本发明提供的FFT并行处理装置和方法执行2048点FFT并行处理的流程图;
[0042]图4是根据本发明一个实施例的倒换数据的示意图;[0043]图5是使用本发明提供的FFT并行处理装置和方法执行2048点FFT的第一级蝶形运算的流程图;
[0044]图6是使用本发明提供的FFT并行处理装置和方法执行2048点FFT的第一级蝶形运算的数据流示意图;以及
[0045]图7是使用本发明提供的FFT并行处理装置和方法执行2048点FFT的第三级蝶形运算的数据流示意图。
【具体实施方式】
[0046]下面结合附图和【具体实施方式】对本发明加以说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0047]根据本发明的一个实施例,提供一种FFT并行处理装置。如图1所示,该装置包括FFT控制器101、向量数据存储器102、蝶形运算器103、旋转因子存储器104和外部数据接口 105。该FFT并行处理的装置可用于实现N点FFT的并行运算,其中点数N取决于该装置支持的基数,如基数为2,则#21 ;如基数为3,则N=Si ;如基数同时有2和3,则#21 X 3j。下面,将对这五个模块分别进行描述:
[0048]一、FFT 控制器 101
[0049]FFT控制器101用于FFT执行过程中的流程控制,包括数据的输入和输出、数据在模块之间的交互、数据在向量存储器中存放地址的计算、FFT分解级数的确定、每一级中蝶形运算的次数和基数的确定、倒换规则的确定、每次蝶形运算前重排规则的确定,以及旋转因子的选取与导入控制等等。
[0050]在一个实施例中,FFT控制器101可根据装置的并行化程度(简称并行度)η确定一个长度为N点的FFT所要分解的级数m,即N可以分解为:
[0051]N=nXnX...XnXn’
[0052]等式右边共m项。其中,除最后一级外,每一级都可以看成一个基η的FFT蝶形运算。由于FFT长度N不一定刚好是η的整次幂,因此最后一级可能是一个小于η的基η’且并行化程度为η的蝶形运算。
[0053]二、向量数据存储器102
[0054]向量数据存储器102可与蝶形运算器103以及外部数据接口 105交互,用于存储每一级蝶形运算的输入和输出数据,并且还可以执行数据在内存中的倒换。
[0055]由FFT的分解规则可知,参与每一级蝶形运算的数据在FFT的数据序列中不是连续排列的,因此需要在执行每一级蝶形运算前将参与蝶形运算的每一组数据从FFT的数据序列中挑选出来并顺序地存放在向量数据存储器102中,以方便进行后续的蝶形运算。
[0056]在一个实施例中,可在向量数据存储器102内进行数据倒换以实现将数据按顺序输入蝶形运算器103。FFT控制器101在分解FFT后即可确定参与每一级蝶形运算的数据在向量数据存储器102中的倒换规则。例如,N点FFT可首先分解为N=N1Xn,其中η为并行化程度,则参与下一级蝶形运算的数据需要从每N1个数据中挑出一个来且每次挑出η个送入蝶形运算器103。
[0057]要实现上述倒换,在一个实施例中,可将向量数据存储器102构造为包括多个存储单元,每个存储单元可以存储FFT数据序列中的多个数据。如图4所示,可以将每个存储单元(即bank)表示为列,每个存储单元(每列)可以有多行,每行可存储一个数据。所有的存储单元可以在一个时钟周期内被同时访问,但是同一个存储单元内部的不同地址不能在一个时钟周期内被同时访问。存储单元的个数等于装置的并行化程度n,使得访存并行度能够与装置的并行化程度一致。输入(外部输入或蝶形运算单元输出)的η个数据可以依次存储在每个存储单元中的一行,一行存储完之后,后续数据可以依次存储在每个存储单元的下一行。例如,下标(序号)为0-15的数据分别存储在存储单元0-15 (bank0-bankl5)的第O行,下标为16-31的数据分别存储在存储单元0-15的第I行,以此类推。
[0058]利用上述向量数据存储器102的存储单元特性,可以以η为访存并行度将外部输入的FFT数据在向量数据存储器102中进行重排列,使得参与蝶形运算的每组数据可以按行排列,其中所有存储单元的每一行的数据是参与一级蝶形运算的一组(或多组)数据。倒换后,接着可以从向量数据存储器102中按行取出这些数据,根据由FFT控制器101初始化的行指针将这些数据存储到向量数据存储器102中的另一块空间。在输出时,可以从这块空间按顺序取出数据发送给蝶形运算器103。
[0059]在一个实施例中,由于在一个时钟周期只能将数据写入不同的存储单元。因此在倒换存储单元中的η个数据时,需要将η个数据写入不同的存储单元(即列),因此,倒换后的数据在每一行中的位置与参与蝶形运算的排列规则不同。然而,在取数的时候只需要顺序按行取出再进行一定的数据移位即可保持一致。
[0060]在蝶形运算器103执行完所有蝶形运算后,向量数据存储器102还需要对从蝶形运算器103发送来的数据进行倒换并存储,使得能够按顺序向外输出这些数据。
[0061]这里的装置并行化程度η是由该装置支持的基数决定的,装置的并行化程度通常是基数的倍数。在一个实施例中,如果装置支持多种基,则装置的并行化程度是基数的公倍数。例如,装置支持基2和基3,则该装置的并行化程度可以设计为6、12等等。
[0062]三、蝶形运算器103
[0063]蝶形运算器103可用于完成一个基数r由装置确定的、点数由并行化程度确定的η点FFT运算。由于装置的并行化程度η是装置所支持的基数的倍数,因此在要在一级蝶形运算中完成η点FFT运算,需要将这η点运算划分为一次或多次基r的蝶形运算,即:
[0064]n=rXrX...Xr
[0065]其中,r可以是单一的数值,也可以是多种基数。例如,对于并行度为16,且装置支持基4和基2的蝶形运算时,可将一级16点的蝶形运算分解为16=4X4、16=2X2X2X2或者其他组合方式。可由FFT控制器101来配置蝶形运算器103得到每一级蝶形运算的组合方式,即由FFT控制器101确定每一级蝶形运算中调用蝶形运算器103的次数、每次蝶形运算的基以及重排规则,从而进行每一级的蝶形运算。
[0066]在一个实施例中,蝶形运算器103可包括数据重排单元1031和蝶形运算单元1032。其中,数据重排单元1031可以根据由FFT控制器101确定的重排规则对进入蝶形运算器103的一组数据的顺序进行重排列,它是对数据按照位反转的规则进行乱序排列的重要部件,表I示出了四位二进制数进行按位反转的规则。在数据重排单元1031对数据进行重排列之前,FFT控制器101需要先配置数据重排单元1031的重排规则,保证数据按照预定的方式进行重排列。在确定了每一级蝶形运算的次数后,数据重排单元1031在每一次蝶形运算前进行一次数据重排。并且在这一级的蝶形运算完成后,在将数据输出到向量数据存储器102之前,还要进行一次数据重排。由于数据重排单元1031的重排作用,从蝶形运算器103的外部来看,数据是顺序进入蝶形运算器103且按顺序输出的。
[0067]表1
【权利要求】
1.一种FFT并行处理装置,其支持一种或多种基数的蝶形运算,所述装置包括: FFT控制器(101),用于根据并行度将FFT运算分解为一级或多级蝶形运算;其中,所述并行度是所述装置支持的一种或多种基数的倍数; 蝶形运算器(103),用于顺序执行每一级蝶形运算;其中,在每一级蝶形运算中执行一次或多次蝶形运算,并且每一次蝶形运算的基数是所述装置支持的基数。
2.根据权利要求1所述的装置,其中,所述FFT控制器(101)用于根据下式将N点FFT运算分解为m级点数为n或n’的蝶形运算: N=N1XN2X- XNm 其中,N1, N2,...Nm-l=n, Nm=n,,m为正整数,n为并行度,n’小于等于n且为所述装置支持的一种或多种基数的倍数。
3.根据权利要求1或2所述的装置,其中,所述FFT控制器(101)还用于确定每一级蝶形运算中执行蝶形运算的次数以及每一次蝶形运算的基数;其中,每一级蝶形运算的点数等于该级蝶形运算中每一次蝶形运算的基数的乘积。
4.根据权利要求1或2所述的装置,其中,所述装置还包括: 向量数据存储器(102),用于在执行每一级蝶形运算前对参与该级蝶形运算的数据进行处理,使其符合该级蝶形运算的输入顺序,并且将处理后的数据按顺序发送到所述蝶形运算器(103)。
5.根据权利要求4所述的装置,其中,所述向量数据存储器(102)还包括: 数量为并行度η的存储单元,其中,每个存储单元的每一行依次存储序号相差为η的输入数据; 其中,在执行每一级蝶形运算前,所述向量数据存储器(102)每次重排η个数据直到所有输入数据均被重排,使得重排后参与每一级蝶形运算的一组数据存放在每个存储单元的同一行; 所述向量数据存储器(102 )按行取出每个存储单元的同一行数据,将每个存储单元的同一行数据存储到其另一块空间。
6.根据权利要求5所述的装置,其中,所述向量数据存储器(102)将每个存储单元的同一行数据存储到其另一块空间之前,还对所述每个存储单元的同一行数据进行数据移位。
7.根据权利要求4所述的装置,其中,所述向量数据存储器(102)还用于在所述蝶形运算器(103)执行最后一级蝶形运算后对所述蝶形运算器(103)输出的数据进行倒换,并且存储倒换后的数据。
8.根据权利要求1或2所述的装置,其中,所述蝶形运算器(103)包括: 数据重排单元(1031),用于在执行每一次蝶形运算之前,对参与该次蝶形运算的数据进行重排,并且在执行最后一次蝶形运算之后,对运算后的数据进行重排;以及 蝶形运算单元(1032 ),用于执行一次蝶形运算。
9.根据权利要求8所述的装置,其中,所述FFT控制器(101)还用于根据对FFT运算所作的分解,确定每一次蝶形运算的重排规则。
10.根据权利要求1或2所述的装置,还包括: 旋转因子存储器(104),用于在执行每一级蝶形运算前,将相应的旋转因子发送到所述蝶形运算器(103)。
11.根据权利要求1或2所述的装置,还包括: 外部数据接口(105),用于所述向量数据存储器(102)和外部进行数据交互。
12.一种用于数字信号处理的FFT并行处理方法,其支持一种或多种基数的蝶形运算,所述方法包括: 步骤I)、根据并行度将对于所述数字信号的FFT运算分解为一级或多级蝶形运算;其中,所述并行度是所述方法支持的一种或多种基数的倍数; 步骤2)、顺序执行每一级蝶形运算;其中,在每一级蝶形运算中执行一次或多次蝶形运算,并且每一次蝶形运算的基数是所述方法支持的基数。
13.根据权利要求12所述的方法,在步骤I)中,根据下式将N点FFT运算分解为m级点数为n或n’的蝶形运算: N=N1XN2X- XNm 其中,N1, N2,...Nnrl=Ii, Nm=n,,m为正整数,n为并行度,n’小于等于n且为所述装置支持的一种或多种基数的倍数。
14.根据权利要求12所述的方法,其中,步骤I)还包括: 确定每一级蝶形运算中执行蝶形运算的次数以及每一次蝶形运算的基数;其中,每一级蝶形运算的点数等于该级蝶形运算中每一次蝶形运算的基数的乘积。
15.根据权利要求12所述的方法,其中,步骤2)还包括: 在执行每一级蝶形运算前对参与该级蝶形运算的数据进行处理,使其符合该级蝶形运算的输入顺序。
16.根据权利要求15所述的方法,在步骤2)之后,还包括: 在执行最后一级蝶形运算后对运算后的数据进行倒换,并且存储倒换后的数据。
17.根据权利要求12所述的方法,其中,步骤2)还包括: 在执行每一次蝶形运算之前,对参与该次蝶形运算的数据进行重排,并且在执行最后一次蝶形运算之后,对输出的数据进行重排。
18.根据权利要求17所述的方法,其中,步骤1)还包括: 根据对FFT运算所作的分解,确定每一次蝶形运算的重排规则。
【文档编号】G06F17/14GK103699515SQ201310740883
【公开日】2014年4月2日 申请日期:2013年12月27日 优先权日:2013年12月27日
【发明者】苏永涛, 姚彦斌, 朱子元, 唐杉, 石晶林 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1