我是FFT概念的初学者,所以我理解的是,如果我输入1024个信号,我将获得513个区间,范围从0hz到22050Hz(在44100Hz采样率的情况下)。在Cinder中使用KISS FFT,getBinSize函数返回1024个信号输入的预期513值。我不明白为什么会出现重复的峰值。运行经过20Hz到22000Hz频率(按顺序)的测试音频样本,我看到整个时间有两个峰值。它看起来像:
的 的 __ _ __ | 的 __ _ __ _ __ | 的 的 __ _ __
当音频播放时,峰值似乎相互移动,因此第二个峰值似乎确实是第一个峰值的镜像副本。我经历过的每个例子似乎只是继续绘制所有513个值并且它们似乎没有这个镜像问题。我不确定我错过了什么。
答案 0 :(得分:5)
好的,在阅读完之后我找到了解决方案。镜像的原因是因为我对实数使用FFT(实数FFT)。众所周知的普通FFT适用于复数。因此,虚部是" set"在实际FFT中为0,导致中间的镜像(或者从技术上讲,镜像大约为0和N / 2)。
以下是详细讨论:http://www.edaboard.com/thread144315.html
阅读本书第238-242页。太棒了,所以买吧。我想在作者的网站上有一个免费的pdf版本:http://www.dspguide.com/
答案 1 :(得分:1)
您可能正在绘制1024长度FFT的所有1024个FFT结果区间的幅度,但上半部分只是下半部分的镜像(因为对复杂fft的实际输入不能提供足够的度数)让上半部分独一无二的自由)。
当彼此的镜像相对于中心时,峰将朝向彼此移动。
另一种可能性是你的FFT只有长度512.