这个java FFT函数是完整的吗?

时间:2013-07-28 23:08:27

标签: java android fft

我正在使用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库是否适合使用,或者我错过了什么?

0 个答案:

没有答案