FFTW(fftw_plan_dft_r2c_3d
)を使用して3Dフーリエ変換を実行しました。繰り返し周波数を含むすべての周波数でトランスフォームの(log of)値を合計したいと思います実際に出力配列に格納されていない(私はサイズがNx x Ny x (Nz/2 + 1)
であると理解しています)。二重計算をしないでこれを行うにはどうすればよいですか?FFTWから各周波数のすべての値を加算する
答えて
大きな質問です。申し訳ありませんが、私の答えは少し長めですが、私は間違いをしないようにしたいと思います。ここでgo-
複素数と複素数の3D FFTの合計ログの大きさは、複数の場合、実数から複素数の3次元FFTの対数の総和に等しくなります前者から失われた後者の(最後の次元の)すべての「スライス」。
Nz
が偶数の場合、それは最初と最後のスライス以外のすべてのスライスをダブルカウントを意味します。Nz
が奇数の場合は、最初のスライスを除くすべてのスライスをダブルカウントします。
(これは、πのラジアンの角周波数(フェーザー-1に対応)が含まれていますが、奇数長のものはそれを停止します。このパターンを覚えているので、N/4対N = 3のフェーザーを単位円の周りに描画して、奇数かπ-radかを思い出させる。
Numpy/Pythonを使用したアイデアの実験的検証は、実数から複素数のFFTの表記法はFFTWと一致すると信じています。Nx = 10
をNy = 20
でNz = 8
の実配列で生成します。複素数から複雑な3D FFT(Nx複雑な配列でNyをNxに変換する)とを実数から複素数の3D FFT(Nxを(Nz/2 + 1)の複素数配列で生成する)を計算します。 Nz
が偶数であるため、最初の&最後のスライス以外のすべてをダブルカウントすると、前者のログ総和の大きさはと同じであることを確認してください。
Nz
でこれを再実行した場合
import numpy as np
import numpy.fft as fft
Nx = 10
Ny = 20
Nz = 8
x = np.random.randn(Nx, Ny, Nz)
Xf = fft.fftn(x)
Xfr = fft.rfftn(x)
energyProduct1 = np.log10(np.abs(Xf)).sum()
lastSlice = -1 if Nz % 2 is 0 else None
energyProduct2 = np.log10(np.abs(np.dstack((Xfr, Xfr[:, :, 1:lastSlice])))).sum()
print('Difference: %g' % (energyProduct1 - energyProduct2))
# Difference: -4.54747e-13
は、あなたが表示されますその0の機械精度内の複素数 - 複素数と実数 - 複素数遺跡の違いNz
もあるのでnp.dstack((Xfr, Xfr[:, :, 1:lastSlice))
(dstack
用ドキュメント、fft.rfftn
)が第3次元、最後から二番目にスライスを最後から二番目のためにその第二とrfftn
出力をスタック、そしてあなたは、ダブルカウント0または-πしないこと。
DFTビン。
もちろん、これを行うための別の方法は、実数 - 複素数配列上の和のログ・大きさを計算することである、ダブルそれは、その後、減算和のログ-大きさを超えます最初のスライス、最後のスライス(Nz
が偶数の場合)。
tl; dr実数から複合出力へのログの大きさを合計します。それを倍増させる。この結果から、(3次元の)最初のスライスの合計ログの大きさを差し引きます。 Nz
が奇妙な場合は、完了です。 Nz
が偶数の場合は、最後のスライスの合計ログの大きさも減算します。
- 1. データセットからの信号のナイキスト周波数を計算する
- 2. LTEの中心周波数を計算する方法アップリンク周波数スペクトル?
- 3. FFTWの周波数ビンと解像度を制御する方法
- 4. 各周波数でRMSを取得
- 5. FFTから周波数値を決定する方法
- 6. 周波数処理が増加するサイン波を描く
- 7. .m4aデータからの周波数のフィルタリング
- 8. ゲノムファイル全体から1つの周波数行列を計算するには?
- 9. オーディオレコーダーのマイク入力データから周波数レベルを計算する方法
- 10. りんごのオーロタッチの例で周波数を計算する
- 11. 各文字の周波数を文字列で数える
- 12. サウンドファイルからの周波数検出
- 13. fftデータセットからの周波数matlab
- 14. C#で信号の周波数を計算する
- 15. Cで文字列の文字周波数を計算する
- 16. ガボールフィルタの空間周波数を計算するには?
- 17. ヒストグラムの周波数にスカラーを乗算する方法
- 18. 複数の変数にわたる周波数の計算SPSS
- 19. RampTo Tone.jsでのフィルタの周波数値
- 20. 脳波データからの周波数電圧グラフ - PythonでのFFT
- 21. mp3の周波数
- 22. このプログラムを追加して、出力を最高周波数から最低周波数にソートする方法はありますか?
- 23. ローパスフィルタアンドロイド加速度計の測定値とカットオフ周波数
- 24. 周波数を数え、周波数をゼロにする方法は?
- 25. エラーログ周波数
- 26. 周波数テーブル
- 27. は周波数
- 28. 周波数カウント
- 29. java:配列の整数の周波数を調べる
- 30. 正負周波数のMATLAB周波数ビン
素晴らしい!私は最後の夜遅くこの解決策を発見したが、これは理由を説明する素晴らしい仕事をする。 – cgreen