回折と各種伝搬の概要
最初に回折による光波の伝搬とその代表的モデルであるフレネル伝搬, フラウンホーファー伝搬をまとめます.
回折という現象を図にすると以下の通りになります. ホイヘンスの2次波の原理に基づき, 各点で波面が2次波を作り, そこが観測点で重なり合うことにより新たな光場が得られます.
この現象を数式で表してみましょう. 座標は以下の図のような取り方, つまり左側から平行光が
の開口をもつ遮蔽物に入射したときに回折により観測面O'-xyの点P(x,y)でどう光場を作るかを表しています.

これを式にすると観測点P'の振幅
は,


となります.

面で球面波である2次波が最終的にP'に寄与すると考えると式の内容がわかりやすいかなと思います.
ここで線形時不変システムだと考えると



とインパルス応答hを使って表すことができます.
よって最終的に
U2を計算するときも,
フーリエ変換の関係を利用して
![\displaystyle U_{2}(x,y)=\mathcal{F}^{-1}[\mathcal{F}\{U_{1}(x,y)\} \mathcal{F}\{h(x,y)\}] =\mathcal{F}^{-1}[\mathcal{F}\{U_{1}(x,y)\} H(f_{X},f_{y})] \tag{1-6} \label{1-6}](https://chart.apis.google.com/chart?cht=tx&chl=%20%5Cdisplaystyle%20U_%7B2%7D%28x%2Cy%29%3D%5Cmathcal%7BF%7D%5E%7B-1%7D%5B%5Cmathcal%7BF%7D%5C%7BU_%7B1%7D%28x%2Cy%29%5C%7D%20%5Cmathcal%7BF%7D%5C%7Bh%28x%2Cy%29%5C%7D%5D%20%3D%5Cmathcal%7BF%7D%5E%7B-1%7D%5B%5Cmathcal%7BF%7D%5C%7BU_%7B1%7D%28x%2Cy%29%5C%7D%20H%28f_%7BX%7D%2Cf_%7By%7D%29%5D%20%20%5Ctag%7B1-6%7D%20%5Clabel%7B1-6%7D)
と考えても良いです. ここでHはインパルス応答hを
フーリエ変換した
伝達関数で,

となります(

). ここまでの厳密な解析
積分を使った展開をRayleigh-Sommerfeld解とよばれ, この定式化に基づく光の伝搬の扱いを
ホイヘンス伝搬とか呼ばれることがあります
*1.
次に近似を使った別の伝搬の定式化を考えていきます. 観測面は十分遠くにある場合, 式(1-2)内のzは
や
より大きくなり, 式(1-2)は
![\displaystyle r_{12}^2=\sqrt{z^2+(x-\xi)^2+(y-\eta)^2} \approx z \left[ 1+\frac{1}{2z^2} (x-\xi)^2+\frac{1}{2z^2} (y-\eta)^2 \right] \tag{2-1} \label{2-1}](https://chart.apis.google.com/chart?cht=tx&chl=%20%5Cdisplaystyle%20%20r_%7B12%7D%5E2%3D%5Csqrt%7Bz%5E2%2B%28x-%5Cxi%29%5E2%2B%28y-%5Ceta%29%5E2%7D%20%20%5Capprox%20z%20%5Cleft%5B%201%2B%5Cfrac%7B1%7D%7B2z%5E2%7D%20%28x-%5Cxi%29%5E2%2B%5Cfrac%7B1%7D%7B2z%5E2%7D%20%28y-%5Ceta%29%5E2%20%5Cright%5D%20%20%20%20%20%20%20%20%20%20%20%20%20%5Ctag%7B2-1%7D%20%5Clabel%7B2-1%7D)
と近似できます.
これを式(1-1)に代入すると, 指数の部分についてはこの近似をそのまま使い, 分母の
はそのままzと置き換えても比較的影響は小さいため*2, 式は
![\displaystyle U_{2}(x,y) = \frac{ \exp(ikz)}{iλz} \iint_{\Sigma} U_{1}(\eta,\xi) \exp{ \left[ i\frac{k}{2z}[ (x-\xi)^2+(y-\eta)^2 ] \right] } d\xi d\eta \tag{2-2} \label{2-2}](https://chart.apis.google.com/chart?cht=tx&chl=%20%5Cdisplaystyle%20U_%7B2%7D%28x%2Cy%29%20%3D%20%5Cfrac%7B%20%5Cexp%28ikz%29%7D%7Bi%CE%BBz%7D%20%20%5Ciint_%7B%5CSigma%7D%20U_%7B1%7D%28%5Ceta%2C%5Cxi%29%20%20%20%5Cexp%7B%20%20%20%20%20%5Cleft%5B%20%20%20%20%20i%5Cfrac%7Bk%7D%7B2z%7D%5B%20%28x-%5Cxi%29%5E2%2B%28y-%5Ceta%29%5E2%20%20%20%5D%20%20%20%20%20%20%20%20%20%20%20%5Cright%5D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20d%5Cxi%20%20d%5Ceta%20%20%5Ctag%7B2-2%7D%20%5Clabel%7B2-2%7D)
となります.
ここでインパルス応答と
伝達関数を以下のように定義すると, 式(1-3)と同じ畳み込みで表されます.
![\displaystyle h(x,y) = \frac{ \exp{(ikz)}}{iλz} \exp{ \left[ \frac{ik}{2z} (x^2+y^2 ) \right] } \tag{2-3} \label{2-3}](https://chart.apis.google.com/chart?cht=tx&chl=%20%5Cdisplaystyle%20h%28x%2Cy%29%20%3D%20%5Cfrac%7B%20%5Cexp%7B%28ikz%29%7D%7D%7Bi%CE%BBz%7D%20%20%5Cexp%7B%20%20%20%5Cleft%5B%20%20%20%20%5Cfrac%7Bik%7D%7B2z%7D%20%28x%5E2%2By%5E2%20%29%20%20%20%20%5Cright%5D%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%5Ctag%7B2-3%7D%20%5Clabel%7B2-3%7D)
![\displaystyle H(f_X,f_Y) = \exp{(jkz)} \exp{ \left[ -i\pi \lambda z (f_X^2+f_Y^2) \right] } \tag{2-4} \label{2-4}](https://chart.apis.google.com/chart?cht=tx&chl=%20%5Cdisplaystyle%20H%28f_X%2Cf_Y%29%20%3D%20%5Cexp%7B%28jkz%29%7D%20%5Cexp%7B%20%20%20%5Cleft%5B%20%20%20%20-i%5Cpi%20%5Clambda%20z%20%28f_X%5E2%2Bf_Y%5E2%29%20%20%20%20%20%5Cright%5D%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%5Ctag%7B2-4%7D%20%5Clabel%7B2-4%7D)
ここで式(2-1)をフレネル近似, そしてこの近似に基づく伝搬式(2-2)をフレネル伝搬と呼びます.
最後にもう1段階近似した伝搬式を紹介します.
式(2-2)の2次式を展開すると以下の式(2-5)となります.
![\displaystyle U_{2}(x,y) = \frac{ \exp(ikz)}{iλz} \exp{ \left[ i \frac{k}{2z}(x^2+y^2) \right] } \iint_{\Sigma} U_{1}(\eta,\xi) \exp{ \left[ i \frac{k}{2z}(\xi^2+\eta^2) \right] } \exp{ \left[ - i\frac{2 \pi}{\lambda z}[ x\xi+y\eta ] \right] } d\xi d\eta \tag{2-5} \label{2-5}](https://chart.apis.google.com/chart?cht=tx&chl=%20%5Cdisplaystyle%20U_%7B2%7D%28x%2Cy%29%20%3D%20%5Cfrac%7B%20%5Cexp%28ikz%29%7D%7Bi%CE%BBz%7D%20%20%5Cexp%7B%20%20%20%20%5Cleft%5B%20%20%20%20i%20%5Cfrac%7Bk%7D%7B2z%7D%28x%5E2%2By%5E2%29%20%20%20%20%20%20%5Cright%5D%20%7D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Ciint_%7B%5CSigma%7D%20U_%7B1%7D%28%5Ceta%2C%5Cxi%29%20%20%20%20%20%20%20%20%20%20%20%5Cexp%7B%20%20%20%20%5Cleft%5B%20%20i%20%5Cfrac%7Bk%7D%7B2z%7D%28%5Cxi%5E2%2B%5Ceta%5E2%29%20%20%5Cright%5D%20%20%20%20%20%7D%20%20%20%20%20%5Cexp%7B%20%20%20%5Cleft%5B%20%20-%20%20%20i%5Cfrac%7B2%20%5Cpi%7D%7B%5Clambda%20z%7D%5B%20x%5Cxi%2By%5Ceta%20%20%5D%20%20%20%20%20%20%20%5Cright%5D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20d%5Cxi%20%20d%5Ceta%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Ctag%7B2-5%7D%20%5Clabel%7B2-5%7D)
ここで以下の式(3-1)の近似をすると, これはフレネル近似よりさらに

式(2-4)は以下の式(3-2)となります.
![\displaystyle U_{2}(x,y) = \frac{ \exp(ikz)}{iλz} \exp{ \left[ i \frac{k}{2z}(x^2+y^2) \right]} \iint_{\Sigma} U_{1}(\eta,\xi) \exp{ \left[ - i\frac{2 \pi}{\lambda z}[ x\xi+y\eta ] \right] } d\xi d\eta \tag{3-2} \label{3-2}](https://chart.apis.google.com/chart?cht=tx&chl=%20%5Cdisplaystyle%20U_%7B2%7D%28x%2Cy%29%20%3D%20%5Cfrac%7B%20%5Cexp%28ikz%29%7D%7Bi%CE%BBz%7D%20%20%5Cexp%7B%20%20%20%20%5Cleft%5B%20%20%20i%20%5Cfrac%7Bk%7D%7B2z%7D%28x%5E2%2By%5E2%29%20%5Cright%5D%7D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Ciint_%7B%5CSigma%7D%20U_%7B1%7D%28%5Ceta%2C%5Cxi%29%20%20%20%20%20%20%20%20%20%20%5Cexp%7B%20%20%5Cleft%5B%20%20%20%20-%20%20%20i%5Cfrac%7B2%20%5Cpi%7D%7B%5Clambda%20z%7D%5B%20x%5Cxi%2By%5Ceta%20%20%5D%20%20%20%20%20%20%20%20%20%20%20%20%5Cright%5D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20d%5Cxi%20%20d%5Ceta%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Ctag%7B3-2%7D%20%5Clabel%7B3-2%7D)
この近似(3-1)と基づく光の伝搬をフラウンホーファー近似, フラウンホーファー伝搬と呼ばれます.
式(3-2)は入射場のフーリエ変換そのものです. ホイヘンス伝搬やフレネル伝搬違い, フラウンホーファー伝搬の場合は伝達関数は存在しません. 式(3-2)のフーリエ変換演算そのものは線形時不変ではないので.
理論は以上として, 数値計算をしてみます. いろいろ紹介しましたが, ここでは
A) 式(1-3)のRS積分を直接計算したホイヘンス伝搬
B) 式(1-6)のフーリエ変換の関係を使ったホイヘンス伝搬
C) 同じくフーリエ変換を使ったフレネル伝搬計算
D) そして式(3-2)のフラウンホーファー伝搬の数値計算
の計4つを扱います.
以下のPythonコードが最初の3つを実装した例です. RSPropagationDirectがホイヘンス伝搬の直接積分, RSPropagationがホイヘンス伝搬のフーリエ変換を使った計算, FresnelPropagationが同じくフーリエ変換を使ったフレネル伝搬で, 行76で矩形である開口面上の入射場を定義しており, 80-82行で回折伝搬を計算しています.
import numpy as np
from matplotlib import pyplot as plt
def rectpuls(t, width):
return np.where(np.abs(t) <= width / 2, 1.0, 0.0)
def RSPropagationDirect(u1, L, wl, z):
M, N = u1.shape
dx = L / M
k = 2 * np.pi / wl
x=-L/2+dx*np.arange(M)
y=-L/2+dx*np.arange(M)
X1, Y1 = np.meshgrid(x, y)
u2 = np.zeros_like(u1, dtype=complex)
for i in range(M):
for j in range(N):
x2 = x[i]
y2 = y[j]
R = np.sqrt((X1 - x2)**2 + (Y1 - y2)**2 + z**2)
h = (1 / (1j * wl)) * (np.exp(1j * k * R) / R) * (z / R)
u2[j, i] = np.sum(u1 * h) * dx * dx
return u2
def RSPropagation(u1,L,wl,z):
M,N=u1.shape
dx=L/M
k=2*np.pi/wl
fx=-1/(2*dx)+(1/L)*np.arange(M)
FX,FY=np.meshgrid(fx,fx)
H=np.exp(1j*k*z*np.sqrt(1-wl*wl*FX*FX-wl*wl*FY*FY))
H=np.fft.fftshift(H)
U1=np.fft.fft2(np.fft.fftshift(u1))
U2=H*U1
u2=np.fft.ifftshift(np.fft.ifft2(U2))
return u2
def FresnelPropagation(u1,L,wl,z):
M,N=u1.shape
dx=L/M
k=2*np.pi/wl
fx=-1/(2*dx)+(1/L)*np.arange(M)
FX,FY=np.meshgrid(fx,fx)
H=np.exp(-1j*np.pi*wl*z*(FX*FX+FY*FY))
H=np.fft.fftshift(H)
U1=np.fft.fft2(np.fft.fftshift(u1))
U2=H*U1
u2=np.fft.ifftshift(np.fft.ifft2(U2))
return u2
L1=0.5
M=250
dx1=L1/M
x1=-L1/2+dx1*np.arange(M)
y1=-L1/2+dx1*np.arange(M)
wl=0.5*pow(10,-6)
k=2*np.pi/wl
w=0.051
z=2,000
X1,Y1=np.meshgrid(x1,y1)
u1=rectpuls(X1,2*w)*rectpuls(Y1,2*w)
I1=np.abs(u1)**2
u2=FresnelPropagation(u1,L1,wl,z)
x2=-L1/2+dx1*np.arange(M)
y2=-L1/2+dx1*np.arange(M)
I2=np.abs(u2)**2
Cross_section= I2[int(M/2), :]
fig, axs = plt.subplots(1, 3, figsize=(15, 6))
im1 = axs[0].imshow(I1, extent=[x1.min(), x1.max(), y1.min(), y1.max()],
origin='lower', aspect='equal', cmap='gray')
axs[0].set_title('Input Intensity')
axs[0].set_xlabel('x (m)')
axs[0].set_ylabel('y (m)')
plt.colorbar(im1, ax=axs[0], label='Intensity')
im2 = axs[1].imshow(I2, extent=[x1.min(), x1.max(), y1.min(), y1.max()],
origin='lower', aspect='equal', cmap='gray')
axs[1].set_title('Output Intensity (after propagation)')
axs[1].set_xlabel('x (m)')
axs[1].set_ylabel('y (m)')
plt.colorbar(im2, ax=axs[1], label='Intensity')
axs[2].plot(x1, Cross_section, color='black')
axs[2].set_title('1D Profile at y = 0 (center slice of Output)')
axs[2].set_xlabel('x (m)')
axs[2].set_ylabel('Intensity')
axs[2].grid(True)
plt.tight_layout()
plt.show()
まず開口面の強度は以下の通り(I2).

そしてz=2,000の時の計算結果は以下の通り(上からホイヘンス直接, ホイヘンスFFT, フレネルFFT). 3つの手法で特に違いはありませんが, 回折の影響で開口面の矩形分布が干渉縞のような変化をしています.

次にz=20,000の時は以下の通り. 先ほどと違い, ホイヘンス直接とそれ以外は明らかに違いがありますが, FFTを使った2つの方法の結果は不自然です.

今回の一連の趣旨と外れるためあまり深くは扱いませんが, これはサンプリングの条件がサンプリング定理を満たしていないからです.
いろいろめんどくさいことを考えたくない場合はホイヘンス伝搬の直接計算を使えばよいですが, こちらは圧倒的に遅いです. そこで対策としてFFTのほうはいろんな手法が研究されています. そちらは光学設計とは別の話となるためこれ以上は扱いませんし, 私は個人的には本当に正しい設定をしているか自信がない場合は畳み込み計算を使うのもよいと思います.
なおFFTを使った場合, ホイヘンス伝搬とフレネル伝搬はほとんど差はありません. フレネル近似の制約がある分, ホイヘンス伝搬のほうが正確かと思いきや, 意外とその差はなく, 次回の記事で扱う光学系のフーリエ変換作用を考えやすいため, 基本的にはフレネル伝搬で考えます.
さて最後にフラウンホーファー伝搬を扱います.
この場合の計算は
def FraunhoferPropagation(u1,L,wl,z):
M,N=u1.shape
dx=L/M
k=2*np.pi/wl
x2=-L/2+dx*np.arange(M)
X2,Y2=np.meshgrid(x2,x2)
c=1/(1j*wl*z)*np.exp(1j*k/(2*z)*(X2**2+Y2**2))
u2=c*np.fft.ifftshift(np.fft.fft2(np.fft.fftshift(u1)))*(dx**2)
return u2
結果を見やすくするためにw=0.011, z=20,000としたとき, 以下の通りu2を計算します.
u2=FraunhoferPropagation(u1,L1,wl,z) #フラウンホーファー伝搬の計算
結果は次の通り. 強度分布のコントラストでわかりづらいですが, sinc関数の2乗のようになっていることが確認できると思います.

フラウンホーファー伝搬は伝搬距離の制約が非常に強いですが, 実は光学系のフーリエ変換作用により, PSFやMTFを計算するときはフラウンホーファー伝搬を使うことが可能であり, 先述したややこしいサンプリングの問題はあまり気にしなくて良いです. そういえばいわゆる角スペクトル法というのもありますが, これは本質的にはホイヘンス伝搬と同じことをしています.
内容は以上. 今回は自由空間上での回折伝搬でしたが, 次回は光学系がある場合はどう伝搬するかを扱います.
参考文献
Computational Fourier Optics: A MATLAB Tutorial