关键字 |
离散傅立叶变换(DFT),快速傅立叶变换(FFT),反快速傅立叶变换(IFFT),一般分割基数,基数3/6,系统Verilog语言。 |
介绍 |
离散傅里叶变换(DFT)是几乎应用于所有科学和工程领域的最重要的工具之一。DFT可以用快速傅立叶变换(FFT)等高效算法来实现。最广泛使用的方法是所谓的2m算法,如基数2,基数4和分割基数FFT (SRFFT)。这类算法已经进行了大量的研究,并得到了迅速的发展。同时,对计算长度- n =km DFT的算法进行了研究,提出了和k=3和k=6的方法。 |
由于效率较差,当k≠2时,km的算法没有什么实际意义。然而,在许多应用中,序列长度为3m或6m。这封信的思想是开发一个有用的算法长度N=6m DFT。可用的已发表算法报告于;一般的分割基数算法似乎更适合于长度- DFT。在这封信中,我们提出了一种基于基数-6的算法。与已有的算法相比,该算法的实现效率更高。其计算复杂度约等于4.071给出的方程nloga¯害怕一个½¯害怕一个½n - 5.61 - 33.555 n + loga¯害怕一个½¯害怕½n - 130.992,接近标准SRFFT (SRFFT的复杂性是4 nloga¯害怕一个½¯害怕一个½N-6N + 8)。该算法采用基数3/6算法,使用基数(1,j)。该算法将大小为N=6m的DFT分解为一个长度为-N/ 3和四个长度为-N/6的子DFT。分解的灵活性使该算法能够胜任非6次幂DFT的实现,而其长度可以精确地除以6。 Appropriate permutations are used for sub DFTs input sequences to reduce the computational intension. |
文献调查 |
a.长度qx2m的基数2/8 FFT算法 |
针对任意长度N= qx2^m (m为奇数)的离散傅里叶变换,提出了一种新的基数-2/8快速傅里叶变换(FFT)算法。它大大减少了诸如数据传输、地址生成、旋转因子求值或对查找表的访问等操作,这些操作对FFT算法的执行时间有很大影响。结果表明,在大多数情况下,该算法的算术复杂度(乘法、加法)与现有的分基FFT算法相同。提出的算法背后的基本思想是使用基数2和基数8的混合索引映射。该算法以简单的矩阵形式表示,从而方便了算法的轻松实现,并允许扩展到多维情况。对于结构复杂性,该算法保留了Cooley-Tukey方法的重要特性,如使用蝴蝶格式和就地计算。它只适用于序列长度N=qx2m的DFT |
b.长度qx2m的基数2/16 FFT算法 |
通过适当混合基数-2、基数-4和基数-16索引映射,并结合一些中间因子[3],提出了基数-2/16频率抽取(DIF)快速傅里叶变换(FFT)算法及其更高的基数版本,即基数-4/16 DIF FFT算法。结果表明,本文提出的算法与现有的基数-2/4和基数-2/8 FFT算法需要完全相同的算术运算次数(乘法和加法)。通过使用这种技术,可以证明用于计算2m DFT的所有可能的基数- 2r/2rs类型的分基数FFT算法需要完全相同的算术运算次数。该算法只适用于长度为N=2m,且m为整数的序列。 |
提出基数3/6算法的实现 |
提出了一种适用于乘加运算指令的新的基数-6 FFT算法。在具有乘加指令的处理器上,新的基数-6 FFT算法比传统的基数-6 FFT算法需要更少的浮点指令。提出了一种计算基数-6 FFT的算法,该算法比传统的基数-6 FFT算法具有更少的浮点指令。在带有乘加指令的处理器上,比较了新基数-6 FFT算法与传统基数-6 FFT算法的浮点指令数。 |
离散傅里叶变换的定义是 |
|
在哪里 |
WN =e π, j=√−1,序列长度 |
假设{xn}是一个能被6整除的整数。对于长度为N的DFT,所提出的算法最适合6的幂次。显然,DFT可以分为三个长度为n /3的子DFT。为了推导出可能的最佳算法,我们继续分解三个子dft。由于前面没有比例因子;第一个子DFT应保持原样,并直接进入下一阶段的递归分解。另外两个子dft分为四个长度为n /6的子dft。实际上,如果一个DFT的长度可以除以6,那么该DFT就可以被该算法明确地分解。广义长度N可设为N= 2rx3m,其中r≥m-1。分解大小为N= 2rx3m的DFT,表示为 |
|
其中四个长度为n /6的子dft被重新排序。为简化描述,可表示为(2) |
|
在哪里 |
(4) |
在(3)中,Bk和Fk可以成对处理,因为和是共轭对。同样,Ck和Ek也可以成对处理。(3)的直接实现执行了许多不必要的操作,因为Xk、X2N/6+k、X4N/6+k、XN/6+k、X3N/6+k和XNN/6+k的计算结果是相互共享许多计算。特别是,如果我们把N/6加到K上,大小- DFT不会改变(因为它们是周期性的),而如果我们把2N/6加到K上,大小-N/3的DFT是不变的,所以,唯一改变的是,和项。为了减少操作的次数,以下六个身份是必要的: |
(5) |
(6) |
(7) |
(8) |
(9) |
(10) |
在上述6个方程中取0到N/6 -1的范围,可以得到一个完整的输出X {k}集。 |
我们现在总结了所提出的基数3/6 FFT算法的方案。将长度为n的初始输入序列{xn}分解为5个子序列。对每一个新的子序列依次重复这个过程,直到所有子dft的大小都不能被6整除。图1-3给出了3点、6点和12点基数3/6算法的流程图(2点和4点FFT可以用SRFFT进行)。 |
3点DFT需要4次实乘法和12次实加法(一些算法假设3点DFT是用2次实乘法和12次实加法计算的,因为不需要乘以1/2,乘以1/2可以用位移位来计算)。 |
初始输入序列{¯害怕一个½¯害怕一个½¯害怕一个½¯害怕一个½}长度- N是分解成5子。对每一个新的子序列依次重复这个过程,直到所有子dft的大小都不能被6整除。 |
Radix-3/6 DIF FFT可以推导如下 |
|
每个和,P (k), Q (k), R (k),被认为是一个N/3点DFT。变换X (k)可以分为三部分,如式(11)所示。 |
|
|
该算法递归地进行分解,直到所有子dft的长度不能被6整除。一般情况下,第一种特殊蝴蝶(r≥1,m≥1)只有1只,第二种特殊蝴蝶(r≥2,m≥1)只有1只,第三种特殊蝴蝶1只,第四种特殊蝴蝶(r≥3,m≥1)只有1只。总数的第五和第六类型的蝴蝶是2¯害怕一个½¯害怕一个½¯害怕一个½¯害怕一个½¯害怕害怕一个½¯½4。因此,本文算法的算术复杂度如式(14)所示。 |
|
结果与讨论 |
12点DFT序列已经在System Verilog中实现,并使用Modelsim Version 6.4进行了模拟。 |
,图4显示了12号radix-3/6算法的输入序列FFT即{¯害怕一个½¯害怕一个½¯害怕一个½¯害怕一个½}={1,2,3,4,5,6,7,8,9,10,11}的Modelsim仿真应用。 |
图5显示了给定输入序列的输出序列Xk={78,-6+22.3923i,-6+10.39i,-6+6i,-6+3.464i,-6+1.6i,-6,-6-1.6i,-6-3.4i, -6-6i,- 6-10.39i,-6-22.3923i}。 |
上图。6is the RTL (Register Transfer Level) Schematic for 12 point input sequence using radix 3/6 algorithm generated in Xilinx 9.1i. The schematic contains one 4-point SRFFT, four 2-point FFT and three 3-point FFTs butterfly blocks. |
图7为12点分割基数3/6 IFFT输入序列{Xk}={12,0,0,0,0,0,0,0,0,0,0}应用于Modelsim进行仿真的仿真结果。 |
仿真结果显示Fig.8 12点分裂基数3/6传输线的输出序列{¯害怕一个½¯害怕一个½¯害怕一个½¯害怕一个½}={0.999,0.999,0.999,0.999,0.999,0.999,0.999,0.999,0.999,0.999,0.999,0.999}。 |
未来的范围 |
使用Verilog实现16点RADIX 3/6 FFT设计,并使用Verilog系统进行验证。这些实现通常采用高效的快速傅立叶变换(FFT)算法,以至于术语“FFT”和“DFT”经常互换使用。DFT的同义词有限傅里叶变换(现在很少见)进一步模糊了这个术语,它显然早于术语“快速傅里叶变换”,但具有相同的初始化。 |
结论 |
针对长度为6m的DFT,提出了一种基数3/6的FFT算法。该算法是基数3和基数6的混合算法。它可以求非6次幂DFT,只要它的长度-6m能被6整除。为了减少操作次数,所有子dft都被有利地重新排序。与已发表的算法相比,该算法的实现需要较少的实际操作。其算法复杂度约为,接近标准的SRFFT算法。由于序列长度是不规则整数,很难得到一个完全准确的计算复杂度公式。 |
数字一览 |
|
参考文献 |
- M. Frigo和S. Johnson,“fftw3的设计与实现”,IEEE, vol. 93, no. 5。2,第216-231页,2005。
- J. Keiner, S. Kunis和D. Potts,“使用nfft 3-A软件库进行各种非均衡快速傅里叶变换”,ACM翻译。数学。软件(TOMS),第36卷,第2号。4,第19 - 19页,2005。
- D. Sepiashvili,“最优FFT实现的性能模型和搜索方法”,硕士论文,卡内基梅隆大学,匹兹堡,宾夕法尼亚州,2000。
- J. Cooley和J. Tukey,“复傅立叶级数的机器计算算法”,《数学》。计算机,第19卷,第19期。90,第297-301页,1965。
- P. Duhamel和H. Hollmann,“分基FFT算法”,电子通讯。,第20卷,第14-6页,1984年1月。
- Kamar和Y. Elcherif,“共轭对快速傅里叶变换”,电子。列托人。,vol. 25, no.5, pp. 324–325, Apr. 1989.
- S. Bouguezel, M. Ahmad和M. Swamy,“一种新的基数-2/8 FFT长度- dft算法”,IEEE翻译。电路系统。第51卷,不。9,第1723-1732页,2004年9月。
- E. Dubois和A. Venetsanopoulos,“基数-3 FFT的新算法”,IEEE翻译。Acoust。,Speech, Signal Process,, vol. ASSP-26, pp.222–225, Jun. 1978.
- S. Prakash和V. Rao,“一种新的基数-6 FFT算法,”IEEE翻译。Acoust。,Speech, Signal Process., vol. ASSP-29, no. 4, pp. 939–941,Aug. 1981.
- 杨志强,杨志强,“基于FFT的3、6和12基数的FFT算法”,《计算机科学与技术》。Acoust。,Speech, Signal Process., vol. ASSP- 34,no. 2, pp. 380–383, Apr. 1986.
|