1

ここStackOverflowで、加速度計データでのFFTの実行に関するさまざまな投稿を読みましたが、どれも私の問題を理解するのに役立ちませんでした.

次の方法で、加速度計アレイでこのFFT 実装を実行しています。data

int length = data.size();
double[] re = new double[256];
double[] im = new double[256];
for (int i = 0; i < length; i++) {
    input[i] = data[i];
}

FFT fft = new FFT(256);
fft.fft(re, im);

float outputData[] = new float[256];
for (int i = 0; i < 128; i++) {
    outputData[i] = (float) Math.sqrt(re[i] * re[i]
    + im[i] * im[i]);
}

(左)の内容をプロットし、outputDataR を使用してデータの FFT を実行しました (右)。 FFT

ここで何が間違っていますか?他の場所で見られるのと同じコードを FFT の実行に使用しています。

編集: ウィンドウ関数を適用するための @PaulR のアドバイスと、@BjornRoche が提供するリンク ( http://baumdevblog.blogspot.com.br/2010/11/butterworth-lowpass-filter-coefficients.html ) に従って、私は私の問題を解決することができました。解決策は、そのリンクで説明されているものとほとんど同じです。これは今の私のグラフです: http://imgur.com/wGs43

4

2 に答える 2

3

低周波アーチファクトは、おそらくウィンドウ処理の欠如によるものです。ウィンドウ関数を適用してみてください。

全体的なシフトは、おそらく 2 つの異なる FFT 実装のスケーリング係数が異なるためです。私の推測では、256 倍のスケーリングの違いに対応する 24 dB のシフトが見られると思います。

于 2012-08-17T15:42:41.143 に答える