0

我正在使用 FFT 库

https://code.google.com/p/audio-analyzer-for-android/source/browse/fftLibrary/src/com/google/corp/productivity/specialprojects/android/fft/RealDoubleFFT.java?r=782834ed0be5d47a23df4e6609ef9401fad58e95

我的代码运行如下:

int bufferSize = AudioRecord.getMinBufferSize(44100,
                    AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
AudioRecord audioRecord = new AudioRecord(
                    MediaRecorder.AudioSource.DEFAULT, 44100,
                    AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);

short[] buffer = new short[blockSize];
double[] toTransform = new double[blockSize];

audioRecord.startRecording();

while (started) {
   int bufferReadResult = audioRecord.read(buffer, 0, blockSize);
   for (int i = 0; i < blockSize && i < bufferReadResult; i++) {
       toTransform[i] = (double) buffer[i] / 22050; // signed 16 bit
   }
   transformer.ft(toTransform);
}

audioRecord.stop();

我确实得到了一个有效的结果,但问题是输出频率的幅度以某种类似正弦波的方式明显振荡,这有点奇怪,因为它应该是恒定的。

我知道 FFT 通常具有复杂的部分,但上面的库只是提供了真正的价值。这个 FFT 库适合使用还是我遗漏了什么?

4

0 回答 0