专利名称:基于复用模块的N点FFT快速实现方法、装置及FPGA芯片
专利类型:发明专利
专利申请号:CN202310343945.2
专利申请(专利权)人:扬州宇安电子科技股份有限公司
权利人地址:江苏省扬州市广陵区文昌东路15号江广智慧城东苑四号楼
专利发明(设计)人:李继锋,项孙林,李晃,朱文明
专利摘要:本发明提出一种基于复用模块的N点FFT快速实现方法、装置及FPGA芯片,方法包括步骤:获取离散序列;对离散序列进行第一次排序;并行输入第一次排序后的数据,并对每次输入的数据进行第一预设级数的多级基2‑FFT运算;对完成多级基2‑FFT运算得到的数据进行第二次排序;并行输入第二次排序后的数据,并对每次输入的数据进行第二预设级数的多级基4‑FFT运算;输出结果等。本发明采用复用资源,以及基2、基4的混合基形式,实现N点FFT计算,减少乘法计算的同时,能够适用于更多的使用情况。
主权利要求:
1.一种基于复用模块的N点FFT快速实现方法,其特征在于,包括步骤:获取具有N个数据的离散序列x(N);
对离散序列x(N)进行第一次排序,使在不同级需要进行复乘运算的数据位于同一个系统时钟内;
并行输入第一次排序后的数据,并对每次输入的数据进行第一预设级数Num1的多级基
2‑FFT运算,以按时间抽取方式或按频率抽取方式进行多级基2‑FFT运算,进行多级基2‑FFT运算的过程中,每完成log2m级运算,对计算得到的数据进行一次排序,m表示数据并行处理的路数;
对完成多级基2‑FFT运算得到的数据进行第二次排序,使在不同级需要进行复乘运算的数据位于同一个系统时钟内;
并行输入第二次排序后的数据,并对每次输入的数据进行第二预设级数Num2的多级基
4‑FFT运算,以按时间抽取方式或按频率抽取方式进行多级基4‑FFT运算,进行多级基4‑FFT运算的过程中,每完成log4m级运算,对计算得到的数据进行一次排序;
对完成多级基4‑FFT运算得到的数据,以按照数据顺序与初始获取到的离散序列x(N)中的N个数据的顺序相同的方式输出,作为运算结果;
其中,按频率抽取方式进行多级基2‑FFT运算和多级基4‑FFT运算时,包括步骤:对完成多级基4‑FFT运算得到的数据进行最后排序,使数据顺序与初始获取到的离散序列x(N)中的N个数据的顺序相同;
将最后排序得到的N个数据作为N点FFT的运算结果并输出。
2.根据权利要求1所述的一种基于复用模块的N点FFT快速实现方法,其特征在于:所述离散序列x(N)为采样得到的雷达信号。
3.一种基于复用模块的N点FFT快速实现装置,其特征在于,包括数据获取模块,用于获取具有N个数据的离散序列x(N);
排序模块,用于对数据进行排序,即:对离散序列x(N)进行第一次排序,使在不同级需要进行复乘运算的数据位于同一个系统时钟内,以及,对完成多级基2‑FFT运算得到的数据进行第二次排序,使在不同级需要进行复乘运算的数据位于同一个系统时钟内;
多级基2‑FFT运算模块,用于并行输入数据并对每次输入的数据进行第一预设级数Num1的多级基2‑FFT运算,以按时间抽取方式或按频率抽取方式进行多级基2‑FFT运算,进行多级基2‑FFT运算的过程中,每完成log2m级运算,对计算得到的数据进行一次排序,m表示数据并行处理的路数;
多级基4‑FFT运算模块,用于并行输入数据并对每次输入的数据进行第二预设级数Num2的多级基4‑FFT加减和复乘运算,以按时间抽取方式或按频率抽取方式进行多级基4‑FFT运算,进行多级基4‑FFT运算的过程中,每完成log4m级运算,对计算得到的数据进行一次排序;
输出模块,用于对完成多级基4‑FFT运算得到的数据,以按照数据顺序与初始获取到的离散序列x(N)中的N个数据的顺序相同的方式输出,作为运算结果;
其中,按频率抽取方式进行多级基2‑FFT运算和多级基4‑FFT运算时,包括步骤:对完成多级基4‑FFT运算得到的数据进行最后排序,使数据顺序与初始获取到的离散序列x(N)中的N个数据的顺序相同;
将最后排序得到的N个数据作为N点FFT的运算结果并输出。
4.一种FPGA芯片,其特征在于,包括:
时钟模块,用于产生系统时钟;
ADC模块,用于对外部输入的模拟信号进行采集,形成m路并行数据;
滤波器模块,用于对信号滤波,产生时域实部和虚部的m路并行数据;
N点FFT模块,用于对时域实部和虚部的m路并行数据进行FFT计算,产生频域实部和虚部的m路并行数据;
其中,所述N点FFT模块执行权利要求1‑2任一所述基于复用模块的N点FFT快速实现方法。 说明书 : 基于复用模块的N点FFT快速实现方法、装置及FPGA芯片技术领域[0001] 本发明涉及FPGA技术领域,具体涉及一种基于复用模块的N点FFT快速实现方法、装置及FPGA芯片。背景技术[0002] 在软件中FFT(fastFouriertransform,快速傅里叶变换)是一种快速方便的方法将信号从时域变换到频域,但在FPGA中,实现FFT变换则需要资源、时序、时钟数等诸多因数的综合考量。使用IP核时,可选的实现方式多样,且为了具有较高的普遍性,时序会相当的好,这也导致时钟数的增加。在要求使用资源较少时则更是需要大量的时钟数。这种使用IP核的方法,其所需时钟较多,不能满足雷达侦察、干扰领域中的在某些应用时所需快速反应。在雷达侦察和干扰领域中,首先需要将处于射频的数据通过微波混频下变频为中频数据,然后使用模数转换器对中频的模拟信号转换为数字信号,然后通过滤波将不需要的信号滤去,同时形成时域的实部和虚部数字信号,随后进行FFT计算。现有的FFT算法存在以下问题:[0003] 1、使用N点傅里叶变换时,当N是一个比较大值时资源和速度难以同时处于一个比较好的状态。[0004] 2、在使用FPGA进行FFT变化时,单一的基数有各自的缺点,只采用基2‑FFT计算方式时所需要的计算级数多,且所需的乘法次数较多。基4‑FFT只能适应以4为底的N点FFT计算。发明内容[0005] 技术目的:针对上述技术问题,本发明提出了一种基于复用模块的N点FFT快速实现方法、装置及FPGA芯片,通过采用复用资源,以及基2、基4的混合基形式来实现N点FFT计算,可以减少乘法计算的同时,适用于更多的使用情况。[0006] 技术方案:为实现上述技术目的,本发明采用了如下技术方案:[0007] 一种基于复用模块的N点FFT快速实现方法,其特征在于,包括步骤:[0008] 获取具有N个数据的离散序列x(N);[0009] 对离散序列x(N)进行第一次排序,使在不同级需要进行复乘运算的数据位于同一个系统时钟内;[0010] 并行输入第一次排序后的数据,并对每次输入的数据进行第一预设级数Num1的多级基2‑FFT运算;[0011] 对完成多级基2‑FFT运算得到的数据进行第二次排序,使在不同级需要进行复乘运算的数据位于同一个系统时钟内;[0012] 并行输入第二次排序后的数据,并对每次输入的数据进行第二预设级数Num2的多级基4‑FFT运算;[0013] 对完成多级基4‑FFT运算得到的数据,以按照数据顺序与初始获取到的离散序列x(N)中的N个数据的顺序相同的方式输出,作为运算结果。[0014] 优选地,对于具有N个数据的序列x(N),复用N点FFT模块次数为fadc/fsys,fadc为数据采集时钟频率,fsys为系统时钟频率。[0015] 优选地,以按时间抽取方式或按频率抽取方式进行多级基2‑FFT运算或多级基4‑FFT运算;[0016] 进行多级基2‑FFT运算的过程中,每完成log2m级运算,对计算得到的数据进行一次排序;进行多级基4‑FFT运算的过程中,每完成log4m级运算,对计算得到的数据进行一次排序,m表示数据并行处理的路数。[0017] 优选地,按频率抽取方式进行多级基2‑FFT运算和多级基4‑FFT运算时,包括步骤:[0018] 对完成多级基4‑FFT运算得到的数据进行最后排序,使数据顺序与初始获取到的离散序列x(N)中的N个数据的顺序相同;[0019] 将最后排序得到的N个数据作为N点FFT的运算结果并输出。[0020] 优选地,所述离散序列x(n)为采样得到的雷达信号。[0021] 一种基于复用模块的N点FFT快速实现装置,其特征在于,包括[0022] 数据获取模块,用于获取具有N个数据的离散序列x(N);[0023] 排序模块,用于对数据进行排序;[0024] 多级基2‑FFT运算模块,用于并行输入数据并对每次输入的数据进行第一预设级数Num1的多级基2‑FFT运算;[0025] 多级基4‑FFT运算模块,用于并行输入数据并对每次输入的数据进行第二预设级数Num2的多级基4‑FFT加减和复乘运算;[0026] 输出模块,用于将最后排序得到的N个数据作为N点FFT的运算结果并输出。[0027] 一种FPGA芯片,其特征在于,包括:[0028] 时钟模块,用于产生系统时钟;[0029] ADC模块,用于对外部输入的模拟信号进行采集,形成m路并行数据;[0030] 滤波器模块,用于对信号滤波,产生时域实部和虚部的m路并行数据;[0031] N点FFT模块,用于对时域实部和虚部的m路并行数据进行FFT计算,产生频域实部和虚部的m路并行数据;[0032] 其中,所述N点FFT模块执行所述基于复用模块的N点FFT快速实现方法。[0033] 有益效果:由于采用了上述技术方案,本发明具有如下有益效果:[0034] 本发明在使用FPGA完成FFT计算时,使得资源使用、FFT计算所需时钟数等方面取得一个较好的权衡。附图说明[0035] 图1为本发明提出一种复用形式下的FFT运算的流程图;[0036] 图2为基2‑FFT方法针对16个并行数据完成FFT计算所需乘法次数的示意图;[0037] 图3为基4‑FFT方法针对16个并行数据完成FFT计算所需乘法次数的示意图;[0038] 图4为分裂基‑FFT方法针对16个并行数据完成FFT计算所需乘法次数的示意图;[0039] 图5为按时间抽取基2‑FFT方法下的FFT运算的流程图;[0040] 图6为按频率抽取基2‑FFT方法下的FFT运算的流程图;[0041] 图7为按频率抽取混合基‑FFT方法下的FFT运算的流程图;[0042] 图8为按时间抽取混合基‑FFT方法下的FFT运算的流程图一;[0043] 图9为按时间抽取混合基‑FFT方法下的FFT运算的流程图二;[0044] 图10为按频率分裂基2‑FFT方法下的FFT运算的流程图。具体实施方式[0045] 下面结合附图对本发明的实施例作详细的说明。[0046] 实施例一[0047] 本发明提出一种基于复用模块的N点FFT快速实现方法,包括以下步骤:[0048] 获取具有N个数据的离散序列x(N);[0049] 对离散序列x(N)进行第一次排序,使在不同级需要进行复乘运算的数据位于同一个系统时钟内;[0050] 并行输入第一次排序后的数据,并对每次输入的数据进行第一预设级数Num1的多级基2‑FFT运算;[0051] 对完成多级基2‑FFT运算得到的数据进行第二次排序,使在不同级需要进行复乘运算的数据位于同一个系统时钟内;[0052] 并行输入第二次排序后的数据,并对每次输入的数据进行第二预设级数Num2的多级基4‑FFT运算;[0053] 对完成多级基4‑FFT运算得到的数据,以按照数据顺序与初始获取到的离散序列x(N)中的N个数据的顺序相同的方式输出,作为运算结果。[0054] 其中,排序主要是使N个数据中在不同级需要复乘的数据放在同一个时钟。对于不同的N点,复用N点FFT模块次数仍然为fadc/fsys,以按时间抽取方式或按频率抽取方式进行多级基2‑FFT运算或多级基4‑FFT运算。[0055] 进行多级基2‑FFT运算的过程中,每完成log2m级运算,对计算得到的数据进行一次排序;进行多级基4‑FFT运算的过程中,每完成log4m级运算,对计算得到的数据进行一次排序,m表示数据并行处理的路数,则按时间抽取排序次数为ceil(log2N/log2m),按频率抽取排序次数为ceil(log2N/log2m)+1,log2N为只按基2处理的总运算级数,log2m表示一次排序按基2所能运算的级数,每使用1级基4能代替2级基2,即每1级基4能使运算级数‑1。[0056] 若按频率抽取方式进行多级基2‑FFT运算和多级基4‑FFT运算,包括步骤:[0057] 对完成多级基4‑FFT运算得到的数据进行最后排序,使数据顺序与初始获取到的离散序列x(N)中的N个数据的顺序相同;[0058] 将最后排序得到的N个数据作为N点FFT的运算结果并输出。[0059] 最后排序是使得数据顺序与开始计算N点FFT的数据顺序相同。[0060] 本发明完成上述运算主要需要时钟模块、ADC模块、滤波器模块和N点FFT模块,时钟模块主要产生所需要的时钟;ADC模块则是对模拟信号采集,形成m路并行数据;滤波器模块主要是对信号滤波,产生时域实部和虚部的m路并行数据;N点FFT对实部和虚部的m路并行数据进行FFT计算,产生频域实部和虚部的m路并行数据。[0061] 如图1所示,本实施例提出一种基于复用模块的N点FFT的FPGA快速实现方法,其采用复用资源和基2/基4的混合基形式来实现N点FFT计算。而对于在FFT不同级与同一个数据计算所需的数据是不同的,这意味着单个时钟的部分数据需要在FFT的计算过程中改变,即对N点FFT计算的数据进行排序。[0062] (一)N点DFT的计算优化[0063] 由于直接计算DFT的计算量过于庞大,通常在具体的实现时会采用FFT的方法来进行计算的简化。这种方法通过使用下面的式子进行DFT计算的简化。[0064] N=r1r2…rk…ri,其中,k,i,ri∈N+,[0065] 式子将一个直接进行N点的DFT分解为一共i次,第k次需要rk点的DFT计算量,使得计算量大大降低。[0066] 当r1=r2=…=ri=2(或是4)时就将其称为基2(4)‑FFT运算。在N点FFT的实现过程中,采用较大的基意味着完成FFT的计算级数更少,但其旋转因子和加法过程会更加复杂。基2‑FFT和基4‑FFT因其在运算过程其旋转的角度为180/90度,能最大程度的简化计算。其他的基数因旋转角度不同上面的两个,系数和计算过程较为复杂,且更大的基每次运算时有很长的加法过程,并可能会带来额外的乘法运算。综上考虑,通过基2或是基4的方式是比较好的FFT计算方法。[0067] 比较基2‑FFT和基4‑FFT两种方式,可以发现只采用基2‑FFT计算方式时所需要的计算级数为log2N,大于基4所需计算级数log4N,且所需的乘法次数也更多,而基4‑FFT的缺点是N只能是以4为底的整数次幂的值。[0068] (二)FFT的复用实现及排序[0069] 以128点FFT的计算为例,以基2‑FFT的方式来完成计算则需要进行7级计算。考虑到一个时钟完成128个数据的一级计算需要大量的资源和苛刻的时序要求,采用复用的形式可以大量减少使用的资源。这里采用了并行16路数据,其中每路数据分为实数和虚数两个部分,复用8个时钟完成128点FFT计算。[0070] 当以并行16路数据的方式输入数据时,无论是按时间抽取或是按频率抽取的方式,第一步基2需要对第1、65、33、97、17、81、49、113个数据点进行计算,即意味着基2‑FFT方式对第一级运算的数据并不同时存在于1到16个数据中,需要在计算前必须先进行排序操作。基4‑FFT也是同理,需要进行排序。[0071] 以基2‑FFT完成16个点的运算只能进行4级运算,这意味着若以基2‑FFT运算方式则16个并行数据最多支撑4级运算,以基4‑FFT运算方式则16个并行数据最多支撑2级运算。以基2‑FFT完成128计算需要7级,这意味着完成128点至少2次排序。[0072] 图2、图3和图4分别示出了基2‑FFT、基4‑FFT、分裂基FFT三种方法针对16个并行数据完成FFT计算所需乘法次数,其中,白色部分为基2‑FFT计算,灰色部分为基4‑FFT运算。[0073] 每级FFT运算都需要进行乘法和加法。由图2中可以看出只使用基2‑FFT时需要进行4级运算,每级乘法运算需要8次复乘。按每级运算中加法需要1个时钟,复乘需要6个时钟计算,则完成16个并行数据的4级基2‑FFT计算共需28个时钟,32次复乘运算。只使用基4‑FFT时需要进行2级运算,每级乘法运算需要12次复乘。同样地,可推出完成16个并行数据的2级基4‑FFT共需14个时钟,24次复乘运算。[0074] 使用分裂基的情况则相对于基2‑FFT和基4‑FFT运算方式更加复杂。为了完成16个并行数据的FFT计算时能够同时进行排序,所以分裂基的使用不能像N点FFT中使用的那样,需按照16个点的去使用。具体的使用如图4所示。按频率抽取时,基4‑FFT奇数的部分保持使用,其中偶数的部分通过理解为基2‑FFT部分的偶数部分,从而变为基2‑FFT中不需要使用乘法的部分。由图4可知,完成16个并行数据共需23次复乘。而在每一行中的通过和并加法,最大时钟也能不超过14个。该方式相较于只使用基4的方式减少了1次乘法,但其排序是变得更复杂。[0075] (三)对于旋转因子参与乘法时的简化[0076] 再来考虑不同的旋转因子数量的问题。仍以频率抽取为例,当采用基2‑FFT方式进行128点FFT计算时,最后一级只有1种相同的旋转因子,其值为1,此时该级的乘法可以退化为加法,只需1个时钟就能完成。倒数第二级只有两种不同的旋转因子,其值为1和‑i,此时该级的乘法同样可以退化为加法,只需要1个时钟也能完成。倒数第三级有四种不同的旋转因子,其值为1、√2/2(1‑i)、‑i、√2/2(‑1‑i),需要进行乘法操作的只有2个数,在位宽比较下的时候可以增加时钟来进行移位与加法来完成该乘法,但该操作会使时序会差一些,需要多个时钟完成(跟位宽有较大的关系,这里按4个时钟计算)。当旋转因子数量少,并且都是常数的情况下,可以使用移位/加法方法来进行优化。同理,倒数第四级需要进行乘法操作的有6个数,可以尝试考虑增加时钟和使用移位与加法来完成该乘法。[0077] 当进行到倒数第五级或者更前面的级数,旋转因子在前后两个时钟是不同的,此时若仍采用增加时钟和使用移位与加法的方式则意味着每级需按照该方式进行14个复乘,且复用的效果变差。该方式会使得时序变差,资源增加。此时使用DSP(digitalsingnalprocessor,数字信号处理器)无疑是个更好的选择。本发明所称DSP,是指FPGA中的一种资源,专门用来进行乘法等运算,运算速度快,但DSP的数量是有限的,若使用DSP超过了上限,则该FPGA无法运行。另外本发明涉及基2、基4、分裂基的具体的计算步骤,可参考《数字信号处理――原理、算法与应用》(第四版),[美]JohnG.Proakis,DimitrisG.Manolakis著。[0078] (四)几种方式的实现比较及混合基‑FFT的计算优势[0079] 方式1、按时间抽取基2‑FFT为例,当N=128:[0080] 如图5所示,前2级共需2个时钟,第3、4级进行移位/加减运算,按1+4共5个时钟计算,共需10个时钟,第5、6、7级每级需要8个复乘,需1+6共7个时钟,则共需24个复乘,21个时钟,考虑到需要两次排序,每次排序最少8个时钟,共需16个时钟,则整个过程需要49个时钟,24个复乘。[0081] 方式2、按频率抽取基2‑FFT为例,当N=128:[0082] 如图6所示,相比时间抽取,每一级的加减和与旋转因子的乘法运算顺序交换,及计算的数据对象变化,其大致计算量差不多,在计算完成后输出顺序因不是顺序的,所以需再多一级排序:即整个过程需要57个时钟,24个复乘。[0083] 方式3、按频率抽取基2/基4混合基‑FFT为例,当N=128:[0084] 如图7所示,先进行2级基4‑FFT运算,每级需要12个复乘,需1+6共7个时钟,则共需14个复乘,14个时钟;第3级进行移位/加减运算,需5个时钟;第4、5级需要2个时钟。此外过程中需3次排序,所以整个过程共需45个时钟,24个复乘。[0085] 方式4、按时间抽取基2/基4混合基‑FFT为例,当N=128:[0086] 如图8所示,相比频率抽取,按时间抽取的方式少了最后一级排序,其他过程类似,顺序相反,不同的是它第1次排序只进行3次基2‑FFT计算,第2次排序进行2次基4‑FFT计算。所以整个过程共需37个时钟,24个复乘。有时为了其他功能需要,也可再进行一次排序,如图9所示。[0087] 方式5、按频率抽取分裂基‑FFT为例,当N=128:[0088] 如图10所示,以按基2‑FFT频率抽取的方式上进行的,前4级按分裂基来,最后3级按基2来,但其复杂的顺序也需经过排序,则共需要45个时钟,23个复乘。[0089] 将上面5种方式的计算情况列入表1中,进行比较。[0090] 表1[0091]方式 具体方式 排序次数 所需时钟数 所需复乘次数1 按时间抽取基2‑FFT 2 49 242 按频率抽取基2‑FFT 3 57 243 按频率抽取混合基‑FFT 3 45 244 按时间抽取混合基‑FFT 2 37 245 按频率抽取分裂基‑FFT 3 45 23[0092] 由表1可以看出,方式4按时间抽取进行混合基‑FFT的方式拥有着最少的时钟、较少的复乘次数和较好的时序,是一种比较好的方式,能够在资源使用、FFT计算所需时钟数等方面取得一个较好的权衡。[0093] 实施例二[0094] 本实施例提出一种基于复用模块的N点FFT快速实现装置,包括:[0095] 数据获取模块,用于获取具有N个数据的离散序列x(N);[0096] 排序模块,用于对数据进行排序;[0097] 多级基2‑FFT运算模块,用于并行输入数据并对每次输入的数据进行第一预设级数Num1的多级基2‑FFT运算;[0098] 多级基4‑FFT运算模块,用于并行输入数据并对每次输入的数据进行第二预设级数Num2的多级基4‑FFT加减和复乘运算;[0099] 输出模块,用于将最后排序得到的N个数据作为N点FFT的运算结果并输出。[0100] 实施例三[0101] 本实施例提出一种FPGA芯片,包括:[0102] 时钟模块,用于产生系统时钟;[0103] ADC模块,用于对外部输入的模拟信号进行采集,形成m路并行数据;[0104] 滤波器模块,用于对信号滤波,产生时域实部和虚部的m路并行数据;[0105] N点FFT模块,用于对时域实部和虚部的m路并行数据进行FFT计算,产生频域实部和虚部的m路并行数据;N点FFT模块执行实施例一所述基于复用模块的N点FFT快速实现方法。[0106] 以上显示和描述了本发明的基本原理、主要特征和优点。本行业的技术人员应该了解,上述实施例不以任何形式限制本发明,凡采用等同替换或等效变换的方式所获得的技术方案,均落在本发明的保护范围内。
专利地区:江苏
专利申请日期:2023-04-03
专利公开日期:2024-09-03
专利公告号:CN116467554B