在WAV文件上使用jTransforms库?

时间:2012-01-10 09:38:26

标签: java fft wav frequency-analysis

我正在尝试使用jTransforms库对WAV文件进行频谱分析:Official Site

但是我在如何使用jTransforms将WAV文件转换为可接受的FFT输入方面存在问题,如何在FFT之后显示频谱?我在Google周围搜索过,发现我需要以某种方式将WAV文件转换为double[]Complex[],然后我应该如何解释输出?

抱歉,我对FFT很新,所以这个问题可能听起来非常愚蠢。非常感谢!

1 个答案:

答案 0 :(得分:2)

我不知道您的图书馆,但我猜他们有关于如何应用变换的大量文档。

关于解释,如果使用复数变换,您可以将实部解释为相应频率仓的能量,将虚数解释为正弦曲线的相位。 功率谱密度(PSD)可以通过

计算
real(fftData)*conj(fftData) 

等于

abs(fftData^2)

(所以将实部与它们的复共轭相乘)。

您可能需要考虑的一件事是重新调整您的fft输出。一些算法将输出与fftSize成比例缩放。所以你必须将输出乘以1 / fftSize。

最后一件事你不知道,你只需要取fft输出的一半,因为频谱是对称的。 中间bin(fftSize / 2)通常是镜像基频,等于fftData [0]。这标志着奈奎斯特频率,这是您可以使用给定的fftSize分析的最高频率。 因此,如果您想要显示高达22kHz的频率,请确保您的fftSize至少为44k。

FFT存在许多缺陷,因此请务必阅读一些部分并了解您在那里做了什么。如果你只想使用它,数学本身并不重要,所以你可以跳过它们。

编辑:还有更多。考虑使用锥形窗口(高斯,汉明,汉宁......)对输入数据进行加权,以避免在您不将整个wav文件作为输入提供时产生令人讨厌的边缘效应。否则,你的fft输出中会出现人为的高频,这些高频并不存在于原始声中。