0

我正在尝试使用 jTransforms 库对 WAV 文件进行频谱分析:官方网站

但是我在如何使用 jTransforms 将 WAV 文件转换为 FFT 可接受的输入时遇到问题,以及如何在 FFT 之后显示频谱?我搜索了谷歌,发现我需要以某种方式将 WAV 文件转换为double[]or Complex[],然后我应该如何解释输出?

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

4

1 回答 1

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 输出中获得人工高频,而原始高频根本不存在。

于 2012-01-16T18:57:37.473 回答