为什么我的KISS FFT图显示y轴上镜像的重复峰值



我是FFT概念的初学者,所以我所理解的是,如果我输入1024个信号,我将返回513个区间,范围从0hz到22050Hz(在44100Hz采样率的情况下)。使用Cinder中的KISS FFT,getBinSize函数返回1024个信号输入的预期513值。我不明白的是为什么会出现重复的峰值。运行一个测试音频样本,其频率(按顺序)从20Hz到22000Hz,我在整个时间内看到两个峰值。它看起来像:

当音频播放时,峰值似乎相互移动,因此第二个峰值似乎确实是第一个峰值的镜像复制。我经历过的每个例子似乎都只是继续绘制所有513个值,它们似乎没有镜像问题。我不确定我错过了什么。

好的,在阅读了这篇文章之后,我找到了解决方案。镜像的原因是我对实数使用了FFT(实数FFT)。众所周知,普通FFT适用于复数。因此,虚部是";设置";在实际FFT中为0,导致中间附近的镜像(或者从技术上讲,镜像大约为0和N/2)。

以下是详细讨论:http://www.edaboard.com/thread144315.html(该页面已不可用,但archive.org上有一份副本)

阅读本书第238-242页(第12章)。太棒了,所以买吧。我想作者的网站上有一个免费的pdf版本:http://www.dspguide.com/

您可能正在绘制1024长度FFT的所有1024个FFT结果仓的大小,但上半部分只是下半部分的镜像(因为复数FFT的纯实数输入不能提供足够的自由度来使上半部分唯一)。

当围绕中心彼此镜像时,峰将朝向彼此移动。

另一种可能性是,你的FFT不知何故只有512的长度。

最新更新