java - 快速傅里叶变换(FFT)输入输出分析Java音频文件的频率?

标签 java audio java-me fft

我必须使用 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/

相关文章:

java - j2me中解析字符串

java - 如何制作向用户显示图像而不是文本的下拉列表?

java - j2me 应用程序中的无效应用程序错误

java - 如何在 Jersey-Test 中发布 JSON 请求

android - 在Android应用中阻止 “play”耳机按钮

Java 编译错误(Java 中的 Amazon Mechanical Turk 和 REST 示例)

ios - 播放声音无延迟 iOS

html - 我想停止/跳过30秒的HTML音频

java - spring-data-mongodb 可选查询参数

java - 使用 JAX-RS 将 JSON 查询参数转换为对象