代码之家  ›  专栏  ›  技术社区  ›  Anders

用FFT计算同一源的振幅差

  •  2
  • Anders  · 技术社区  · 15 年前

    我有一个关于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
    
    2 回复  |  直到 13 年前
        1
  •  3
  •   Paul R    15 年前

    您确定两种情况下的输入完全相同吗?如果你只是随机选取一首歌的一段,那么FFT的输出将是 非常

        2
  •  2
  •   strainer    15 年前

    mp3解码可能是片状的和/或fft例程的引入缓冲可能是片状的(序列之前的静默长度不同)。 在这种情况下,在第二个输出中,引入大约大2步。

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