SSブログ

FFTによる回折計算のTips [数値計算]

こないだから急いでやってる計算で、思いついて。
電磁場はベクトルのすごく滑らかな場なので伝播を計算するのは結構大変になる。でも極端な条件以外ではかなりいい近似でFraunhofer回折がなりたつ。これはある面で場の振幅が与えられていたら、そこから十分遠いところでの振幅分布はもとの与えられた振幅の2次元のFourier変換になる、というものである。

これだと、計算は楽になる。特に数値的に解を得る場合はFFTが使える。伝播の近似であるとはいえ、簡単で非常に便利で、光学の分野では多用されている。

ところが、実面とFourier面とで座標の単位が異なる。すぐに覚えられなくて計算するたびに教科書をひっくり返すことになる。ここではこの直感的な覚え方を整理する。

Fraunhofer回折は、図のような瞳面での振幅分布

0615fourier.png

をFourier変換すると、この面から十分遠いところから面に向かって場を見たものに比例する、というもの。

Fraunhofer回折が成り立つためには、「十分遠いところ」から見たときに瞳面が十分小さく見えることが必要となる。つまり瞳面の異なる場所からの距離が同じと見なせる(差が波長にくらべて無視できる)場合に成り立つ。これが成り立たない場合、例えば瞳面から比較的近い場合などはFresnel回折というもう少し近似を進めた計算が必要になる。Fresnel回折は簡単な計算手法が使えず、Fraunhofer回折にくらべて計算量は桁違いに増える。

Fraunhofer回折をFourier変換で計算すると、ある方向に伝播する場の振幅が得られ、座標は角度になる。レンズを使って瞳面から出た場を収束させると、「十分遠いところ」というのは焦点面になる。無収差のレンズはFermatの原理から、「瞳面の異なる場所からの距離が同じ」という条件を満たすからである。

0615Difraction.png

Fourier変換にFFTを使うなら、瞳面での振幅分布を不連続にサンプリングしなければならない。そして結果として得られた焦点面での振幅分布は同じサンプリング数になるが、サンプリング間隔は瞳面とは全然別物になる。

瞳面の縦または横一方の大きさ(実際の距離)をQとする。FFTではこれをN分割してサンプリングする。瞳面に垂直な方向を角度0にとる。これが光軸。その瞳面をその端でちょうど1波長になるように倒す。これが瞳の中を正弦波で分解したとき、一番長い周期に対応する。

0615FFTpitch.png

それに垂直な方向がFFTをした後の1サンプリング間隔θpになる。つまり

0615thetap.png

となる。では回折した場の一番端っこはというと

0615thetamax.png

となる。なんで半分なのか、はサンプリング定理からの帰結。
また、レンズで絞り込んだとき

0615FFTlens.png

の焦点面でのサンプリング距離pは

0615p.png

となる。ここでfはレンズの焦点距離。これなら波面収差のティルト成分との関連があって、記憶力が鰐にも劣る程度しか持ち合わせていない人にも覚えられる。ラッキー。って明日にはまた忘れて教科書をひっくり返すんだろうな。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。