我必须使用 FFT 来分析音频文件的频率。但我不知道输入和输出是什么。
如果要绘制频谱的音频文件,是否必须使用 1 维、2 维或 3 维数组?有人可以向我推荐 J2ME 上的 FFT 库吗?
最佳答案
@thongcaoloi,
关于输入数据维度的简单答案是:您需要一维数据。现在我将解释这意味着什么。
因为你想分析音频数据,你输入到离散傅里叶变换(DFT或FFT),是一个一维的实数序列,代表音频信号随时间变化的电压,而你的音频文件是随时间变化的电压的数字表示。
您的音频文件是通过以固定采样率(也称为采样频率)对连续音频信号的电压进行采样而生成的,对于 CD 质量音频,通常为 44.1 KHz。
但是您的数据文件可能以低得多的频率采样,因此在对数据执行 FFT 之前,请尝试找出数据的采样频率。
所以现在您必须从音频文件中提取各个样本。如果您的文件是立体声的,它将有两个独立的样本序列,一个用于右声道,一个用于左声道。如果文件是单声道,它将只有一个样本序列。
如果您的文件是立体声或任何其他多 channel 音频格式(如 5.1 或 7.1),您可以分别对每个 channel 进行 FFT,或者您可以使用电压加法将任意数量的 channel 组合在一起。这取决于您,并且取决于您尝试对 FFT 结果执行的操作。
DFT 或 FFT 的输出是一个复数序列。每个复数都是一对由实部和虚部组成的对,通常显示为一对 (re,im)。
如果您想绘制音频文件的功率谱密度图,这是大多数人希望从 FFT 中得到的,您将绘制 20*log10( sqrt( re^2 + im^2 ) ),使用第一个FFT 输出的 N/2 复数,其中 N 是 FFT 的输入样本数。
您可以尝试构建自己的频谱分析仪软件程序,但我建议使用已经构建和测试过的软件。
这两款 FFT 频谱分析仪可立即给出结果,并具有内置的 IFFT 合成功能,这意味着您可以对频域频谱数据进行傅里叶逆变换,以在时域中重建原始信号。
http://www.mathworks.com/help/techdoc/ref/fft.html
http://www.sooeet.com/math/fft.php
这个主题还有很多内容,以及一般的数字信号处理主题,但这个简短的介绍应该能让您入门。
关于java - 快速傅里叶变换(FFT)输入输出分析Java音频文件的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6620544/