The Wayback Machine - https://web.archive.org/web/20221025181423/https://baike.sogou.com/kexue/d10643.htm

FFTW

编辑

西方最快的傅立叶变换(FFTW)是麻省理工学院的马特奥·弗里戈和史蒂文·约翰逊开发的计算离散傅立叶变换的软件库[1][2]

FFTW以快速傅里叶变换(FFT)运算最快的自由软件实现而闻名(由常规基准支持)[3]。像许多其他实现一样,它可以在O(n log n)时间内计算任意大小和维度的实值和复值数组的变换。

1 库编辑

它通过支持多种算法并选择一种(将转换分解成更小的转换)来实现这一点,它在特定情况下的估计或测量是优选的。它在具有小素数因子的数组上工作得最好,2的幂是最佳的,大素数是最坏的情况(但仍然是O(nlogn))。为了将合成尺寸的变换分解成更小的变换,它在库利-图基快速傅立叶变换算法的几个变体中进行选择(对应于不同的因式分解和/或不同的存储器访问模式),而对于质数,它使用雷德或布鲁斯坦的快速傅立叶变换算法[4]。 一旦转换被分解成足够小的子转换形式,FFTW使用硬编码展开的FFT,对这些由代码生成(编译时,而不是运行时)产生的小尺寸FFT,使用包括库利-图基变量、雷德算法和素因子快速傅立叶变换算法在内的各种算法[4]

对于足够多的重复变换,在给定的阵列大小和平台上测量一些或所有支持的算法的性能是有利的。作者称之为“智慧”的这些变量可以存储在文件或字符串中,供以后使用。

FFTW有一个“古鲁界面”,旨在“尽可能多地展示底层FFTW架构的灵活性”。这尤其允许在一次调用中进行多维变换和多重变换(例如,数据在存储器中交错)。

FFTW对无序转换的支持有限(使用消息传递接口版本)。数据重新排序会带来开销,对于任意大小和维度的现场转换来说,这是不可避免的。这是没有记录的,因为转换这种开销是很重要的。

FFTW是根据GNU通用公共许可证获得许可的。它还获得麻省理工学院许可证进行商业许可(最高价格为12,500美元)[4] ,并在商业MATLAB矩阵包中[5] 用于计算FFT。FFTW是用C语言写的,但是存在Fortran和Ada接口,以及其他几种语言的接口。虽然库本身是C语言,但代码实际上是由一个名为“genfft” ,用OCaml编写的的程序生成的[6]

1999年,FFTW获得了威尔金森数字软件奖。

参考文献

  • [1]

    ^Frigo M, Johnson SG (1998). FFTW: an adaptive software architecture for the FFT. Proceedings of the 1998 IEEE International Conference on Acoustics, Speech and Signal Processing. 3. pp. 1381–1384. CiteSeerX 10.1.1.47.8661. doi:10.1109/ICASSP.1998.681704. ISBN 978-0-7803-4428-0..

  • [2]

    ^Johnson SG & Frigo M (September 2008). "ch.11: Implementing FFTs in practice". In C. S. Burrus. Fast Fourier Transforms. Houston TX: Connexions: Rice University..

  • [3]

    ^Homepage, second paragraph [1], and benchmarks page [2].

  • [4]

    ^Frigo M, Johnson SG (February 2005). "The design and implementation of FFTW3" (PDF). Proceedings of the IEEE. 93 (2): 216–231. CiteSeerX 10.1.1.66.3097. doi:10.1109/JPROC.2004.840301..

  • [5]

    ^Faster Finite Fourier Transforms: MATLAB 6 incorporates FFTW.

  • [6]

    ^"FFTW FAQ".

阅读 209
版本记录
  • 暂无