基于fpga实现并行结构fft处理器的方法

文档序号:6482714阅读:210来源:国知局

专利名称::基于fpga实现并行结构fft处理器的方法
技术领域
:本发明涉及一种FFT实现方法,尤其涉及一种基于FPGA实现并行结构FFT处理器的方法。
背景技术
:快速傅里叶变换(FFT,即FastFourierTransform)在数字信号处理领域有着非常广泛的应用,但长序列FFT运算量很大,实现比较困难。随着高速器件的发展,关于如何快速实现长序列FFT这方面的研究很多,各种各样的实现方法也相继出现。例如文献(AnanthGramam,AnshulGupta,GeorgeKarypis.IntroductiontoParaIlelComputing,SecondEdition[M],PearsonEducation,Harlow,England,2003:245—250)提到了使用多个专用芯片来构成并行结构以快速实现长序列FFT,但这种方法是基于专用芯片的,灵活性不足。近年来元件可编程逻辑门阵列(FPGA,即FieldProgrammableGateArray)器件发展迅速,其可编程重构特性使得它在许多领域得到了越来越广泛的应用。Xilinx公司Virtex-II系列FPGA内部集成了大量专用乘法器(BlockMultiplier)、大量块RAM(BlockRAM)以及丰富的逻辑门资源,这使得它非常适合实现FFT这种需要大量乘法器、大量块RAM和寄存器的设计。
发明内容本发明所要解决的技术问题是提供一种基于FPGA实现并行结构FFT处理器的方法,它可以通过简单的电路结构提高长序列FFT的处理速度和系统吞吐量(Throughput)。为了解决以上技术问题,本发明提供了一种基于FPGA实现并行结构FFT处理器的方法,用于进行N(N为2的k次幂,或不足k次幂,将序列补0使N变为2的k次幂,k为正整数)点的FFT运算,所述FPGA包含多个专用乘法器、多个大量块RAM、以及多个逻辑门,包括如下步骤-(1)将所述N点等分为M段,每段具有N/M个点;(2)将所述N点的FFT运算,转化为所述M段(每段N/M个点)FFT运算的表达式;(3)提取步骤(2)所得表达式中各M段FFT运算表达式的系数,用所述专用乘法器、大量块RAM、及逻辑门通过所述FPGA内部电路实现所述系数与对应各M段FFT运算结果乘积,再将所述各段的乘积结果求和得到所述N点的FFT运算结果。因为本发明把长序列分裂成较短序列,并由多个FFT单元并行实现短序列的FFT,最后用FPGA内部一个特定结构的运算电路来处理各单元的计算结果,从而得到最终的结果,有效提高了长序列FFT的处理速度和系统吞吐量(Throughput)。下面结合附图和具体实施方式对本发明作进一步详细说明。图1是N二16按时间抽取法(DIT)的基-2FFT的运算流程图;图2是本发明四路并行的基-2DITFFT实现框图。具体实施方式本发明从理论上分析并设计一种基于FPGA实现的并行FFT处理器结构——把长序列分裂成较短序列,并由多个FFT单元并行实现短序列的FFT,最后用FPGA内部一个特定结构的运算电路来处理各单元的计算结果,从而得到最终的结果。基于FPGA实现并行结构FFT处理器的方法,用于进行N(N为2的k次幂,或不足k次幂,将序列补0使N变为2的k次幂,k为正整数)点的FFT运算,所述FPGA包含多个专用乘法器、多个大量块RAM、以及多个逻辑门,包括如下步骤(1)将所述N点等分为M段,每段具有N/M个点;(2)将所述N点的FFT运算,转化为所述M段(每段N/M个点)FFT运算的表达式;(3)提取步骤(2)所得表达式中各M段FFT运算表达式的系数,用所述专用乘法器、大量块RAM、及逻辑门通过所述FPGA内部的电路实现所述系数与对应各M段FFT运算结果乘积,再将所述各段的乘积结果求和得到所述N点的FFT运算结果。如图1显示了一个标准的按时间抽取(DIT)的N=16点FFT运算流程图,由图1我们可观察到最后两级之前的数据流程在水平上明显地分成四个独立单元(如图中虚线所示),每个单元独立地实现点的FFT,从而构成一个四路并行的结构。因此,我们可以用四个点的FFT单元来并行计算N点的FFT,即所谓并行结构的FFT,然后设计一个特定结构的运算电路来处理最后两级。下面将详细描述如何设计这个的电路。本发明的重点是设计一个适合于FPGA实现的并行FFT处理器,其关键是设计前面提到的特定结构的运算电路,而标准的FFT单元设计将不在这里阐述。对于长度为N的序列x(n),其中N为2的k次幂,或不足k次幂,将序列补0使N变为2的k次幂,k为正整数(例如当N45时,将序列x(n)后补一个0,则原序列的长度N变为16,即24)。设其对应的FFT结果为N点序列义(w),另P么有W-l=^>(")『;"(i)其中,『w=e-w,即所谓的旋转因子UwVo7e-/a"o力为了便于理解,我们按库利-图基算法"把输入序列x(n)按n分裂成奇偶两组,即x!(r)^(2r)l(2)x2(r)=x(2r+l)j其中=0,1,2,...,]^/2-1,那么有W-lW/2-lW/2-lW/2-lW/2—1"=0r=0r=0r=0r=0一^,_■2;r又Ww力?=,^=^/2,则上式可表示成r=0r=0式中A(w)和Z2(w)分别是x,(r)和x2(r)的FFT(|点)。由式(3)看出,一个N点的FFT已分解成两个^点的FFT,它们按式(3)来计算一个N点的FFT。2然而,Xl(r)、x2(r)、A(w)和X2(w)都是|点序列,即r,w满足r,w^0,l,2…,N/2-l。但X(w)却有N个点,而利用(3)式计算得到的只是X(w)的前半部分的值,要用《(mO和%2(m0来表达X(w)全部的值还需要用到系数的周期性,即『=『=+皿),这样可以得到<formula>formulaseeoriginaldocumentpage8</formula>同理<formula>formulaseeoriginaldocumentpage8</formula>再考虑到『;的对称性<formula>formulaseeoriginaldocumentpage8</formula>由式(3)和(6)可得到如下的关系式<formula>formulaseeoriginaldocumentpage8</formula>其中w-0,l,2,…,iV/2-l这样,只需求出0到^-l)区间的所有A(w)和A(w)值,即可求得S到(N-1)区间内所有的X(w)值。同理,若把x,(r)和X2(r)也按奇偶各分成两组,艮口<formula>formulaseeoriginaldocumentpage8</formula>其对应的FFT为<formula>formulaseeoriginaldocumentpage8</formula>其中r,H^0,l,2,…,JV/4-1,采用与前面相似的推导方法,可得到如下关系式<formula>formulaseeoriginaldocumentpage8</formula>其中r,w=0,l,2,...,iV/4-l,把式(10)和式(11)代入式(3)和式(7),可得到如下关系式,)=(w)+W:2X12(w)]+『;[Z21(w)+W"2(w)]+iW4)=[Z"(vtO—W:Z,2(m;)]+『r阔[&(w)—W:2X22(w)]火(w+2W/4)=[X+W^%12(mO]-『;[%21(+W^%22(12)其中,M^0,l,2,…,iV/4-i,这样长度为N点的序列x(n)的FFT的值X(w)可由长度为N/4点的序列Xn(w)、x12(w)、^(w)和j^(w)通过式(12)计算出来先由4个相同的计算长度为;的FFT单元并行计算;^(w)、x12(w)、j^(w)和Z22(w),再用一个由三个旋转因子表(WNw/2、WJ和Wf40、四个复数乘法器及一些加减法器组成特定结构的运算电路,计算最后两级,其结果四路并行输出,如图2所示。当然,还可以按上面的方法继续把N点序列等分下去以增加并行的路数,然而这不仅增加硬件资源的消耗,而且特定结构的运算电路也变得更图2给出的是并行FFT处理器的核心电路框图,而实际应用时还应把数据输入输出考虑进去。当四路并行时,四个FFT处理单元应当同步工作,这就需要把待处理的长序列先分裂成四个较短序列再并行送入四个输入存储单元中,然后四个独立的FFT处理单元并行地读走各自的数据;对于输出,由图2可知,把四路输出数据分别存储到四个输出存储器中,每个存储器存储的是最终结果的一部分,把它们首尾相连起来就是一个完整的序列。上面所述的并行FFT处理器已在我们自制的带有Virtex-II序列FPGAXC2V3000实验板DASQ—USB—VI上得到了验证。长度为2048点的实序列分裂成四路输入FPGA,四个并行FFT单元采用的是XilinxFPGA开发工具ISE6.1自带的免费FFTIP核,它可实现流水输入输出。一个长度为N=2048序列的FFT验证结果如表1所示,这里输入输出数据表示为定点数,字长为16位。需要说明的是FFTIP核实现的是按时间抽取的(DIT)顺序输入输出的FFT,数据在等待时间(Latency)内充满流水线,之后处理器并行流水输出运算结果。另外,这里吞吐量表示为吞吐量二时钟频率X并行路数。表一<table>tableseeoriginaldocumentpage10</column></row><table>表1为在XC2V3000-6上实现N:2048序列的定点FFT的性能,分别列举了在单路、双路和四路并行的情况下,处理器所消耗的资源(Resources)、能达到的时钟频率(MaximumSpeed)、等待时间(Latency)、变换时间(TransformTime)及系统吞吐量。由表l可看出,2路并行时所用Slices资源比单路增加不到1倍但处理速度和吞吐量却可以提高1倍;而4路并行时所用Slices资源比单路增加3倍左右但变换时间只有单路的四分之一,而系统吞吐量则达到单路的4倍。这说明了如果资源足够就可以不断地增加并行的路数以获得更快的处理速度和更大的吞吐量。本发明从离散傅里叶变换公式出发详细推导出可并行实现的FFT公式,设计了适合于FPGA实现的并行结构的FFT处理器,这种处理器把长序列分裂成几个较短的序列,然后并行送入几个可实现短序列FFT的处理单元并行地做FFT,各路FFT处理单元的计算结果并行送入一个特定结构的运算电路进行运算,然后并行输出最终的结果。实验结果表明,这种并行结构的FFT处理器可线性提高处理速度和系统吞吐量。由于资源所限本文只验证了两路并行和四路并行的情况,实际上如果处理速度要求更高时,还可以增加并行的路数,对系统进行扩展。权利要求1、一种基于FPGA实现并行结构FFT处理器的方法,用于进行N(N为2的k次幂,或不足k次幂,将序列补O使N变为2的k次幂,k为正整数)点的FFT运算,所述FPGA包含多个专用乘法器、多个大量块RAM、以及多个逻辑门,其特征在于,包括如下步骤(1)将所述N点等分为M段,每段具有N/M个点;(2)将所述N点的FFT运算,转化为所述M段(每段N/M个点)FFT运算的表达式;(3)提取步骤(2)所得表达式中各M段FFT运算表达式的系数,用所述专用乘法器、大量块RAM、及逻辑门通过所述FPGA内部电路实现所述系数与对应各M段FFT运算结果乘积,再将所述各段的乘积结果求和得到所述N点的FFT运算结果。2、如权利要求1所述的基于FPGA实现并行结构FFT处理器的方法,其特征在于,所述的M为2,步骤(2)所述的表达式为j2ffZ(w+W/2):^(w)-e,腊j^0),其中,w二N/2,X(w)为第1段FFT运算的表达式,X(w+iW2)为第2段FFT运算表达式,a(w)和j^mO为N/2点的FFT运算。3、如权利要求1所述的基于FPGA实现并行结构FFT处理器的方法,其特征在于,所述的M为4,步骤(2)所述的表达式为<formula>formulaseeoriginaldocumentpage3</formula>z(w+3語)=w:2z12(w)]-C21(>v)-w;^22(w)]其中,X(w)为第1段FFT运算的表达式,X(w+N/4)为第2段FFT运算的表达式,X(w+2N/4)为第3段FFT运算的表达式,X(w+3N/4)为第4段FFT运算的表达式,Xu(w)、X2,(w)和j^(w)分别为N/4点的FFT运算,WNw/2、WNW和为三个旋转因子表。全文摘要本发明公开了一种基于FPGA实现并行结构FFT处理器的方法,用于进行N点的FFT运算,FPGA包含多个专用乘法器、多个大量块RAM、以及多个逻辑门,包括如下步骤(1)将N点等分为M段,每段具有N/M个点;(2)将N点的FFT运算,转化为M段(每段N/M个点)FFT运算的表达式;(3)提取步骤(2)所得表达式中各M段FFT运算表达式的系数,用专用乘法器、大量块RAM、及逻辑门通过所述FPGA内部电路实现系数与对应各M段FFT运算结果乘积,再将各段的乘积结果求和得到N点的FFT运算结果。本发明把长序列分裂成较短序列,有效提高了长序列FFT的处理速度和系统吞吐量。文档编号G06F17/14GK101582059SQ200910054018公开日2009年11月18日申请日期2009年6月26日优先权日2009年6月26日发明者仝芳轩,亮刘,周正仙,刚席,魏皋,正黄申请人:上海华魏光纤传感技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1