【发布时间】:2018-09-24 13:47:31
【问题描述】:
我正在构建一个需要能够显示实时频谱分析仪的应用。这是我在 iOS 上成功制作的版本:
我正在使用 Wendykierp JTransforms 库来执行 FFT 计算,并设法捕获音频数据并执行 FFT 函数。见下文:
short sData[] = new short[BufferElements2Rec];
int result = audioRecord.read(sData, 0, BufferElements2Rec);
try
{
//Initiate FFT
DoubleFFT_1D fft = new DoubleFFT_1D(sData.length);
//Convert sample data from short[] to double[]
double[] fftSamples = new double[sData.length];
for (int i = 0; i < sData.length; i++) {
//IMPORTANT: We cannot simply cast the short value to double.
//As a double is only 2 bytes (values -32768 to 32768)
//We must divide by 32768 before we cast to Double.
fftSamples[i] = (double) sData[i] / 32768;
}
//Perform fft calcs
fft.realForward(fftSamples);
//TODO - Convert FFT data into 20 "bands"
} Catch (Exception e)
{
}
在 iOS 中,我使用了一个库 (Tempi-FFT),它内置了计算幅度、频率和提供任何给定数量波段的平均数据的功能(我使用了 20 个波段,如图所示多于)。看来我对这个库没有那么奢侈,我需要自己计算。
寻找有关如何对 FFT 计算返回的数据进行交互的任何好的示例或教程。这是我收到的一些示例数据:
-11387.0, 183.0, -384.9121475854448, -224.66315714636642, -638.0173005872095, -236.2318653974911, -1137.1498541119106, -437.71599514435786, 1954.683405957685, -2142.742125980924 ...
寻找有关如何解释此数据的简单说明。我看过的其他一些问题要么无法理解,要么没有提供有关如何确定给定频段数量的信息:
【问题讨论】:
-
FFT 绝对不是一件简单的事情。第一个链接 (stackoverflow.com/questions/5010261/…) 提供了如何解释您的输出的最简单的解释。给我一点,我会针对您的问题发布具体答案。
-
发布了答案。希望对你有用!
标签: android fft audiorecord