需要定点 FFT 算法

Posted

技术标签:

【中文标题】需要定点 FFT 算法【英文标题】:Fixed Point FFT Algorithm Needed 【发布时间】:2013-10-09 20:22:57 【问题描述】:

我正在为移动平台的音频应用程序开发一种算法。在我看来,目前许多移动处理器上的浮点计算支持并不普遍,在定点上开发会是一个更安全的选择。

我已经以浮点形式编写 FFT 例程已有一段时间了,并取得了一定程度的成功,但结果证明以定点形式编写 FFT 例程相当困难。也就是说,我很乐意提高精度,并找到一种方法来处理潜在的溢出。问题是,与浮点 FFT 不同,定点 FFT 算法的描述很难在 Internet 上找到。

有没有人有开发此类算法的经验?

【问题讨论】:

如果移动设备是指移动电话,请注意,目前出货的几乎所有智能手机都包含支持硬件浮点运算单元的 ARM 处理器。可能不适用于较旧的手机(PalmOS、android 1.x 等)和按钮传感器类型的硬件。 【参考方案1】:

您的首选应该是使用原生优化的 FFT。定点 FFT 的处理要求难以在可移植 C(或任何可能的语言)中有效表达:饱和算法可能是最大的障碍。汇编库将倾向于利用这些处理器特定的指令。

如果你还想要一个可移植的 ANSI C 定点 FFT,我只知道一个选择:kissfft。 (免责声明:我写的)

【讨论】:

嗨,Mark,实际上我几天前一直在阅读您的代码,看来您的代码确实是 Internet 上唯一一个用于定点 FFT 的现成解决方案。您可能是正确的,需要寻找平台原生 FFT 以获得最佳性能,我会研究一下。【参考方案2】:

我已经阅读了有关 http://anthonix.com/ffts/index.html 的精彩内容 - 这在移动平台上运行良好 - 该网站包含基准测试

【讨论】:

谢谢,我不知道这个,但我担心它也是为浮点数写的。【参考方案3】:

我一直致力于开发一种将浮点 C 代码转换为定点的自动化工具,它提供了多种选项来权衡准确性和执行时间。我使用多种算法取得了不错的结果,包括 2D 8x8 离散余弦变换。我的目标平台通常是 ARM Cortex-M 处理器,但在其他平台上应该可以实现类似的结果。你有兴趣让我来看看你的 FFT 吗?

【讨论】:

是的,那太好了,只是我在 Common Lisp 中工作是个问题吗?如有必要,我可以用 C 重写它,但这需要一两天时间。

以上是关于需要定点 FFT 算法的主要内容,如果未能解决你的问题,请参考以下文章

定点 MATLAB DSP 算法

如何在FPGA上建立MATLAB和Simulink算法原型

FFT算法理解

FFT与图像最大互相关算法

fft窄带高分辨率算法

用hadoop实现fft算法