我正在努力寻找一种非常快速有效的傅里叶变换(FFT)。有谁知道任何好的。我需要在iPhone上运行它,所以它不能是密集的。相反,也许你知道一个像小波一样的,我需要频率分辨率,但只需要一个窄带(声音音频范围最大可达10khz ......甚至10Khz可能太高)。我还想到截断这个FFT以保持频率分辨率,同时消除不需要的频带。这是一个iPhone的
...我已经看过Aurio touch中的FFT,但看起来这是一个int FFT,但我的应用程序使用了浮点数......它会给性能提升一点,试图让程序适应int是否FFT(我真的不喜欢这样做......加上aurio touch使用的是基数2 FFT,这不是很好)。
答案 0 :(得分:12)
The iPhone OS4 SDK will include the Accelerate framework,它将(最终)给我们Apple编写的FFT函数
加速提供数百个 数学函数优化 iPhone和iPod touch,包括 信号处理程序,速度快 傅立叶变换,基本向量和 矩阵运算,和 行业标准功能 分解矩阵和求解系统 线性方程组。
答案 1 :(得分:8)
我在Objective-C中包装了Ooura的FFT库。 Ooura的代码与FFTW具有相似的性能,但完全免费。
此代码使用双精度并具有多种内置窗口类型(矩形,Blackwell,Triangle,Hamming)。我使用Ooura的FFT代码来实现Welch's method,随着时间的推移,它将生成更平滑的光谱。
答案 2 :(得分:4)
答案 3 :(得分:3)
FFTW的性能设定了任意长度FFT的标准 - 特别是对于2维和更大尺寸的2个长度的非功率。 FFTW的商业许可证是5000美元,可能适合您的预算,也可能不适合您的预算。
然而,听起来你有1D信号处理问题,在这种情况下你还有一些选择 - 如果你可以进一步填充或采样数据到2的幂,那么许多图书馆将提供合理的性能。查看FFTW用于比较的list FFT算法 - 许多是免费的,有些可能就足够了。我可能从良好的旧数字recipes开始,它提供了一个简单的2,1D FFT实现的免费功能和一些打字 - 并且将非常节省内存。
顺便说一句 - 对于声音你可能只需要3-4Khz .... 10Khz就是那里的方式 人声。答案 4 :(得分:2)
以下是Ooura数值软件的主要来源链接:
http://www.kurims.kyoto-u.ac.jp/~ooura/
多年来我一直在使用Ooura的许多FFT,我至少应该给他一个“domo”,我在开发的几个iPad和iPhone应用程序中使用他的真实基数-4。我确实将代码翻译为32位单精度,以便在ARM上实现性能。观察使用XCode 3.2.2生成的组件,它可以很好地使用NEON SIMD指令进行矢量化。实际上我感到很失望,因为我愿意为了更多的性能而自己对代码进行矢量化。如果没有首先将FFT精确地转换为单精度,就无法实现这些优化。
虽然我已经使用了Objective-C多年,但我积极开发使用它,甚至教过使用它的面向对象编程课程,我没有准备这样的包装器(虽然我在1992年做了同样的回复不同的FFT)出于性能原因。
我至少在10年内没有对Ooura的FFT测试过FFTW,但是当我使用Ooura的库时,1024点实数FFT的速度更快。然而,FFTW现在可能做得更好 - 但是授权并为ARM进行交叉编译是不方便的,而且我总是发现FFTW对于我的DSP需求来说太过庞大和突兀。 Apple的VecLib非常好用,但不幸的是他们还没有将它移植到iPhoneOS。我在BugReporter中打开了一个功能请求,您也可以:https://bugreport.apple.com/
答案 5 :(得分:0)