这个java FFT函数完成了吗?

这个java FFT函数完成了吗?,java,android,fft,Java,Android,Fft,我正在使用FFT库 我的代码运行如下: int bufferSize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); AudioRecord audioRecord = new AudioRecord( MediaRecorder.AudioS

我正在使用FFT库

我的代码运行如下:

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();
int bufferSize=AudioRecord.getMinBufferSize(44100,
AudioFormat.CHANNEL\u CONFIGURATION\u MONO,AudioFormat.ENCODING\u PCM\u 16位);
音频记录=新的音频记录(
MediaRecorder.AudioSource.DEFAULT,44100,
AudioFormat.CHANNEL\u CONFIGURATION\u MONO,AudioFormat.ENCODING\u PCM\u 16位,bufferSize);
short[]buffer=新的short[blockSize];
double[]toTransform=新的double[blockSize];
录音。开始录制();
while(启动){
int bufferReadResult=audioRecord.read(缓冲区,0,块大小);
对于(int i=0;i
我确实得到了一个有效的结果,但问题是输出频率的振幅以某种类似正弦波的方式明显振荡,这有点奇怪,因为它应该是常数


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

根据代码中的注释,
ft
方法是实入复出的。适合什么?你还没有说你想做什么,我只是想在给定的声音中找出最突出的频率in@ronnied:说“虚部产生相位”和“实部产生振幅”是不正确的。@ronnied:正如Oli所说,这是不正确的-
magnity=sqrt(re^2+im^2)
phase=atan2(im,re)