使用FFT声音输入计算频率(Calculate Frequency from sound input

2019-08-31 09:07发布

我的应用程序。 正在显示在RPM输入声音的峰值频率..我有双打的数组包含在时域中的采样。

audioRecord.read(buffer, 0, 1024);

于是我做了FFT就可以了。

transformer.ft(toTransform);

使用这个类在这里

然后,我就复杂的值,其是FFT结果的最大大小

//块大小= 1024

double magnitude[] = new double[blockSize / 2];

            for (int i = 0; i < magnitude.length; i++) {
                double R = toTransform[2 * i] * toTransform[2 * i];
                double I = toTransform[2 * i + 1] * toTransform[2 * i * 1];

                magnitude[i] = Math.sqrt(I + R);
            }
            int maxIndex = 0;
            double max = magnitude[0];
            for(int i = 1; i < magnitude.length; i++) {
                if (magnitude[i] > max) {
                    max = magnitude[i];
                    maxIndex = i;
                }
            }

现在,我得到的最大大小... 1的指数 - 我怎样才能在细节请波峰的频率? 2 - 是否有任何所谓的ComputeFrequency()或getFrequency()功能齐全? 提前致谢 :)

Answer 1:

对应于给定FFT单元索引的频率由下式给出:

f = i * Fs / N;

哪里:

Fs = sample rate (Hz)
N = FFT size
i = bin index

因此,对于你的峰值指数maxIndex和FFT的大小blockSize峰的频率将是:

f = maxIndex * Fs / blockSize;

见这个答案的更多细节。



文章来源: Calculate Frequency from sound input using FFT