iOS 上的 fft numpy 样式以两个数据长度的非幂加速

fft numpy style on iOS accelerate with non power of two data length

我正在努力在 iOS (swift) 上重新实现 python 代码。

我需要对一维数据块执行 fft(numpy 样式)。每个大小为 1050(windowed 音频数据)。

谢天谢地,我找到了有关如何以 numpy 样式 (link) 进行 iOS fft 的相关解释和代码片段。

但是,我被困在加速框架只支持在 power of 2 input data length (or more recently、f * 2^n 上执行 fft 的地方,其中 f 是 3、5 或 15,n 至少是 3)。

我在 window 大小 1050 上测试了我的 python 代码。非常适合我的用例。但由于上述限制,在 iOS 上实现起来并不简单。

深入研究 numpy c 代码以了解它们是如何处理两个长度的非幂数的并不是那么容易。这个 answer 对我来说是一个很好的起点,但仍然没有得到它。

速度在这里也很重要,这就是为什么我不考虑暴力 dft。

如有任何指导,我们将不胜感激。

IIRC,对于 fft,在底层,numpy 使用 fftpack,它是旧 NCAR Fortran 数学库的 C 转换。 Python 代码中未实现实际的 numpy fft。您很可能会使用 Xcode 编译一些 fftpack C 代码,并使用桥接头从 iOS Swift 代码中调用它。

您的 answers/comments 指导我使用 c/c++ 代码来获得所需的结果。 (我最初并不认为这是一种选择)。

我最终使用了 opencv dft 函数(它在内部实现了 fft),它产生与 numpy 的 fft 相似的结果(+ 根据他们的文档,它比 numpy 更快)。