CN103605636A - 一种实现fft运算的装置及方法 - Google Patents

一种实现fft运算的装置及方法 Download PDF

Info

Publication number
CN103605636A
CN103605636A CN201310662842.9A CN201310662842A CN103605636A CN 103605636 A CN103605636 A CN 103605636A CN 201310662842 A CN201310662842 A CN 201310662842A CN 103605636 A CN103605636 A CN 103605636A
Authority
CN
China
Prior art keywords
data
butterfly
fifo
storer
computing
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
CN201310662842.9A
Other languages
English (en)
Other versions
CN103605636B (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.)
Institute of Microelectronics of CAS
Original Assignee
Institute of Microelectronics of CAS
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 Institute of Microelectronics of CAS filed Critical Institute of Microelectronics of CAS
Priority to CN201310662842.9A priority Critical patent/CN103605636B/zh
Publication of CN103605636A publication Critical patent/CN103605636A/zh
Application granted granted Critical
Publication of CN103605636B publication Critical patent/CN103605636B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本申请提供了一种实现FFT运算的装置及方法,装置包括:第一FIFO存储器,用于存储待运算偶数点序列;第二FIFO存储器,用于存储待运算奇数点序列;旋转因子存储器,用于存储旋转因子;蝶算单元,用于在同一时钟周期从第一FIFO存储器读取待运算的偶数点数据,从第二FIFO存储器读取待运算的奇数点数据,从旋转因子存储器读取旋转因子,进行蝶形运算,得到第一蝶算结果和第二蝶算结果;第一FIFO缓存,用于存储第一蝶算结果;第二FIFO缓存,用于存储第二蝶算结果;第一数据选择单元,用于基于控制信号确定将第一FIFO缓存和第二FIFO缓存中的两个蝶算结果存储至第一FIFO存储器还是第二FIFO存储器。与现有技术相比,本申请提高了FFT的运算速度。

Description

一种实现FFT运算的装置及方法
技术领域
本发明涉及信号处理技术领域,尤其涉及一种实现FFT运算的装置及方法。
背景技术
离散傅立叶变换(Discrete Fourier Transform,DFT)是数字信号处理与分析的重要手段,是将信号从时域变换到频域并对其分析处理的重要方法。快速傅立叶变换(Fast Fourier Transformation,FFT)是DFT的快速运算方式,也是图像处理、现代无线通信等领域的一项关键技术。
现代无线通信系统WLAN、B3G以及正在热点研究的4G技术中,正交频分多路复用技术OFDM/OFDMA成为必不可少的提高频带利用率的关键技术之一,而FFT为OFDM/OFDMA提供快速运算方式,因此,FFT的运算效率直接制约着通信系统性能。
请参阅图1,为现有技术中通过RAM来实现流水线FFT运算的装置的结构示意图,其实现过程为:分别通过RAM地址生成模块和旋转因子地址发生器来读取相应的参与蝶算的数据及旋转因子,然后将其送入蝶算单元进行运算,并将结果写入双端口RAM。由于双端口RAM不能同一时钟进行读或写两个数据,这导致蝶算单元不能同时读取两个待蝶算数据,并且不能同时写回两个运算结果,需要中间插一个等待时钟以保证流水线的顺利运转。因此,现有技术中通过RAM来实现流水线FFT运算的速度较慢。
发明内容
有鉴于此,本发明提供了一种实现FFT运算的装置及方法,用以解决现有技术中通过RAM实现流水线FFT运算的速度较慢的问题,其技术方案如下:
一方面,一种实现FFT运算的装置,包括:第一FIFO存储器、第二FIFO存储器、蝶算单元、数据选择单元、第一FIFO缓存、第二FIFO缓存、旋转因子存储器和地址发生器,其中:
所述第一FIFO存储器,用于存储待运算偶数点序列;
所述第二FIFO存储器,用于存储待运算奇数点序列;
所述旋转因子存储器,用于存储进行蝶形运算的旋转因子;
所述蝶算单元,用于在同一时钟周期从所述第一FIFO存储器读取待运算的偶数点数据,从所述第二FIFO存储器读取待运算的奇数点数据,通过所述地址发生器从所述旋转因子存储器读取与所述待运算两点数据对应的旋转因子,进行蝶形运算,得到第一蝶算结果和第二蝶算结果,其中,所述待运算的两点数据分别为原始偶数点数据和对应的原始奇数点数据,或者,为上一级蝶算结果中的偶数点数据和对应的奇数点数据;
所述第一FIFO缓存,用于存储第一蝶算结果;
所述第二FIFO缓存,用于存储第二蝶算结果;
所述第一数据选择单元,用于基于控制信号确定将所述第一FIFO缓存和第二FIFO缓存中的两个蝶算结果存储至所述第一FIFO存储器还是所述第二FIFO存储器。
上述装置还包括:
溢出处理单元,用于对所述蝶算单元的蝶算结果进行溢出检测,当所述蝶算结果出现溢出时,记录最大溢出位数,以使所述蝶算单元进行下一级蝶形运算时依据记录的最大溢出位数对读取的待运算数据进行移位处理。
上述装置还包括:
第二选择单元,用于依据所述蝶算单元是否进行蝶形运算,选择是将原始数据还是所述蝶算单元的蝶算结果写入第一FIFO存储器和第二FIFO存储器。
所述第二选择单元,具体用于当所述蝶算单元未进行蝶形运算,原始数据写入单元要把原始数据写入到所述第一FIFO存储器和所述第二FIFO存储器时,将所述原始数据写入单元与所述第一FIFO存储器101和所述第二FIFO存储器接通,当所述蝶算单元进行蝶形运算时,将所述蝶算单元与所述第一FIFO存储器和所述第二FIFO存储器接通。
其中,所述旋转因子为复数,所述旋转因子存储器由两块ROM组成,所述两块ROM分别用于存储旋转因子的实部和虚部,每个ROM大小均为(N/2)*16bit,其中,N为FFT的点数。
其中,所述第一数据选择单元设置有第一输入端口、第二输入端口、第一输出端口和第二输出端口;
所述第一数据选择单元通过所述第一输入端口获取所述第一FIFO缓存的数据,通过所述第二输入端口获取所述第二FIFO缓存的数据;
当所述控制信号为高电平时,所述第一输出端口输出的数据为通过所述第一输入端口获取的数据,所述第二输出端口输出的数据为通过所述第二输入端口获取的数据;当所述控制信号为低电平时,所述第一输出端口输出的数据为通过所述第二输入端口获取的数据,所述第二输出端口输出的数据为通过所述第一输入端口获取的数据;
所述第一输出端口输出的数据写入所述第一FIFO存储器,所述第二输出端口输出的数据写入所述第二FIFO存储器。
另一方面,一种实现FFT运算的方法,包括:
在同一时钟周期从第一FIFO存储器读取待运算的偶数点数据,从第二FIFO存储器读取待运算的奇数点数据,并通过地址发生器从旋转因子存储器读取与待运算两点数据对应的旋转因子;
将所述待运算的两点数据,以及与所述待运算的两点数据对应的旋转因子进行蝶形运算,得到第一蝶算结果和第二蝶算结果,其中,所述待运算的两点数据分别为原始偶数点数据和对应的原始奇数点数据,或者,为上一级蝶算结果中的偶数点数据和对应的奇数点数据;
将所述第一蝶算结果存储至第一FIFO缓存,将所述第二蝶算结果存储至第二FIFO缓存,以使第一数据选择单元依据控制信号确定将两个蝶算结果存储至所述第一FIFO存储器还是所述第二FIFO存储器。
上述方法还包括:
当所述待运算的两点数据为上一级蝶算结果中的偶数点数据和对应的奇数点数据,并且所述待运算的两点数据出现溢出时,获取上一级确定的最大溢出位数,根据所述上一级的最大溢出位数对所述待运算数据进行移位,以保证待运算数据为设定位数的有效数据。
其中,第一数据选择单元依据控制信号确定将两个蝶算结果存储至所述第一FIFO存储器还是所述第二FIFO存储器的过程包括:
当所述控制信号为高电平时,所述第一数据选择单元将所述第一FIFO缓存中的蝶算结果存储至所述第一FIFO存储器,将所述第二FIFO缓存中的蝶算结果存储至所述第二FIFO存储器;
当所述控制信号为低电平时,所述第一数据选择单元将所述第一FIFO缓存的蝶算结果存储至所述第二FIFO存储器,将所述第二FIFO缓存中的蝶算结果存储至所述第一FIFO存储器。
上述技术方案具有如下有益效果:
本发明提供的实现FFT运算的装置及方法,利用FIFO存储器和FIFO缓存可实现在同一时钟周期同时读取两个待运算数据,并同时写回两个运算结果,FIFO存储器读写的简易性,取代了现有技术中繁琐的地址产生及RAM读写控制,提高了FFT运算速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为现有技术中通过RAM实现流水线FFT运算的装置的结构示意图;
图2为蝶形运算示意图;
图3为八点FFT运算的示意图;
图4为本发明实施例提供的实现FFT运算的装置的结构示意图;
图5为本发明实施例提供的八点FFT的FIFO数据存取控制流程示意图;
图6为本发明实施例提供的八点FFT的FIFO存取时序图;
图7为本发明实施例提供的实现FFT运算的方法的流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
离散傅立叶变换DFT是建立以时间为自变量的“信号”与以频率自变量的“频谱函数”之间的某种变换关系,通过DFT可以分析出信号及信道传输特性,进而采取有效措施提高信号传输质量。DFT变换原理如式(1)所示:
X ( k ) = Σ n = 0 N - 1 x ( n ) W N kn , k , n = 0,1,2 , . . . . . . , N - 1 - - - ( 1 )
其中,旋转因子为
Figure BDA0000433362620000052
从式(1)中可以看出,完成N点的FFT,需要N平方次复数加法,N*(N-1)次复数乘法,4*N*(N-1)次实数乘法。
按时间抽取的基-2FFT是DFT的快速运算方式,其基本原理如式(2)所示:
X ( k ) = Σ r = 0 ( N / 2 ) - 1 x 1 ( r ) W N / 2 rk + W N k Σ r = 0 ( N / 2 ) - 1 x 2 ( r ) W N / 2 rk x 1 ( r ) = x ( 2 r ) x 2 ( r ) = x ( 2 r + 1 ) k , n = 0,1,2 , . . . . . . , N - 1 - - - ( 2 )
从式(2)可以发现,N点DFT可以等价转换成基数点和偶数点的两组序列的DFT,这样通过次迭代运算,最终将N点DFT转换成N/2个如图2所示的蝶形运算,这样可以将N点DFT运算量降到
Figure BDA0000433362620000055
次复数加法,
Figure BDA0000433362620000056
次复数乘法。图3示出了八点FFT运算的示意图。
有鉴于此,针对基-2FFT,本发明实施例提供了一种实现FFT运算的装置,请参阅图4,为本实施例提供的一种实现FFT运算的装置的结构示意图,该装置可以包括:第一FIFO存储器101、第二FIFO存储器102、旋转因子存储器103、地址发生器104、蝶算单元105、第一FIFO缓存106、第二FIFO缓存107和数据选择单元108。其中:
第一FIFO存储器101,用于存储待运算偶数点序列。
第二FIFO存储器102,用于存储待运算奇数点序列。
旋转因子存储器103,用于存储进行蝶形运算的旋转因子。其中,旋转因子可应用MATLAB自动生成,旋转因子的表达式为:
WN K=A*COS(2*pi*K/N)+J*A*SIN(2*pi*K/N)      (3)
其中,N为FFT运算的点数,K的取值范围为0到(N-1),J为虚数单位。
蝶算单元105,用于从第一FIFO存储器101读取待运算的偶数点数据,从第二FIFO存储器102读取待运算的奇数点数据,通过地址发生器104从旋转因子存储器103读取与待运算两点数据对应的旋转因子,进行蝶形运算,得到第一蝶算结果和第二蝶算结果。其中,待运算的两点数据分别为原始偶数点数据和对应的原始奇数点数据,或者,为上一级蝶算结果中的偶数点数据和对应的奇数点数据。
第一FIFO缓存106,用于存储第一蝶算结果。
第二FIFO缓存107,用于存储第二蝶算结果。
第一数据选择单元108,用于基于控制信号确定将第一FIFO缓存106和第二FIFO缓存107中的两个蝶算结果存储至第一FIFO存储器101还是第二FIFO存储器102。
在上述实施例的基础上,对实现FFT运算的装置的各个单元进行进一步说明。其中:
对于第一FIFO存储器101和第二FIFO存储器102,其存储的待运算数据可以为原始数据,也可为上一级蝶形运算的结果,该结果用于进行下一级蝶形运算。第一FIFO存储器101和第二FIFO存储器102除了存储待运算数据外,还用于存储最终的FFT运算结果。
对于旋转因子存储器103,由于旋转因子为复数形式,因此,在上述实施例中,旋转因子存储器103可使用两块ROM分别保存实部和虚部,每个ROM大小均为(N/2)*16bit。ROM读操作需要两个时钟周期,所以完成流水线工作过程需要提前两个周期读取ROM中的旋转因子。
对于地址发生器104,用于从旋转因子存储器读取与待运算两点数据对应的旋转因子,其通过下式读取旋转因子的地址:
Address(0)=0
Address(M)=((Address(M-1)+(N/2K)))%(N/2)
其中,M=1,2….N-1,K为FFT当前运算级数,取值范围为1到log2N;N为FFT点数,%(N/2)表示对前面结果进行模N/2运算。
对于蝶算单元105,其包括一个复数乘法、一个复数加法和一个复数减法运算。如果输入偶数点数据为A,奇数点数据为B,旋转因子为W,那么输出为A+BW和A-BW。在本实施例中,蝶算单元105由四个16位乘法器、加法器和减法器组成,乘法器采用8级流水线设计。流水线设计在大量数据进行乘法运算的情况下具有较高的运算效率,即在一个时钟周期内就可以得到一次乘法运算的结果。流水线前期需要等待8个时钟周期的处理时间,若运算数量相对较少的情况下运算效率较低,而FFT运算数据量很大,采用流水线设计的乘法器可以提高整体处理效率。加法器和减法器处理效率较高,在一个时钟周期即可完成一次运算。蝶算单元105得到的蝶算结果缓存在第一FIFO缓存106和第二FIFO缓存107中。
对于第一FIFO缓存106和第二FIFO缓存107,其用于缓存蝶算单元105的蝶算结果,本级的蝶算结果用于进行下一级蝶形运算。第一FIFO缓存106和第二FIFO缓存107均采用FIFO结构,FIFO结构简单且读写控制相对容易。数据写入FIFO缓存后经过两个时钟周期后才可以读取,所以在整个流水线过程中需要插入两个等待周期。
对于第一数据选择单元108,其用于对第一FIFO缓存106和第二FIFO缓存107中的蝶算结果进行顺序调整,然后将调整顺序后的蝶算结果写入第一FIFO存储器101或第二FIFO存储器102。需要说明的是,蝶算单元105进行蝶形运算得到的蝶算结果必须存储至同一个FIFO存储器中。
具体的,第一数据选择单元108设置有第一输入端口、第二输入端口、第一输出端口和第二输出端口。第一数据选择单元108通过第一输入端口获取第一FIFO缓存的数据,通过第二输入端口获取第二FIFO缓存的数据。当控制信号为高电平时,第一输出端口输出的数据为通过第一输入端口获取的数据,第二输出端口输出的数据为通过第二输入端口获取的数据;当控制信号为低电平时,第一输出端口输出的数据为通过第二输入端口获取的数据,第二输出端口输出的数据为通过第一输入端口获取的数据。第一输出端口输出的数据输入第一FIFO存储器101,第二输出端口输出的数据输入第二FIFO存储器102。
上述实施例提供的实现FFT运算的装置还可以包括:第二数据选择单元109和溢出处理单元110。
其中,第二数据选择单元109,用于依据蝶算单元是否进行蝶形运算,选择是将原始数据还是蝶算单元105的蝶算结果写入第一FIFO存储器和第二FIFO存储器。
当蝶算单元105未进行蝶形运算,原始数据写入单元要把原始数据写入到第一FIFO存储器101和第二FIFO存储器102时,第二数据选择单元109将原始数据写入单元与第一FIFO存储器101和第二FIFO存储器102接通,当蝶算单元105进行蝶形运算时,第二数据选择单元109将蝶算单元105与第一FIFO存储器101和第二FIFO存储器102接通。
溢出处理单元110,用于对蝶算单元105的蝶算结果进行溢出检测,当蝶算结果出现溢出时,记录最大溢出位数,以使蝶算单元105进行下一级蝶形运算时依据记录的最大溢出位数对读取的待运算数据进行移位处理。
为了解决好数据的动态范围,本实施例采用块浮点的数据存取方式,其介于浮点和定点之间,该方法将N点数据共享同一个指数,这个指数为N点数据中绝对值最大的数的指数,这样在对数据进行加法、乘法时只需对尾数进行相应的加、乘运算,可以保证数据动态范围的前提下,获得与定点运算一样的速度,但是容易在进行尾数定点加法时产生了数据溢出问题。本实施例通过溢出处理单元110进行溢出检测来解决该问题。由于A+B*W、A-B*W复数运算中最多两次加法,也即最多两次进位,因此将输入的16位数据按照符号位扩展成18位,然后进行乘加运算。对蝶算结果的高三位进行溢出检测,由此来决定如何从18位中取16位有效数据,同时根据同级运算溢出的最大位数来相应增加各级指数。该溢出检测方案如下:
蝶算结果的高三位为000或111时无溢出,高三位为001或110时溢出一位,高三位为01x或10x时溢出两位。当蝶算结果出现溢出时,溢出处理单元110会记录每一级的最大溢出位数,本级的运算结果用于进行下一级运算,在读取下一级的待运算数据时,根据上一级的最大溢出位数对读取出的待运算数据进行移位处理,保证每一级的待运算数据均为16位有效数据。溢出处理单元110还对每一级的最大溢出位数进行求和得到整个FFT运算的溢出位数,当FFT运算结束后对计算结果进行统一处理。
本实施例提供的实现FFT运算的装置包括两个第二数据选择单元和两个溢出处理单元。
在上述本发明实施例的基础上现列举一具体实例进行说明。
以八点FFT运算为例:假设待运算原始偶序列为A3、A2、A1和A0,待运算原始奇序列为B3、B2、B1和B0,从图3可以看出,八点FFT运算总共为三级。请参阅图5,为本实施例提供的八点FFT的FIFO数据存取控制流程示意图,请参阅图6,为本实施例提供的八点FFT的FIFO存取时序图,结合图5和图6给出通过上述装置实现八点FFT运算的过程:
在进行第一级运算时,先将A0、A1、A2和A3存储至第一FIFO存储器,将B0、B1、B2和B3存储至第二FIFO存储器。
从图6可以看出,蝶算单元在同一个时钟上升沿从第一FIFO存储器读取原始待运算偶点数据A0,从第二FIFO存储器读取原始待运算奇点数据B0,从旋转因子存储器读取对应的旋转因子W0,进行蝶形运算,经过8个时钟周期的运算,将蝶算结果A0+B0*W0写入第一FIFO缓存的+R0处,蝶算结果A0-B0*W0写入第二FIFO缓存的-R0处。从图4可以看出,蝶算单元在以后的每个时钟周期都会出一组蝶算结果,蝶算结果A1+B1*W1写入第一FIFO缓存的+R1处,蝶算结果A1-B1*W1写入第二FIFO缓存的-R1处,蝶算结果A2+B2*W2写入第一FIFO缓存的+R2处,蝶算结果A2-B2*W2写入第二FIFO缓存的-R2处,蝶算结果A3+B3*W3写入第一FIFO缓存的+R3处,蝶算结果A3-B3*W3写入第二FIFO缓存的-R3处。
从图4中可以看出,在第三组数据运算完毕的同时,将+R0处的蝶算结果写回第一FIFO存储器,用来进行下一级的蝶算。在第四组数据运算完毕的同时,将+R1处的蝶算结果写回第二FIFO存储器,将-R0处的蝶算结果写回到第一FIFO存储器。接着,将+R2处的蝶算结果写回第一FIFO存储器,同时将-R1处的蝶算结果写回第二FIFO存储器;将+R3处的蝶算结果写回第二FIFO存储器,同时将-R2处的蝶算结果写回第一FIFO存储器;将-R3处的蝶算结果写回第二FIFO存储器。写回第一FIFO存储器和第二FIFO存储器中的蝶算结果用于进行第二级蝶算,采用上述方式进行第二级蝶算,将第二级蝶算的结果经第一FIFO缓存和第二FIFO缓存、并经数据选择单元调整顺序后写回第一FIFO存储器和第二FIFO存储器,以进行第三级蝶算,第三级蝶算完毕后,第三级蝶算的结果最终写回第一FIFO存储器和第二FIFO存储器,至此,八点FFT运算完毕,第三级蝶算的结果即为八点FFT的运算结果。
需要说明的是,由于第一FIFO缓存+R0处的数据、第二FIFO缓存-R0处的数据要写入同一个FIFO存储器,因此,-R0处的数据需等待一个时钟周期。当图6中的D0为+R0时,控制信号EN为高电平,因此,输出OUT0为D0,即,将+R0处的数据写入第一FIFO存储器,在下一个时钟周期,D0为+R1,D1为-R0,控制信号为低电平,因此,输出OUT0为D1,输出OUT1为D0,即将-R0处的数据写入第一FIFO存储器,+R1处的数据写入第二FIFO存储器。第一FIFO缓存和第二FIFO缓存中的其它数据采用上述方式写入。
本发明实施例提供的实现FFT运算的装置,利用FIFO存储器和FIFO缓存可实现在同一时钟周期同时读取两个待运算数据,并同时写回两个运算结果,FIFO存储器读写的简易性,取代了现有技术中繁琐的地址产生及RAM读写控制,提高了FFT运算速度。
本发明实施例还提供了一种实现FFT运算的方法,图7示出了该方法的流程示意图,该方法可以包括:
步骤S101:在同一个时钟周期从第一FIFO存储器读取待运算的偶数点数据,从第二FIFO存储器读取待运算的奇数点数据,并通过地址发生器从旋转因子存储器读取与待运算两点数据对应的旋转因子。
步骤S102:将待运算的两点数据,以及与待运算的两点数据对应的旋转因子进行蝶形运算,得到第一蝶算结果和第二蝶算结果,其中,待运算的两点数据分别为原始偶数点数据和对应的原始奇数点数据,或者,为上一级蝶算结果中的偶数点数据和对应的奇数点数据。
步骤S103:将第一蝶算结果存储至第一FIFO缓存,将第二蝶算结果存储至第二FIFO缓存,以使第一数据选择单元依据控制信号确定将两个蝶算结果存储至第一FIFO存储器还是第二FIFO存储器。
其中,第一数据选择单元依据控制信号确定将两个蝶算结果存储至第一FIFO存储器还是第二FIFO存储器的过程可以包括:当制信号为高电平时,第一数据选择单元将第一FIFO缓存的数据存储至第一FIFO存储器,将第二FIFO缓存的数据存储至第二FIFO存储器;当控制信号为低电平时,第一数据选择单元将第一FIFO缓存的数据存储至第二FIFO存储器,将第二FIFO缓存的数据存储至第一FIFO存储器。
在本发明实施例中,上述方法还可以包括:当待运算的两点数据为上一级蝶算结果中的偶数点数据和对应的奇数点数据,并且待运算的两点数据出现溢出时,获取上一级确定出的最大溢出位数,根据上一级的最大溢出位数对待运算数据进行移位,以保证待运算数据为设定位数的有效数据。
本发明实施例提供的实现FFT运算的方法,利用FIFO存储器和FIFO缓存可实现在同一时钟周期同时读取两个待运算数据,并同时写回两个运算结果,FIFO存储器读写的简易性,取代了现有技术中繁琐的地址产生及RAM读写控制,提高了FFT运算速度。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (9)

1.一种实现FFT运算的装置,其特征在于,包括:第一FIFO存储器、第二FIFO存储器、蝶算单元、数据选择单元、第一FIFO缓存、第二FIFO缓存、旋转因子存储器和地址发生器,其中:
所述第一FIFO存储器,用于存储待运算偶数点序列;
所述第二FIFO存储器,用于存储待运算奇数点序列;
所述旋转因子存储器,用于存储进行蝶形运算的旋转因子;
所述蝶算单元,用于在同一时钟周期从所述第一FIFO存储器读取待运算的偶数点数据,从所述第二FIFO存储器读取待运算的奇数点数据,通过所述地址发生器从所述旋转因子存储器读取与所述待运算两点数据对应的旋转因子,进行蝶形运算,得到第一蝶算结果和第二蝶算结果,其中,所述待运算的两点数据分别为原始偶数点数据和对应的原始奇数点数据,或者,为上一级蝶算结果中的偶数点数据和对应的奇数点数据;
所述第一FIFO缓存,用于存储第一蝶算结果;
所述第二FIFO缓存,用于存储第二蝶算结果;
所述第一数据选择单元,用于基于控制信号确定将所述第一FIFO缓存和第二FIFO缓存中的两个蝶算结果存储至所述第一FIFO存储器还是所述第二FIFO存储器。
2.根据权利要求1所述的实现FFT运算的装置,其特征在于,还包括:
溢出处理单元,用于对所述蝶算单元的蝶算结果进行溢出检测,当所述蝶算结果出现溢出时,记录最大溢出位数,以使所述蝶算单元进行下一级蝶形运算时依据记录的最大溢出位数对读取的待运算数据进行移位处理。
3.根据权利要求1所述的实现FFT运算的装置,其特征在于,还包括:
第二选择单元,用于依据所述蝶算单元是否进行蝶形运算,选择是将原始数据还是所述蝶算单元的蝶算结果写入第一FIFO存储器和第二FIFO存储器。
4.根据权利要求3所述的实现FFT运算的装置,其特征在于,
所述第二选择单元,具体用于当所述蝶算单元未进行蝶形运算,原始数据写入单元要把原始数据写入到所述第一FIFO存储器和所述第二FIFO存储器时,将所述原始数据写入单元与所述第一FIFO存储器和所述第二FIFO存储器接通,当所述蝶算单元进行蝶形运算时,将所述蝶算单元与所述第一FIFO存储器和所述第二FIFO存储器接通。
5.根据权利要求1所述的实现FFT运算的装置,其特征在于,所述旋转因子为复数,所述旋转因子存储器由两块ROM组成,所述两块ROM分别用于存储旋转因子的实部和虚部,每个ROM大小均为(N/2)*16bit,其中,N为FFT的点数。
6.根据权利要求1所述的实现FFT运算的装置,其特征在于,所述第一数据选择单元设置有第一输入端口、第二输入端口、第一输出端口和第二输出端口;
所述第一数据选择单元通过所述第一输入端口获取所述第一FIFO缓存的数据,通过所述第二输入端口获取所述第二FIFO缓存的数据;
当所述控制信号为高电平时,所述第一输出端口输出的数据为通过所述第一输入端口获取的数据,所述第二输出端口输出的数据为通过所述第二输入端口获取的数据;当所述控制信号为低电平时,所述第一输出端口输出的数据为通过所述第二输入端口获取的数据,所述第二输出端口输出的数据为通过所述第一输入端口获取的数据;
所述第一输出端口输出的数据写入所述第一FIFO存储器,所述第二输出端口输出的数据写入所述第二FIFO存储器。
7.一种实现FFT运算的方法,其特征在于,包括:
在同一时钟周期从第一FIFO存储器读取待运算的偶数点数据,从第二FIFO存储器读取待运算的奇数点数据,并通过地址发生器从旋转因子存储器读取与待运算两点数据对应的旋转因子;
将所述待运算的两点数据,以及与所述待运算的两点数据对应的旋转因子进行蝶形运算,得到第一蝶算结果和第二蝶算结果,其中,所述待运算的两点数据分别为原始偶数点数据和对应的原始奇数点数据,或者,为上一级蝶算结果中的偶数点数据和对应的奇数点数据;
将所述第一蝶算结果存储至第一FIFO缓存,将所述第二蝶算结果存储至第二FIFO缓存,以使第一数据选择单元依据控制信号确定将两个蝶算结果存储至所述第一FIFO存储器还是所述第二FIFO存储器。
8.根据权利要求7所述的实现FFT运算的方法,其特征在于,还包括:
当所述待运算的两点数据为上一级蝶算结果中的偶数点数据和对应的奇数点数据,并且所述待运算的两点数据出现溢出时,获取上一级确定的最大溢出位数,根据所述上一级的最大溢出位数对所述待运算数据进行移位,以保证待运算数据为设定位数的有效数据。
9.根据权利要求7所述的实现FFT运算的方法,其特征在于,第一数据选择单元依据控制信号确定将两个蝶算结果存储至所述第一FIFO存储器还是所述第二FIFO存储器的过程包括:
当所述控制信号为高电平时,所述第一数据选择单元将所述第一FIFO缓存中的蝶算结果存储至所述第一FIFO存储器,将所述第二FIFO缓存中的蝶算结果存储至所述第二FIFO存储器;
当所述控制信号为低电平时,所述第一数据选择单元将所述第一FIFO缓存的蝶算结果存储至所述第二FIFO存储器,将所述第二FIFO缓存中的蝶算结果存储至所述第一FIFO存储器。
CN201310662842.9A 2013-12-09 2013-12-09 一种实现fft运算的装置及方法 Active CN103605636B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310662842.9A CN103605636B (zh) 2013-12-09 2013-12-09 一种实现fft运算的装置及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310662842.9A CN103605636B (zh) 2013-12-09 2013-12-09 一种实现fft运算的装置及方法

Publications (2)

Publication Number Publication Date
CN103605636A true CN103605636A (zh) 2014-02-26
CN103605636B CN103605636B (zh) 2016-09-14

Family

ID=50123865

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310662842.9A Active CN103605636B (zh) 2013-12-09 2013-12-09 一种实现fft运算的装置及方法

Country Status (1)

Country Link
CN (1) CN103605636B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106415526A (zh) * 2016-08-10 2017-02-15 深圳市汇顶科技股份有限公司 Fft处理器及运算方法
CN107291657A (zh) * 2016-04-05 2017-10-24 中国科学院微电子研究所 一种信号处理的方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080256159A1 (en) * 2005-06-30 2008-10-16 Nokia Corporation Multi-Stream Fft for Mimo-Ofdm Systems
CN102129419A (zh) * 2011-03-04 2011-07-20 中山大学 基于快速傅立叶变换的处理器
CN102339274A (zh) * 2011-10-24 2012-02-01 中国科学院微电子研究所 一种快速傅里叶变换处理器
CN103226543A (zh) * 2013-04-26 2013-07-31 中国科学院微电子研究所 一种流水线结构的fft处理器

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080256159A1 (en) * 2005-06-30 2008-10-16 Nokia Corporation Multi-Stream Fft for Mimo-Ofdm Systems
CN102129419A (zh) * 2011-03-04 2011-07-20 中山大学 基于快速傅立叶变换的处理器
CN102339274A (zh) * 2011-10-24 2012-02-01 中国科学院微电子研究所 一种快速傅里叶变换处理器
CN103226543A (zh) * 2013-04-26 2013-07-31 中国科学院微电子研究所 一种流水线结构的fft处理器

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
TING ZHANG等: "A Novel Method Storage Architecture of Pipeline FFT Processor", 《ASIC(ASICON),2011 IEEE 9TH INTERNATIONAL CONFERENCE ON ASIC ON ASIC》, 28 October 2011 (2011-10-28), pages 6 - 8, XP032120342, DOI: doi:10.1109/ASICON.2011.6157108 *
桑红石 等: "高校可配置浮点FFT处理器设计", 《微电子学与计算机》, vol. 29, no. 4, 15 April 2012 (2012-04-15), pages 36 - 40 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107291657A (zh) * 2016-04-05 2017-10-24 中国科学院微电子研究所 一种信号处理的方法及系统
CN106415526A (zh) * 2016-08-10 2017-02-15 深圳市汇顶科技股份有限公司 Fft处理器及运算方法
CN106415526B (zh) * 2016-08-10 2019-05-24 深圳市汇顶科技股份有限公司 Fft处理器及运算方法

Also Published As

Publication number Publication date
CN103605636B (zh) 2016-09-14

Similar Documents

Publication Publication Date Title
CN103970718A (zh) 一种快速傅里叶变换实现装置及方法
CN101504637B (zh) 一种点数可变实时fft处理芯片
CN105117196B (zh) 一种基于FPGA的并行结构Sinc插值方法
CN103870438B (zh) 一种利用数论变换计算循环卷积的电路结构
CN101231632A (zh) 应用fpga进行浮点fft处理的方法
CN110659445B (zh) 一种运算装置及其处理方法
CN104349260B (zh) 低功耗wola滤波器组及其综合阶段电路
CN109783766A (zh) 一种基2算法的快速傅里叶变换硬件设计方法
CN103412851A (zh) 一种高精度低功耗的fft处理器
Revanna et al. A scalable FFT processor architecture for OFDM based communication systems
CN103605636A (zh) 一种实现fft运算的装置及方法
CN103901405A (zh) 实时块浮点频域四路脉冲压缩器及其脉冲压缩方法
EP2778948A2 (en) FFT Accelerator
CN104679670A (zh) 一种面向fft和fir的共享数据缓存结构及管理方法
CN103176949B (zh) 实现fft/ifft变换的电路及方法
US9268744B2 (en) Parallel bit reversal devices and methods
CN102541813B (zh) 一种多粒度并行fft蝶形计算的方法及相应的装置
CN102957993B (zh) 低功耗wola滤波器组及其分析阶段电路
CN103262067B (zh) 一种数据处理方法、数据处理装置和通信系统
CN101833540B (zh) 信号处理方法和装置
CN105975436A (zh) 一种SoC系统中通用可配置加速单元的IP电路
CN104901765A (zh) 一种基于fpga的数据解调方法及系统
CN103488612B (zh) 一种应用于数字滤波的沃什-新梅森数快速变换方法
CN111580867B (zh) 一种用于fft运算的块浮点处理方法及装置
CN103902506A (zh) 一种基于龙芯3b的fftw3优化方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant