2012-04-21 22 views
0

センサーから得た浮動小数点数の配列を持ち、FFTで信号を実行した後(その前にサンプルをハイパスフィルターとHannウィンドウ関数を使用して処理した後に)振幅を取得する必要があります。1D 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(); 

私はいくつかの奇妙な結果を持って、トラブルのロックを持って、これを実行:パラメータとして、私は次のコードを思い付いてきた複素数の配列を受け取りAForge.MathライブラリFFTクラスを使用して

問題について

最初に10の入力値:

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に設定すべきだと言った。

私は本当にこれを解決するための助けに感謝します。

+1

でその式を置き換えたいものである場合

それらが正の値であると確信していますか? –

+1

GebbがRIGHTの場合、結果の複素数の絶対値を計算する方法が間違っています。 –

答えて

5

この式

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

は私には少し奇妙に見えます。 xの絶対値をここで取得しようとしていますか?次に、想像上の部分と実部分を2の累乗にして、それらの平方根をとらないようにしてください。絶対値があなたがちょうどあなたはx.Reとx.Im.の平方根を取っている

x.Magnitude 
+1

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

+0

ありがとうGebb :) – pguzewicz