CN101763338A - 一种点数可变的混合基fft/ifft实现装置及其方法 - Google Patents
一种点数可变的混合基fft/ifft实现装置及其方法 Download PDFInfo
- Publication number
- CN101763338A CN101763338A CN201010039602A CN201010039602A CN101763338A CN 101763338 A CN101763338 A CN 101763338A CN 201010039602 A CN201010039602 A CN 201010039602A CN 201010039602 A CN201010039602 A CN 201010039602A CN 101763338 A CN101763338 A CN 101763338A
- Authority
- CN
- China
- Prior art keywords
- data
- module
- memory module
- fft
- ifft
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 30
- 238000006243 chemical reaction Methods 0.000 claims abstract description 27
- 230000008569 process Effects 0.000 claims abstract description 12
- 238000007667 floating Methods 0.000 claims description 45
- 238000001514 detection method Methods 0.000 claims description 26
- 238000006073 displacement reaction Methods 0.000 claims description 15
- 238000012545 processing Methods 0.000 claims description 11
- 230000008676 import Effects 0.000 claims description 10
- 238000013501 data transformation Methods 0.000 claims description 6
- 238000004364 calculation method Methods 0.000 abstract 1
- 230000009977 dual effect Effects 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 3
- 238000001914 filtration Methods 0.000 description 2
- 238000010183 spectrum analysis Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000007795 chemical reaction product Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Images
Landscapes
- Complex Calculations (AREA)
Abstract
本发明公开了一种点数可变的混合基FFT/IFFT实现装置及其方法。本发明为FFT和IFFT两用***,实现了点数可配;在变换过程中使用两块RAM,一块只存储输入数据,在每一次运算完成其第一级蝶形运算时,该RAM可以用来接受下次运算的数据,在完成连续多次运算时,节省了时间;另外使用了基4和基2相结合的方法实现2的L次幂(L为大于或等于3的正整数)点数的FFT和IFFT运算,在蝶形运算时,使用块浮点运算,解决了蝶形运算过程中乘法和加法造成的数据位宽扩大,节省了存储空间,同时对该结果做原址存储操作,实现近似的级间流水。该方法和装置具有控制简单,实现高效,配置灵活,可扩展性良好等特点。
Description
技术领域
本发明涉及一种点数可变的混合基FFT/IFFT实现装置及其方法。
背景技术
离散傅里叶变换(DFT)是数字信号处理领域最为基本也是最为常用的运算,我们可以利用DFT对信号做数字谱分析或者实现数字滤波,此外,在各种数字***的设计和实现中也都会用到DFT。然而,在DFT运算提出初期,并没有一种很优的算法随之提出,因此,完成N点数据DFT的计算复杂度为O(N2);直到1965年,Cooley和Tukey在《Mathematics of Computation》上发表了“Analgorithm for the machine computation of complex Fourier series”一文,标志着快速傅里叶变换(FFT)算法的正式诞生。
FFT算法的提出被视为数字信号处理发展史上一个重要的里程碑,它将DFT的计算复杂度由O(N2)降到了O(Nlog2N),解决了数字信号处理实现和应用的瓶颈,具有很强的理论和工程意义。在目前数字信号处理的各个应用领域中,FFT算法仍然起着举足轻重的作用:例如,FFT算法作为时域和频域转换的基本算法,是我们进行数字谱分析的必备前提,在数字通信、语音信号分析、图像处理、雷达以及生物医学工程等方面都有着极其广泛的应用;又如,在数字语音编码、数字滤波、射电干涉阵等情况下,都需要使用专用的FFT设备来处理这种实时快速的运算;特别是,近年来由于现场可编程门阵列(FPGA)的飞速发展,使得FPGA非常适合用来实现FFT算法,如FPGA厂商Altera和Xlinx都开发了相应的FFT IP核,且价格非常昂贵,无法广泛应用,因此在实际工程应用中,开发一个基于FGPA的FFT实现方法显得尤为重要。
目前,已有的各种各样的DFT计算快速算法大致可以分为两类:一类是将DFT转变为卷积,利用计算卷积的方法计算,其代表是Winograd算法和素因子算法;另一类是递归型算法,是将一维DFT转化为容易计算的二维或者多维DFT,且这个过程可以重复,具有代表性的算法有Cooley-Tukey算法、Rader-Brenner算法和***基算法。上述两类算法相比较而言,前者在运算量上占优,乘法器的使用比后者少,但是控制逻辑较复杂,控制单元实现起来相对较为麻烦。
发明内容
本发明的目的是克服现有技术的不足,提供一种点数可变的混合基FFT/IFFT实现装置及其方法。
点数可变的混合基FFT/IFFT实现装置包括模块:输入数据变换模块、存储模块A、数据选择器、蝶形运算模块、溢出检测模块、存储模块B、移位模块、输出数据变换模块以及控制模块,输入数据变换模块与存储模块A、数据选择器、蝶形运算模块、溢出检测模块、存储模块B、移位模块依次连接,存储模块B与输出数据变换模块相连,移位模块与数据选择器相连;在控制模块控制下,将串行输入数据变换后存储到存储模块A,然后控制模块控制存储模块A中所有数据完成第一级蝶形运算,结果完成溢出检测,同时也存入存储模块B;当存储模块A中所有数据均完成了第一级蝶形运算后,控制模块向外给出存储模块A空闲可用的标志信号,预示着下一次运算数据可以输入,同时控制模块控制移位模块、存储模块B、蝶形运算模块以及溢出检测模块完成接下来的所有蝶形运算;当所有蝶形运算全部完成之后,控制模块控制存储模块B、输出数据变换模块,将存储模块B中的数据串行读出经过移位、实部虚部变换后输出最终的块浮点运算结果,当存储模块B中数据全部输出后,输出数据变换模块向控制模块给出存储模块B空闲可用标志信号,新一次FFT/IFFT运算开始进行。
所述的蝶形运算模块包括相连接的旋转因子存储模块、乘法器模块和加法器模块。
点数可变的混合基FFT/IFFT实现方法包括如下步骤:
1)根据本次运算为FFT或者IFFT,在控制模块的控制下,将串行输入数据处理后按照分块倒叙方式存入存储模块A;
2)处理后串行输入数据全部写入存储模块A后,控制模块控制存储模块A、蝶形运算模块、和溢出检测判断模块,从存储模块A中读取四个数据完成一次基-4蝶形运算;对蝶形运算结果数据做溢出检测判断后,按原址存储到存储模块B中,当存储模块A中的所有数据均完成第一级蝶形运算,控制模块向外给出信号,下一次FFT或者IFFT运算的数据流进入存储模块A;
3)将FFT或者IFFT运算的点数记为N,且N=2L,L为大于或等于3的正整数:若L为偶数,则蝶形运算级数为L/2;若L为奇数,则蝶形运算级数为(L+1)/2,在控制模块的控制下,L为偶数情况下的第二级到第L/2级或者L为奇数情况下的第二级到第(L-1)/2级的每一次蝶形运算均从存储模块B中读取四个数据,经过移位模块移位之后完成一次基-4蝶形运算,结果经过溢出检测判断后按原址存入存储模块B;当L为奇数时,第(L+1)/2级蝶形运算按照每次从存储模块B中读取两个数据,在控制模块下进行基-2蝶形运算,结果经过溢出检测判断后按原址存入存储模块B中;
4)在所有蝶形运算完成之后,跟据本次运算为FFT或者IFFT,将存储模块B中的数据做相应处理后串行输出,得到输入数据的FFT或者IFFT块浮点运算结果,将该结果与最后输出的块浮点指数组合为实际FFT或者IFFT结果。
所述的根据本次运算为FFT或者IFFT,在控制模块的控制下,将串行输入数据处理后按照分块倒叙方式存入存储模块A的步骤包括:
1)FFT/IFFT变换的输入数据为复数,点数为N,N=2L,L为大于或等于3
的正整数,若输入数据要求进行FFT运算,则输入复数数据不需做处理;若输入数据要求进行IFFT运算,则输入复数数据实部不变,虚部取反;
2)存储模块A包括四个大小相同的子存储模块,分别为A1、A2、A3、A4,每个子存储模块的大小为2×b×N/4比特,b为输入复数的实部或者虚部的位宽比特数,串行输入的N点处理后数据为x(n),其中n=0,1,2,......,N-1,将x(0)~x(N/4-1)、x(N/4)~x(2N/4-1)、x(2N/4)~x(3N/4-1)和x(3N/4)~x(N-1)分别按照倒叙存入A1、A2、A3、A4中;
3)当输入数据点数达到N时,控制模块给出FFT/IFFT运算启动信号。
所述的处理后串行输入数据全部写入存储模块A后,控制模块控制存储模块A、蝶形运算模块和溢出检测判断模块,从存储模块A中读取四个数据完成一次基-4蝶形运算;对蝶形运算结果数据做溢出检测判断后,按原址存储到存储模块B中,当存储模块A中的所有数据均完成第一级蝶形运算,控制模块向外给出信号,下一次FFT或者IFFT运算的数据流可以进入存储模块A的步骤包括:
1)从子存储模块A1、A2、A3、A4中分别读出一个数据,经过三次复数乘法和八次复数加法,完成一次基-4蝶形运算;
2)对每次蝶形运算的结果做溢出检测判断,记下该运算结果中最大值的溢出比特数;
3)存储模块B也由四个子存储模块组成,分别为子存储模块B1、B2、B3、B4,每次蝶形运算结束将四个数据写入子存储模块B1、B2、B3、B4,写地址等于子存储模块A1、A2、A3、A4的读地址;
4)重复上述三个步骤,直至存储模块A中所有数据完成蝶形运算,此时最大的溢出比特数即为该级蝶形运算结果最终的溢出比特数;
5)当存储模块A中所有数据完成第一级蝶形运算后,控制模块向外给出标志信号,表明下一次FFT/IFFT的数据流串行进入存储模块A等待。
所述的将FFT或者IFFT运算的点数记为N,且N=2L,L为大于或等于3的正整数:若L为偶数,则蝶形运算级数为L/2;若L为奇数,则蝶形运算级数为(L+1)/2。在控制模块的控制下,L为偶数情况下的第二级到第L/2级或者L为奇数情况下的第二级到第(L-1)/2级的每一次蝶形运算均从存储模块B中读取四个数据,经过移位模块移位之后完成一次基-4蝶形运算,结果经过溢出检测判断后按原址存入存储模块B;当L为奇数时,第(L+1)/2级蝶形运算按照每次从存储模块B中读取两个数据,在控制模块下进行基-2蝶形运算,结果经过溢出检测判断后按原址存入存储模块B中的步骤包括:
1)L为偶数情况下的第二级到第L/2级或者L为奇数情况下的第二级到第(L-1)/2级蝶形运算,在控制模块的控制下,每次分别从子存储模块B1、B2、B3、B4中各读取一个数据,数据移位模块按照前一级蝶形运算后溢出检测判断结果进行移位,移位结果完成一次基-4蝶形运算,结果经过溢出检测判断同时按照原址写入子存储模块B1、B2、B3、B4;
2)当L为奇数时,第(L+1)/2级蝶形运算为基-2蝶形运算,在控制模块的控制下,首先从子存储模块B1和B3中分别读出一个数据,移位之后完成一次基-2蝶形运算,结果经溢出检测判断后按原址存入子存储模块B1和B3,如此循环直至子存储模块B 1、B3中所有数据均完成蝶形运算;之后,将子存储模块B2和B4组合,完成与子存储模块B1和B3相同的操作;
3)此时,我们就顺利完成了N点数据FFT/IFFT运算的所有蝶形运算,结果存储在子存储模块B 1、B2、B3、B4中。
所述的在所有蝶形运算完成之后,跟据本次运算为FFT或者IFFT,将存储模块B中的数据做相应处理后串行输出,得到输入数据的FFT或者IFFT块浮点运算结果,将该结果与最后输出的块浮点指数组合为实际FFT或者IFFT结果的步骤包括:
1)在控制模块控制下,将数据从子存储模块B1、B2、B3、B4中按照一定的顺序串行输出,并根据本次运算为FFT或者IFFT作如下处理:若为FFT,则实部和虚部均不变;若为IFFT,则实部不变,虚部取反;
2)完成实部和虚部转换后,按照最后一级蝶形运算的溢出检测判断结果,将串行输出数据做相应移位后即可输出,输出的结果即为输入N点复数数据的FFT/IFFT块浮点运算结果,当N点数据全部输出后,向控制模块给出标志信号,表明存储模块B可用,可以进行新一次的FFT/IFFT运算;
3)实际的FFT/IFFT结果为:X(k)=X′(k)*2-exp(k=0,1,…N-1,N为输入数据点数),其中X(k)为实际FFT/IFFT结果,X′(k)为FFT/IFFT块浮点运算结果,exp为块浮点指数。
所述的实际的FFT/IFFT结果为:X(k)=X′(k)*2-exp,k=0,1,...,N-1,N为输入数据点数,其中X(k)为实际FFT/IFFT结果,X′(k)为FFT/IFFT块浮点运算结果,exp为块浮点指数的步骤包括:
1)当运算类型为FFT时,exp初值为0,当运算类型为IFFT时,exp初值为log2N;
2)每一级蝶形运算之后,exp等于在该级蝶形运算开始之前的值减去本级蝶形运算的溢出比特数,当所有蝶形运算完成之后,所得到的exp即为最终的块浮点指数;
3)通过最后的块浮点结果X′(k)和块浮点指数exp即可得到实际的FFT/IFFT结果X(k),X(k)=X′(k)*2-exp,k=0,1,...,N-1,N为输入数据点数。
本发明为FFT和IFFT两用***,将欲完成变换数据的点数送给控制器,可以实现点数可配;在变换过程中使用两块存储RAM,其中一块用来存储输入数据,这样在每一次FFT/IFFT运算完成其第一级蝶形运算时,该RAM可以用来接受下次运算的数据,在实现连续多次FFT/IFFT运算时,节省了时间;另外使用了基-4和基-2相结合的方法实现任意2的L次幂(L为大于或等于3的正整数)点数的FFT和IFFT运算,在蝶形运算时,使用块浮点运算,即对蝶形运算的结果做溢出检测判断处理,解决了蝶形运算过程中乘法和加法造成的数据位宽的扩大,节省了存储空间,同时对该结果做原址存储操作,实现近似的蝶形运算级间流水。
附图说明
图1是本发明的全部模块以及连接框图;
图2是本发明中蝶形运算模块的电路框图;
图3是本发明中块浮点机制的比特数变化图;
图4是本发明中块浮点操作流程图。
具体实施方式
如图1所示,点数可变的混合基FFT/IFFT实现装置包括模块:输入数据变换模块、存储模块A、数据选择器、蝶形运算模块、溢出检测模块、存储模块B、移位模块、输出数据变换模块以及控制模块,输入数据变换模块与存储模块A、数据选择器、蝶形运算模块、溢出检测模块、存储模块B、移位模块依次连接,存储模块B与输出数据变换模块相连,移位模块与数据选择器相连;在控制模块控制下,将串行输入数据变换后存储到存储模块A,然后控制模块控制存储模块A中所有数据完成第一级蝶形运算,结果完成溢出检测,同时也存入存储模块B;当存储模块A中所有数据均完成了第一级蝶形运算后,控制模块向外给出存储模块A空闲可用的标志信号,预示着下一次运算数据可以输入,同时控制模块控制移位模块、存储模块B、蝶形运算模块以及溢出检测模块完成接下来的所有蝶形运算;当所有蝶形运算全部完成之后,控制模块控制存储模块B、输出数据变换模块,将存储模块B中的数据串行读出经过移位、实部虚部变换后输出最终的块浮点运算结果,当存储模块B中数据全部输出后,输出数据变换模块向控制模块给出存储模块B空闲可用标志信号,新一次FFT/IFFT运算开始进行。
如图2所示,蝶形运算模块包括相连接的旋转因子存储模块、乘法器模块和加法器模块。
点数可变的混合基FFT/IFFT实现方法包括如下步骤:
1)根据本次运算为FFT或者IFFT,在控制模块的控制下,将串行输入数据处理后按照分块倒叙方式存入存储模块A;
2)处理后串行输入数据全部写入存储模块A后,控制模块控制存储模块A、蝶形运算模块、和溢出检测判断模块,从存储模块A中读取四个数据完成一次基-4蝶形运算;对蝶形运算结果数据做溢出检测判断后,按原址存储到存储模块B中,当存储模块A中的所有数据均完成第一级蝶形运算,控制模块向外给出信号,下一次FFT或者IFFT运算的数据流进入存储模块A;
3)将FFT或者IFFT运算的点数记为N,且N=2L,L为大于或等于3的正整数:若L为偶数,则蝶形运算级数为L/2;若L为奇数,则蝶形运算级数为(L+1)/2,在控制模块的控制下,L为偶数情况下的第二级到第L/2级或者L为奇数情况下的第二级到第(L-1)/2级的每一次蝶形运算均从存储模块B中读取四个数据,经过移位模块移位之后完成一次基-4蝶形运算,结果经过溢出检测判断后按原址存入存储模块B;当L为奇数时,第(L+1)/2级蝶形运算按照每次从存储模块B中读取两个数据,在控制模块下进行基-2蝶形运算,结果经过溢出检测判断后按原址存入存储模块B中;
4)在所有蝶形运算完成之后,跟据本次运算为FFT或者IFFT,将存储模块B中的数据做相应处理后串行输出,得到输入数据的FFT或者IFFT块浮点运算结果,将该结果与最后输出的块浮点指数组合为实际FFT或者IFFT结果。
所述的根据本次运算为FFT或者IFFT,在控制模块的控制下,将串行输入数据处理后按照分块倒叙方式存入存储模块A的步骤包括;
1)FFT/IFFT变换的输入数据为复数,点数为N,N=2L,L为大于或等于3的正整数,若输入数据要求进行FFT运算,则输入复数数据不需做处理;若输入数据要求进行IFFT运算,则输入复数数据实部不变,虚部取反;
在实施例中,我们根据实际应用的需求,L的取值范围设定为5~14,即点数N的范围为32~16384之间为2的正整数次幂的数,输入的N点复数数据为:
x(n)=I(n)+jQ(n) n=0,1,2,…,N-1(1)
式(1)中的I(n)为输入数据的实部,Q(n)为输入数据的虚部,
N点输入数据的FFT和IFFT运算的表达式分别为:
式(2)中,
式(3)中,
本发明中,FFT和IFFT采用相同的旋转因子值,因此,我们以FFT为标准,由式(2)和(3)可以看出,在完成IFFT运算时,我们将输入复数数据的虚部取反之后进行FFT运算,并将最后结果的虚部再取反后输出,这样就可以做到使用与FFT相同的控制方式就可以实现IFFT,简化了中间蝶形计算的控制逻辑;
2)存储模块A包括四个大小相同的子存储模块,分别为A1、A2、A3、A4,每个子存储模块的大小为2×b×N/4比特,b为输入复数的实部或者虚部的位宽比特数,串行输入的N点处理后数据为x(n),其中n=0,1,2,......,N-1,将x(0)~x(N/4-1)、x(N/4)~x(2N/4-1)、x(2N/4)~x(3N/4-1)和x(3N/4)~x(N-1)分别按照倒叙存入A1、A2、A3、A4中;
3)当输入数据点数达到N时,控制模块给出FFT/IFFT运算启动信号。
所述的处理后串行输入数据全部写入存储模块A后,控制模块控制存储模块A、蝶形运算模块和溢出检测判断模块,从存储模块A中读取四个数据完成一次基-4蝶形运算;对蝶形运算结果数据做溢出检测判断后,按原址存储到存储模块B中,当存储模块A中的所有数据均完成第一级蝶形运算,控制模块向外给出信号,下一次FFT或者IFFT运算的数据流可以进入存储模块A的步骤包括:
1)从子存储模块A1、A2、A3、A4中分别读出一个数据,经过三次复数乘法和八次复数加法,完成一次基-4蝶形运算;
假定从A1、A2、A3、A4中读出的数据分别为A、B、C、D,基-4蝶形运算表达式为:
A′=A+BWP+CW2P+DW3P=(A+CW2P)+(BWP+DW3P)(4.1)
B′=A-jBWP-CW2P+jDW3P=(A-CW2P)-j(BWP-DW3P)(4.2)
C′=A-BWP+CW2P-DW3P=(A+CW2P)-(BWP+DW3P)(4.3)
D′=A+jBWP-CW2P-jDW3P=(A-CW2P)+j(BWP-DW3P)(4.4)
式(4.1)~(4.4)中,
由式(4.1)~(4.4)可知,完成一次基-4蝶形运算所需的三次复乘分别为:BWP、CW2P、DW3P,八次复加分别为:A+CW2P、BWP+DW3P、A-CW2P、BWP-DW3P、前两者的和、差以及后两者的和、差;
2)对每次蝶形运算的结果做溢出检测判断,记下该运算结果中最大值的溢出比特数;
3)存储模块B也由四个子存储模块组成,分别为子存储模块B1、B2、B3、B4,每次蝶形运算结束将四个数据写入子存储模块B1、B2、B3、B4,写地址等于子存储模块A1、A2、A3、A4的读地址;
4)重复上述三个步骤,直至存储模块A中所有数据完成蝶形运算,此时最大的溢出比特数即为该级蝶形运算结果最终的溢出比特数;
5)当存储模块A中所有数据完成第一级蝶形运算后,控制模块向外给出标志信号,表明下一次FFT/IFFT的数据流串行进入存储模块A等待。
本发明中使用两块大小相同的存储模块A和B,存储模块A只用来存储输入的数据,而存储模块B用来存储蝶形运算结果,这样做的目的是,在连续完成多次FFT或者IFFT运算时,本次运算在完成了第一级的蝶形运算后,存储模块A就可以空闲以接受下次运算的串行输入数据,这样在进行本次运算后面若干级蝶形运算时,下次运算的输入数据可以同时串行进入存储模块A,等到本次运算结束且最终结果从存储模块B中完全输出后,若下次运算的输入数据准备完成,则可以立刻进行下次运算,节省了数据串行写入存储模块A的时间。
所述的将FFT或者IFFT运算的点数记为N,且N=2L,L为大于或等于3的正整数:若L为偶数,则蝶形运算级数为L/2;若L为奇数,则蝶形运算级数为(L+1)/2。在控制模块的控制下,L为偶数情况下的第二级到第L/2级或者L为奇数情况下的第二级到第(L-1)/2级的每一次蝶形运算均从存储模块B中读取四个数据,经过移位模块移位之后完成一次基-4蝶形运算,结果经过溢出检测判断后按原址存入存储模块B;当L为奇数时,第(L+1)/2级蝶形运算按照每次从存储模块B中读取两个数据,在控制模块下进行基-2蝶形运算,结果经过溢出检测判断后按原址存入存储模块B中的步骤包括:
1)L为偶数情况下的第二级到第L/2级或者L为奇数情况下的第二级到第(L-1)/2级蝶形运算,在控制模块的控制下,每次分别从子存储模块B1、B2、B3、B4中各读取一个数据,数据移位模块按照前一级蝶形运算后溢出检测判断结果进行移位,移位结果完成一次基-4蝶形运算,结果经过溢出检测判断同时按照原址写入子存储模块B1、B2、B3、B4;
若L为偶数,则N=2L=4L/2;若L为奇数,则N=2L=4(L-1)/2×2。因此,L为偶数时,所有的蝶形运算均为基-4蝶形运算;L为奇数时,第一级到第(L-1)/2级蝶形运算为基-4蝶形运算,最后一级为基-2蝶形运算。由于第一级蝶形运算是从存储模块A中读取数据进行,因此,从存储模块B中读取数据进行蝶形运算应该从第二级开始。
2)当L为奇数时,第(L+1)/2级蝶形运算为基-2蝶形运算,在控制模块的控制下,首先从子存储模块B1和B3中分别读出一个数据,移位之后完成一次基-2蝶形运算,结果经溢出检测判断后按原址存入子存储模块B1和B3,如此循环直至子存储模块B1、B3中所有数据均完成蝶形运算;之后,将子存储模块B2和B4组合,完成与子存储模块B1和B3相同的操作;
3)此时,我们就顺利完成了N点数据FFT/IFFT运算的所有蝶形运算,结果存储在子存储模块B1、B2、B3、B4中。
所述的在所有蝶形运算完成之后,跟据本次运算为FFT或者IFFT,将存储模块B中的数据做相应处理后串行输出,得到输入数据的FFT或者IFFT块浮点运算结果,将该结果与最后输出的块浮点指数组合为实际FFT或者IFFT结果的步骤包括:
1)在控制模块控制下,将数据从子存储模块B1、B2、B3、B4中按照一定的顺序串行输出,并根据本次运算为FFT或者IFFT作如下处理:若为FFT,则实部和虚部均不变;若为IFFT,则实部不变,虚部取反;
通过上述对式(2)和(3)的分析可以得到,在完成IFFT运算时,在数据输入时,对虚部取反,在最终结果输出时再对虚部取反,就可以做到IFFT运算和FFT运算使用相同的旋转因子值,使控制逻辑简化。
2)完成实部和虚部转换后,按照最后一级蝶形运算的溢出检测判断结果,将串行输出数据做相应移位后即可输出,输出的结果即为输入N点复数数据的FFT/IFFT块浮点运算结果,当N点数据全部输出后,向控制模块给出标志信号,表明存储模块B可用,可以进行新一次的FFT/IFFT运算;
3)实际的FFT/IFFT结果为:X(k)=X′(k)*2-exp(k=0,1,…N-1,N为输入数据点数),其中X(k)为实际FFT/IFFT结果,X′(k)为FFT/IFFT块浮点运算结果,exp为块浮点指数。
所述的实际的FFT/IFFT结果为:X(k)=X′(k)*2-exp,k=0,1,...,N-1,N为输入数据点数,其中X(k)为实际FFT/IFFT结果,X′(k)为FFT/IFFT块浮点运算结果,exp为块浮点指数的步骤包括:
1)当运算类型为FFT时,exp初值为0,当运算类型为IFFT时,exp初值为log2N;
由式(2)和(3)可以看出,IFFT与FFT相比较,需要在前面乘以一个系数 所以,在完成IFFT运算时,exp的初值为log2N。
2)每一级蝶形运算之后,exp等于在该级蝶形运算开始之前的值减去本级蝶形运算的溢出比特数,当所有蝶形运算完成之后,所得到的exp即为最终的块浮点指数;
如图3所示,假设输入的数据实部和虚部位宽均为m,以实部或者虚部之一为例,存储器的位宽大小为该位宽为m的数据经过一次基-4运算后最大的可能位宽m+3,现在经过第一次蝶形运算之后,位宽扩展为m+M1(M1≤3),为了第二次蝶形运算之后,位宽仍然能够被限制在m+3内,我们在读出第一级的蝶形运算结果后进行第二级的蝶形运算之前,需要将其右移M1;以此类推,第三级蝶形运算开始之前需要将第二级蝶形运算结果右移M2位,......,第k+1级蝶形运算开始之前需要将第k级蝶形运算结果右移Mk位,......;如图4所示的即为第k+1级蝶形运算过程中块浮点的操作流程图,包括从存储器读取数据、右移Mk位、蝶形运算、溢出比特数检测以及蝶形运算结果写入存储器;
经过上述右移过程,最终的蝶形结果右移了M1+M2+......+Mk+......位,因此,块浮点指数为:
exp=expini-(M1+M2+…+Mk+…)(5)
expini为exp的初值,FFT运算为0,IFFT运算为log2N;
3)通过最后的块浮点结果X′(k)和块浮点指数exp即可得到实际的FFT/IFFT结果X(k),X(k)=X′(k)*2-exp,k=0,1,...,N-1,N为输入数据点数。
由式(5)可知,实际的FFT/IFFT结果X(k)和最后输出的块浮点结果的关系表达式为:
Claims (8)
1.一种点数可变的混合基FFT/IFFT实现装置,其特征在于,包括模块:输入数据变换模块、存储模块A、数据选择器、蝶形运算模块、溢出检测模块、存储模块B、移位模块、输出数据变换模块以及控制模块,输入数据变换模块与存储模块A、数据选择器、蝶形运算模块、溢出检测模块、存储模块B、移位模块依次连接,存储模块B与输出数据变换模块相连,移位模块与数据选择器相连;在控制模块控制下,将串行输入数据变换后存储到存储模块A,然后控制模块控制存储模块A中所有数据完成第一级蝶形运算,结果完成溢出检测,同时也存入存储模块B;当存储模块A中所有数据均完成了第一级蝶形运算后,控制模块向外给出存储模块A空闲可用的标志信号,预示着下一次运算数据可以输入,同时控制模块控制移位模块、存储模块B、蝶形运算模块以及溢出检测模块完成接下来的所有蝶形运算;当所有蝶形运算全部完成之后,控制模块控制存储模块B、输出数据变换模块,将存储模块B中的数据串行读出经过移位、实部虚部变换后输出最终的块浮点运算结果,当存储模块B中数据全部输出后,输出数据变换模块向控制模块给出存储模块B空闲可用标志信号,新一次FFT/IFFT运算开始进行。
2.根据权利要求1所述的一种点数可变的混合基FFT/IFFT实现装置,其特征在于,所述的蝶形运算模块包括相连接的旋转因子存储模块、乘法器模块和加法器模块。
3.一种使用如权利要求1所述装置的点数可变的混合基FFT/IFFT实现方法,其特征在于包括如下步骤:
1)根据本次运算为FFT或者IFFT,在控制模块的控制下,将串行输入数据处理后按照分块倒叙方式存入存储模块A;
2)处理后串行输入数据全部写入存储模块A后,控制模块控制存储模块A、蝶形运算模块、和溢出检测判断模块,从存储模块A中读取四个数据完成一次基-4蝶形运算;对蝶形运算结果数据做溢出检测判断后,按原址存储到存储模块B中,当存储模块A中的所有数据均完成第一级蝶形运算,控制模块向外给出信号,下一次FFT或者IFFT运算的数据流进入存储模块A;
3)将FFT或者IFFT运算的点数记为N,且N=2L,L为大于或等于3的正整数:若L为偶数,则蝶形运算级数为L/2;若L为奇数,则蝶形运算级数为(L+1)/2,在控制模块的控制下,L为偶数情况下的第二级到第L/2级或者L为奇数情况下的第二级到第(L-1)/2级的每一次蝶形运算均从存储模块B中读取四个数据,经过移位模块移位之后完成一次基-4蝶形运算,结果经过溢出检测判断后按原址存入存储模块B;当L为奇数时,第(L+1)/2级蝶形运算按照每次从存储模块B中读取两个数据,在控制模块下进行基-2蝶形运算,结果经过溢出检测判断后按原址存入存储模块B中;
4)在所有蝶形运算完成之后,跟据本次运算为FFT或者IFFT,将存储模块B中的数据做相应处理后串行输出,得到输入数据的FFT或者IFFT块浮点运算结果,将该结果与最后输出的块浮点指数组合为实际FFT或者IFFT结果。
4.根据权利要求3所述的一种点数可变的混合基FFT/IFFT实现方法,其特征在于,所述的根据本次运算为FFT或者IFFT,在控制模块的控制下,将串行输入数据处理后按照分块倒叙方式存入存储模块A的步骤包括:
1)FFT/IFFT变换的输入数据为复数,点数为N,N=2L,L为大于或等于3的正整数,若输入数据要求进行FFT运算,则输入复数数据不需做处理;若输入数据要求进行IFFT运算,则输入复数数据实部不变,虚部取反;
2)存储模块A包括四个大小相同的子存储模块,分别为A1、A2、A3、A4,每个子存储模块的大小为2×b×N/4比特,b为输入复数的实部或者虚部的位宽比特数,串行输入的N点处理后数据为x(n),其中n=0,1,2,......,N-1,将x(0)~x(N/4-1)、x(N/4)~x(2N/4-1)、x(2N/4)~x(3N/4-1)和x(3N/4)~x(N-1)分别按照倒叙存入A1、A2、A3、A4中;
3)当输入数据点数达到N时,控制模块给出FFT/IFFT运算启动信号。
5.根据权利要求3所述的一种点数可变的混合基FFT/IFFT实现方法,其特征在于,所述的处理后串行输入数据全部写入存储模块A后,控制模块控制存储模块A、蝶形运算模块和溢出检测判断模块,从存储模块A中读取四个数据完成一次基-4蝶形运算;对蝶形运算结果数据做溢出检测判断后,按原址存储到存储模块B中,当存储模块A中的所有数据均完成第一级蝶形运算,控制模块向外给出信号,下一次FFT或者IFFT运算的数据流可以进入存储模块A的步骤包括:
1)从子存储模块A1、A2、A3、A4中分别读出一个数据,经过三次复数乘法和八次复数加法,完成一次基-4蝶形运算;
2)对每次蝶形运算的结果做溢出检测判断,记下该运算结果中最大值的溢出比特数;
3)存储模块B也由四个子存储模块组成,分别为子存储模块B1、B2、B3、B4,每次蝶形运算结束将四个数据写入子存储模块B1、B2、B3、B4,写地址等于子存储模块A1、A2、A3、A4的读地址;
4)重复上述三个步骤,直至存储模块A中所有数据完成蝶形运算,此时最大的溢出比特数即为该级蝶形运算结果最终的溢出比特数;
5)当存储模块A中所有数据完成第一级蝶形运算后,控制模块向外给出标志信号,表明下一次FFT/IFFT的数据流串行进入存储模块A等待。
6.根据权利要求3所述的一种点数可变的混合基FFT/IFFT实现方法,其特征在于,所述的将FFT或者IFFT运算的点数记为N,且N=2L,L为大于或等于3的正整数:若L为偶数,则蝶形运算级数为L/2;若L为奇数,则蝶形运算级数为(L+1)/2。在控制模块的控制下,L为偶数情况下的第二级到第L/2级或者L为奇数情况下的第二级到第(L-1)/2级的每一次蝶形运算均从存储模块B中读取四个数据,经过移位模块移位之后完成一次基-4蝶形运算,结果经过溢出检测判断后按原址存入存储模块B;当L为奇数时,第(L+1)/2级蝶形运算按照每次从存储模块B中读取两个数据,在控制模块下进行基-2蝶形运算,结果经过溢出检测判断后按原址存入存储模块B中的步骤包括:
1)L为偶数情况下的第二级到第L/2级或者L为奇数情况下的第二级到第(L-1)/2级蝶形运算,在控制模块的控制下,每次分别从子存储模块B1、B2、B3、B4中各读取一个数据,数据移位模块按照前一级蝶形运算后溢出检测判断结果进行移位,移位结果完成一次基-4蝶形运算,结果经过溢出检测判断同时按照原址写入子存储模块B1、B2、B3、B4;
2)当L为奇数时,第(L+1)/2级蝶形运算为基-2蝶形运算,在控制模块的控制下,首先从子存储模块B1和B3中分别读出一个数据,移位之后完成一次基-2蝶形运算,结果经溢出检测判断后按原址存入子存储模块B1和B3,如此循环直至子存储模块B1、B3中所有数据均完成蝶形运算;之后,将子存储模块B2和B4组合,完成与子存储模块B1和B3相同的操作;
3)此时,我们就顺利完成了N点数据FFT/IFFT运算的所有蝶形运算,结果存储在子存储模块B1、B2、B3、B4中。
7.根据权利要求3所述的一种点数可变的混合基FFT/IFFT实现方法,其特征在于,所述的在所有蝶形运算完成之后,跟据本次运算为FFT或者IFFT,将存储模块B中的数据做相应处理后串行输出,得到输入数据的FFT或者IFFT块浮点运算结果,将该结果与最后输出的块浮点指数组合为实际FFT或者IFFT结果的步骤包括:
1)在控制模块控制下,将数据从子存储模块B1、B2、B3、B4中按照一定的顺序串行输出,并根据本次运算为FFT或者IFFT作如下处理:若为FFT,则实部和虚部均不变;若为IFFT,则实部不变,虚部取反;
2)完成实部和虚部转换后,按照最后一级蝶形运算的溢出检测判断结果,将串行输出数据做相应移位后即可输出,输出的结果即为输入N点复数数据的FFT/IFFT块浮点运算结果,当N点数据全部输出后,向控制模块给出标志信号,表明存储模块B可用,可以进行新一次的FFT/IFFT运算;
3)实际的FFT/IFFT结果为:X(k)=X′(k)*2-exp(k=0,1,…N-1,N为输入数据点数),其中X(k)为实际FFT/IFFT结果,X′(k)为FFT/IFFT块浮点运算结果,exp为块浮点指数。
8.根据权利要求7所述的一种点数可变的混合基FFT/IFFT实现方法,其特征在于,所述的实际的FFT/IFFT结果为:X(k)=X′(k)*2-exp,k=0,1,...,N-1,N为输入数据点数,其中X(k)为实际FFT/IFFT结果,X′(k)为FFT/IFFT块浮点运算结果,exp为块浮点指数的步骤包括:
1)当运算类型为FFT时,exp初值为0,当运算类型为IFFT时,exp初值为log2N;
2)每一级蝶形运算之后,exp等于在该级蝶形运算开始之前的值减去本级蝶形运算的溢出比特数,当所有蝶形运算完成之后,所得到的exp即为最终的块浮点指数;
3)通过最后的块浮点结果X′(k)和块浮点指数exp即可得到实际的FFT/IFFT结果X(k),X(k)=X′(k)*2-exp,k=0,1,...,N-1,N为输入数据点数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010039602XA CN101763338B (zh) | 2010-01-08 | 2010-01-08 | 一种点数可变的混合基fft/ifft实现装置及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010039602XA CN101763338B (zh) | 2010-01-08 | 2010-01-08 | 一种点数可变的混合基fft/ifft实现装置及其方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101763338A true CN101763338A (zh) | 2010-06-30 |
CN101763338B CN101763338B (zh) | 2012-07-11 |
Family
ID=42494503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010039602XA Expired - Fee Related CN101763338B (zh) | 2010-01-08 | 2010-01-08 | 一种点数可变的混合基fft/ifft实现装置及其方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101763338B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102298570A (zh) * | 2011-09-13 | 2011-12-28 | 浙江大学 | 一种点数可变的混合基 fft/ifft实现装置及其方法 |
CN102375804A (zh) * | 2010-08-18 | 2012-03-14 | 中兴通讯股份有限公司 | 一种实现ifft的装置及方法 |
CN103605634A (zh) * | 2013-07-09 | 2014-02-26 | 北京理工大学 | 一种基于混合基fft的数据访问地址生成的方法 |
CN104268122A (zh) * | 2014-09-12 | 2015-01-07 | 安徽四创电子股份有限公司 | 一种可变点数的浮点fft处理器 |
CN104330673A (zh) * | 2014-11-18 | 2015-02-04 | 太原理工大学 | 一种适用于采样点数为复合数的fft实现方法 |
CN106339353A (zh) * | 2015-07-13 | 2017-01-18 | 无锡华润矽科微电子有限公司 | 一种支持4375点和3780点fft/ifft的方法及其处理器 |
CN106560800A (zh) * | 2015-10-05 | 2017-04-12 | 美国亚德诺半导体公司 | 在雷达和声纳应用中调整定点快速傅立叶变换 |
CN107783933A (zh) * | 2016-08-31 | 2018-03-09 | 三星电子株式会社 | 图像处理方法和设备 |
CN110209506A (zh) * | 2019-05-09 | 2019-09-06 | 上海联影医疗科技有限公司 | 数据处理***、方法、计算机设备及可读存储介质 |
CN111506294A (zh) * | 2020-04-13 | 2020-08-07 | 中国科学院自动化研究所 | 基于块浮点的fblms算法的fpga实现装置及方法 |
WO2021082746A1 (zh) * | 2019-11-01 | 2021-05-06 | 中科寒武纪科技股份有限公司 | 运算装置及相关产品 |
CN117389946A (zh) * | 2023-11-09 | 2024-01-12 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
CN117591784A (zh) * | 2024-01-19 | 2024-02-23 | 武汉格蓝若智能技术股份有限公司 | 一种基于fpga的旋转因子计算方法及fpga芯片 |
-
2010
- 2010-01-08 CN CN201010039602XA patent/CN101763338B/zh not_active Expired - Fee Related
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102375804A (zh) * | 2010-08-18 | 2012-03-14 | 中兴通讯股份有限公司 | 一种实现ifft的装置及方法 |
CN102298570A (zh) * | 2011-09-13 | 2011-12-28 | 浙江大学 | 一种点数可变的混合基 fft/ifft实现装置及其方法 |
CN103605634A (zh) * | 2013-07-09 | 2014-02-26 | 北京理工大学 | 一种基于混合基fft的数据访问地址生成的方法 |
CN103605634B (zh) * | 2013-07-09 | 2016-08-10 | 北京理工大学 | 一种基于混合基fft的数据访问地址生成的方法 |
CN104268122A (zh) * | 2014-09-12 | 2015-01-07 | 安徽四创电子股份有限公司 | 一种可变点数的浮点fft处理器 |
CN104268122B (zh) * | 2014-09-12 | 2017-03-22 | 安徽四创电子股份有限公司 | 一种可变点数的浮点fft处理器 |
CN104330673A (zh) * | 2014-11-18 | 2015-02-04 | 太原理工大学 | 一种适用于采样点数为复合数的fft实现方法 |
CN106339353A (zh) * | 2015-07-13 | 2017-01-18 | 无锡华润矽科微电子有限公司 | 一种支持4375点和3780点fft/ifft的方法及其处理器 |
CN106560800B (zh) * | 2015-10-05 | 2019-09-20 | 美国亚德诺半导体公司 | 在雷达和声纳应用中调整定点快速傅立叶变换 |
CN106560800A (zh) * | 2015-10-05 | 2017-04-12 | 美国亚德诺半导体公司 | 在雷达和声纳应用中调整定点快速傅立叶变换 |
CN107783933B (zh) * | 2016-08-31 | 2024-01-09 | 三星电子株式会社 | 图像处理方法和设备 |
CN107783933A (zh) * | 2016-08-31 | 2018-03-09 | 三星电子株式会社 | 图像处理方法和设备 |
CN110209506A (zh) * | 2019-05-09 | 2019-09-06 | 上海联影医疗科技有限公司 | 数据处理***、方法、计算机设备及可读存储介质 |
CN110209506B (zh) * | 2019-05-09 | 2021-08-17 | 上海联影医疗科技股份有限公司 | 数据处理***、方法、计算机设备及可读存储介质 |
WO2021082746A1 (zh) * | 2019-11-01 | 2021-05-06 | 中科寒武纪科技股份有限公司 | 运算装置及相关产品 |
CN111506294A (zh) * | 2020-04-13 | 2020-08-07 | 中国科学院自动化研究所 | 基于块浮点的fblms算法的fpga实现装置及方法 |
CN117389946A (zh) * | 2023-11-09 | 2024-01-12 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
CN117389946B (zh) * | 2023-11-09 | 2024-05-28 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
CN117591784A (zh) * | 2024-01-19 | 2024-02-23 | 武汉格蓝若智能技术股份有限公司 | 一种基于fpga的旋转因子计算方法及fpga芯片 |
CN117591784B (zh) * | 2024-01-19 | 2024-05-03 | 武汉格蓝若智能技术股份有限公司 | 一种基于fpga的旋转因子计算方法及fpga芯片 |
Also Published As
Publication number | Publication date |
---|---|
CN101763338B (zh) | 2012-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101763338B (zh) | 一种点数可变的混合基fft/ifft实现装置及其方法 | |
CN102298570A (zh) | 一种点数可变的混合基 fft/ifft实现装置及其方法 | |
CN101504637B (zh) | 一种点数可变实时fft处理芯片 | |
CN103955447B (zh) | 基于dsp芯片的fft加速器 | |
CN108897716B (zh) | 通过存储器读写操作来缩减计算量的数据处理装置及方法 | |
CN102129420B (zh) | 基于Cholesky分解解决最小二乘问题的FPGA实现装置 | |
CN103927290A (zh) | 一种任意阶下三角复矩阵求逆运算方法 | |
CN105701068A (zh) | 基于分时复用技术的cholesky矩阵求逆*** | |
CN101154216B (zh) | 用于ofdm载波的调制解调的快速傅立叶变换电路及变换方法 | |
CN100390782C (zh) | 一种实时快速傅立叶变换电路 | |
CN101847137B (zh) | 一种实现基2fft计算的fft处理器 | |
CN101154215A (zh) | 基23频域取样快速傅立叶变换的方法与硬件结构 | |
CN102707931A (zh) | 一种基于并行数据通道的数字信号处理器 | |
CN107516131A (zh) | 卷积计算的加速方法和装置、电子设备和存储介质 | |
CN105630741A (zh) | 一种改进的按位替换法求矩阵逆矩阵模块 | |
CN108563421B (zh) | Fpga运算电路和斯皮尔曼秩次相关系数的求解方法 | |
CN106682732A (zh) | 一种应用于神经网络的高斯误差函数电路 | |
CN102004720B (zh) | 可变长快速傅立叶变换电路及实现方法 | |
CN104268124A (zh) | 一种fft实现装置和方法 | |
CN103493039A (zh) | 数据处理方法和相关装置 | |
CN104460444B (zh) | 基于广义相关系数的fpga运算电路 | |
CN101833540B (zh) | 信号处理方法和装置 | |
CN102662917B (zh) | 正定Hermite矩阵Cholesky分解高速脉动阵列的设计方法 | |
US10282387B2 (en) | FFT device and method for performing a Fast Fourier Transform | |
CN111368250B (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120711 Termination date: 20150108 |
|
EXPY | Termination of patent right or utility model |