适用于Android的标准FFT类/库?

时间:2013-03-05 14:50:47

标签: android signal-processing fft frequency sine

我打算通过音频“可视化”一些图形数据。为了简化:我从一些图像数据中获得了一堆频率和相关的幅度值。这个频率/幅度表 - 允许说256对数据 - 必须转换成相关的正弦波形。

一种解决方案是为eeach表输入生成具有不同频率的正弦波形。这意味着生成高达256次的正弦波形。但我猜这很慢。那么使用FFT转换应该是更好的解决方案吗?

所以我的问题是:是否有适用于Android的快速且易于使用的FFT标准可用于此?

1 个答案:

答案 0 :(得分:4)

在我的Android项目中,我使用JTranforms在Android上运行完美。

示例代码:

android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);

AudioRecord ar = // initialize AudioRecord here;
ar.startRecording();

// Here's the Fast Fourier Transform from JTransforms
DoubleFFT_1D fft = new DoubleFFT_1D(samples.length);

do {
  // Read audio to 'samples' array and convert it to double[]
  ar.read(samples, 0, samples.length);

  // Will store FFT in 'samplesD'
  fft.realForward(samplesD);

} while ( /* condition */ );

ar.stop();
ar.release();

更新:

可以在 github JTransforms上维护的here找到它,并且可以作为 Maven 插件here使用。

要与最近的Gradle版本一起使用,请执行以下操作:

dependencies {
    ... 
    implementation 'com.github.wendykierp:JTransforms:3.1'
}