首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有开源的快速傅立叶变换的C实现?

有没有开源的快速傅立叶变换的C实现?
EN

Stack Overflow用户
提问于 2011-04-27 01:45:33
回答 5查看 9.3K关注 0票数 3

我正在尝试使用C语言的FFT来找出录制声音的基本频率。有谁知道我可以修改和使用的C语言的开源实现吗?

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-04-27 01:49:50

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

票数 5
EN

Stack Overflow用户

发布于 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 MKLclFFT

另外,如果你想找出基本频率,别忘了老式的自相关。如果它对你来说足够好的话,它可能会比运行FFT快得多。请查看classic Rabiner paper以获得概述。

有人说他们需要一个支持单精度和双精度浮点数的FFT库。Armadillo可以做到这一点。如果您决定使用单精度浮点数来计算FFT,请完全确定您已测量并量化了结果中的误差量。FFT是一堆巨大的乘法,使用单精度FFT,舍入误差可以非常快地聚合在一起。你可以得到看起来不错但错了的结果。就当你被警告过..。

票数 4
EN

Stack Overflow用户

发布于 2011-04-27 02:00:55

另一个值得考虑的是D.J. Bernstein's。它有点复杂(就像FFTW一样),但在大多数测试中比大多数(包括FFTW)更快。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5794322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档