2

我有一个关于使用 FFT 的问题。使用getBand(int i)带有Minim的函数,我可以提取特定频率的幅度并对其进行漂亮的映射。效果很好。

然而,这更像是一个好奇的问题。当我查看从使用相同频率两次播放同一首歌曲中提取的值时(因此幅度应该相同),但我得到的值非常不同 - 为什么会这样?

0.0,0.0,0.0,0.0,0.0,0.08706585,0.23708777,0.83046436,0.74603105,0.30447206
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.08706585,0.4790409,0.9608221,0.83046436,0.74603105
4

2 回答 2

3

您确定两种情况下的输入完全相同吗?如果您只是随机选取一首歌曲的片段,那么 FFT 的输出对于歌曲中的不同起点会有很大不同。

于 2010-04-05T11:31:03.930 回答
2

mp3 解码可能是不稳定的和/或 fft 例程的导入缓冲可能是不稳定的,(序列之前的静音长度不同)。在这种情况下,第二个输出中的导入看起来大约高 2 步。

然后,如果执行 fft 的时间间隔长于 fft 窗口大小,则引入的差异会导致 fft 窗口落在序列的完全不同的部分,这可以在以后解释非常不同的值在输出中。

如果您可以增加“时间分辨率”(每个给定时间执行的 fft 数量)或增加 fft 窗口大小,则情况应该更清楚,因此 fft 测量不会稀疏地完成。理想情况下,它们应该重叠,然后我们才能期望在不同步的扫描之间匹配一个模式。

于 2010-04-05T17:42:30.467 回答