为什么对fft使用整数算法

时间:2016-01-02 21:35:16

标签: integer fft

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

我正在寻找一些关于为什么通常需要或期望整数算法的澄清。我可以假设性能和内存开销会大大提高,但是对于为什么会很好的细节的指导。此外,什么是硬件应用程序,这实际上很重要? Arduino,移动?

我们非常感谢任何提示或指示信息。

3 个答案:

答案 0 :(得分:1)

在当今的几乎任何硬件应用中,设计一个仅整数算法是主要用于性能的。 传统上,任何通用数字处理器都包含执行整数运算的专用电路。现在想象一下,如果你必须在纸上做任何单浮点数学运算(假设数字不是完整的),你最终会使用一些技术将操作分解为多个整数运算。这是一个简单的例子:

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

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

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

答案 1 :(得分:0)

具有较少晶体管的处理器(例如Arduinos中的AVR芯片内)没有浮点运算硬件,浮点运算的软件仿真速度较慢且功耗效率较低。几十年前,当编写许多DSP教科书时,这种处理器更为常见(甚至对于机柜尺寸的小型计算机)。如今,较小的FPGA和物联网处理器意味着可以使用单个纽扣电池,甚至更小的电池(助听器等)进行操作,但仍可能存在晶体管数量有限的限制。

答案 2 :(得分:0)

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

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