我正在尝试使用 jTransforms 库对 WAV 文件进行频谱分析:官方网站
但是我在如何使用 jTransforms 将 WAV 文件转换为 FFT 可接受的输入时遇到问题,以及如何在 FFT 之后显示频谱?我搜索了谷歌,发现我需要以某种方式将 WAV 文件转换为double[]
or Complex[]
,然后我应该如何解释输出?
抱歉,我对 FFT 很陌生,所以这个问题听起来可能非常愚蠢。非常感谢!
我正在尝试使用 jTransforms 库对 WAV 文件进行频谱分析:官方网站
但是我在如何使用 jTransforms 将 WAV 文件转换为 FFT 可接受的输入时遇到问题,以及如何在 FFT 之后显示频谱?我搜索了谷歌,发现我需要以某种方式将 WAV 文件转换为double[]
or Complex[]
,然后我应该如何解释输出?
抱歉,我对 FFT 很陌生,所以这个问题听起来可能非常愚蠢。非常感谢!
我不知道你的图书馆,但我猜他们有关于如何应用转换的大量文档。
关于解释,如果您使用复数变换,您可以将实部解释为相应频率箱的能量,将虚部解释为正弦曲线的相位。功率谱密度 (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 输出中获得人工高频,而原始高频根本不存在。