我正在尝试使用C语言的FFT来找出录制声音的基本频率。有谁知道我可以修改和使用的C语言的开源实现吗?
谢谢!
发布于 2011-04-27 01:49:50
FFTW可能就是你要找的东西。
发布于 2014-08-30 10:20:16
我发现Ooura's C fft packages在实际应用中优于FFTW。以最佳方式使用FFTW需要时间和耐心才能使FFTW的智能系统正常工作,尤其是在交叉编译时。此外,FFTW附带了viral GPL license,所以如果不向他们支付一大笔钱,您就不能在闭源项目中使用它。
与FFTW不同,Ooura的代码具有非常宽松的许可证;此外,Ooura的工作不依赖于复杂的构建环境。除了FFTW,Ooura's code is either the fastest, or nearly the fastest, cross-platform FFT library.的运行速度大约是KISS FFT库的两倍,KISS FFT库由于某种原因仍然很受欢迎。Ooura的代码考虑到了两级CPU缓存,这在大多数现代处理器上都能很好地工作。
如果你真的觉得需要速度,那么你应该跳过FFTW和Ooura,直接去你的CPU制造商那里获得他们定制的FFT库。供应商提供的、特定于CPU的库往往是footrace中最快的。一些示例包括Intel MKL和clFFT。
另外,如果你想找出基本频率,别忘了老式的自相关。如果它对你来说足够好的话,它可能会比运行FFT快得多。请查看classic Rabiner paper以获得概述。
有人说他们需要一个支持单精度和双精度浮点数的FFT库。Armadillo可以做到这一点。如果您决定使用单精度浮点数来计算FFT,请完全确定您已测量并量化了结果中的误差量。FFT是一堆巨大的乘法,使用单精度FFT,舍入误差可以非常快地聚合在一起。你可以得到看起来不错但错了的结果。就当你被警告过..。
发布于 2011-04-27 02:00:55
另一个值得考虑的是D.J. Bernstein's。它有点复杂(就像FFTW一样),但在大多数测试中比大多数(包括FFTW)更快。
https://stackoverflow.com/questions/5794322
复制相似问题