0

センサーから取得したフロート配列があり、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に設定する必要があると言っていました。

私はこれを解決するためにいくつかの助けを本当にいただければ幸いです。

4

1 に答える 1

5

この表現

Math.Sqrt(Math.Sqrt(x.Re) + Math.Sqrt(x.Im))

私には少し奇妙に見えます。ここの絶対値を取得しようとしていxますか?次に、虚数部と実数部を2の累乗に上げる必要があります。それらの平方根を取るのではなく、

絶対値が必要な場合は、その式を次のように置き換えます。

x.Magnitude
于 2012-04-21T21:07:31.947 に答える