8

我正在尝试找到一种非常快速有效的傅里叶变换(FFT)。有谁知道有什么好的。我需要在 iPhone 上运行它,所以它不能很密集。相反,也许你知道一个类似小波的,我需要频率分辨率,但只需要一个窄带(最大 10khz 的人声音频范围......即使 10Khz 也可能太高了)。我还考虑截断这个 FFT 以保持频率分辨率,同时消除不需要的频带。这是给 iPhone 的

...我已经查看了 Aurio touch 中的 FFT,但似乎这是一个 int FFT,但我的应用程序使用浮点数.....尝试使程序适应 int FFT 是否会大大提高性能(我真的不想这样做……加上 aurio touch 使用了一个不是那么好的基数 2 FFT)。

4

6 回答 6

12

iPhone OS4 SDK 将包含 Accelerate 框架,它将(最终)为我们提供 Apple 编写的 FFT 函数

Accelerate 提供数百个针对 iPhone 和 iPod touch 优化的数学函数,包括信号处理例程、快速傅里叶变换、基本向量和矩阵运算,以及用于分解矩阵和求解线性方程组的行业标准函数。

于 2010-05-02T17:16:38.357 回答
8

我已经在 Objective-C 中封装了 Ooura 的 FFT 库。Ooura 的代码与 FFTW 的性能相当,但完全免费。

此代码使用双精度并具有多种内置窗口类型(矩形、布莱克威尔、三角形、汉明)。我使用 Ooura 的 FFT 代码来实现Welch 的方法,随着时间的推移,它会生成更平滑的光谱。

查看:http: //github.com/alexbw/iPhoneFFT

于 2009-12-05T19:44:36.347 回答
4

试试西方最快的傅立叶变换(FFTW),性能比别人好,但不是完全免费的。在此处查看有关商业用途的详细信息。显然,作为 ac 库,将其作为静态库链接到您的 iphone 应用程序应该没有问题。

于 2009-10-20T04:44:38.997 回答
3

FFTW 的性能为任意长度的 FFT 设定了标准 - 特别是对于 2 维和更大维度中 2 长度的非幂。FFTW 的商业许可证为 5000 美元,这可能符合您的预算,也可能不符合您的预算。

但是,听起来您有 1D 信号处理问题,在这种情况下您有更多选择 - 如果您可以进一步填充或采样数据到 2 的幂长度,那么许多库将提供合理的性能。查看FFTW 用于比较的 FFT 算法列表- 许多是免费的,有些可能就足够了。我可能会从很好的旧数值配方开始,它提供了一个简单的 2、1D FFT 实现免费和一些打字的能力 - 并且会非常节省内存。

顺便说一句 - 对于语音,你可能只需要去 3-4Khz ......对于人声来说,10Khz 的方式要高得多。

于 2009-10-20T06:17:12.160 回答
2

以下是 Ooura 数字软件的主要来源链接:

http://www.kurims.kyoto-u.ac.jp/~ooura/

这些年来我一直在使用 Ooura 的许多 FFT,我至少应该给他发送一个“domo”,并且我在几个正在开发的 iPad 和 iPhone 应用程序中使用了他真正的 radix-4。我确实翻译了代码以在 ARM 上以 32 位单精度运行。查看使用 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/

于 2010-05-02T07:30:46.017 回答
0

如前所述,Accelerate Framework 现在提供了一些可能对您有所帮助的 API。

查看:

加速框架参考

vDSP 参考

使用傅里叶变换

于 2013-03-25T21:27:55.247 回答