2016-04-19 11 views
0

3Dパワースペクトル、つまり周波数シェルの平均パワーを計算しようとしています。私はシェル密度の計算を正しく行っていると思いますが、私は各シェルの頻度をどのように決定するか分かりません。fftwで3Dパワースペクトルを計算する

サンプリングレートFsが各次元で同じであり、各次元の元のサンプルの長さも同じ値Nであるとします。シェルの「インデックス」はidx = sqrt(i*i + j*j + k*k)です。ここで、i、j、およびkは各方向の範囲です。このシェルの頻度をどのように計算するのですか?

+1

「周波数シェル」とは何ですか?これはプログラミングの質問よりも物理学の質問のほうに聞こえます。一般に、実数値の空間領域ボリュームデータセットの離散フーリエ変換は、複素数値の周波数領域ボリュームデータセットを生成する。あなたは何か違うものがほしいと思うようです。 – MooseBoys

+0

あなたが何を求めようとしているかを完全には確認していません。 FFTW計画の設定、計画の実行、または結果の解釈方法を尋ねようとしていますか? – RyanP

+0

@MooseBoysつまり、各周波数の密度値(f x f *)を平均したいと思っています。 3Dのためシェルです。2Dのサークルになります。 – cgreen

答えて

2

ベクトル(i, j, k)はすでにwave vectorであるため、長さを取り出してキューブのエッジの長さで割ることで、関連する頻度が得られます。

f = sqrt(i*i + j*j + k*k)/edgelength 

結果は空間周波数です。あなたが一時的な頻度を探しているなら、あなたは2つを一緒にリンクするいくつかの追加情報が必要です。

あなたが気をつける必要があるのは、fft変換キューブ内のゼロ周波数の位置です。アルゴリズムによっては、左上隅に配置されるアルゴリズムもあれば、中央に配置されるアルゴリズムもあります。それがどこにあっても、エイリアシングされた高周波数のために低周波数を誤って逆方向に誤って解釈しないように注意する必要があります。 e。 i, j, kの絶対値は、常にキューブの幅の半分より小さくする必要があります。

+1

ありがとう! 1Dシステムのための[この回答](http://stackoverflow.com/questions/7674877/how-to-get-frequency-from-fft-result)では、@ Paul Rはbinの周波数は 'i'が' freq = i * Fs/N'となる。同様にサンプリングレートを1Dの範囲で除算することによって 'unitlength'を計算しますか? – cgreen

+1

私の元のバージョンは間違っていました:除数は単位の長さではありませんが、サンプルの長さは、私の答えの更新版を見てください。 Paul Rの答えは正しい:「N/Fs」はサンプルの長さなので、 'i * Fs/N'は' i/samplelength'と同じです。 – cmaster

関連する問題