0

MSVS 2008 で FFTW3 ライブラリを使用して、一部のデータの r2c DFT (n=128) を実行しています。実際のデータ DFT の出力の前半だけが使用されていることがわかりました...出力を見ていると、これは正しいようです。

0-64 --> 入力の変換の実際の部分のようです。

65-127 --> は常に 4.8367e-026 です (FFTW doc に従って使用されていないため、ゼロになると予想していた理由がわかりません)

これまでのところ正しく動作しているように見えますが、パワー密度スペクトルを描画したいので、虚数部も必要ですよね? 問題は、次を使用するだけで可能だと思っていた変換の虚数部にアクセスする方法を見つけることができなかったことです。

for(int i=0; i < 128; i++)
{
    std::cout << "FFT Im-Part: " << *out[i][1] << "\n";
}

どうやってやるの?

ご協力いただきありがとうございます!

4

1 に答える 1

3

out[i][0]は複素ビン i の実部、out[i][1]は虚部です。

テスト コードを次のように変更します。

for(int i=0; i < 128; i++)
{
    std::cout << "FFT Im-Part: " << out[i][1] << "\n";
}

ビン周波数に関して: N ポイント FFT と Fs のサンプル レートの場合、ビン k に対応する周波数は次のとおりです。

f = Fs * k / N

したがってFs = 44.1 kHz、128 ポイントの FFT がある場合、ビン 0 = 0 Hz、ビン 1 = 44100 * 1 / 128 = 344.5 Hz、ビン 2 =44100 * 2 / 128 = 689 Hzなどになります。

詳細な説明については、この回答を参照してください。

于 2012-03-06T13:22:19.977 に答える