快速傅立叶变换(FFT)输入和输出来分析Java中音频文件的频率?

tho*_*loi 10 java audio fft java-me

我必须使用FFT来分析音频文件的频率.但我不知道输入和输出是什么.

如果我想绘制光谱的音频文件,是否必须使用1维,2维或3维数组?有人可以建议我在J2ME上使用FFT库吗?

小智 29

@thongcaoloi,

关于输入数据维数的简单答案是:您需要一维数据.现在我将解释这意味着什么.

因为您想要分析音频数据,您对离散傅立叶变换(DFT或FFT)的输入是一维实数序列,表示音频信号随时间变化的电压,您的音频文件是数字的表示随时间变化的电压.

您的音频文件是通过以固定采样率(也称为采样频率)对连续音频信号的电压进行采样而产生的,对于CD质量音频,通常为44.1 KHz.

但是您的数据文件可能以更低的频率进行采样,因此在对该数据进行FFT之前,请尝试找出数据的采样频率.

所以现在你必须从你的音频文件中提取单个样本.如果您的文件是立体声,它将有两个单独的采样序列,一个用于右声道,一个用于左声道.如果文件是单声道,则它只有一个样本序列.

如果您的文件是立体声或任何其他多声道音频格式(如5.1或7.1),您可以单独对每个通道进行FFT,或者您可以使用电压添加将任意数量的通道组合在一起.这取决于你,取决于你想要对FFT结果做些什么.

DFT或FFT的输出是一系列复数.每个复数是由实部和虚部组成的对,通常显示为一对(re,im).

如果你想绘制音频文件的功率谱密度,这是大多数人想要的FFT,你将使用第一个N/2绘制20*log10(sqrt(re ^ 2 + im ^ 2))的图形FFT输出的复数,其中N是FFT的输入采样数.

您可以尝试构建自己的频谱分析仪软件程序,但我建议使用已经构建和测试过的东西.

这两个FFT频谱分析仪可立即给出结果,并具有内置的IFFT合成功能,这意味着您可以对频域频谱数据进行傅里叶变换,以在时域中重建原始信号.

http://www.mathworks.com/help/techdoc/ref/fft.html

http://www.sooeet.com/math/fft.php

这个主题还有很多内容,对于一般的数字信号处理主题,但是这个简短的介绍,应该让你开始.


小智 1

我记得FFT算法并没有那么复杂,我曾经为我的论文写过一个FFT计算类。此时输入是从 *.WAV 文件中读取的一维值数组。但在 FFT 之前,需要进行一些滤波和归一化。