- 締切済み
2次元データのフーリエ変換とデータ形式について
画像やエクセルシートのように平面2次元的に広がっているデータがあります。このデータについて2回(2方向)のフーリエ変換を取るのですが、1回(1方向)のフーリエ変換プログラムを2回(2方向)することになると思います。 複素フーリエなので、1回目は複素数型の配列の実部に解析したいデータ系列、虚部はゼロとしてフーリエ変換します。この場合の出力値(複素数配列)で意味があるのは、実部、虚部の配列の前半だけであり、後半は前半の対称とか点対称になっています(前半が分かれば後半がわかるのだから情報量としてはゼロ)。 1回目の出力結果を2回目の変換に渡すわけですが、1回目の出力としての複素数配列のデータはその意味のないところも含めてフーリエ変換に渡すのでしょうか。 フーリエ逆変換で元に戻すときは、”無意味”な対称・点対称成分も含めて逆変換するわけですからその部分も必要ということでしょうか。その方がプログラムとしてはラクではあります。何もしないということなので。 説明がヘタだなと思いますが、主旨を汲み取り頂いて回答して頂けると助かります。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kiyos06
- ベストアンサー率82% (64/78)
>その無駄な部分まで含めて処理する必要があるのだろうかと思っています。 10)対称性を利用して、積分をサボることはよく行われる。(メモリー節約も) 11)外側のフーリエ変換は、実数データに対して、ωyと-ωyに対するa(X, ωy)が共役になることを知っているので、片方を省略できる。 12)内側のフーリエ変換についても、a(X, ωy)が共役になっていることを知っているので、ωxと-ωxに対する積分で(符号に気をつければ)省略できる。 >出力されたフーリエ変換成分をデータ個数で除すという処理をユーザが自前ですることが前提になっているものもあります。 13)サボるときは、直流分だけ係数が特別扱いになることがあるのでご注意を 14)サボる論理のチェックをする時は、下記のチェックをすればok 14.1)模擬データとして全データを(U(X, Y) =)cとして、フーリエ計算結果が直流分だけcになるか? 14.2)模擬データとして単一振動データ(U =c sinX cos2Y等)を作成して、フーリエ計算結果が当該周波数成分だけcになるか?
- kiyos06
- ベストアンサー率82% (64/78)
1)2次元のデータをどう表現するか 2)2次元の偏微分方程式のように考える。 3)U(X, Y) = ∫ [-∞, ∞] ∫ [-∞, ∞] a(ωx, ωy) e^(i ωx X) e^(i ωy Y) dωx dωy 4)数値計算として、X, Y軸方向をN分割する。 5)外側のフーリエ変換 5.1)X/N毎にY軸方向に数値フーリエ変換を(N回)行う。 6)内側のフーリエ変換 6.1)ωy毎にa(X, ωy)をX軸方向に数値フーリエ変換を(N回)行う。
お礼
回答ありがとうございます。実数のデータ(512個)を複素フーリエ変換(512個の複素数)した場合、実部(512個)と虚部(512個)があるので1024個のデータとなります。複素フーリエ変換は無駄な情報(冗長なデータ)が含まれているわけです。内側のフーリエ変換(2回目のフーリエ変換)はその無駄な部分まで含めて処理する必要があるのだろうかと思っています。いろいろ考えないで出てきたものをあれこれと加工せず、そのまま変換すればよいということでしょうか。FFTのルーチンのプログラムによっては出力されたフーリエ変換成分をデータ個数で除すという処理をユーザが自前ですることが前提になっているものもあります。それはやらなければいけないだろうなとは思いますが。そのあたりがこんがらがる気がするのですが。