任何开源快速傅立叶变换C实现?

Val*_*adu 3 c

我试图在C中使用FFT找到录制声音的基频.有人会知道C中的开源实现我可以修改和使用吗?

谢谢!

joh*_*yrd 6

我发现Ooura 的 C fft 包在实际用途上优于 FFTW。最佳地使用 FFTW 需要时间和耐心才能使 FFTW 的智慧系统正常工作,特别是在交叉编译时。此外,FFTW 还附加了病毒式 GPL 许可证,因此如果不向他们支付一大笔钱,您就无法在闭源项目中使用它。

与 FFTW 不同,Ooura 的代码拥有非常宽松的许可证;此外,Ooura 的工作并不依赖于复杂的构建环境。除了 FFTW 之外,Ooura 的代码是最快或几乎最快的跨平台 FFT 库。 它的运行速度大约是 KISS FFT 库的两倍,KISS FFT 库由于某种无法解释的原因仍然很受欢迎。Ooura 的代码考虑了两级 CPU 缓存,适用于大多数现代处理器。

如果您确实需要速度,那么您应该跳过 FFTW 和 Ooura,直接向 CPU 制造商索取他们的自定义 FFT 库。供应商提供的 CPU 特定库往往是竞赛中最快的。一些示例包括英特尔 MKLclFFT

另外,如果您想找到基频,请不要忘记良好的老式自相关。如果它足够适合您,它可能比运行 FFT 快得多。查看经典的拉宾纳论文以了解概述。

有人说他们需要一个能够处理单精度和双精度浮点数的 FFT 库。 犰狳可以做到这一点。如果您决定使用单精度浮点来计算 FFT,请完全确定您已经测量并量化了结果中的误差量。FFT 是一大堆乘法,对于单精度 FFT,舍入误差确实可以非常快地聚合。您可能会得到看起来不错但实际上是错误的结果。考虑一下自己受到警告...


Gui*_*rie 5

FFTW可能就是你要找的东西.

  • @ Steve314可以计算任意尺寸的FFT.两种幂的情况恰好是最快且最容易实现的,但是存在快速算法来计算任何输入大小的傅里叶变换. (2认同)