データセットでFFTを実行した後、どのように振幅と対応する周波数を得ることができますか?データセットの振幅と周波数をプロットする必要があります。また、FFT配列のサイズを実際のデータセットの2倍にするのはなぜですか?結果の出力配列のサイズが再び異なっている、私はこのFFTコードを理解するのを助けてください。さらに、複雑なFFTが実行されるときと、realForward FFTが実行されるときは、どちらですか?両者の違いは?私は、データセットに対してFFTを実行し、FFTの後の大きさと、それぞれの大きさに対応する周波数を取得する必要があります。FFTの後にマグニチュードと対応する周波数を取得する方法
int length = data.length;
FloatFFT_1D fftDo = new FloatFFT_1D(length);
float[] fft = new float[length * 2];
System.arraycopy(data, 0, fft, 0, length);
fftDo.complexForward(fft);
//for(double d: fft) {
//System.out.println(d);
//}
float outputfft[] = new float[(fft.length+1)/2];
if(fft.length%2==0){
for(int i = 0; i < length/2; i++){
outputfft[i]= (float) Math.sqrt((Math.pow(fft[2*i],2))+(Math.pow(fft[(2*(i))+1], 2)));
}
}else{
for(int i = 0; i < (length/2)+1; i++){
outputfft[i]= (float) Math.sqrt((Math.pow(fft[2*i],2))+(Math.pow(fft[(2*i)+1], 2)));
}
}
for (float f : outputfft) {
System.out.println(f);
}
stacktraceを追加してください – Fildor
長さ/ 2 +1!=長さ+1/2 ... 'float outputfft [] =新しいfloat [(data.length + 1)/ 2];' vs 'for(int i = 0; i
Fildor
返事をありがとう。しかし、私は実際に配列のサイズが異なる理由を理解していません。私は自分の質問を変更して、私が実際に望んでいることをより明確にするようにしました。私はJavaとFFTには新しいです。できるだけコードを理解するのを助けてください..私はちょうどさまざまなソースからコピーしようとし、私のデータセットでそれを実装しようとしました。しかし、あなたが提案した変更を行った後でさえ、それを動作させることができませんでした。 stacktrace..doを追加する方法がわからない場合は、すべてのステップで出力を印刷するだけですか? – Aqua