センサーから取得したフロート配列があり、FFTを介して信号を実行した後、振幅を取得したいと考えています(その前に、サンプルはハイパスフィルターとハンウィンドウ関数を使用して処理されていました)。
AForge.MathライブラリのFFTクラスを使用します。これは、パラメータとして複素数の配列を取ります。次のコードを思いつきました。
Complex[] complex = new Complex[1024];
for (int i = 0; i < 1024 - 1; i++)
{
complex[i] = new Complex(windowedSamples[i], 0);
}
FourierTransform.FFT(complex, FourierTransform.Direction.Forward);
return complex.Select(x => Math.Sqrt(Math.Sqrt(x.Re) + Math.Sqrt(x.Im))).ToArray();
これを実行すると、奇妙な結果が得られ、問題をロックするのに問題があります。
最初の10個の入力値:
0 0 -3.8454E-05 0.0001737584 0.0006910793 0.001071334 0.00204984 0.00276812 0.001741312 0.001796867
最初の10個の出力値:
0.482303347948843 0.706458195192639 NaN NaN NaN NaN NaN NaN NaN NaN
私の最初の推測は、それは架空の部分を持ったものかもしれないということでしたが、これまで読んだすべてのことは、この場合は0に設定する必要があると言っていました。
私はこれを解決するためにいくつかの助けを本当にいただければ幸いです。