FFT 用の Apache math commons 実装 ( FastFourierTransformerクラス) を使用して、8 つのデータ サンプルが 1 つの完全な正弦波に寄与しているダミー データを処理したいと考えました。最大振幅は 230 です。私が試したコード スニペットは以下のとおりです。
private double[] transform()
{
double [] input = new double[8];
input[0] = 0.0;
input[1] = 162.6345596729059;
input[2] = 230.0;
input[3] = 162.63455967290594;
input[4] = 2.8166876380389125E-14;
input[5] = -162.6345596729059;
input[6] = -230.0;
input[7] = -162.63455967290597;
double[] tempConversion = new double[input.length];
FastFourierTransformer transformer = new FastFourierTransformer();
try {
Complex[] complx = transformer.transform(input);
for (int i = 0; i < complx.length; i++) {
double rr = (complx[i].getReal());
double ri = (complx[i].getImaginary());
tempConversion[i] = Math.sqrt((rr * rr) + (ri * ri));
}
} catch (IllegalArgumentException e) {
System.out.println(e);
}
return tempConversion;
}
1) メソッドtransformによって返されるデータは、複素数の配列です。その配列には、入力データの周波数成分情報が含まれていますか? または、作成した tempConversion 配列に頻度情報が含まれますか? tempConversion 配列の値は次のとおりです。
2.5483305001488234E-16
920.0
4.0014578493024757E-14
2.2914314707516465E-13
5.658858581079313E-14
2.2914314707516465E-13
4.0014578493024757E-14
920.0
2)私はたくさん検索しましたが、ほとんどの場所では、アルゴリズムが期待するデータの形式(よりよく理解するためのサンプルコードの観点から)と、結果の配列を使用して含まれる頻度を計算する方法についての明確なドキュメントがありません。信号?