次のように、org.apache.commons.math3.transform ライブラリを使用して実数から複素数への FFT を実行しています。
private Complex[] fft(double[] values) {
FastFourierTransformer ffTransformer = new FastFourierTransformer(DftNormalization.STANDARD);
Complex[] result = ffTransformer.transform(values, TransformType.FORWARD);
return result;
}
これにより、結果を含む org.apache.commons.math3.complex 配列が得られます。これはうまくいきます。
ここで、JCufft ライブラリでまったく同じことを実行したいと考えています。私は次のようにそれをやろうとしました:
private Complex[] fft(double[] values) {
double inputJCufft[] = values.clone();
double outputJCufft[] = new double[values.length * 2];
cufftHandle plan = new cufftHandle();
JCufft.cufftPlan1d(plan, values.length, cufftType.CUFFT_D2Z, 1);
JCufft.cufftExecD2Z(plan, inputJCufft, outputJCufft);
JCufft.cufftDestroy(plan);
Complex[] result = BaseHelper.getComplexArray(outputJCufft);
return result;
}
public static Complex[] getComplexArray(double[] input) {
List<Complex> result = new ArrayList<Complex>();
for (int i = 0; i < input.length - 1; i = i + 2) {
result.add(new Complex(input[i], input[i + 1]));
}
return result.toArray(new Complex[result.size()]);
}
しかし、結果を比較していると、それらは互いに異なります。私が考慮していないこと、何が間違っているのですか?
ご協力いただきありがとうございます。