利用Java中的FFT算法进行音频频谱分析

ita*_*ebo 4 java media audio fft java-me

我想用Java(ME)分析音频文件的频谱.我想像一些媒体播放器那样绘制频谱.但我不明白一些观点:

  1. FFT算法的输入,我必须从音频文件中获取.我现在不知道它叫什么,它是什么,更重要的是,我不知道如何得到它.
  2. 输出:如果输入是一个数组(范围?),我获得了其他数组,它的范围是:0-1,右(或不是)?那我和它有什么关系呢?

Pau*_*l R 14

除了FFT之外,还需要一些额外的步骤.这已经在SO先前的类似问题中已经多次报道了,您可以通过搜索"dsp","fft","spectrum","谱图"等找到其他材料,但基本上您需要执行以下操作:

  • 窗口函数应用于输入数据(例如Hann(ing))
  • 将FFT应用于加窗的输入数据(对于复数到复数的FFT,虚数输入应该都为零)
  • 计算第一个N / 2FFT输出箱的平方幅度(re * re + im * im)
  • 将平方幅度转换为dB标度(10 * log10(squared_magnitude))

  • Paul,我认为你在第一个评论中的意思是你可以使用`20*log10(sqrt(re*re + im*im))`(注意20)或`10*log10(re*re + im)*im)`,这将产生相同的结果. (4认同)
  • 好的 - 很好 - 如果这个或任何其他答案有帮助,那么请考虑进行投票和/或接受它. (2认同)