书签 分享 收藏 举报 版权申诉 / 15

一种点数可变的混合基FFT/IFFT实现装置及其方法.pdf

  • 上传人:e2
  • 文档编号:5803970
  • 上传时间:2019-03-20
  • 格式:PDF
  • 页数:15
  • 大小:935.68KB
  • 摘要
    申请专利号:

    CN201010039602.X

    申请日:

    2010.01.08

    公开号:

    CN101763338A

    公开日:

    2010.06.30

    当前法律状态:

    终止

    有效性:

    无权

    法律详情:

    未缴年费专利权终止IPC(主分类):G06F 17/14申请日:20100108授权公告日:20120711终止日期:20150108|||授权|||实质审查的生效IPC(主分类):G06F 17/14申请日:20100108|||公开

    IPC分类号:

    G06F17/14

    主分类号:

    G06F17/14

    申请人:

    浙江大学

    发明人:

    李云飞; 赵民建; 王勇松; 侯维玮; 李立言; 王悦

    地址:

    310027 浙江省杭州市浙大路38号

    优先权:

    专利代理机构:

    杭州求是专利事务所有限公司 33200

    代理人:

    张法高

    PDF完整版下载: PDF下载
    内容摘要

    本发明公开了一种点数可变的混合基FFT/IFFT实现装置及其方法。本发明为FFT和IFFT两用系统,实现了点数可配;在变换过程中使用两块RAM,一块只存储输入数据,在每一次运算完成其第一级蝶形运算时,该RAM可以用来接受下次运算的数据,在完成连续多次运算时,节省了时间;另外使用了基4和基2相结合的方法实现2的L次幂(L为大于或等于3的正整数)点数的FFT和IFFT运算,在蝶形运算时,使用块浮点运算,解决了蝶形运算过程中乘法和加法造成的数据位宽扩大,节省了存储空间,同时对该结果做原址存储操作,实现近似的级间流水。该方法和装置具有控制简单,实现高效,配置灵活,可扩展性良好等特点。

    权利要求书

    权利要求书
    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为输入数据点数。

    说明书

    说明书一种点数可变的混合基FFT/IFFT实现装置及其方法
    技术领域
    本发明涉及一种点数可变的混合基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运算的表达式分别为:
    XFFT(k)=Σn=0N-1x(n)e-j2πNnk]]>
    =Σn=0N-1[I(n)+jQ(n)][cos(2πNnk)-j(2πNnk)]]]>
    =Re{XFFT(k)}+jIm{XFFT(k)}]]>k=0,1,2,…,N-1(2)
    式(2)中,Re{XFFT(k)}=Σn=0N-1[I(n)cos(2πNnk)+Q(n)sin(2πNnk)]]]>
    Im{XFFT(k)}=Σn=0N-1[Q(n)cos(2πNnk)+I(n)sin(2πNnk)]]]>
    XIFFT(k)=1NΣn=0N-1x(n)e-j2πNnk]]>
    =1NΣn=0N-1[I(n)+jQ(n)][cos(2πNnk)-jsin(2πNnk)]]]>
    =Re{XIFFT(k)}+jIm{XIFFT(k)}]]>k=0,1,2,…,N-1(3)
    式(3)中,Re{XIFFT(k)}=1NΣn=0N-1[I(n)cos(2πNnk)+(-Q(n))sin(2πNnk)]]]>
    Im{XIFFT(k)}=-1NΣn=0N-1[(-Q(n))cos(2πNnk)-I(n)sin(2πNnk)]]]>
    本发明中,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)中,WP=WNk=e-j2πN,]]>
    由式(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相比较,需要在前面乘以一个系数1/N=2-log2N,]]>所以,在完成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)和最后输出的块浮点结果的关系表达式为:
    X(k)=X(k)*2-expini+(M1+M2+...+Mk+...)=X(k)*2-exp---(6)]]>

    关 键  词:
    一种 点数 可变 混合 FFT IFFT 实现 装置 及其 方法
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:一种点数可变的混合基FFT/IFFT实现装置及其方法.pdf
    链接地址:https://www.zhuanlichaxun.net/p-5803970.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1