CN102087640A - 傅里叶变换的实现方法和装置 - Google Patents

傅里叶变换的实现方法和装置 Download PDF

Info

Publication number
CN102087640A
CN102087640A CN2009102422948A CN200910242294A CN102087640A CN 102087640 A CN102087640 A CN 102087640A CN 2009102422948 A CN2009102422948 A CN 2009102422948A CN 200910242294 A CN200910242294 A CN 200910242294A CN 102087640 A CN102087640 A CN 102087640A
Authority
CN
China
Prior art keywords
butterfly
data
random access
processing element
access memory
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.)
Granted
Application number
CN2009102422948A
Other languages
English (en)
Other versions
CN102087640B (zh
Inventor
李波
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN 200910242294 priority Critical patent/CN102087640B/zh
Publication of CN102087640A publication Critical patent/CN102087640A/zh
Application granted granted Critical
Publication of CN102087640B publication Critical patent/CN102087640B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明公开了一种傅里叶变换的实现方法和装置,该方法包括:多级蝶形运算单元中一级蝶形运算单元对向该蝶形计算单元输入的数据计算完成后,对计算得到的计算结果进行转置操作;将转置操作后的计算结果存储至随机存储器中,以供该蝶形计算单元的下一级蝶形计算单元对转置操作后的计算结果进行计算;在转置操作后的计算结果中,由下一级蝶形运算单元在一个周期内计算的数据在随机存储器中的存储位置相同,并且转置操作后的计算结果中归属于同一蝶形计算单位的数据分布在随机存储器的预定位置处;以蝶形计算单位为单位,下一级蝶形运算单元在每个周期内从各随机存储器中的同一预定位置处读取当前周期需要进行计算的数据并对读取的数据进行计算。

Description

傅里叶变换的实现方法和装置
技术领域
本发明涉及通信领域,尤其涉及一种傅里叶变换的实现方法和装置。
背景技术
离散傅里叶变换(Discrete Fourier Transform,简称为DFT)是现代通信及信号处理中广泛应用的技术,而快速傅里叶变换(Fast Fourier transform,简称为FFT)是普遍应用至今的DFT运算的快速算法。尤其是在目前的第三代(3rdGeneration,简称为3G,其中一种标准,即Wimax(全球微波接入互操作性(Worldwide Interoperability for Microwave Access)))移动通信系统以及准第四代(简称为4G(长期演进(Long Term Evolution,简称为LTE)))移动通信技术中,正交频分复用(Orthogonal Frequency Division Multiplexing,简称为OFDM)调制方式已成为物理层调制的重要方案。
在正交频分多址(Orthogonal Frequency Division Multiple Access,简称为OFDMA)以及LTE的单载波频分多址接入(Single Carrier Frequency DivisionMultiple Access,简称为SC-FDMA)技术中,FFT/IFFT(快速傅里叶(逆)变换/快速傅里叶逆变换)是其必不可少的环节。相比于2的幂次点数的FFT/IFFT运算,基4的FFT可以有效减少乘法器、以及时钟的消耗,从而明显降低了基4的FFT运算的资源及处理延迟。
但是,在基4的FFT运算中,由于每级处理的数据可能会从存储地址中相隔很远的地址中取数据,并且各级蝶形运算后的计算结果在存取时可能与原数据地址产生冲突,为了避免这些冲突就需要增大处理的时延,并且需要采用更大的存储器进行中间结果的保存。
针对相关技术中基4FFT运算的处理延迟大、存储资源浪费较多的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术中的基4FFT运算的处理延迟大、存储资源浪费较多的问题,本发明提出一种傅里叶变换的实现方法和装置,能够降低处理延迟,节省存储资源。
本发明的技术方案是这样实现的:
根据本发明的一个方面,提供了一种傅里叶变换的实现方法,用于通过多级蝶形运算单元实现流水傅里叶变换。
根据本发明的傅里叶变换的实现方法包括:多级蝶形运算单元中的其中一级蝶形运算单元对向该蝶形计算单元输入的数据计算完成后,按照预定顺序对计算得到的计算结果分组并对每组计算结果进行转置操作,其中,该蝶形运算单元为多级蝶形运算单元中第一级蝶形运算单元和最后一级蝶形运算单元之外的蝶形运算单元;将转置操作后的计算结果存储至随机存储器中,以供该蝶形计算单元的下一级蝶形计算单元对转置操作后的计算结果进行计算;其中,在转置操作后的计算结果中,由下一级蝶形运算单元在一个周期内计算的数据在随机存储器中的存储位置相同,并且转置操作后的计算结果中归属于同一蝶形计算单位的数据分布在随机存储器的预定位置处;以蝶形计算单位为单位,下一级蝶形运算单元在每个周期内从随机存储器中的预定位置处读取当前周期需要进行计算的数据并对读取的数据进行计算。
其中,该蝶形计算单元对计算结果进行转置操作具体包括:以预定间隔从未转置的计算结果中抽取数据,得到多个蝶形计算单位;对多个蝶形计算单位中的每一个蝶形计算单位进行矩阵转置,并将转置后的蝶形运算单位存储至随机存储器中蝶形计算单位对应的预定位置处。
并且,上述随机存储器的数量可以为四个,并且该方法可进一步包括:预先将待计算数据划分为四部分,对四个部分中每个部分的待计算数据进行位倒序,交换第二与第三个随机存储器编号,并将位倒序后的四部分待计算数据以一一对应的方式存储至四个随机存储器中。
其中,可以根据以下公式对待计算数据进行划分:
Figure G2009102422948D00031
其中,n为所述写入随机存储器中的待计算数据的序号,且
Figure G2009102422948D00032
cn为所述待计算数据,
Figure G2009102422948D00033
为写入的随机存储器的数据地址,
Figure G2009102422948D00034
为写入的随机存储器的编号,划分后的数据通过以下公式表示:
Figure G2009102422948D00035
其中,m为随机存储器编号,且m=0、1、2、3。
并且,对于编号为m的随机存储器,存储的数据为
Figure G2009102422948D00036
所表示的数据,其中,通过将
Figure G2009102422948D00037
所表示的数据与
Figure G2009102422948D00038
所表示的数据所在的存储位置交换来对四个部分的待计算数据进行位倒序。
并且,一方面,每个蝶形运算单位所对应的预定位置在随机存储器中以预定间隔分布的情况下,根据以下公式对该蝶形计算单元的计算结果进行转置,并将转置后的结果存入该蝶形运算单位转置前的存储位置:
Figure G2009102422948D00039
其中,em表示蝶形计算单元进行计算前编号为m的随机存储器中地址编号n处写入的数据的列向量,fm表示蝶形计算单元进行计算和转置后编号为m的随机存储器中地址编号n处存储的数据的列向量,r表示当前蝶形运算的级数。
另一方面,每个蝶形计算单位所对应的预定位置在随机存储器中连续分布的情况下,对该蝶形计算单元的计算结果进行转置的操作具体包括:将随机存储器中存储的蝶形计算单元计算前的数据en m排列为:
Figure G2009102422948D00041
根据以下公式对计算后存储至随机存储器中的数据进行转置:
[ e 4 · i m e 4 · i + 1 m e 4 · i + 2 m e 4 · i + 3 m ] r + 1 = [ f 4 · i m f 4 · i + 1 m f 4 · i + 2 m f 4 · i + 3 m ] r T , 其中,[e4·i m e4·i+1 m e4·i+2 m e4·i+3 m]为随机存储器中存储的未经蝶形计算单元计算的数据,[f4·i m f4·i+1 m f4·i+2 m f4·i+3 m]表示由蝶形计算单元对[e4·i m e4·i+1 m e4·i+2 m e4·i+3 m]进行蝶形计算后得到的结果;
根据以下公式对计算后得到的结果进行重组:
{ e n m } = { e n m | n ≡ 0 mod 4 } { e n m | n ≡ 1 mod 4 } { e n m | n ≡ 2 mod 4 { e n m | n ≡ 3 mod 4 } ;
将对经过转置的数据进行重组后的结果写入随机存储器中,以供下一级蝶形计算单元读取。
此外,在最后一级蝶形运算单元输出的计算结果为位倒序的情况下,对最后一级蝶形运算单元输出的计算结果进行位倒序操作。
根据本发明的另一方面,提供了一种傅里叶变换的实现装置,用于通过多级蝶形运算单元实现流水傅里叶变换。
根据本发明的傅里叶变换的实现装置包括:多级蝶形运算单元,用于进行蝶形计算;随机存储器,用于存储计算结果;转置模块,在多级蝶形运算单元中的其中一级蝶形运算单元对向该蝶形计算单元输入的数据计算完成后,按照预定顺序对计算得到的计算结果分组并对每组计算结果进行转置操作,并将转置操作后的计算结果存储至随机存储器中,以供该蝶形计算单元的下一级蝶形计算单元对转置操作后的计算结果进行计算;其中,在转置操作后的计算结果中,由下一级蝶形运算单元在一个周期内计算的数据在随机存储器中的存储位置相同,并且转置操作后的计算结果中归属于同一蝶形计算单位的数据分布在随机存储器的预定位置处;其中,该蝶形运算单元为多级蝶形运算单元中第一级蝶形运算单元和最后一级蝶形运算单元之外的蝶形运算单元。
其中,转置模块用于以预定间隔从未转置的计算结果中抽取数据,得到多个蝶形计算单位,并对多个蝶形计算单位中的每一个蝶形计算单位进行矩阵转置,并将转置后的蝶形运算单位存储至随机存储器中蝶形计算单位对应的预定位置处。
本发明通过将蝶形运算单元的中间结果进行转置,使得下一级蝶形计算单元能够方便地读取所需数据并进行计算,能够有效降低处理延迟,节省存储空间,避免读写冲突的出现,有效改进傅里叶变换的效率和性能。
附图说明
图1是根据本发明方法实施例的傅里叶变换的实现方法的流程图。
具体实施方式
在根据相关技术的基4FFT运算过程中,由于每级处理的数可能会从存储地址中相隔很远的地址中取数据,同时各级蝶形运算计算的结果在存取时可能与原数据地址产生冲突,从而会增大处理延迟,并且会浪费存储空间。考虑到该问题,本发明提出,在进行FFT运算过程中,根据在时频域转换地址维度来控制各个维度上的运算顺序,通过蝶形运算结果转置存储的方式避免地址冲,省去了中间的存储,使各级之间蝶形运算数据的转换精简快捷,同时减小了时序资源的消耗,降低了处理延迟。
下面将结合附图,详细描述本发明的实施例。
方法实施例
在本实施例中,提供了一种傅里叶变换的实现方法,用于通过多级蝶形运算单元实现流水傅里叶变换。
如图1所示,根据本实施例的傅里叶变换的实现方法包括:
步骤S102,多级蝶形运算单元中的其中一级蝶形运算单元对向该蝶形计算单元输入的数据计算完成后,按照预定顺序对计算得到的计算结果(例如,4个4输出)分组并对每组计算结果进行转置操作,其中,该蝶形运算单元为多级蝶形运算单元中第一级蝶形运算单元和最后一级蝶形运算单元之外的蝶形运算单元,可称为中间级蝶形运算单元,其中,本步骤中的分组是指在转置之前需要将计算结果中的数据以一定顺序或方式进行组合,得到多个分组,之后需要对每个分组内的数据进行转置,这种分组的过程是逻辑上的分组,并不是物理上的分组;
步骤S104,将转置操作后的计算结果存储至随机存储器中,以供本级蝶形运算单元的下一级蝶形计算单元对转置操作后的计算结果进行计算;其中,在转置操作后的计算结果中,由下一级蝶形运算单元在一个周期内计算的数据在随机存储器中的存储位置相同,并且转置操作后的计算结果中归属于同一蝶形计算单位的数据分布在随机存储器的预定位置处;也就是说,对于大小为4*4的计算单位,在下一级蝶形运算单元每一个周期读取4个数据的情况下,同一周期内需要读取的4个数据应当位于随机存储器相同地址处;
通常,随机存储器的数量可以为多个,假设有四个随机存储器,此时,这四个数据在四个随机存储器中各存储一个,不重复存储,并且均存储在相同的地址处,通过四个周期,下一级蝶形运算单元会将该计算单位的16个数据全部读取出来。
步骤S106,以蝶形计算单位为单位,下一级蝶形运算单元在每个周期内从随机存储器(各个随机存储器)中的预定位置处(同一预定位置处,例如,4个存储器的第n个存储位置处)读取当前周期需要进行计算的数据并对读取的数据进行计算。
并且,对于每一级蝶形运算单元,在对全部数据计算完成后,可以用计算的结果全部覆盖随机存储器中原先存储的数据。
具体地,中间级蝶形运算单元对计算结果进行转置的处理具体包括:
以预定间隔从未转置的计算结果中抽取数据,得到多个蝶形计算单位;
对于多个蝶形计算单位中的每一个,对蝶形计算单位进行矩阵转置,并将转置后的蝶形运算单位存储至随机存储器中蝶形计算单位对应的预定位置处,即,该蝶形计算单位转置后的存储位置不会发生改变,但是该计算单位的存储位置上的数据是按照转置后的数据排序。
上述随机存储器的数量通常可以为四个,并且该方法可以进一步包括:
预先将待计算数据(未输入至多级蝶形运算单元进行计算的数据)划分为四部分,对这四个部分中每个部分的待计算数据进行位倒序,交换第二与第三个随机存储器编号,并将位倒序后的待计算数据存储至随机存储器。
具体地,根据以下公式对待计算数据进行划分:
Figure G2009102422948D00071
其中,其中,n为所述写入随机存储器中的待计算数据的序号,且
Figure G2009102422948D00072
cn为所述待计算数据,
Figure G2009102422948D00074
为写入的随机存储器的数据地址,
Figure G2009102422948D00075
为写入的随机存储器的编号,划分后的数据通过以下公式表示:
Figure G2009102422948D00076
其中,m为随机存储器编号,且m=0、1、2、3。
并且,对于编号为m的随机存储器,存储的数据为
Figure G2009102422948D00077
所表示的数据,其中,通过将所表示的数据与
Figure G2009102422948D00079
所表示的数据所在的存储位置交换来对四个部分的待计算数据进行位倒序。
每个蝶形运算单元所对应的预定位置在随机存储器中可以以上述预定间隔分布,也可以连续分布,下面将详细描述这两种分布情况下的处理过程。
方式一,在每个蝶形运算单元所对应的预定位置在随机存储器中以预定间隔分布的情况下,根据以下公式对中间级蝶形运算单元的计算结果进行转置,并将转置后的结果存入该蝶形运算单位转置前的存储位置,也就是说,将转置后的结果存入原转置前取该组数据的存储空间:
Figure G2009102422948D00082
其中,em表示中间级蝶形运算单元进行计算前编号为m的随机存储器中地址编号n处写入的数据的列向量,fm表示中间级蝶形运算单元进行计算和转置后编号为m的随机存储器中地址编号n处存储的数据的列向量,r表示当前蝶形运算的级数(即,r表示是做第几级蝶形运算)。
方式二,在每个蝶形计算单位所对应的预定位置在随机存储器中连续分布的情况下,对中间级蝶形运算单元的计算结果进行转置的操作具体包括:。将随机存储器中存储的中间级蝶形运算单元计算前的数据en m列为:
根据以下公式对计算后存储至随机存储器中的数据进行转置:
[ e 4 · i m e 4 · i + 1 m e 4 · i + 2 m e 4 · i + 3 m ] r + 1 = [ f 4 · i m f 4 · i + 1 m f 4 · i + 2 m f 4 · i + 3 m ] r T
其中,[e4·i m e4·i+1 m e4·i+2 m e4·i+3 m]为随机存储器中存储的未经中间级蝶形运算单元计算的数据,[f4·i m f4·i+1 m f4·i+2 m f4·i+3 m]表示由中间级蝶形运算单元对[e4·i m e4·i+1 m e4·i+2 m e4·i+3 m]进行蝶形计算后得到的结果;
根据以下公式对计算后得到的结果进行重组:
{ e n m } = { e n m | n ≡ 0 mod 4 } { e n m | n ≡ 1 mod 4 } { e n m | n ≡ 2 mod 4 { e n m | n ≡ 3 mod 4 } ;
将对经过转置的数据进行重组后的结果写入随机存储器中,以供下一级蝶形运算单元读取。
最后,在最后一级蝶形运算单元输出的计算结果为位倒序的情况下,对最后一级蝶形运算单元输出的计算结果进行位倒序操作,从而保证最终输出的数据是顺序输出的。
为了解决存储每级(第m级)蝶形运算结果以及以最快速度在下级(第m+1级)蝶形运算时取所需的蝶形运算输入数据,并且前后两级之间的数据读写不能冲突,消耗延迟最小。采用了下述办法,在发明方案中具体详述,严格的步骤见具体实施方式:
下面将对上述的方式一和方式二下的处理过程分别进行详细描述。
方式一
1.假设,对输入的N点的数据{an}进行FFT运算,先将此数据前补
Figure G2009102422948D00091
个0,在此数据后补
Figure G2009102422948D00092
个0,得到长度为4的整数次幂的{bn},然后对{bn}进行
Figure G2009102422948D00093
级的基4 FFT运算。
2.其中,如果是计算IFFT,则还需要将{bn}的实部和虚部交换,若计算FFT,则{bn}维持原样,得到{cn},即:
Figure G2009102422948D00094
初始化FFT蝶形运算级序号r,令r=0;
令r=r+1;
3.以
Figure G2009102422948D00095
为规则将{cn}按顺序分成四份,即:
Figure G2009102422948D00096
之后,将划分的数据存储至RAM中,具体地,将
Figure G2009102422948D00097
存储进第一个RAM,将
Figure G2009102422948D00101
存入第二个RAM,将存储进第三个RAM,将
Figure G2009102422948D00103
存入第四个RAM。
在每个RAM的写入中,若输入数据是顺序的,则以位倒序的顺序写入(即,对顺序的数据进行位倒序后写入,保证写入的数据为位倒序后的数据);若输入数据是位倒序的,则直接以位倒序的顺序写入,得到写入的数据:
Figure G2009102422948D00104
其中,m是RAM标号,n为RAM中的地址序号,若是以位倒序写入RAM,则有:
Figure G2009102422948D00105
其中,若将n在二进制下表示为N位的n=(bN-1bN-2…b0)N,则bitrev(n)=(b0b1…bN-1)N
4.假设当前为第r级FFT/IFFT,按一定顺序取出每个RAM相同地址的四个数,即n固定的en m(m=0,1,2,3),并送入蝶形单元进行蝶形运算,得到 f n m = butterfly ( e n m ) ( m = 0,1,2,3 ) ;
其中,蝶形运算(butterfly)的计算规则如下:
Figure G2009102422948D00107
Figure G2009102422948D00108
其中Xr为第r+1级蝶形运算数据。
5.每四组蝶形运算的结果先用寄存器寄存,再经过转置(且转置数据在每个RAM中并不一定在相邻地址)存入原来取这四组蝶形运算输入数据对应的存储区域。假设对于每个n,en m(m=0,1,2,3)与fn m(m=0,1,2,3)都表示成列向量,即分别表示为
Figure G2009102422948D00109
Figure G2009102422948D001010
可以得到:
Figure G2009102422948D00111
Figure G2009102422948D00112
其中,等式两边都是方阵,[]T为矩阵转置运算;通过转置处理,使得后续的蝶形运算单元可以方便地读取随机存储器中存储的数据,从而有效节省存储资源并降低处理延迟。
6.判断,假如
Figure G2009102422948D00113
转到步骤4继续执行,否则转到步骤7。
7.若是计算IFFT,则将{bn}的实部和虚部交换,若计算FFT,则{bn}维持原样,得到{cn}:
Figure G2009102422948D00114
8.按第1~4个RAM的顺序,每个RAM以顺序依次将最后的数据读出,就得到最终计算的IFT/IFFT结果。
下面将以64点基4FFT运算为例进行说明方式一的处理方式。
64点的基4FFT有三级运算,构造一个流水的基4运算单元一共需要3*16=48次运算,假设输入蝶形运算的数据顺序如表1所示:
Figure G2009102422948D00115
表1输入FFT蝶形运算单元的逻辑顺序
如表1所示,表格中内容为输入FFT运算的数据的输入顺序的序号,n2为表格的行索引,(n1,n0)为表格的列索引,其组合(n2,n1,n0)为该组FFT输入数据的序号的四进制表示(该序号的十进制表示为表中按照顺序排列的的0~63):n2位于输入数据四进制序号的最高维,即0~3,可用R0到R3表示,其表示该组输入序列存入的四个RAM的序号(即,能够唯一标识是哪个RAM);(n1,n0)位于输入数据四进制序号的低维,其二进制表示为A[3:0],正好是输入数据在每个RAM中的二进制存储地址;而且假设数据是按照上表的顺序输入蝶形运算的四个输入口(对应于上表的各行,行标为n2),为了方便同址运算(可以复用中间的乘法结果,节省资源),应交换R1和R2(实际是位倒序的高维操作,把n2的二进制表示进行位倒序排列),即R0、R1、R2、R3变为R0,R2,R1,R3,以位倒序地址对RAM写入,按表2所示的顺序读出:
Figure G2009102422948D00121
表2第一级蝶形运算单元的输入信号顺序
此时,总的二进制地址高2位(即RAM序号n2)为位倒序,低位(四进制(n1,n0))为顺序,必须按照位倒序将各个蝶形运算结果输出才能进行下一级蝶形运算)。实际的做法是将上表各列数据输入最小蝶形单元进行运算,再将各列的运算结果按照位倒序输出,这样RAM标号和RAM内地址都做了位倒序排列,相当于整个序列作了位倒序排列。等效于或者直接按照以下顺序输入计算蝶形后直接读出(表3中的内容是存储在RAM中相应位置的数据与表2中原始数据的映射关系):
Figure G2009102422948D00131
表3第一级蝶形运算单元等效输入信号(根据顺序如表3按位倒序写入,以顺序地址从RAM读取)
然后按照第一级迭代公式进行蝶形运算:
X 0 ( k 2 , n 1 , n 2 ) = Σ n 0 = 0 3 X ( n 0 , n 1 , n 2 ) W 4 n 0 k 2 公式(1)
需要迭代的基4 FFT运算的每一级蝶形每组输入数都需要四个数(四进制下其他位不变,当前级数下当前维度序号以0,2,1,3顺序变化,输出当前维度的当前序号则以0,1,2,3变化,即,最小蝶形单元也是输入位倒序输出顺序),因此位倒序操作需要首先将R1,R2交换,然后在每个RAM内部完成地址的位倒序操作,得到位倒序后地址为B[3:0]=A[0:3],下一级蝶形运算的输入数据地址读取以B地址操作。
在公式(1)中,对FFT运算,n2,n1,n0表示时域各四进制位,即时域各维度,k2,k1,k0表示频域各四进制位,即频域各维度,X(n0,n1,n2 )为位倒序排列的FFT输入数据,W4为第一级蝶形运算的蝶形因子,X0(k2,n1,n2 )为第一级蝶形运算输出结果,可以看到经过第一级蝶形运算后,第一级蝶形计算的输入数据n2维度已经变为了输出数据k0维度,其等效RAM数据的序号如下表所示(表3中的指标n0表示当前的时间维n0待计算,其相应存储位置将变成频率维;表4中上半部分前4列(下文中简称为前4列)的指标k2表示蝶形运算已将当前时间维数据计算完毕,计算前当前时间维n2已转化为当前频率维k0):
Figure G2009102422948D00141
表4第一级蝶形运算单元输出结果(中间数据)
如表3所示数据流依次以{0,16,32,48},{8,40,24,56},...{15,47,31,63}输入到FFT的基4基本蝶形运算单元,可以顺利进行计算,如表4输出中间结果。但是当第一级运算完成后,第二级运算开始时,需要输入第二级蝶形单元数据是{0,8,4,12}等等(如表4中上半部分的前4列数据所示),但是这四个数据出现在同一个RAM中,无法在一拍将4个数据从一个RAM中读出,因此需要进行转置操作。
具体的转置过程如下:考虑第二级蝶形运算的输入数据如{0,8,4,12}等数据,所以在将第一级蝶形运算输出到各个RAM的同一地址的数据流方式从原来的{0,32,16,48},{8,40,24,56},{4,36,20.52},{12,44,28,60}(用于转置的第一组蝶形输出)改为{0,8,4,12},{32,40,36,44},{16,24,20,28},{48,56,52,60}等(如表4中前4列部分蝶形运算输出数据,按照表6中箭头所指的部分数据顺序写入),即,数据读取方式如表4所示,写入顺序如表5所示:
从第一列开始,每4列为一个第二级运算的16元素的基本蝶形单位,也就是说,表4所示数据流中的前4*4格就是第二级运算的第一组数据,将第一级的FFT的结果延迟4拍,获得4组输出{0,32,16,48},{8,40,24,56},{4,36,20.52},{12,44,28,60}通过数据交换,即,通过矩阵转置,前四列部分反映了这种转置,其他数据的转置与此类似,之后将本级蝶形运算输出存到{0,8,4,12},{32,40,36,44},{16,24,20,28},{48,56,52.60}等等,获得第二级输入数据,这里需要说明的是,因为每个RAM内地址是位倒序,所以指标变化是n1先与n2,所以指标n1和k2交换是表4所示的前4列数据表示的矩阵的转置,转置结果如表5所示:
Figure G2009102422948D00151
表5从第二级蝶形运算单元输入数据(转置后对RAM写入)
表5中前4列数据为一组4^2=16个元素的第二级基本蝶形单位,它包含4个最小的4输入蝶形运算,其最小蝶形运算的输入数据为这16个一组的蝶形运算的模4标号的四组4输入数据。在整个第二级运算中,这个第二级基本蝶形单元进行了4次,中间时域元素只与n0有关而与n2无关,重复的是n0的四次(n2已经累加完毕)。
然后同时按同一地址并行读出四个RAM的相同地址下的数据,送入蝶形单元,进行第二级FFT蝶形运算:
X 1 ( k 2 , k 1 , n 2 ) = Σ n 1 = 0 3 X 0 ( k 2 , n 1 , n 2 ) W 16 n 1 k 1 , 得到表7所示的输出数据:
Figure G2009102422948D00153
表7从第二级蝶形运算单元输出数据(需要寄存的中间结果)
如表7所示,上述数据按照n0维度的顺序计算k2(表7中(0,0)、(0,2)、(0,1)、(0,3)所对应的指标,即,(0,0)、(0,2)、(0,1)、(0,3)所在位置就是当前计算的计算单位在存储器中的预定位置,该位置以4为间隔分布,在计算时也应当以4为间隔抽取),即,先(0,0)、(0,2)、(0,1)、(0,3)的数据的蝶形,计算完{0,8,4,12},{32,40,36,44},{16,24,20,28},{48,56,52,60}后再转置存入相应位置,之后计算(1,0)、(1,2)、(1,1)、(1,3),再计算(2,0)、(2,2)、(2,1)、(2,3),最后计算(3,0)、(3,2)、(3,1)、(13,3),因为各RAM内部数据是位倒序排列,且这次要交换到fft蝶形单元的计算指标位于(k2,n2)的低位n2,低位n2在每个RAM地址内部是比k2后变的,所以计算完毕后存入在上表(k1,n2)的维度转置成为(n2,k1),所以根据上述计算的分组进行转置,存储到原存储空间),存储得到表7所示的结果:
Figure G2009102422948D00161
表7对第三级蝶形运算单元输入数据(转置后对RAM写入)
如表7中(0,0)、(0,2)、(0,1)、(0,3)所对应的数据,在每个RAM中各组地址并不相邻(即,(0,0)、(0,2)、(0,1)、(0,3)所属的计算单位在存储器中存储的预定位置是不连续的),当n2=0时的转置方式如下:
0 2 1 3 8 10 9 11 4 6 5 7 12 14 13 15 → 0 8 4 12 2 10 4 14 1 9 5 13 3 11 7 15 ,
接下来,每一拍读出同一地址的四个蝶形输入数据,再按照第三级蝶形运算计算公式计算:
X 2 ( k 2 , k 1 , k 0 ) = Σ n 2 = 0 3 X 1 ( k 2 , k 1 , n 2 ) W 64 n 2 k 0 ,
之后得到的四个输出同样写入四个RAM相同的地址处,当前维数如下:
Figure G2009102422948D00172
表8从第三级蝶形运算单元输出数据(需要寄存的中间结果寄存)
之后,将最后一级结果如前进行k1和k2的转置变(k1,k0,k2)为(k2,k0,k1)在每个RAM内按照位倒序读出(即(k0,k1)变为(k1,k0)),继续操作,则得到最后的FFT数据流,最后输出数据的维度如表9所示:
Figure G2009102422948D00173
表9从第三级蝶形运算单元输出的数据(调整顺序后读出)
上表的指标顺序和输入时的位倒序是一致的,但是各维已经转换到了时域,且时域为顺序,从各个RAM依次轮流读出数据即为最后顺序输出的FFT处理。
方式二
1.与方式一类似,首先,对输入的N点的数据{an}进行FFT运算,先将此数据前补
Figure G2009102422948D00181
个0,在此数据后补
Figure G2009102422948D00182
个0,得到{bn},然后对{bn}进行
Figure G2009102422948D00183
级的基4 FFT运算。
2.如果是计算IFFT,则将{bn}的实部和虚部交换,若计算FFT,则{bn}维持原样,得到{cn}:
Figure G2009102422948D00184
初始化FFT蝶形运算级序号r,令r=0;
令r=r+1;
3.以为规则将{cn}按顺序分成四份,即:
Figure G2009102422948D00186
具体地,将
Figure G2009102422948D00187
存储进第一个RAM,将
Figure G2009102422948D00188
存入第二个RAM,将
Figure G2009102422948D00189
存储进第三个RAM,将
Figure G2009102422948D001810
存入第四个RAM。
在每个RAM的写入中,若输入数据是顺序的,则以位倒序顺序写入;若输入数据是位倒序的,则以位倒序顺序写入,得到写入的数据:
Figure G2009102422948D001811
其中m是RAM标号,n为RAM中的地址序号,若是以位倒序写入RAM,则有:
Figure G2009102422948D00191
其中若将n在二进制下表示为N位的n=(bN-1bN-2…b0)N,则bitrev(n)=(b0b1…bN-1)N
4.假设当前为第r级FFT/IFFT,按一定顺序取出每个RAM相同地址的四个数,即n固定的en m(m=0,1,2,3),送入蝶形单元进行蝶形运算,得到 f n m = butterfly ( e n m ) ( m = 0,1,2,3 ) ;
蝶形运算的计算规则如下:
Figure G2009102422948D00193
其中Xr为第r+1级蝶形运算数据。
5.每四组蝶形运算的结果先用寄存器寄存,再经过转置(与之前描述的方式一不同,在方式二中,转置后的数据在每个RAM中一定在相邻地址)存入原来取这四组蝶形运算输入数据的存储区域。
假设对每个n,en m(m=0,1,2,3)与fn m(m=0,1,2,3)都表示成列向量,即
Figure G2009102422948D00195
Figure G2009102422948D00196
之后,将en m(m=0,1,2,3)拍列成为:
Figure G2009102422948D00197
然后计算将由[e4·i m e4·i+1 m e4·i+2 m e4·i+3 m]蝶形运算得到的[f4·i m f4·i+1 m f4·i+2 m f4·i+3 m]进行转置存取,即:
[ e 4 · i m e 4 · i + 1 m e 4 · i + 2 m e 4 · i + 3 m ] r + 1 = [ f 4 · i m f 4 · i + 1 m f 4 · i + 2 m f 4 · i + 3 m ] r T
其中,等式的两边都是方阵,[]T为矩阵转置运算,右下级指标表示各级运算之间的递推关系。
6.对之前转置后的结果进行地址重组,即,重新排列步骤5中计算得到的数据的位置,之后,根据计算得到的位置将数据存入RAM,具体地,可以按地址模4抽取RAM排列的内容,先排列地址模0的数据,再依次排列地址模1、模2、模3的数据,具体参照以下公式:
{ e n m } = { e n m | n ≡ 0 mod 4 } { e n m | n ≡ 1 mod 4 } { e n m | n ≡ 2 mod 4 { e n m | n ≡ 3 mod 4 }
从而便于后续蝶形运算单元读取数据,避免复杂的中间存储以及所产生的地址冲突。
7.判断,假如
Figure G2009102422948D00202
转到4,否则转到8
8.若是计算IFFT,则将{bn}的实部和虚部交换,若计算FFT,则{bn}维持原样,得到{cn}:
Figure G2009102422948D00203
9.按第1~4个RAM的顺序,每个RAM以顺序依次将最后的数据读出,就得到最终计算的IFT/IFFT结果。
本发明的技术方案:
方案二
下面将以64点基4FFT运算为例进行说明方式二的处理方式。
64点的基4FFT有三级运算,构造一个流水的基4运算单元一共需要3*16=48次运算,假设输入蝶形运算的数据顺序如表10所示:
表10输入FFT蝶形运算单元的逻辑顺序
如表10中所示,R0到R3表示四个RAM中存储的数据,0~63表示的是RAM中存取的64点FFT数据,设定RAM地址A[3:0];而且假设数据是按照上表的顺序输入蝶形运算的四个输入口(对应于表10的各个行),为了方便同址运算(可以复用中间的乘法结果以节省资源),应交换R1和R2(执行位倒序的高维操作),基本的运算顺序如表11所示:
Figure G2009102422948D00211
表11第一级蝶形运算单元的输入信号(以位倒序地址对RAM写入,按表11所示的顺序读出)
其中,总地址高2位(即RAM序号n2)进行了位倒序,而低位(n1,n0)为顺序,需要按照位倒序将各个蝶形运算结果输出之后再进行下一级蝶形运算。实际的做法是将上表各列计算最小蝶形,再按照位倒序输出,等效于按照表12所示的顺序输入计算蝶形后直接读出(表中的内容是存储在RAM中相应位置的数与表10中原始数据的映射关系):
表12第一级蝶形运算单元的等效输入信号(各蝶形顺序按位倒序写入,以顺序地址从RAM读取)
然后按照第一级迭代公式进行蝶形运算:
X 0 ( k 2 , n 1 , n 2 ) = Σ n 0 = 0 3 X ( n 0 , n 1 , n 2 ) W 4 n 0 k 2
需要进行迭代的基4 FFT运算的每一级每组数都需要四个数(四进制下其他位不变,当前级数下当前维度序号以0、2、1、3顺序变化,输出当前维度的当前序号则以0、1、2、3变化,即最小蝶形单元也是输入位倒序输出顺序),位倒序操作需要首先将R1,R2交换,然后将RAM内部完成地址反序操作,舍得位倒序后地址为B[3:0]=A[0:3],后续地址读取以B地址操作。
对FFT,n2、n1、n0表示时域各四进制位,即,时域各维度,k2、k1、n0表示频域各四进制位,即频域各维度。第一级蝶形计算的n2维度已经变为了k0维度,其等效RAM数据的序号如下表所示(前4列表示当前维度已经计算完毕,已转化为频率维):
Figure G2009102422948D00222
表13第一级蝶形运算单元的输出结果(中间数据)
如上表数据流依次以{0,16,32,48},{8,40,24,56},...{15,47,31,63}输入到FFT的基4基本蝶形运算单元进行计算。但是当第一级运算完成后,第二级运算开始时,需要输入第二级蝶形单元数据是{0,8,4,12}等等,但是这四个数据出现在同一个RAM中,无法在一拍将4个数据从一个RAM中读出,有鉴于此,需要进行转置操作。
首先考虑第二级的数据{0,8,4,12}等数据,所以在将第一级的数据流方式改为{0,32,16,48},{8,40,24,56},{4,36,20.52},{12,44,28,60}...数据读取方式如表13所示(从第1列起按列读取)。
上面所示数据流中的前4*4格就是第二级运算的第一组数据,将第一级的FFT的结果延迟4拍,获得4组输出{0,32,16,48}、{8,40,24,56}、{4,36,20.52}、{12,44,28,60}通过数据交换,即矩阵转置,例如,如表14中的前4列所对应的数据所示,将{0,8,4,12}存到{0,32,16,48}中,以此类推,获得第二级输入数据,如表14所示:
Figure G2009102422948D00231
表14从第一级蝶形运算单元的输出数据(转置后对RAM写入)
表14中前4列为一组4^2=16个元素的第二级基本蝶形单位,其他基本计算单位依此类推,每个基本的计算单位包含4个最小的4输入蝶形运算,其最小蝶形运算的输入数据为这16个一组的蝶形运算的模4标号的四组4输入数据。在整个第二级运算中每组这个第二级基本蝶形单元进行了4次,因为中间时域元素只与n1有关而与n0无关,重复的是n0的四次可能,即,重复四次(n2已经累加完毕)。
在这一级,数据流需要变换,四组输出{0,8,4,12},{2,10,6,14},{1,9,5,13},{3,11,7,15},数据读取变为了每个RAM中的数据为隔4抽取,送入蝶形单元,即,抽取(0,0)、(0,2)、(0,1)、(0,3)所对应的数据,之后抽取(1,0)、(1,2)、(1,1)、(1,3)所对应的数据,再抽取(2,0)、(2,2)、(2,1)、(2,3)所对应的数据,最后抽取(3,0)、(3,2)、(3,1)、(3,3)所对应的数据(即,对于同一计算单位的数据,例如,(0,0)、(0,2)、(0,1)、(0,3)的列索引所属的计算单对应的数据位在存储器中的预定位置为连续分布),得到表15所示的数据:
Figure G2009102422948D00241
表15第二级蝶形运算单元的输入数据顺序(按4抽取后的数据)然后进行第二级FFT蝶形运算:
X 1 ( k 2 , k 1 , n 2 ) = Σ n 1 = 0 3 X 0 ( k 2 , n 1 , n 2 ) W 16 n 1 k 1
得到的中间结果如表16所示,需要转置存入相应空间:
Figure G2009102422948D00243
表16第二级蝶形运算单元的计算结果(中间结果)
将第二级的FFT结果延迟4拍,通过数据交换(先寄存下来再转置送入相应单元),获得第三级的输入数据,即将表15中的(k2,n1)指标转换成了表16中的(n1,k2)指标后进行存储,如表17所示:
Figure G2009102422948D00251
表17第二级蝶形运算单元输出数据顺序(转置写入)
之后,继续进行隔4读取,得到数据如下:
Figure G2009102422948D00252
表18第三级蝶形输入数据顺序(隔4读取后)
接下来再按照第三级蝶形运算计算公式计算:
X 2 ( k 2 , k 1 , k 0 ) = Σ n 2 = 0 3 X 1 ( k 2 , k 1 , n 2 ) W 64 n 2 k 0
对于最后一级蝶形运算,数据流方式不变换,数据也不进行交换,运算完成以后,下一个FFT进行上面的反向过程,本级将数据存成如下格式:
Figure G2009102422948D00254
表19第三级蝶形运算单元输出的数据顺序
然后将表19所示结果的各个RAM内数据按照位倒序排列,这得到最终结果:
Figure G2009102422948D00261
表20第三级蝶形运算单元输出排列后的数据
表20所示的指标顺序和输入时的位倒序是一致的,但是各维已经转换到了时域,且时域为顺序,从各个RAM依次轮流读出数据即为最后顺序输出的FFT处理。
下面将以1024点基4 FFT运算为例描述方式二的处理过程:
类似64点运算,第一级读地址采用顺序地址反序产生,即B[7:0]=A[0:7],如{0,128,64,192}对应{0,4,8,12},{0,256,512,768}对应{0,2,1,3},但是为了进行同址运算,实际上进行第一级蝶形进行操作的时候是FFT输入R1进第一级蝶形R2,R2与R1交换,得到表21所示的数据:
 R0  0  128  64  192  32  160  96  224  16  144
 R1  256  384  320  448  288  416  352  480  272  400
 R2  512  640  576  704  544  672  608  736  528  656
 R3  768  896  832  960  800  928  864  992  784  912
 R0  80  208  48  176  112  240  8  136  72  ...
 R1  336  464  304  432  368  496  264  392  328  ...
 R2  592  720  560  688  624  752  520  648  584  ...
 R3  848  976  816  944  880  1008  776  904  840  ...
表21第一级蝶形运算单元的输入数据,每个RAM位倒序后的数据(维度(n0,n1,n2,n3,n4))
等效数据如表25所示(RAM序号和地址联合的维度序号应该是(n0,n1,n2,n3,n4)),其中n本身内部是位倒序的:
 R0  0  128  64  192  32  160  96  224  16  144
 R2  512  640  576  704  544  672  608  736  528  656
 R1  256  384  320  448  288  416  352  480  272  400
 R3  768  896  832  960  800  928  864  992  784  912
 R0  80  208  48  176  112  240  8  136  72 ...
 R2  592  720  560  688  624  752  520  648  584 ...
 R1  336  464  304  432  368  496  264  392  328 ...
 R3  848  976  816  944  880  1008  776  904  840 ...
表22第一级蝶形运算输入,从RAM读取(维度(n0,n1,n2,n3,n4))
从表22可以看出,第一级FFT运算数据从写入RAM地址中以位倒序方式读出,同时R1与R2交换,然后读出四个RAM相同地址的数据送到蝶形运算单元,算完蝶形运算后(维度变为(k0,n3,n2,n1,n0))类似64点时的做法转置写入原RAM单元中(维度变为(n3,k0,n2,n1,n0)),下一级蝶形只需如下读出下表每列:
 R0  0  512  256  768  32  544  288  800  16  528
 R1  128  640  384  896  160  672  416  928  144  656
 R2  64  576  320  832  96  608  352  864  80  592
 R3  192  704  448  960  224  736  480  992  208  720
 R0  272  784  48  560  304  816  8  520  264  ...
 R1  400  912  176  688  432  944  136  648  392  ...
 R2  336  848  112  624  368  880  72  584  328  ...
 R3  464  976  240  752  496  1008  200  712  456  ...
表22第一级蝶形运算单元的输出数据,对RAM写入(维度(n1,k4,n2,n3,n4))
然后送入蝶形单元进行运算,维度即变为(k1,k0,n2,n1,n0),这时由于RAM序号所在的最高维度由于已经转换到频域,所以无法读出四个RAM相同地址进行蝶形运算,所以需要将维度(n2,n1,n0)循环左移1位,将k0在每个RAM中循环右移一位,即将表22的每个RAM的数按照地址隔4抽取,即得到(k1,n2,n1,n0,k0),再将其转置存储,得到(n2,k1,n1,n0,k0),存入相应空间中,得到:
 R0  0  32  16  48  8  40  24  56  4  36
 R2  128  160  144  176  136  168  152  184  132  164
 R1  64  96  80  112  72  104  88  120  68  100
 R3  192  224  208  240  200  232  216  248  196  228
 R0  20  52  12  44  28  60  2  0  32  ...
 R2  148  180  140  172  156  188  130  128  160  ...
 R1  84  116  76  108  92  124  66  64  96  ...
 R3  212  244  204  236  220  252  194  192  224  ...
表23第二级蝶形运算单元的输入数据,从RAM读取(维度(n1,n2,n3,n4,k4))
将其数据按地址顺序读出,同时并行读出四个RAM的同一地址的数送入蝶形运算单元,计算第二级蝶形运算后将结果,转置后(维度变为(k2,k1,n1,n0,k0))得到:
 R0  0  128  64  192  8  136  72  200  4  132
 R2  32  160  96  224  40  168  104  232  36  164
 R1  16  144  80  208  24  152  88  216  20  148
 R3  48  176  112  240  56  184  120  248  52  180
 R0  68  196  12  140  76  204  2  130  66  ...
 R2  100  228  44  172  108  236  34  162  98  ...
 R1  84  212  28  156  92  220  18  146  82  ...
 R3  116  244  60  188  124  252  50  178  114  ...
表24第二级蝶形运算单元输出的数据,对RAM写入(维度(n2,k3,n3,n4,k4))
同理,将上表24中每个RAM的数按4抽取重新排列,得到维度为(k2,n1,n0,k0,k1)的数据,进入第三级蝶形运算单元的数据如表25所示:
 R0  0  8  4  12  2  10  6  14  1  9
 R2  32  40  36  44  34  42  38  46  33  41
 R1  16  24  20  28  18  26  22  30  17  25
 R3  48  56  52  60  50  58  54  62  49  57
 R0  5  13  3  11  7  15  512  520  516  ...
 R2  37  45  35  43  39  47  544  552  548  ...
 R1  21  29  19  27  23  31  528  536  532  ...
 R3  53  61  51  59  55  63  560  568  564  ...
表25第三级蝶形运算单元的输入数据,从RAM读取(维度(n2,n3,n4,k4,k3))
将其数据按地址顺序读出,同时并行读出四个RAM的同一地址的数送入蝶形运算单元,计算第二级蝶形运算后将结果转置(维度变为(k3,k2,n1,n0,k0)),得到表26所示的数据:
 R0  0  32  16  48  2  34  18  50  1  33
 R2  8  40  24  56  10  42  26  58  9  41
 R1  4  36  20  52  6  38  22  54  5  37
 R3  12  44  28  60  14  46  30  62  13  45
 R0  17  49  3  35  19  51  512  544  528  ...
 R2  25  57  11  43  27  59  520  552  536 ...
 R1  21  53  7  39  23  55  516  548  532 ...
 R3  29  61  15  47  31  63  524  556  540 ...
表26第三级蝶形运算单元输出的数据,对RAM写入(维度(n3,k2,n4,k4,k3))
同理,将表26中每个RAM的数按4抽取重新排列,得到维度为(k3,n1,n0,k0,k2)的数据,进入第四级蝶形运算,如表27所示:
 R0  0  2  1  3  512  514  513  515  256  258
 R2  8  10  9  11  520  522  521  523  264  266
 R1  4  6  5  7  516  518  517  519  260  262
 R3  12  14  13  15  524  526  525  527  268  270
 R0  257  259  768  770  769  771  128  130  129  ...
 R2  265  267  776  778  777  779  136  138  137  ...
 R1  261  263  772  774  773  775  132  134  133  ...
 R3  269  271  780  782  781  783  140  142  141  ...
表27第四级蝶形运算单元的输入数据,从RAM读取(维度(n3,n4,k4,k3,k2))
将其数据按地址顺序读出,同时并行读出四个RAM的同一地址的数送入蝶形运算单元,计算第二级蝶形运算后将结果转置(维度变为(k3,k2,n1,n0,k0)),得到表28所示的数据:
 R0  0  8  4  12  512  520  516  524  256  264
 R2  2  10  6  14  514  522  518  526  258  266
 R1  1  9  5  13  513  521  517  525  257  265
 R3  3  11  7  15  515  523  519  527  259  267
 R0  260  268  768  776  772  780  128  136  132  ...
 R2  262  270  770  778  774  782  130  138  134  ...
 R1  261  269  769  777  773  781  129  137  133  ...
 R3  263  271  771  779  775  783  131  139  135  ...
表28第四级蝶形运算输出,对RAM写入(维度(n4,k1,k4,k3,k2))
同理,将表28中每个RAM的数按4抽取重新排列,得到维度为(k3,n1,n0,k0,k2)的数据,进入第五级蝶形运算,如表29所示:
 R0  0  512  256  768  128  640  384  896  64  576
 R2  2  514  258  770  130  642  386  898  66  578
 R1  1  513  257  769  129  641  385  897  65  577
 R3  3  515  259  771  131  643  387  899  67  579
 R0  320  832  192  704  448  960  32  544  288 ...
 R2  322  834  194  706  450  962  34  546  290 ...
 R1  321  833  193  705  449  961  33  545  289 ...
 R3  323  835  195  707  451  963  35  547  291 ...
表29第五级蝶形运算单元的输入数据,从RAM读取(维度(n4,k4,k3,k2,k1))
将其数据按地址顺序读出,同时并行读出四个RAM的同一地址的数送入蝶形运算单元,计算第五级蝶形运算后,维度变为(k0,k4,k3,k2,k1)),可以按一定规则直接输出,也可以进行上述的转置写入这四个RAM,维度变为得到(k4,k0,k3,k2,k1),再按4抽取得到维度为(k4,k3,k2,k1,k0)的数据,得到的指标顺序与第一次输入时是一样的,但是已经在时域上变为顺序输出了,如表30所示:
  R0   0   128   64   192   32   160   96   224   16   144
  R2   512   640   576   704   544   672   608   736   528   656
  R1   256   384   320   448   288   416   352   480   272   400
  R3   768   896   832   960   800   928   864   992   784   912
  R0   80   208   48   176   112   240   8   136   72   ...
  R2   592   720   560   688   624   752   520   648   584   ...
  R1   336   464   304   432   368   496   264   392   328   ...
  R3   848   976   816   944   880   1008   776   904   840   ...
表30第五级蝶形运算单元输出的数据,可用RAM变换顺序后输出(维度(k4,k3,k2,k1,k0))
应当注意,以上结合表1至表30所描述的转置方式仅仅是具体的实例,本发明并不限于此,在实际应用中可以采用其他的转置方式,从而方便下一级蝶形运算单元读取数据进行计算,本文不再一一列举。
通过上述处理,由于上一级蝶形运算单元计算后经过转置的数据,下一级蝶形运算单元能够很方便地读出,因此能够避免占用大量存储空间来避免地址冲突,并且能够降低傅里叶变换的时延。
装置实施例
在本实施例中,提供了一种傅里叶变换的实现装置,用于通过多级蝶形运算单元实现流水傅里叶变换。
根据本实施例的装置包括:多级蝶形运算单元,用于进行蝶形计算;随机存储器,用于存储计算结果;转置模块,在多级蝶形运算单元中的其中一级蝶形运算单元对向该蝶形计算单元输入的数据计算完成后,以预定顺序对计算得到的计算结果进行分组,并对每组计算结果进行转置操作,并将转置操作后的计算结果存储至随机存储器中,以供蝶形计算单元的下一级蝶形计算单元对转置操作后的计算结果进行计算;其中,在转置操作后的计算结果中,由下一级蝶形运算单元在一个周期内计算的数据在随机存储器中的存储位置相同,并且转置操作后的计算结果中归属于同一蝶形计算单位的数据分布在随机存储器的预定位置处;其中,上述进行转置操作的蝶形运算单元为多级蝶形运算单元中第一级蝶形运算单元和最后一级蝶形运算单元之外的蝶形运算单元。
该装置可用于实现上述方法,其同样可以采用上述公式,得到以上结合表1至30所示的中间结果和最终结果,该装置内具体的处理过程与之前描述的相同,这里不再重复。
通过上述处理,由于上一级蝶形运算单元计算后经过转置的数据,下一级蝶形运算单元能够很方便地读出,因此能够避免占用大量存储空间来避免地址冲突,并且能够降低傅里叶变换的时延。
综上所述,借助于本发明的上述技术方案,通过将蝶形运算单元的中间结果进行转置,使得下一级蝶形计算单元能够方便地读取所需数据并进行计算,能够有效降低处理延迟,节省存储空间,避免读写冲突的出现,有效改进傅里叶变换的效率和性能,适用于基2、基4等多种FFT/IFFT运算。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种傅里叶变换的实现方法,用于通过多级蝶形运算单元实现流水傅里叶变换,其特征在于,所述方法包括:
所述多级蝶形运算单元中的其中一级蝶形运算单元对向该蝶形计算单元输入的数据计算完成后,按照预定顺序对计算得到的计算结果分组并对每组计算结果进行转置操作,其中,所述蝶形运算单元为所述多级蝶形运算单元中第一级蝶形运算单元和最后一级蝶形运算单元之外的蝶形运算单元;
将转置操作后的所述计算结果存储至随机存储器中,以供所述蝶形计算单元的下一级蝶形计算单元对转置操作后的所述计算结果进行计算;其中,在转置操作后的所述计算结果中,由所述下一级蝶形运算单元在一个周期内计算的数据在所述随机存储器中的存储位置相同,并且转置操作后的所述计算结果中归属于同一蝶形计算单位的数据分布在所述随机存储器的预定位置处;
以蝶形计算单位为单位,所述下一级蝶形运算单元在每个周期内从所述随机存储器中的预定位置处读取当前周期需要进行计算的数据并对读取的所述数据进行计算。
2.根据权利要求1所述的方法,其特征在于,对计算结果进行转置操作具体包括:
以所述预定间隔从未转置的所述计算结果中抽取数据,得到多个蝶形计算单位;
对所述多个蝶形计算单位中的每一个蝶形计算单位进行矩阵转置,并将转置后的所述蝶形运算单位存储至所述随机存储器中所述蝶形计算单位对应的预定位置处。
3.根据权利要求2所述的方法,其特征在于,所述随机存储器的数量为四个,并且所述方法进一步包括:
预先将待计算数据划分为四部分,对所述四个部分中每个部分的待计算数据进行位倒序,交换第二与第三个随机存储器编号,并将位倒序后的四部分待计算数据以一一对应的方式存储至所述四个随机存储器中。
4.根据权利要求3所述的方法,其特征在于,根据以下公式对所述待计算数据进行划分:
Figure F2009102422948C00021
其中,n为所述写入随机存储器中的待计算数据的序号,且n=0,1,
Figure F2009102422948C00022
cn为所述待计算数据,
Figure F2009102422948C00023
为写入的随机存储器的数据地址,
Figure F2009102422948C00024
为写入的随机存储器的编号,划分后的数据通过以下公式表示:
Figure F2009102422948C00025
其中,m为所述随机存储器编号,且m=0、1、2、3。
5.根据权利要求4所述的方法,其特征在于,对于编号为m的随机存储器,存储的数据为
Figure F2009102422948C00026
所表示的数据,其中,通过将
Figure F2009102422948C00027
所表示的数据与
Figure F2009102422948C00028
所表示的数据所在的存储位置交换来对所述四个部分的待计算数据进行位倒序。
6.根据权利要求5所述的方法,其特征在于,每个蝶形运算单位所对应的预定位置在所述随机存储器中以所述预定间隔分布的情况下,根据以下公式对所述蝶形计算单元的所述计算结果进行转置,并将转置后的结果存入该蝶形运算单位转置前的存储位置:
Figure F2009102422948C00029
Figure F2009102422948C000210
其中,em表示所述蝶形计算单元进行计算前编号为m的随机存储器中地址编号n处写入的数据的列向量,fm表示所述蝶形计算单元进行计算和转置后编号为m的随机存储器中地址编号n处存储的数据的列向量,r表示当前蝶形运算的级数。
7.根据权利要求5所述的方法,其特征在于,每个蝶形计算单位所对应的预定位置在所述随机存储器中连续分布的情况下,对所述蝶形计算单元的所述计算结果进行转置的操作具体包括:
将所述随机存储器中存储的所述蝶形计算单元计算前的数据en m排列为:
Figure F2009102422948C00031
根据以下公式对计算后存储至所述随机存储器中的数据进行转置:
e 4 · i m e 4 · i + 1 m e 4 · i + 2 m e 4 · i + 3 m r + 1 = f 4 · i m f 4 · i + 1 m f 4 · i + 2 m f 4 · i + 3 m r T
其中,[e4·i m e4·i+1 m e4·i+2 m e4·i+3 m]为所述随机存储器中存储的未经所述蝶形计算单元计算的数据,[f4·i m f4·i+1 m f4·i+2 m f4·i+3 m]表示由所述蝶形计算单元对[e4·i m e4·i+1 m e4·i+2 m e4·i+3 m]进行蝶形计算后得到的结果;
根据以下公式对计算后得到的所述结果进行重组:
{ e n m } = { e n m | n ≡ 0 mod 4 } { e n m | n ≡ 1 mod 4 } { e n m | n ≡ 2 mod 4 } { e n m | n ≡ 3 mod 4 } ;
将对经过转置的数据进行重组后的结果写入所述随机存储器中,以供所述下一级蝶形计算单元读取。
8.根据权利要求1至7中任一项所述的方法,其特征在于,在所述最后一级蝶形运算单元输出的计算结果为位倒序的情况下,对所述最后一级蝶形运算单元输出的计算结果进行位倒序操作。
9.一种傅里叶变换的实现装置,用于通过多级蝶形运算单元实现流水傅里叶变换,其特征在于,所述装置包括:
多级蝶形运算单元,用于进行蝶形计算;
随机存储器,用于存储计算结果;
转置模块,在所述多级蝶形运算单元中的其中一级蝶形运算单元对向该蝶形计算单元输入的数据计算完成后,按照预定顺序对计算得到的计算结果进行分组并对每组计算结果进行转置操作,并将转置操作后的所述计算结果存储至随机存储器中,以供所述蝶形计算单元的下一级蝶形计算单元对转置操作后的所述计算结果进行计算;其中,在转置操作后的所述计算结果中,由所述下一级蝶形运算单元在一个周期内计算的数据在所述随机存储器中的存储位置相同,并且转置操作后的所述计算结果中归属于同一蝶形计算单位的数据分布在所述随机存储器的预定位置处;其中,所述蝶形运算单元为所述多级蝶形运算单元中第一级蝶形运算单元和最后一级蝶形运算单元之外的蝶形运算单元。
10.根据权利要求9所述的装置,其特征在于,所述转置模块用于以所述预定间隔从未转置的所述计算结果中抽取数据,得到多个蝶形计算单位,并对所述多个蝶形计算单位中的每一个蝶形计算单位进行矩阵转置,并将转置后的所述蝶形运算单位存储至所述随机存储器中所述蝶形计算单位对应的预定位置处。
CN 200910242294 2009-12-08 2009-12-08 傅里叶变换的实现方法和装置 Expired - Fee Related CN102087640B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200910242294 CN102087640B (zh) 2009-12-08 2009-12-08 傅里叶变换的实现方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200910242294 CN102087640B (zh) 2009-12-08 2009-12-08 傅里叶变换的实现方法和装置

Publications (2)

Publication Number Publication Date
CN102087640A true CN102087640A (zh) 2011-06-08
CN102087640B CN102087640B (zh) 2013-06-05

Family

ID=44099453

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200910242294 Expired - Fee Related CN102087640B (zh) 2009-12-08 2009-12-08 傅里叶变换的实现方法和装置

Country Status (1)

Country Link
CN (1) CN102087640B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103699515A (zh) * 2013-12-27 2014-04-02 中国科学院计算技术研究所 一种fft并行处理装置和方法
CN108319804A (zh) * 2018-04-17 2018-07-24 福州大学 一种低资源调用的8192点基2 dit asic电路设计方法
CN112689832A (zh) * 2020-05-28 2021-04-20 深圳市大疆创新科技有限公司 数据处理方法、装置、可移动平台及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100594491C (zh) * 2006-07-14 2010-03-17 中国电子科技集团公司第三十八研究所 可重构数字信号处理器
CN101184079B (zh) * 2007-12-24 2011-09-14 北京创毅视讯科技有限公司 一种频域载波信道估计方法及装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103699515A (zh) * 2013-12-27 2014-04-02 中国科学院计算技术研究所 一种fft并行处理装置和方法
CN103699515B (zh) * 2013-12-27 2017-01-18 中国科学院计算技术研究所 一种fft并行处理装置和方法
CN108319804A (zh) * 2018-04-17 2018-07-24 福州大学 一种低资源调用的8192点基2 dit asic电路设计方法
CN108319804B (zh) * 2018-04-17 2023-08-08 福州大学 低资源调用的8192点基2 dit asic设计方法
CN112689832A (zh) * 2020-05-28 2021-04-20 深圳市大疆创新科技有限公司 数据处理方法、装置、可移动平台及存储介质

Also Published As

Publication number Publication date
CN102087640B (zh) 2013-06-05

Similar Documents

Publication Publication Date Title
CN101571849B (zh) 一种快速傅立叶变换处理器及其方法
CN103699515B (zh) 一种fft并行处理装置和方法
US8364736B2 (en) Memory-based FFT/IFFT processor and design method for general sized memory-based FFT processor
CN101083643A (zh) 一种低存储器开销的混合基fft处理器及其方法
CN105045766B (zh) 基于3072点快速傅里叶变换的数据处理方法及处理器
CN101847137B (zh) 一种实现基2fft计算的fft处理器
CN103970720B (zh) 基于大规模粗粒度嵌入式可重构系统及其处理方法
CN103970718A (zh) 一种快速傅里叶变换实现装置及方法
CN101729463A (zh) 一种实现快速傅立叶变换、反变换的硬件装置及方法
CN105224505A (zh) 基于矩阵转置操作的fft加速器装置
CN104699624A (zh) 面向fft并行计算的无冲突存储访问方法
CN102087640B (zh) 傅里叶变换的实现方法和装置
US20170103042A1 (en) System and method for optimizing mixed radix fast fourier transform and inverse fast fourier transform
CN101894096A (zh) 一种适用于cmmb和dvb-h/t的fft运算电路结构
CN103034621B (zh) 基2×k并行fft架构的地址映射方法及系统
CN106933777B (zh) 基于国产申威26010处理器的基2一维fft的高性能实现方法
Sathaye On planar curves
CN107391439A (zh) 一种可配置快速傅里叶变换的处理方法
CN105718424B (zh) 一种并行快速傅立叶变换处理方法
CN104268124A (zh) 一种fft实现装置和方法
CN102637124B (zh) 一种基4fft算法的并行处理装置及方法
CN104050148A (zh) 快速傅里叶变换加速器
Sorokin et al. Conflict-free parallel access scheme for mixed-radix FFT supporting I/O permutations
CN105574269A (zh) 一种专用指令处理器的设计验证方法
CN102497174A (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
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20110608

Assignee: SANECHIPS TECHNOLOGY Co.,Ltd.

Assignor: ZTE Corp.

Contract record no.: 2015440020319

Denomination of invention: Method and device for realizing Fourier transform

Granted publication date: 20130605

License type: Common License

Record date: 20151123

LICC Enforcement, change and cancellation of record of contracts on the licence for exploitation of a patent or utility model
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130605

Termination date: 20211208