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

__ _ __ | < strong> __ _ __ _ __ | __ _ __

随着音频的播放,这些峰值似乎彼此接近,因此第二个峰值确实确实是第一个峰值的镜像副本。我经历的每个示例似乎都只是继续绘制所有513个值,并且它们似乎没有这个镜像问题。我不确定我缺少什么。

有帮助吗?

解决方案

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

这里是详细讨论: http://www.edaboard.com/thread144315.html

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

其他提示

您可能正在绘制1024个长度FFT的所有1024个FFT结果仓的大小,但是上半部分只是下半部分的镜像(因为仅向复数ftf的实数输入不能提供足够的度数让上半部变得独一无二的自由)。

当彼此围绕中心镜像时,峰将彼此靠近。

另一种可能性是您的FFT长度只有512。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top