10

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)私はたくさん検索しましたが、ほとんどの場所では、アルゴリズムが期待するデータの形式(よりよく理解するためのサンプルコードの観点から)と、結果の配列を使用して含まれる頻度を計算する方法についての明確なドキュメントがありません。信号?

4

1 に答える 1

13

出力データは正しく見えます。各周波数ビンでの複素FFT出力の大きさを計算しました。これは、そのビンの対応する周波数での入力信号のエネルギーに対応します。入力は純粋に実数であるため、出力は複素共役対称であり、最後の3つの出力値は冗長です。

だからあなたは持っています:

Bin     Freq        Magnitude
  0     0 (DC)        2.5483305001488234E-16
  1     Fs/8        920.0
  2     Fs/4          4.0014578493024757E-14
  3     3Fs/8         2.2914314707516465E-13
  4     Fs/2 (Nyq)    5.658858581079313E-14
  5     3Fs/8         2.2914314707516465E-13  # redundant - mirror image of bin 3
  6     Fs/4          4.0014578493024757E-14  # redundant - mirror image of bin 2
  7     Fs/8        920.0                     # redundant - mirror image of bin 1

予想どおりの頻度に対応するビン1(およびビン6)を除いて、すべての値は事実上0Fs/8です。

于 2012-08-23T07:20:22.873 に答える