将实部和虚部 FFT 输出转换为频率和幅度

Dav*_*ore 2 math fft frequency-analysis

我正在设计一个嵌入在 FPGA 芯片上的实时音频分析器。完成的系统将读取实时音频流以及 X 个最流行频率的输出频率和幅度对。

到目前为止,我已经设法实现了 FFT,但它的当前输出只是每个窗口的实部和虚部,我想知道的是,如何将其转换为频率和幅度对?

我一直在阅读有关 FFT 的内容,我看到了如何将它们转换为幅度和相位关系,但我需要一种格式,让没有复杂数学知识的人可以阅读!

谢谢


感谢您的快速回复!

我现在得到的 FFT 输出是连续的实数和虚数对流。我不确定是否将它们分解成与我的输入数据包(64 个值)相同大小的数据包,并将它们视为一个数组,或者单独处理它们。

采样率,我没有问题。当我自己配置​​ FFT 时,我知道它正在运行 50MHz 的全局时钟。至于数组索引(如果输出当然是数组......),我不知道。

如果我们说输出是一系列 64 个复数值的一维数组:

1) 如何找到数组索引 [i]?

2)每个数组会返回单个频率部分还是多个频率部分?

非常感谢您的帮助!没有它我会迷路的。

Nov*_*vak 5

嗯,坏消息是,没有办法解决需要理解复数的问题。好消息是,仅仅因为它们被称为复数并不意味着它们很复杂。 因此,首先,查看维基百科页面,对于我想说的音频应用程序,请阅读第 3.2 节,可能会跳过关于平方根的部分:http : //en.wikipedia.org/wiki/Complex_number

这告诉您的是,如果您有一个复数a + bi,您可以将其想象为位于位置 (a,b) 的 x,y 平面中。要获得幅度和相位,您只需找到两个量:

  • 距平面原点的距离,即大小,以及
  • 与 x 轴的角度,即相位

大小很简单:sqrt(a^2 + b^2)。

该阶段同样简单:atan2(b,a)。