【问题标题】:why use an integer algorithm for fft为什么对 fft 使用整数算法
【发布时间】:2017-07-20 23:41:51
【问题描述】:

我正在做一个简单的信号处理项目,我在输入信号上应用 fft,在频率范围内找到一个峰值,围绕该峰值频率进行滤波,然后在生成的通带中绘制信号。我已经在 python 中完成了这项工作,现在我被要求在 C 中使用整数算法。

我正在寻找一些说明,说明为什么通常需要或需要整数算法。我可以假设性能和内存开销会大大提高,但是任何关于为什么细节的指导都会很棒。此外,哪些硬件应用程序实际上很重要? Arduino,手机?

感谢任何提示或信息指针。

【问题讨论】:

  • 这不是你应该向要求你这样做的人提出的问题吗?
  • 我正在寻找一般的响应,而不是针对特定应用程序量身定制的响应。那么,总的来说,在 fft 中使用整数算法有什么好处。
  • 嗯,这是一个相当广泛的职权范围!但是假设“整数算法”仅仅意味着只执行整数运算的 FFT,那么答案基本上是它在浮点运算成本过高的任何地方都很有用,例如没有 FPU(或等效)的平台。

标签: integer fft


【解决方案1】:

在当今几乎所有的硬件应用程序中,设计一个纯整数算法都是可取的,主要是为了提高性能。 传统上,任何通用数字处理器都包含专用电路来执行整数运算。现在想象一下,如果您必须在纸上进行任何单个浮点数学运算(假设数字不是整数),您最终会使用某种技术将运算分解为多个整数运算。这是一个简单的例子:

1.1 * 2.0 =
(1 * 2) + (0.1 * 2) =
(1 * 2) + (1 * 2) * 0.1 =
(1 * 2) + (1 * 2) / 10

所以这里一个浮点乘法变成了 2 个整数乘法,一个除法和一个加法。您现在可以想象,任何编译器都会为您执行此转换,以便整数处理电路可以完成工作,并且每次完成此操作时 CPU 指令的总量都会增加很多。

现代处理器将具有专用的浮点电路,但即使如此,与整数处理电路相比,该电路也更加复杂,并且需要更多时间来完成指令。

【讨论】:

  • 对于浮点运算的执行方式,这是一个非常糟糕的类比(实际上,它在精神上更接近于简单的长乘法)。科学计数法中的数字相乘会是一个更好的类比。
  • 因此“简单化”,查尔斯沃思先生。我正在演示如何用笔和纸做到这一点,以吸引不太熟悉处理器实际工作原理的人。如果您觉得还有更多内容要添加 - 只需添加即可。
【解决方案2】:

具有较少晶体管的处理器(例如在 Arduinos 中的 AVR 芯片中)没有浮点运算硬件,并且浮点运算的软件仿真速度要慢很多,而且能效也低得多。几十年前,当编写许多 DSP 教科书时,此类处理器更为普遍(即使对于机柜大小的小型计算机也是如此)。如今,旨在使用单个纽扣电池甚至更小的电池(助听器等)运行的小型 FPGA 和物联网处理器可能仍然存在这种有源晶体管数量限制。

【讨论】:

    【解决方案3】:

    我正在考虑进行整数 FFT,因为我必须将我的 RTL2832 加密狗的输出从 8 位无符号数提升为浮点数,这样我才能进行 FFT。看起来有点傻,每秒采样 200 万次。

    但除此之外,我认为浮点处理器更像计算器而不是计算机。他们可能在内部使用 BCD 而不是二进制,它们使用以 10 为底的数字(就像我们一样)而不是以 2 或 16 为底。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 2013-02-21
      • 2020-05-24
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多