フラウンホーファー回折を理解する — 単スリットから回折格子まで

夜空の星を望遠鏡で覗くと、点であるはずの星が小さな円盤と、それを取り巻く淡いリングとして見えます。カメラのレンズを思い切り絞ると、街灯から放射状の光条が伸びます。CD の記録面を蛍光灯にかざすと虹色に光ります。これらはすべて「光が波である」ことの直接の証拠であり、回折(diffraction) と呼ばれる現象です。

回折は「光が障害物の陰に回り込む」という定性的な話に留まりません。遠方で観測される光の振幅が、開口の形をそのままフーリエ変換したものになる — この一点を押さえるだけで、望遠鏡の分解能限界、分光器の波長分解能、アンテナの指向性、電子顕微鏡の回折像、さらには光リソグラフィの線幅限界まで、まったく同じ数式で説明が付きます。逆に言えば、フーリエ変換を知っている人にとって回折は「すでに知っている数学の物理的な現れ」でしかありません。

この記事で扱う フラウンホーファー回折(Fraunhofer diffraction) は、その「開口 = フーリエ変換」が厳密に成り立つ極限のことです。応用先を先に挙げておきます。

  • 天体望遠鏡・スペース光学: 口径 $D$ の望遠鏡が分離できる 2 つの星の最小角度が $1.22\lambda/D$ で決まります。すばる望遠鏡(口径 8.2 m)の理論限界は 0.017 秒角、人間の眼(瞳孔 3 mm)は 46 秒角。この 2700 倍の差が「大きな鏡を作る」動機そのものです。
  • 分光器・回折格子: 溝の本数 $N$ と回折次数 $m$ だけで波長分解能 $R = mN$ が決まります。ナトリウム D 線の二重線(589.00 nm と 589.59 nm)を分離するには $N \gtrsim 998$ 本を照らせばよい、と設計前に電卓で見積もれます。
  • アンテナ・レーダー: 開口面アンテナの放射パターンは、開口電界分布のフーリエ変換です。サイドローブを下げるためのテーパ給電は、光学のアポダイゼーションとまったく同じ理屈です。

本記事の内容

  • ホイヘンス–フレネルの原理から回折積分を立て、フレネル近似とフラウンホーファー条件を段階的に導く
  • 遠方場の振幅が開口関数の 2 次元フーリエ変換になることを、位相の二次項を落とす箇所まで省略せずに示す
  • 単スリットの $\mathrm{sinc}^2$ 分布、円形開口のエアリーパターンとレイリー基準、$N$ 本格子の分散能と分解能 $R = mN$ を導出する
  • Python の FFT で任意開口(矩形・円・複スリット・格子・アポダイズ開口)の回折像を計算し、解析式と一致することを数値で確かめる

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

回折とは — 「影の縁」で何が起きているか

まず、この記事全体で何が起きているのかを 1 枚の絵で押さえておきます。

フラウンホーファー回折の全体像:スリットで切り取られた波面が二次波を出し、遠方スクリーンで開口関数のフーリエ変換になる模式図

左から来た平面波がスリットで切り取られ、スリット内の各点が新しい球面波(ホイヘンスの二次波)を出します。それらが遠方スクリーン上の一点に別々の道のりで到達し、位相のずれをともなって足し合わされた結果が、右側に描いた明暗パターンです。中央の明るい帯の外側に暗点($a\sin\theta = m\lambda$)が並び、その間に急速に弱くなるサイドローブが現れる — この記事は、この絵のすべてを数式で説明していきます。

幾何光学では、光は直進する「光線」でした。不透明な板に穴を空けて光を通せば、スクリーンには穴と相似な明るい領域が現れ、その外側は真っ暗な影になる — これが光線の描像です。ところが実際に幅 0.05 mm 程度の細いスリットにレーザーを通してみると、スクリーンに現れるのは 0.05 mm の細い線ではありません。数センチにわたって横に伸びた、明暗の縞をともなう帯が現れます。穴を狭くすればするほど、光は広がるのです。

この「狭くすると広がる」という反直感的な振る舞いは、実はフーリエ変換の不確定性関係そのものです。時間信号を短く切り取るほどスペクトルが広がるのと同じで、開口で光の波面を空間的に狭く切り取るほど、その角度スペクトル(進行方向の分布)が広がります。回折とは、空間の切り取りが角度の広がりを生む現象だと言い換えられます。

もう少し波の言葉で言えばこうです。開口に到達した波面上の各点は、そこから新しい球面波を出す二次波源とみなせます(ホイヘンスの原理)。スクリーン上のある一点には、開口内のあらゆる点から出た二次波が、それぞれ違う道のりを通って到達します。道のりが違えば位相も違うので、足し合わせた結果は場所によって強め合ったり打ち消し合ったりします。この足し算の結果がスクリーン上の明暗パターン、すなわち回折パターンです。

では、この「足し算」を数式で書き下してみましょう。

ホイヘンス–フレネルの原理から回折積分へ

ホイヘンスのアイデアにフレネルが位相と振幅の定量的な扱いを与え、さらにキルヒホッフがスカラー波動方程式とグリーンの定理から厳密に基礎づけた結果が、次の キルヒホッフ回折積分(フレネル–キルヒホッフ回折公式) です。開口面 $\Sigma$ 上の複素振幅を $U(x’, y’)$、観測点 $P=(x, y, z)$ における複素振幅を $U(P)$ として、

$$ \begin{equation} U(P) = \frac{1}{i\lambda} \iint_{\Sigma} U(x’, y’)\, \frac{e^{ikr}}{r}\, K(\chi)\, dx’\, dy’ \end{equation} $$

と書けます。ここで $k = 2\pi/\lambda$ は波数、$r$ は開口上の点 $(x’, y’, 0)$ から観測点 $P$ までの距離、$K(\chi)$ は 傾斜因子(inclination factor) で、$\chi$ を法線からの角度として $K(\chi) = (1 + \cos\chi)/2$ の形をとります。

この式は一見厳めしいのですが、中身は素朴です。$e^{ikr}/r$ は「点 $(x’, y’)$ から出た球面波」であり、それを開口全体で足し上げているだけです。前に付いている $1/(i\lambda)$ は、二次波の振幅と位相のつじつま($\pi/2$ の位相遅れと波長による規格化)を合わせるための係数で、厳密な導出から自動的に出てきます。傾斜因子 $K(\chi)$ は「二次波が後ろ向きには出ない」ことを表しており、我々が扱う近軸領域($\chi \approx 0$)では $K \approx 1$ としてよいので、以降は落とします。

これで積分の形は決まりましたが、$r$ が平方根の形をしているため、このままでは解析的に積分できません。

$$ \begin{equation} r = \sqrt{z^2 + (x – x’)^2 + (y – y’)^2} \end{equation} $$

この平方根をどう近似するかで、回折理論は「フレネル回折」と「フラウンホーファー回折」に分かれます。次節でその分岐点を丁寧に見ていきます。

フレネル近似 — 球面波を放物面で近似する

$r$ の平方根を扱うために、$z$ をくくり出します。

$$ r = z\sqrt{1 + \frac{(x – x’)^2 + (y – y’)^2}{z^2}} $$

観測面が十分遠く($z$ が大きく)、かつ観測点も開口点も光軸の近くにある近軸条件のもとでは、平方根の中の第 2 項は 1 に比べて小さくなります。そこで $\sqrt{1 + \epsilon} \approx 1 + \epsilon/2$ という二項展開を使います。$\epsilon = [(x-x’)^2 + (y-y’)^2]/z^2$ を代入すると、

$$ \begin{equation} r \approx z + \frac{(x – x’)^2 + (y – y’)^2}{2z} \end{equation} $$

これが フレネル近似 です。幾何学的には「球面を、その頂点で接する放物面に置き換えた」ことに相当します。どのくらい大胆な近似なのかを図で確認しておきます。

球面波を放物面で近似したときの光路長と、近似で生じる位相誤差を距離ごとに比較した図

左図では、厳密な球面 $\sqrt{z^2+x’^2}$ と放物面 $z + x’^2/2z$ の 2 本が完全に重なっていて区別が付きません。しかし右図で位相の単位(ラジアン)に直すと様子が変わります。$z = 5$ cm では開口半径 3 mm あたりで位相誤差が 1 rad を超えてしまい、近似が崩れます。逆に $z = 1$ m なら 6 mm 離れても誤差は $10^{-3}$ rad 程度で、完全に無視できます。「距離に対して開口が十分小さい」ことが、フレネル近似の許容条件だ と読み取れます。

ここで重要な注意があります。$r$ は 2 か所に現れます。分母の $1/r$ と、指数の肩の $e^{ikr}$ です。分母では $r \approx z$ という粗い近似で十分ですが、指数の肩ではそうはいきません。 なぜなら $k = 2\pi/\lambda$ が非常に大きい(可視光なら $10^7$ 程度)ため、$r$ が波長の何分の一かずれるだけで位相が大きく変わってしまうからです。分母は振幅にゆっくり効くだけなので鈍感、肩は位相に敏感 — この非対称性が回折の計算を貫くルールです。

そこで、分母は $r \to z$ とし、肩には式 (3) をそのまま入れます。

$$ U(x, y) = \frac{e^{ikz}}{i\lambda z} \iint A(x’, y’)\, \exp\!\left[ \frac{ik}{2z}\left\{ (x – x’)^2 + (y – y’)^2 \right\} \right] dx’\, dy’ $$

ここで $A(x’, y’) \equiv U(x’, y’)$ を 開口関数(aperture function) と呼び直しました。単純な穴なら $A$ は穴の内側で 1、外側で 0 の関数です。ガラス板に濃度分布や位相分布を付ければ、$A$ は複素数値の関数になります。

次に、肩の中の二乗を展開します。ここが導出の要になるので丁寧にやります。

$$ (x – x’)^2 + (y – y’)^2 = \underbrace{x^2 + y^2}_{\text{観測点のみ}} \;-\; \underbrace{2(xx’ + yy’)}_{\text{交差項}} \;+\; \underbrace{x’^2 + y’^2}_{\text{開口点のみ}} $$

観測点だけに依存する $x^2 + y^2$ は積分変数を含まないので、積分の外に出せます。交差項 $-2(xx’ + yy’)$ は $x’$ と $y’$ について 1 次なので、フーリエ変換の核 $e^{-i2\pi(f_x x’ + f_y y’)}$ とまったく同じ形をしています。残る $x’^2 + y’^2$ が厄介者です。これを積分の外に出すことはできません。

以上を代入して整理すると、フレネル回折積分 が得られます。

$$ \begin{equation} U(x, y) = \frac{e^{ikz} e^{\frac{ik}{2z}(x^2 + y^2)}}{i\lambda z} \iint A(x’, y’)\, e^{\frac{ik}{2z}(x’^2 + y’^2)}\, e^{-\frac{ik}{z}(xx’ + yy’)}\, dx’\, dy’ \end{equation} $$

この式はスクリーンが比較的近い場合(近傍場)でも使える強力な式ですが、積分の中に残った二次位相因子 $e^{ik(x’^2 + y’^2)/(2z)}$ のせいで、これは純粋なフーリエ変換ではありません。「開口関数に二次位相を掛けたもの」のフーリエ変換です。

この厄介な因子をいつ捨てられるのか — それを決めるのが次節のフラウンホーファー条件です。

フラウンホーファー条件 — 二次位相項をいつ捨てられるか

積分の中の邪魔者は

$$ \phi_{\text{quad}}(x’, y’) = \frac{k}{2z}(x’^2 + y’^2) $$

という位相です。これを無視してよいのは、開口の端まで含めて、この位相が 1 ラジアンよりずっと小さいとき です。開口の最大半径を $a_{\max}$ とすると、位相の最大値は $k a_{\max}^2/(2z) = \pi a_{\max}^2/(\lambda z)$ ですから、条件は

$$ \begin{equation} \frac{\pi a_{\max}^2}{\lambda z} \ll 1 \quad \Longleftrightarrow \quad z \gg \frac{\pi a_{\max}^2}{\lambda} \end{equation} $$

となります。係数 $\pi$ は目安の議論では落とされることが多く、実用上は

$$ \begin{equation} z \gg \frac{a^2}{\lambda} \qquad (\text{$a$ は開口の代表寸法}) \end{equation} $$

と覚えます。これが フラウンホーファー条件(遠方場条件) です。同じことを フレネル数(Fresnel number)

$$ N_F = \frac{a_{\max}^2}{\lambda z} $$

を使って「$N_F \ll 1$ なら遠方場、$N_F \gtrsim 1$ なら近傍場」と表現することもあります。フレネル数は「開口の端と中心とで、観測点までの光路差が何波長分あるか」を測る量だと解釈できます。光路差が波長よりずっと小さければ、開口面はもはや「一枚の平面」として振る舞い、そこからの寄与はすべて同位相の平面波成分にまとめられる — これが遠方場の物理的な意味です。

フレネル数を変えたときにパターンがどう変わるかを、フレネル積分の厳密解で描いてみます。

フレネル数10から0.02まで変えたときの回折パターンの変化。近傍場のリップルが消えて遠方場のsinc二乗に収束する図

$N_F = 10$(スクリーンまで 0.10 mm)では、光はほぼスリットの真後ろ(灰色帯)だけを照らし、その中に細かいリップルが立っています。幾何光学の影に近い状態です。$N_F = 2$ では影の縁がぼやけ、$N_F = 0.5$ ではもう影の外側へ大きくはみ出して $\mathrm{sinc}^2$ に近い形になります。$N_F = 0.02$(49 mm 先)では青い厳密解と赤い破線の $\mathrm{sinc}^2$ が完全に重なり、フラウンホーファー近似が成立している ことが目で確認できます。パターンの幅がスリット幅の何十倍にも広がっている点にも注目してください。

数値感覚をつかんでおきましょう。He–Ne レーザー($\lambda = 633$ nm)を使う場合、

開口幅 $a$ $a^2/\lambda$ 遠方場とみなせる距離
10 μm 0.16 mm 数 mm 先で十分
50 μm 3.9 mm 数 cm 先で十分
1 mm 1.6 m 十数 m 必要
10 mm 158 m 実験室では不可能

開口が 1 桁大きくなると必要距離は 2 桁大きくなるので、大きな開口の遠方場を実験室で見るのは大変です。そこで実務では レンズを使います。焦点距離 $f$ のレンズを開口の直後に置くと、レンズが持つ位相因子 $\exp[-ik(x’^2+y’^2)/(2f)]$ が、式 (4) の二次位相因子 $\exp[+ik(x’^2+y’^2)/(2z)]$ を $z = f$ でちょうど打ち消します。その結果、レンズの後焦点面には、たとえ距離が数センチでも、正真正銘のフラウンホーファー回折像が現れます。「レンズの焦点面はフーリエ面である」という、フーリエ光学の出発点となる事実です。

条件が整理できたので、いよいよ本命の式を書きます。

遠方場は開口関数のフーリエ変換

式 (4) で $e^{ik(x’^2+y’^2)/(2z)} \approx 1$ と置きます。すると積分は

$$ \begin{equation} U(x, y) = \frac{e^{ikz} e^{\frac{ik}{2z}(x^2 + y^2)}}{i\lambda z} \iint A(x’, y’)\, e^{-i\frac{k}{z}(xx’ + yy’)}\, dx’\, dy’ \end{equation} $$

となりました。指数の肩を $-i2\pi(f_x x’ + f_y y’)$ の形に合わせるため、$k = 2\pi/\lambda$ を使って

$$ \frac{k}{z}x = \frac{2\pi}{\lambda}\frac{x}{z} = 2\pi f_x, \qquad f_x \equiv \frac{x}{\lambda z}, \qquad f_y \equiv \frac{y}{\lambda z} $$

空間周波数 を定義します。すると式 (7) の積分は、まさに 2 次元フーリエ変換

$$ \tilde{A}(f_x, f_y) = \iint A(x’, y’)\, e^{-i2\pi(f_x x’ + f_y y’)}\, dx’\, dy’ $$

そのものです。したがって、

$$ \begin{equation} \boxed{\;U(x, y) = \frac{e^{ikz} e^{\frac{ik}{2z}(x^2 + y^2)}}{i\lambda z}\, \tilde{A}\!\left(\frac{x}{\lambda z}, \frac{y}{\lambda z}\right)\;} \end{equation} $$

これがフラウンホーファー回折の核心です。遠方場の複素振幅は、開口関数のフーリエ変換に、位相因子と $1/(i\lambda z)$ を掛けただけのものである — これ以上でもこれ以下でもありません。

実際に観測されるのは強度 $I = |U|^2$ です。前に付いた位相因子はすべて絶対値 1 なので、強度には効きません。

$$ \begin{equation} I(x, y) = \frac{1}{\lambda^2 z^2} \left| \tilde{A}\!\left(\frac{x}{\lambda z}, \frac{y}{\lambda z}\right) \right|^2 \end{equation} $$

さらに、小角では $x/z \approx \tan\theta_x \approx \sin\theta_x$ なので、空間周波数は回折角と

$$ \begin{equation} f_x = \frac{\sin\theta_x}{\lambda}, \qquad f_y = \frac{\sin\theta_y}{\lambda} \end{equation} $$

で結びつきます。この対応は覚えておく価値があります。空間周波数 $\times$ 波長 $=$ 回折角の正弦。開口の細かい構造(高い空間周波数)ほど大きな角度に飛ぶ、という関係が一行で読めます。

ここから 3 つの重要な性質が即座に従います。

  1. 相似性(スケーリング): フーリエ変換の性質 $\mathcal{F}[A(x’/s)] = |s| \tilde{A}(s f_x)$ より、開口を $s$ 倍に広げると回折パターンは $1/s$ 倍に縮みます。「狭い開口ほど大きく広がる」の数学的正体です。
  2. シフト不変性: 開口を横にずらしても $\tilde{A}$ には線形位相が掛かるだけなので、強度パターンは動きません。スリットの位置ではなく形だけが効きます。
  3. 加法性と畳み込み: 開口が複数の要素の和なら振幅も和になり、開口が「基本形 $\ast$ 位置の櫛」の畳み込みなら、遠方場は「基本形の変換 $\times$ 櫛の変換」の積になります。回折格子の解析はこの性質だけで片が付きます。

1 番目の相似性を、実際の開口と遠方場の組で見ておきましょう。

矩形開口25μm・50μmとガウシアン開口について、開口関数(左列)と遠方場強度(右列)を並べた図

左列が開口の透過率分布、右列がその遠方場の強度で、上下段はフーリエ変換対になっています。幅 25 μm の矩形(上段)と 50 μm の矩形(中段)を比べると、開口を 2 倍に広げただけで回折パターンの幅がちょうど半分になっており、$\mathcal{F}[A(x’/s)] = |s|\tilde{A}(sf_x)$ という相似性がそのまま現れています。下段のガウシアン開口だけはゼロ点もサイドローブも持たず、変換してもガウシアンのままです。開口の形をいじると回折像がどう動くかは、フーリエ変換の性質を思い出すだけで予測できる わけです。

抽象論はここまでにして、いちばん基本的な開口である単スリットに、この式を適用してみましょう。

単スリット回折 — sinc² の導出

幅 $a$ の細長いスリットを考えます。長さ方向($y’$ 方向)は十分長いので回折を無視でき、実質 1 次元問題になります。開口関数は矩形関数です。

$$ A(x’) = \begin{cases} 1 & |x’| \le a/2 \\ 0 & \text{otherwise} \end{cases} $$

式 (8) の積分を実行します。まず定義通りに書き下すと、

$$ \tilde{A}(f_x) = \int_{-a/2}^{a/2} e^{-i2\pi f_x x’}\, dx’ $$

指数関数の積分は原始関数がすぐ書けます。$\int e^{cx}dx = e^{cx}/c$ に $c = -i2\pi f_x$ を当てはめると、

$$ \tilde{A}(f_x) = \left[ \frac{e^{-i2\pi f_x x’}}{-i2\pi f_x} \right]_{-a/2}^{a/2} = \frac{e^{-i\pi f_x a} – e^{i\pi f_x a}}{-i2\pi f_x} $$

分子はオイラーの公式 $e^{i\vartheta} – e^{-i\vartheta} = 2i\sin\vartheta$ の形になっています。符号に注意して $e^{-i\pi f_x a} – e^{i\pi f_x a} = -2i\sin(\pi f_x a)$ と書き換えると、

$$ \tilde{A}(f_x) = \frac{-2i\sin(\pi f_x a)}{-i2\pi f_x} = \frac{\sin(\pi f_x a)}{\pi f_x} $$

分子・分母に $a$ を掛けて整えると、

$$ \begin{equation} \tilde{A}(f_x) = a\, \frac{\sin(\pi a f_x)}{\pi a f_x} \end{equation} $$

ここで、式 (10) の対応 $f_x = \sin\theta/\lambda$ を代入し、新しい変数

$$ \begin{equation} \beta \equiv \pi a f_x = \frac{\pi a \sin\theta}{\lambda} = \frac{k a \sin\theta}{2} \end{equation} $$

を導入します。$\beta$ は「スリットの端と中央から出た波の位相差の半分」という明快な意味を持ちます(端から端までの光路差が $a\sin\theta$ なので、位相差は $ka\sin\theta = 2\beta$)。これを使うと、強度は

$$ \begin{equation} \boxed{\; I(\theta) = I_0 \left( \frac{\sin\beta}{\beta} \right)^2 = I_0\, \mathrm{sinc}^2\!\left( \frac{\pi a \sin\theta}{\lambda} \right) \;} \end{equation} $$

となります。ここで $\mathrm{sinc}(u) \equiv \sin u / u$ という数学の慣習を使いました。NumPy の np.sinc(x) は $\sin(\pi x)/(\pi x)$ という別の定義なので、実装時は引数を $\pi$ で割るのを忘れないでください。ここは実装でよく事故る箇所です。

暗点の位置

$I = 0$ となるのは $\sin\beta = 0$ かつ $\beta \ne 0$、つまり $\beta = m\pi$($m = \pm1, \pm2, \dots$)のときです。$\beta$ の定義を代入すると

$$ \frac{\pi a \sin\theta}{\lambda} = m\pi \quad \Longrightarrow \quad \boxed{\; a \sin\theta = m\lambda \;} $$

最初の暗点は $\sin\theta = \lambda/a$。スリットが狭いほど($a$ が小さいほど)最初の暗点の角度が大きい、つまり中央の明るい帯が広がります。冒頭に書いた「狭くすると広がる」がここに数式として現れました。

この暗点条件には分かりやすい物理的解釈があります。スリットを上半分と下半分に二等分し、上半分の各点と、そこからちょうど $a/2$ だけ下にずれた下半分の点をペアにします。ペア間の光路差は $(a/2)\sin\theta$ で、これが $\lambda/2$ になれば逆位相となり、ペアごとに完全に打ち消し合います。$(a/2)\sin\theta = \lambda/2$ すなわち $a\sin\theta = \lambda$ が $m=1$ の暗点です。$m=2$ なら 4 等分、$m=3$ なら 6 等分してペアを作ればよく、一般に $a\sin\theta = m\lambda$ が得られます。フレネルの「帯分割」の考え方です。

スリットをa/2離れた点のペアに分けて打ち消し合いを説明する図と、次数mに応じて2m等分する帯分割の図

左図で、上半分の点 P と、そこから $a/2$ だけ下にずれた点 Q を考えます。回折角 $\theta$ の方向へ進む 2 本の光線には赤で示した $(a/2)\sin\theta$ の光路差があり、これが $\lambda/2$ になった瞬間にペアは逆位相となって完全に消えます。スリット内のすべての点がこのようにペアを組めるので、その角度では全体がゼロになります。右図のように次数 $m$ に対しては $2m$ 等分して隣どうしをペアにすればよく、暗点条件 $a\sin\theta = m\lambda$ が「打ち消し合うペアを作れる角度」として直感的に理解できます

中央極大の幅とサイドローブ

中央極大($\beta \to 0$ で $I \to I_0$)の広がりを 2 通りで測っておきます。ゼロ点からゼロ点までの全幅は $\Delta(\sin\theta) = 2\lambda/a$。半値全幅(FWHM)は $(\sin\beta/\beta)^2 = 1/2$ を解いて $\beta_{1/2} = 1.39156$ となるので、

$$ \Delta(\sin\theta)_{\text{FWHM}} = \frac{2\beta_{1/2}\lambda}{\pi a} = 0.886\, \frac{\lambda}{a} $$

一方、副極大(サイドローブ)の位置は $dI/d\beta = 0$ から $\tan\beta = \beta$ の解として決まります。これは超越方程式で解析解を持ちませんが、数値的に $\beta/\pi = 1.4303,\ 2.4590,\ 3.4709, \dots$ と求まり、そのときの相対強度は

$$ 4.72\%,\quad 1.65\%,\quad 0.83\%, \dots $$

です。第 1 サイドローブの $4.72\%$ は $-13.3$ dB に相当し、レーダーやアンテナ工学で「一様分布開口のサイドローブは $-13.3$ dB」として頻出する数値と同じものです。光学とアンテナ工学が同じ数字を共有しているのは偶然ではなく、どちらも矩形開口のフーリエ変換だからです。

数式が揃ったので、具体的な数値を入れて実感をつかみましょう。

具体例 — 実験室の机の上で何が見えるか

He–Ne レーザー($\lambda = 633$ nm)を、幅 $a = 50\ \mu$m のスリットに当て、$z = 1$ m 先のスクリーンに投影する状況を考えます。

まず遠方場条件のチェックです。$a^2/\lambda = (50 \times 10^{-6})^2 / (633 \times 10^{-9}) = 3.95$ mm。$z = 1$ m はこの 253 倍なので、フラウンホーファー条件 $z \gg a^2/\lambda$ は余裕で満たされます。フレネル数は $N_F = (a/2)^2/(\lambda z) = 9.9 \times 10^{-4}$ と 1 よりはるかに小さく、遠方場として扱ってよいと判断できます。

最初の暗点は

$$ \sin\theta_1 = \frac{\lambda}{a} = \frac{633 \times 10^{-9}}{50 \times 10^{-6}} = 0.01266 \quad \Longrightarrow \quad \theta_1 = 0.725^\circ $$

スクリーン上の位置は $x_1 = z\tan\theta_1 = 12.7$ mm。したがって中央の明るい帯の幅は約 25.3 mm です。0.05 mm の隙間を通した光が、1 m 先で 25 mm に広がる — 500 倍です。幾何光学ならスクリーンには 0.05 mm の線が写るはずなので、この差が回折の効果の大きさを物語ります。

暗点は $x = 12.7$ mm, $25.3$ mm, $38.0$ mm, $50.6$ mm … と等間隔に並び、その間のサイドローブの頂点は $\beta/\pi = 1.4303,\ 2.4590,\ 3.4709$ から $x = 18.1$ mm, $31.1$ mm, $44.0$ mm に来ます。強度は中央の 4.72%, 1.65%, 0.83% と急速に落ちるので、肉眼では第 2 サイドローブくらいまでしか見えないことが多くなります。

ここでスリット幅を $a = 10\ \mu$m に狭めるとどうなるでしょうか。$\lambda/a = 0.0633$ となり、$\theta_1 = 3.63^\circ$、スクリーン上では $63$ mm。中央帯は 127 mm にまで広がります。狭めるほど広がる関係が、数値でもはっきり確認できます。

スリット幅10・25・50・100μmについて、1m先のスクリーン上の強度分布を実寸で比較した図

横軸はスクリーン上の実寸(mm)です。スリット幅を 100 μm から 10 μm へ 10 分の 1 にすると、中央帯の全幅は 12.7 mm から 126.6 mm へちょうど 10 倍に広がります。開口の寸法と回折像の広がりが反比例している ことが、実験室のスケールでそのまま見えるわけです。また、どの幅でも第 1 サイドローブの高さが中央の 4.72% で変わらない点にも注目してください。形は相似に伸び縮みするだけで、比率は開口幅によらないからです。

1 次元の話が済んだので、実際の光学系で使われる 2 次元の開口に進みましょう。

矩形開口 — 2 次元への拡張と可分性

幅 $a$($x$ 方向)、高さ $b$($y$ 方向)の長方形の穴を考えます。開口関数は $x’$ の矩形関数と $y’$ の矩形関数の積に書けます。

$$ A(x’, y’) = \mathrm{rect}\!\left(\frac{x’}{a}\right)\mathrm{rect}\!\left(\frac{y’}{b}\right) $$

2 次元フーリエ変換の核 $e^{-i2\pi(f_x x’ + f_y y’)}$ も $e^{-i2\pi f_x x’} \cdot e^{-i2\pi f_y y’}$ と積に分かれるので、二重積分は 2 つの 1 次元積分の積になります。変数分離できる開口の回折像は、1 次元回折像の積になる ということです。前節の結果をそのまま使えば、

$$ \begin{equation} I(\theta_x, \theta_y) = I_0\, \mathrm{sinc}^2\!\left(\frac{\pi a \sin\theta_x}{\lambda}\right) \mathrm{sinc}^2\!\left(\frac{\pi b \sin\theta_y}{\lambda}\right) \end{equation} $$

この式から、$a \ne b$ の長方形開口では 横長の穴は縦長の回折像を作る ことが読めます。$a > b$ なら $x$ 方向の広がり $\lambda/a$ が $y$ 方向の広がり $\lambda/b$ より小さいからです。カメラの絞り羽根が作る光条(スターバースト)が、絞りの多角形の辺数と垂直な方向に伸びるのも、これと同じ「開口の細い方向に像が伸びる」性質の現れです。

ところで、実際の光学系の開口はほとんどが円形です。円形開口は変数分離できないので、この手は使えません。極座標に持ち込む必要があります。

円形開口 — エアリーパターンとレイリー基準

望遠鏡の対物鏡も、カメラのレンズも、顕微鏡の対物レンズも、そして人間の瞳孔も、みな円形です。だから 円形開口の回折像は光学の中で最も重要なパターン で、発見者にちなんで エアリーパターン(Airy pattern) と呼ばれます。

直径 $D$(半径 $R = D/2$)の円形開口を考えます。開口関数は

$$ A(\rho’) = \begin{cases} 1 & \rho’ \le R \\ 0 & \rho’ > R \end{cases}, \qquad \rho’ = \sqrt{x’^2 + y’^2} $$

円対称なので、極座標 $x’ = \rho’\cos\varphi’$, $y’ = \rho’\sin\varphi’$ と、観測側も $f_x = f\cos\varphi$, $f_y = f\sin\varphi$ と置きます。すると指数の肩は

$$ f_x x’ + f_y y’ = f\rho'(\cos\varphi\cos\varphi’ + \sin\varphi\sin\varphi’) = f\rho’\cos(\varphi’ – \varphi) $$

と、加法定理でひとつの余弦にまとまります。よって

$$ \tilde{A}(f) = \int_0^{R}\!\!\int_0^{2\pi} e^{-i2\pi f \rho’ \cos(\varphi’ – \varphi)}\, \rho’\, d\varphi’\, d\rho’ $$

内側の $\varphi’$ 積分には、第 1 種ベッセル関数の積分表示

$$ J_0(w) = \frac{1}{2\pi}\int_0^{2\pi} e^{-i w \cos\psi}\, d\psi $$

がそのまま使えます($\psi = \varphi’ – \varphi$、$w = 2\pi f\rho’$ と置き換える。周期関数なので積分区間のずれは効きません)。これを代入すると

$$ \tilde{A}(f) = 2\pi \int_0^{R} J_0(2\pi f \rho’)\, \rho’\, d\rho’ $$

残った動径積分は、ベッセル関数の恒等式

$$ \int_0^{X} J_0(t)\, t\, dt = X J_1(X) $$

で片付きます。$t = 2\pi f\rho’$ と変数変換すると $\rho’ = t/(2\pi f)$、$d\rho’ = dt/(2\pi f)$ なので、

$$ 2\pi \int_0^{2\pi f R} J_0(t)\, \frac{t}{2\pi f}\, \frac{dt}{2\pi f} = \frac{1}{2\pi f^2}\int_0^{2\pi f R} J_0(t)\, t\, dt = \frac{2\pi f R\, J_1(2\pi f R)}{2\pi f^2} = \frac{R\, J_1(2\pi f R)}{f} $$

見やすくするため $\pi R^2$(開口面積)でくくると、

$$ \begin{equation} \tilde{A}(f) = \pi R^2 \cdot \frac{2 J_1(2\pi f R)}{2\pi f R} \end{equation} $$

ここで $u \equiv 2\pi f R = k R \sin\theta = \pi D \sin\theta/\lambda$ と置けば、強度分布は

$$ \begin{equation} \boxed{\; I(\theta) = I_0 \left[ \frac{2 J_1(u)}{u} \right]^2, \qquad u = \frac{\pi D \sin\theta}{\lambda} \;} \end{equation} $$

これがエアリーパターンです。$u \to 0$ で $2J_1(u)/u \to 1$ なので、中心で $I = I_0$ になるように規格化されています。単スリットの $\sin u/u$ が、円形開口では $2J_1(u)/u$ に置き換わった、という覚え方が便利です。

エアリー半径とレイリー基準

$J_1(u)$ の最初の正のゼロ点は $u_1 = 3.8317$ です。これを $u$ の定義に入れると、

$$ \frac{\pi D \sin\theta}{\lambda} = 3.8317 \quad \Longrightarrow \quad \sin\theta = \frac{3.8317}{\pi}\frac{\lambda}{D} = 1.2197\frac{\lambda}{D} $$

$$ \begin{equation} \boxed{\; \theta_{\text{Airy}} \approx 1.22 \frac{\lambda}{D} \;} \end{equation} $$

有名な $1.22$ の正体は $3.8317/\pi$ だったわけです。この最初の暗環の内側が エアリーディスク(Airy disk)、その外側のリング群が回折リングです。全光量のうち 83.8% がエアリーディスクに集中し、第 1 リングまでで 91.0%、第 2 リングまでで 93.8% になります。第 1 サイドローブの相対強度は $1.75\%$($-17.6$ dB)で、矩形開口の $4.72\%$ より低い値です。円形開口の方がサイドローブが低いのは、開口の「角」がないぶんフーリエ変換が滑らかになるためです。

レイリー基準(Rayleigh criterion) は、この結果を「2 点の分離」に翻訳したものです。同じ強度の 2 つの点光源を考え、一方のエアリーディスクの中心が、他方の第 1 暗環に一致するとき、かろうじて分離できる と定義します。すると分離可能な最小角度は

$$ \begin{equation} \theta_{\min} = 1.22\frac{\lambda}{D} \end{equation} $$

です。この基準は物理法則ではなく、あくまで慣習的な「合格ライン」であることに注意してください。実際には $-17.6$ dB のサイドローブが邪魔をするので明るさ差のある 2 点はもっと分離しにくく、逆に SNR が十分高ければデコンボリューションでこれを下回る分離も可能です(超解像)。それでも設計指標としては非常に有用です。

2つの点光源の間隔を0.5・1.0・1.64倍のレイリー限界で変えたときの合成像を比較した図

同じ明るさの 2 つの星のエアリーパターンを重ねてみました。左($0.5\,\theta_{\min}$)では合計(黒線)の山がひとつしかなく、2 つの星があること自体が分かりません。中央のレイリー基準ちょうどでは、2 つの頂点の間にくぼみが現れ、その深さは頂点の 73.5% です。右($1.64\,\theta_{\min}$)では谷が 6.5% まで落ちて完全に分離します。「くぼみが見え始める境目」を分離の合格ラインと呼んでいるだけ で、レイリー基準が慣習的な定義にすぎないことがこの 3 枚から分かります。

数値を並べておきます($\lambda = 550$ nm、可視光の中心付近)。

光学系 口径 $D$ $\theta_{\min}$ 秒角換算
人間の眼(瞳孔) 3 mm $2.24 \times 10^{-4}$ rad 46 秒角
市販の小型望遠鏡 100 mm $6.71 \times 10^{-6}$ rad 1.38 秒角
ハッブル宇宙望遠鏡 2.4 m $2.80 \times 10^{-7}$ rad 0.058 秒角
すばる望遠鏡 8.2 m $8.18 \times 10^{-8}$ rad 0.017 秒角

人間の眼の実測分解能はおよそ 1 分角(60 秒角)で、上の 46 秒角と同程度です。つまり 人間の視力は、網膜の細胞密度ではなく、瞳孔の回折でほぼ限界が決まっている ことになります。よくできた設計です。一方、地上の大望遠鏡は大気ゆらぎ(シーイング、典型的に 1 秒角)に阻まれて 0.017 秒角には届かず、補償光学や宇宙望遠鏡が必要になる理由もこの表から読み取れます。

ここまでは「ひとつの穴」でした。次は穴を複数並べたときに何が起きるかを見ます。

二重スリット — 干渉と回折の役割分担

ヤングの二重スリット実験では、等間隔 $d$ で並んだ幅 $a$ の 2 本のスリットを使います。教科書ではしばしば $I \propto \cos^2(\pi d\sin\theta/\lambda)$ という「干渉項」だけが書かれますが、これはスリット幅をゼロとみなした理想化です。実際には有限幅の効果が必ず入ります。

フーリエ変換の性質を使えば一瞬です。開口関数は「幅 $a$ の矩形」を $\pm d/2$ の 2 か所に置いたもの、すなわち

$$ A(x’) = \mathrm{rect}\!\left(\frac{x’}{a}\right) \ast \left[ \delta\!\left(x’ + \tfrac{d}{2}\right) + \delta\!\left(x’ – \tfrac{d}{2}\right) \right] $$

という 畳み込み で書けます。畳み込み定理より、フーリエ変換は積になります。

$$ \tilde{A}(f_x) = \underbrace{a\,\frac{\sin\beta}{\beta}}_{\text{単スリット}} \times \underbrace{2\cos(\pi d f_x)}_{\text{2点の干渉}} $$

$\delta$ 関数対のフーリエ変換が $e^{i\pi d f_x} + e^{-i\pi d f_x} = 2\cos(\pi d f_x)$ になることを使いました。$\delta = 2\pi d\sin\theta/\lambda$(隣接スリット間の位相差)と置くと $\pi d f_x = \delta/2$ なので、強度は

$$ \begin{equation} I(\theta) = I_0 \left(\frac{\sin\beta}{\beta}\right)^2 \cdot 4\cos^2\!\left(\frac{\delta}{2}\right), \qquad \beta = \frac{\pi a \sin\theta}{\lambda},\ \ \delta = \frac{2\pi d\sin\theta}{\lambda} \end{equation} $$

役割分担がきれいに見えます。$\cos^2$ の因子が細かい干渉縞を作り、$\mathrm{sinc}^2$ の因子がその包絡線(明るさのゆるやかな変化)を作る のです。「回折が包絡線、干渉が縞」と覚えておくと、写真を見ただけで $a$ と $d$ が読み取れるようになります。

面白いのは 欠落次数(missing order) です。干渉の明線は $d\sin\theta = m\lambda$ に現れますが、そこがちょうど単スリット回折の暗点 $a\sin\theta = m’\lambda$ と重なると、明線が消えます。両者を割ると条件は

$$ \frac{m}{m’} = \frac{d}{a} $$

なので、$d/a$ が整数のとき、$m = (d/a)\cdot m’$ 次の干渉明線がすべて消えます。たとえば $d/a = 5$ なら 5 次、10 次、15 次…が欠落します。後の Python 実装でこれを数値的に確認します。

2 本を $N$ 本に増やすとどうなるか。これが分光器の心臓部である回折格子です。

N 本の回折格子 — グレーティング関数

幅 $a$ のスリットが間隔 $d$ で $N$ 本並んだ開口を考えます。二重スリットのときと同じ論法で、開口関数は「幅 $a$ の矩形」と「$N$ 個の $\delta$ 関数列」の畳み込みです。よって遠方場の振幅は

$$ \tilde{A}(f_x) = a\,\frac{\sin\beta}{\beta} \times \sum_{n=0}^{N-1} e^{-i n \delta} $$

(全体の位置をずらす位相因子は強度に効かないので省きました)。等比級数の和ですから、公比 $q = e^{-i\delta}$ として

$$ \sum_{n=0}^{N-1} q^n = \frac{1 – q^N}{1 – q} = \frac{1 – e^{-iN\delta}}{1 – e^{-i\delta}} $$

分子・分母それぞれから半角の位相をくくり出すのが定石です。$1 – e^{-i\vartheta} = e^{-i\vartheta/2}(e^{i\vartheta/2} – e^{-i\vartheta/2}) = e^{-i\vartheta/2}\cdot 2i\sin(\vartheta/2)$ を分子($\vartheta = N\delta$)と分母($\vartheta = \delta$)に適用すると、

$$ \frac{e^{-iN\delta/2}\, 2i\sin(N\delta/2)}{e^{-i\delta/2}\, 2i\sin(\delta/2)} = e^{-i(N-1)\delta/2}\, \frac{\sin(N\delta/2)}{\sin(\delta/2)} $$

先頭の位相因子は絶対値 1 なので強度には効きません。したがって

$$ \begin{equation} \boxed{\; I(\theta) = I_0 \left(\frac{\sin\beta}{\beta}\right)^2 \left[ \frac{\sin(N\delta/2)}{\sin(\delta/2)} \right]^2 \;} \end{equation} $$

角括弧の中身は グレーティング関数(多重スリット干渉因子) と呼ばれます。この関数の性質を押さえましょう。

主極大: 分母 $\sin(\delta/2)$ がゼロになる $\delta = 2\pi m$ では、分子もゼロになるので $0/0$ の不定形です。ロピタルの定理を使う(あるいは $\delta = 2\pi m + \varepsilon$ と展開する)と、極限値は $N^2$ になります。$\delta = 2\pi m$ を $\delta$ の定義に代入すれば 回折格子の式

$$ \begin{equation} \boxed{\; d\sin\theta = m\lambda \;} \end{equation} $$

が得られます。主極大の強度は $N^2$ に比例します — スリットを 2 倍にすると明るさは 4 倍。振幅が $N$ 倍になり、強度はその二乗になるからです(コヒーレントな足し算の威力)。

主極大の鋭さ: 主極大の近くで $\delta = 2\pi m + \varepsilon$ と置くと、$\sin(\delta/2) = \sin(\pi m + \varepsilon/2) = \pm\sin(\varepsilon/2) \approx \pm\varepsilon/2$、$\sin(N\delta/2) = \sin(\pi N m + N\varepsilon/2) = \pm\sin(N\varepsilon/2)$ なので、

$$ \frac{\sin(N\delta/2)}{\sin(\delta/2)} \approx \frac{\sin(N\varepsilon/2)}{\varepsilon/2} = N\,\frac{\sin(N\varepsilon/2)}{N\varepsilon/2} $$

つまり 主極大の近傍では、幅 $Nd$ の 1 本の広いスリットと同じ $\mathrm{sinc}$ 形になる、というのが本質です。$N\varepsilon/2 = \pi$ で最初のゼロになるので $\varepsilon = 2\pi/N$、$\delta$ と $\sin\theta$ の関係から

$$ \Delta(\sin\theta)_{\text{零点}} = \frac{\lambda}{Nd} $$

半値全幅は $\mathrm{sinc}^2$ の結果 $0.886$ を掛けて $0.886\lambda/(Nd)$ です。分母の $Nd$ は 照射されている格子の全幅 なので、「格子の分解能は、実際に光が当たっている幅で決まる」という設計上きわめて重要な結論が出ます。

副極大: 隣接する主極大の間には $N-1$ 個のゼロ点があり、その間に $N-2$ 個の副極大が現れます。$N$ が大きくなると副極大は相対的に弱くなり(最大でも主極大の約 $4.7\%$)、主極大だけが鋭く突き出た「線スペクトル」に近づきます。これが回折格子が分光素子として優れている理由です。

式が出そろったので、分光器の性能指標に翻訳しましょう。

回折格子の分散能と分解能 R = mN

分光器の性能は 2 つの数字で語られます。角分散(波長が変わると回折角がどれだけ動くか)分解能(どれだけ近い 2 つの波長を分離できるか) です。前者は「目盛りの細かさ」、後者は「読み取れる最小の差」に対応します。目盛りが細かくても線がボケていれば読めないので、両方が必要です。

角分散

格子の式 $d\sin\theta = m\lambda$ を $\lambda$ で微分します。左辺の $\theta$ は $\lambda$ の関数なので連鎖律を使って、

$$ d\cos\theta\, \frac{d\theta}{d\lambda} = m $$

$$ \begin{equation} \boxed{\; \frac{d\theta}{d\lambda} = \frac{m}{d\cos\theta} \;} \end{equation} $$

分散を大きくするには、(i) 高次数 $m$ を使う、(ii) 溝間隔 $d$ を小さくする(溝密度を上げる)、(iii) 大きな角度 $\theta$ で使う($\cos\theta$ が小さくなる)、の 3 通りがあることが読めます。

数値例です。600 本/mm の格子($d = 1.667\ \mu$m)でナトリウム D 線($\lambda = 589$ nm)を 1 次で使うと、$\sin\theta = 0.353$ から $\theta = 20.7^\circ$、角分散は

$$ \frac{d\theta}{d\lambda} = \frac{1}{1.667 \times 10^{-6} \times \cos 20.7^\circ} = 6.41 \times 10^{5}\ \text{rad/m} = 0.0367\ \text{度/nm} $$

2 次で使えば $\theta = 45.0^\circ$、角分散は $0.0972$ 度/nm と 2.6 倍に跳ね上がります。$m$ が 2 倍になるだけでなく $\cos\theta$ も小さくなるためです。

600本/mmの格子について波長と回折角の関係を1次・2次で描いた図と、可視光の広がりを比較した図

左図の傾きがそのまま角分散 $d\theta/d\lambda$ です。1 次(青)はほぼ直線ですが、2 次(赤)は傾きが大きいうえに長波長側で $\cos\theta$ が効いて曲がり上がっています。右図で可視光全体(380〜760 nm)の広がりを比べると、1 次では 13.9 度なのに対し 2 次では 38.7 度と 2.8 倍に伸びています。次数を上げれば「目盛り」は細かくなる のですが、その代わり 2 次では 65.8 度という浅い角度まで使うことになり、光学系の設計は苦しくなります。分散を稼ぐことと使いやすさは別問題だ、というのがこの図の教訓です。

分解能

レイリー基準を再び使います。波長 $\lambda$ と $\lambda + \Delta\lambda$ の主極大が「一方の頂点が他方の第 1 零点に来る」とき分離できたとみなします。

波長差による主極大のずれは、角分散から

$$ \Delta\theta_{\text{分離}} = \frac{m}{d\cos\theta}\,\Delta\lambda $$

一方、主極大の半幅(頂点から第 1 零点まで)は $\Delta(\sin\theta) = \lambda/(Nd)$ を角度に直して

$$ \Delta\theta_{\text{幅}} = \frac{\lambda}{N d \cos\theta} $$

($\Delta(\sin\theta) = \cos\theta\,\Delta\theta$ を使いました)。この 2 つを等しいと置くと、

$$ \frac{m\,\Delta\lambda}{d\cos\theta} = \frac{\lambda}{N d\cos\theta} $$

両辺の $d\cos\theta$ が見事に消えて、

$$ \begin{equation} \boxed{\; R \equiv \frac{\lambda}{\Delta\lambda} = mN \;} \end{equation} $$

分解能は、次数 $N$ と照射溝数 $N$ の積だけで決まり、溝間隔 $d$ にも回折角 $\theta$ にも依存しません。 これは驚くほどきれいな結果です。溝を細かくしても分解能は上がらず(分散は上がりますが)、上げたければ 格子を大きく照らす高次で使う しかない、と言っています。

ナトリウム D 線の二重線(589.00 nm と 589.59 nm、$\Delta\lambda = 0.59$ nm)を 1 次で分離するには

$$ N \ge \frac{\lambda}{m\,\Delta\lambda} = \frac{589.0}{1 \times 0.59} \approx 998\ \text{本} $$

600 本/mm の格子なら $998 \times 1.667\ \mu\text{m} = 1.66$ mm 幅を照らせば足ります。ビーム径 2 mm の小さな分光器でもナトリウムの二重線が見える、という実感と一致します。逆に、太陽スペクトルの微細構造を追う天文分光器が数十 cm の巨大な格子を使うのは、$R \sim 10^5$ を稼ぐためです。

$$ R = 10^5 \quad \Longleftrightarrow \quad N = 10^5\ \text{本} \quad \Longleftrightarrow \quad \text{600本/mm なら 167 mm 幅} $$

さて、ここまでは「開口の中は一様に明るい」としてきました。最後の理論節では、開口内の明るさに勾配を付けたらどうなるかを見ます。

アポダイゼーション — 開口は窓関数である

エアリーパターンの第 1 リングは中心の 1.75% の明るさを持ちます。系外惑星を直接撮像したい天文学者にとって、これは致命的です。主星の回折リングが、その $10^{-9}$ の明るさしかない惑星を完全に埋めてしまうからです。矩形開口ならもっと深刻で、第 1 サイドローブは 4.72%($-13.3$ dB)もあります。

この問題の正体は、実は信号処理でおなじみの スペクトル漏れ とまったく同じです。矩形の窓で信号を切り取ると $\mathrm{sinc}$ 型のサイドローブが立つ — 開口の縁で透過率が 1 から 0 に不連続に落ちることが、フーリエ変換の裾を持ち上げます。対策も同じで、縁でなめらかにゼロに落ちる透過率分布を使う のです。光学ではこれを アポダイゼーション(apodization、「足を取り除く」の意) と呼びます。信号処理の窓関数と数学的に同一のものです。

代表的な 3 つを比べます(幅 $a$ の 1 次元開口)。

開口分布 第 1 零点 最大サイドローブ 半値全幅
矩形(一様) $1.00\,\lambda/a$ $4.72\%$($-13.3$ dB) $0.886\,\lambda/a$
ハン(レイズドコサイン) $2.00\,\lambda/a$ $0.071\%$($-31.5$ dB) $1.44\,\lambda/a$
ガウシアン($\sigma = a/6$) なし 実質ゼロ $1.59\,\lambda/a$

サイドローブを下げると、必ず主極大が太る。 これはフーリエ変換における普遍的なトレードオフで、時間・周波数の不確定性関係の別の顔です。ハン分布はサイドローブを $-13.3$ dB から $-31.5$ dB へ 18 dB も下げますが、その代償として主極大の幅が 1.63 倍になります。つまり 分解能を犠牲にしてコントラストを買っている わけです。

ガウシアン分布が特別なのは、フーリエ変換してもガウシアンのまま だからです。$\mathcal{F}[e^{-x^2/(2\sigma^2)}] \propto e^{-2\pi^2\sigma^2 f^2}$ という関係があり、ゼロ点もサイドローブも原理的に存在しません。レーザーのガウシアンビームが伝搬しても形を保つのは、この自己相似性の直接の帰結です。

どちらを選ぶかは目的次第です。惑星撮像コロナグラフのようにダイナミックレンジが命の用途ではアポダイズを、暗い天体を検出したいだけなら一様開口(光量が最大で主極大が最も細い)を選びます。アンテナ工学で「テーパ給電はサイドローブを下げるが開口能率を落とす」と言われるのも、同じトレードオフを別の言葉で述べたものです。

理論はここまでです。次はこれらすべてを Python で数値的に確かめます。

Python での実装 — FFT で任意開口の回折像を計算する

これまで見てきた $\mathrm{sinc}$、エアリー、グレーティング関数はいずれも解析解が求まる特別な開口でした。しかし式 (8) が言っているのは「遠方場 = 開口関数のフーリエ変換」という一般則です。FFT を使えば、解析解のない任意の開口についても回折像を計算できます。 ここではまず 1 次元のフレームワークを作り、解析解と突き合わせて正しさを確認したうえで、2 次元や複雑な開口へ広げていきます。

実装で気をつける点は 3 つです。第一に、開口の外側に十分広いゼロ領域(ゼロ埋め)を確保すること。計算窓の全幅 $L$ が角度分解能 $\Delta(\sin\theta) = \lambda/L$ を決めるので、$L$ を大きくするほど回折像が滑らかにサンプリングされます。第二に、fftshift / ifftshift を正しく使って原点を配列中央に置くこと。これを忘れると開口の中心が端に来て、余計な線形位相(=像のずれ)が入ります。第三に、開口の縁を離散化する画素数を確保することです。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

# 日本語フォント設定
for cand in ["Hiragino Sans", "Yu Gothic", "Noto Sans CJK JP", "IPAexGothic", "Meiryo"]:
    if any(cand == f.name for f in matplotlib.font_manager.fontManager.ttflist):
        plt.rcParams["font.family"] = cand
        break
plt.rcParams["axes.unicode_minus"] = False

LAMBDA = 633e-9  # He-Neレーザーの波長 [m]

def fraunhofer_1d(aperture, L=8e-3, N=2**20, lam=LAMBDA):
    """開口関数 aperture(x) の遠方場強度をFFTで計算する。
    L : 計算窓の全幅 [m](開口の外側のゼロ埋めを含む)
    N : サンプル数(大きいほど角度範囲が広がる)
    戻り値: (sinθ の配列, 最大値で正規化した強度)"""
    dx = L / N
    x = (np.arange(N) - N // 2) * dx          # 原点が中央に来る座標
    A = aperture(x).astype(complex)           # 開口関数(複素数でもよい)
    U = np.fft.fftshift(np.fft.fft(np.fft.ifftshift(A))) * dx
    fx = np.fft.fftshift(np.fft.fftfreq(N, d=dx))   # 空間周波数 [1/m]
    I = np.abs(U) ** 2
    return lam * fx, I / I.max()              # sinθ = λ·fx

この 15 行が本記事の全内容を計算できる汎用エンジンです。aperture に渡す関数を差し替えるだけで、単スリットでも格子でも位相物体でも扱えます。* dx はリーマン和を積分に対応させるための係数で、強度を正規化してしまうので結果には効きませんが、絶対値を議論したいときに必要になります。

単スリット — 解析解との突き合わせ

まず幅 $a = 50\ \mu$m の単スリットで、式 (13) の $\mathrm{sinc}^2$ が再現されるかを確認します。

a = 50e-6  # スリット幅 [m]

def single_slit(x, a=a):
    return (np.abs(x) <= a / 2).astype(float)

st, I_fft = fraunhofer_1d(single_slit)

# 解析解 I = (sinβ/β)^2, β = πa sinθ/λ
beta = np.pi * a * st / LAMBDA
I_th = np.where(beta == 0, 1.0, (np.sin(np.where(beta == 0, 1, beta)) / np.where(beta == 0, 1, beta)) ** 2)

m = np.abs(st) < 5 * LAMBDA / a
print("FFTと解析解の最大絶対誤差:", np.abs(I_fft[m] - I_th[m]).max())

plt.figure(figsize=(9, 5))
plt.plot(st[m] / (LAMBDA / a), I_fft[m], lw=2.5, label="FFTによる数値計算")
plt.plot(st[m] / (LAMBDA / a), I_th[m], "--", lw=1.2, color="k", label="解析解 $\\mathrm{sinc}^2$")
for k in range(1, 5):
    plt.axvline(k, color="gray", ls=":", lw=0.8)
    plt.axvline(-k, color="gray", ls=":", lw=0.8)
plt.xlabel("規格化した回折角  $\\sin\\theta \\,/\\, (\\lambda/a)$")
plt.ylabel("規格化強度")
plt.title("単スリット回折:FFTと解析解の一致(縦点線が暗点 $a\\sin\\theta=m\\lambda$)")
plt.legend(); plt.grid(alpha=0.3); plt.tight_layout(); plt.show()

単スリット回折のFFT数値計算と解析解sinc二乗が一致することを示すグラフ

最大絶対誤差は $7.6 \times 10^{-5}$ で、実線(FFT)と破線(解析解)は完全に重なります。誤差の主因はスリットの縁を画素境界で丸めたことによる離散化で、サンプル数を増やせばさらに小さくなります。縦の点線は $a\sin\theta = m\lambda$ の位置に引いてありますが、確かにそこで強度がゼロに落ちています。式 (8) の「遠方場 = 開口関数のフーリエ変換」が数値計算でそのまま成立している ことが、これで確認できました。

サイドローブを対数軸で見る

線形軸ではサイドローブがほとんど見えません。強度は対数軸で見るのが光学・アンテナ工学の作法です。

plt.figure(figsize=(9, 5))
mask = np.abs(st) < 6 * LAMBDA / a
plt.semilogy(st[mask] / (LAMBDA / a), np.maximum(I_fft[mask], 1e-8), lw=2)
for k, (pos, val) in enumerate(zip([1.4303, 2.4590, 3.4709], [0.0472, 0.0165, 0.0083]), start=1):
    plt.plot(pos, val, "o", color="crimson")
    plt.annotate(f"第{k}サイドローブ {val*100:.2f}%", (pos, val),
                 textcoords="offset points", xytext=(8, 8), fontsize=9)
plt.ylim(1e-6, 2)
plt.xlabel("規格化した回折角  $\\sin\\theta \\,/\\, (\\lambda/a)$")
plt.ylabel("規格化強度(対数軸)")
plt.title("単スリットのサイドローブ構造(第1サイドローブ = $-13.3$ dB)")
plt.grid(alpha=0.3, which="both"); plt.tight_layout(); plt.show()

単スリット回折のサイドローブ構造を対数軸で示し、第1サイドローブが4.72%であることを示すグラフ

対数軸にすると、$\tan\beta = \beta$ の解として理論的に求めた副極大の位置 $\beta/\pi = 1.4303,\ 2.4590,\ 3.4709$ に、FFT の結果がぴたりと重なることがわかります。強度も 4.72%、1.65%、0.83% と理論値通りです。サイドローブが $\beta^{-2}$ で減衰する(対数軸で直線的に下がる)のは、開口関数が縁で不連続なため、フーリエ変換の裾が $1/f$ で減衰することの帰結です。

2 次元開口 — 矩形と円

次に 2 次元に拡張します。エンジンは fft2 に変わるだけです。

import numpy as np

def fraunhofer_2d(A, dx, lam=LAMBDA):
    """2次元開口 A(複素数配列, 画素間隔 dx [m])の遠方場強度。
    戻り値: (sinθ の1次元配列, 正規化強度の2次元配列)"""
    U = np.fft.fftshift(np.fft.fft2(np.fft.ifftshift(A))) * dx * dx
    f = np.fft.fftshift(np.fft.fftfreq(A.shape[0], d=dx))
    I = np.abs(U) ** 2
    return lam * f, I / I.max()

N2, L2 = 3072, 1.2e-2          # 画素数と計算窓の全幅 [m]
dx2 = L2 / N2
xg = (np.arange(N2) - N2 // 2) * dx2
X, Y = np.meshgrid(xg, xg)

D = 200e-6                      # 円形開口の直径 [m]
A_circ = (np.hypot(X, Y) <= D / 2).astype(float)
A_rect = ((np.abs(X) <= 150e-6 / 2) & (np.abs(Y) <= 60e-6 / 2)).astype(float)

開口を用意しました。円は直径 200 μm、長方形は 150 μm × 60 μm(横長)です。次にこれらの回折像を並べて表示します。

fig, axes = plt.subplots(1, 2, figsize=(12.5, 5.6))
for ax, A, name, w in zip(axes, [A_rect, A_circ],
                          ["長方形開口 150 μm × 60 μm", "円形開口 直径 200 μm"],
                          [6 * LAMBDA / 60e-6, 7 * LAMBDA / D]):   # 表示する角度範囲
    s, I2 = fraunhofer_2d(A, dx2)
    sel = np.abs(s) < w
    img = I2[np.ix_(sel, sel)]
    ext = [s[sel].min() * 1e3, s[sel].max() * 1e3] * 2
    im = ax.imshow(np.log10(np.maximum(img, 1e-6)), extent=ext,
                   origin="lower", cmap="inferno", vmin=-5, vmax=0)
    ax.set_title(f"{name} の回折像(強度の常用対数)")
    ax.set_xlabel("$\\sin\\theta_x \\times 10^{3}$")
    ax.set_ylabel("$\\sin\\theta_y \\times 10^{3}$")
    fig.colorbar(im, ax=ax, shrink=0.85, label="規格化強度の常用対数")
plt.tight_layout(); plt.show()

長方形開口150×60μmと円形開口直径200μmの2次元回折像を対数強度で並べた図

左の長方形開口では、十字型に伸びた明線が見えます。横に長い開口(150 μm)は縦方向の広がりが狭く、縦に短い辺(60 μm)は横方向に大きく広がる — 式 (14) が予言した通り、開口と回折像の「縦横が入れ替わる」関係が視覚的に確認できます。右の円形開口では、中心のエアリーディスクを同心円状のリングが取り巻いています。円対称な開口からは円対称な回折像しか出ない、という当たり前の事実も、フーリエ変換が回転に対して共変であることの帰結です。

エアリーパターンの定量チェック

円形開口の断面を取り、$[2J_1(u)/u]^2$ と比較します。

from scipy.special import j1

s, I2 = fraunhofer_2d(A_circ, dx2)
cut = I2[N2 // 2, :]                       # 中心を通る水平断面
u = np.pi * D * s / LAMBDA
u_safe = np.where(u == 0, 1.0, u)
I_airy = np.where(u == 0, 1.0, (2 * j1(u_safe) / u_safe) ** 2)

m = np.abs(s) < 6 * LAMBDA / D
print("エアリーパターンの最大絶対誤差:", np.abs(cut[m] - I_airy[m]).max())

# 第1暗環の位置をFFT結果から数値的に探す
cand = np.where((s > 0.3 * LAMBDA / D) & (s < 2 * LAMBDA / D))[0]
z1 = cand[np.argmin(cut[cand])]
print("第1暗環 sinθ/(λ/D) =", s[z1] / (LAMBDA / D), " 解析値 = 1.2197")

# エアリーディスク内に含まれる光量の割合
R2 = np.hypot(s[None, :], s[:, None])
print("エアリーディスク内の光量割合:", I2[R2 <= 1.2197 * LAMBDA / D].sum() / I2.sum())

円形開口の回折像断面とエアリー解析解の一致、および半径ごとの累積光量を示した図

左が断面(対数軸)で、FFT の結果と $[2J_1(u)/u]^2$ の破線が全リングにわたって重なっています。赤い点線が $1.22\,\lambda/D$ の第 1 暗環で、その外側の第 1 リングが中心の 1.75%($-17.6$ dB)であることも読めます。右は半径 $r$ の内側に入る光量の割合を $1 – J_0^2(u) – J_1^2(u)$ で描いたもので、エアリーディスクだけで 83.8%、第 1 リングまでで 91.0%、第 2 リングまでで 93.8% に達します。曲線が階段状に見えるのは、暗環の位置では光がほとんど無いため増え方が止まるから です。

出力は、最大絶対誤差 $4.6 \times 10^{-4}$、第 1 暗環 $1.217\,\lambda/D$(解析値 $1.2197$、差は角度グリッドの刻み幅と開口の画素化の範囲内)、エアリーディスク内の光量割合 $83.78\%$ となります。望遠鏡の分解能を決める $1.22$ という数字と、「光の約 84% がエアリーディスクに入る」という光学設計でよく使う経験則が、単なる円の FFT から出てくる ことが確認できました。$1.22$ はベッセル関数のゼロ点 $3.8317$ を $\pi$ で割った値である、という導出も併せて思い出してください。

二重スリットと欠落次数

次に、干渉と回折の役割分担、そして欠落次数を確認します。

a_g, d_g = 4e-6, 20e-6         # スリット幅 4 μm, 間隔 20 μm(d/a = 5)

def grating(x, a=a_g, d=d_g, N=2):
    """幅a のスリットを間隔d で N本並べた開口"""
    A = np.zeros_like(x)
    for n in range(N):
        c = (n - (N - 1) / 2) * d
        A += (np.abs(x - c) <= a / 2).astype(float)
    return A

st2, I2s = fraunhofer_1d(lambda x: grating(x, N=2), L=4e-2, N=2**22)
beta2 = np.pi * a_g * st2 / LAMBDA
env = np.where(beta2 == 0, 1.0,
               (np.sin(np.where(beta2 == 0, 1, beta2)) / np.where(beta2 == 0, 1, beta2)) ** 2)

sel = np.abs(st2) < 8 * LAMBDA / d_g
plt.figure(figsize=(10, 5))
plt.plot(st2[sel] / (LAMBDA / d_g), I2s[sel], lw=1.2, label="二重スリットの強度")
plt.plot(st2[sel] / (LAMBDA / d_g), env[sel], "--", color="crimson", lw=2,
         label="単スリットの包絡線 $\\mathrm{sinc}^2$")
plt.axvline(5, color="k", ls=":", lw=1.5)
plt.annotate("5次が欠落($d/a=5$)", (5, 0.45), xytext=(5.6, 0.6),
             arrowprops=dict(arrowstyle="->"), fontsize=10)
plt.xlabel("干渉次数  $\\sin\\theta \\,/\\, (\\lambda/d)$")
plt.ylabel("規格化強度")
plt.title("二重スリット:干渉が縞を作り、回折が包絡線を作る")
plt.legend(); plt.grid(alpha=0.3); plt.tight_layout(); plt.show()

# 各干渉明線 sinθ = mλ/d の相対強度を取り出す
vals = [I2s[int(np.argmin(np.abs(st2 - m * LAMBDA / d_g)))] for m in range(1, 6)]
print("m = 1..5 の明線強度:", [f"{v:.4g}" for v in vals])

二重スリットの強度分布と単スリットのsinc二乗包絡線、および5次の欠落次数を示した図

$m = 1, 2, 3, 4$ 次の干渉明線の相対強度を数値で取り出すと $0.875,\ 0.572,\ 0.253,\ 0.054$ となり、赤い破線の $\mathrm{sinc}^2$ 包絡線をきれいになぞっています。そして $m = 5$ 次の強度は $1.8 \times 10^{-6}$ とほぼゼロ — $d/a = 5$ のときに 5 次が消えるという欠落次数の予言が、数値でぴたりと再現されました。写真だけ見ると「なぜここだけ暗いのか」と不思議に思えますが、干渉の明線位置と回折の暗点位置が重なっただけだと分かれば納得できます。

スリット本数 N を増やすと何が起きるか

回折格子の本質である「$N$ が増えると主極大が鋭くなる」を確認します。

def fwhm_of(xs, ys):
    """ピーク近傍の半値全幅を線形補間で求める"""
    i0 = int(np.argmax(ys)); half = ys[i0] / 2
    li = i0
    while li > 0 and ys[li] > half:
        li -= 1
    ri = i0
    while ri < len(ys) - 1 and ys[ri] > half:
        ri += 1
    xl = np.interp(half, [ys[li], ys[li + 1]], [xs[li], xs[li + 1]])
    xr = np.interp(half, [ys[ri], ys[ri - 1]], [xs[ri], xs[ri - 1]])
    return xr - xl

plt.figure(figsize=(10.5, 5.8))
for Ns, col in zip([2, 5, 20, 50], ["#4C72B0", "#DD8452", "#55A868", "#C44E52"]):
    st3, I3 = fraunhofer_1d(lambda x, n=Ns: grating(x, N=n), L=4e-2, N=2**22)
    sel = np.abs(st3 - LAMBDA / d_g) < 0.6 * LAMBDA / d_g
    xs3 = (st3[sel] - LAMBDA / d_g) / (LAMBDA / d_g)
    ys3 = I3[sel] / I3[sel].max()
    plt.plot(xs3, ys3, color=col, lw=1.8, label=f"$N$ = {Ns} 本")
    fw = fwhm_of(xs3, ys3) * (LAMBDA / d_g)
    print(f"N={Ns}: 実測FWHM={fw:.3e}  理論 0.886λ/(Nd)={0.886*LAMBDA/(Ns*d_g):.3e}")
plt.xlabel("1次主極大からのずれ  $\\Delta\\sin\\theta \\,/\\, (\\lambda/d)$")
plt.ylabel("主極大で規格化した強度")
plt.title("スリット本数 $N$ と1次主極大の鋭さ(幅は $\\lambda/(Nd)$ に反比例)")
plt.legend(); plt.grid(alpha=0.3); plt.tight_layout(); plt.show()

スリット本数N=2,5,20,50について1次主極大の鋭さを比較したグラフ

$N = 2$ では緩やかな山だったものが、$N = 50$ では細い針のようになります。測定した半値全幅($\Delta\sin\theta$)は $N = 5$ で $5.70 \times 10^{-3}$、$N = 20$ で $1.40 \times 10^{-3}$、$N = 50$ で $5.61 \times 10^{-4}$。理論値 $0.886\lambda/(Nd)$ はそれぞれ $5.61 \times 10^{-3}$、$1.40 \times 10^{-3}$、$5.61 \times 10^{-4}$ で、$N \ge 20$ では 3 桁目まで一致します($N = 2$ では実測 $1.57 \times 10^{-2}$ に対し理論 $1.40 \times 10^{-2}$ と 1 割ほどずれます。主極大近傍を $\mathrm{sinc}$ 形で近似する前節の展開が、$N$ の大きいところでしか良くないためです)。主極大の幅が $1/N$ で縮む ことが、$R = mN$ という分解能の式の直接の根拠です。同時に、主極大の間の副極大が $N$ とともに相対的に沈んでいく様子も見え、大きな $N$ の格子がきれいな線スペクトルを与える理由が視覚的に納得できます。

分解能 R = mN の検証 — ナトリウム D 線

最後に、格子が実際に 2 つの波長を分離できるかを直接シミュレートします。

def grating_I(sin_theta, lam, a, d, N):
    """N本格子の解析的な強度分布(式19)"""
    beta = np.pi * a * sin_theta / lam
    delta = 2 * np.pi * d * sin_theta / lam
    den = np.sin(delta / 2)
    G = np.where(np.abs(den) < 1e-12, N ** 2, (np.sin(N * delta / 2) / np.where(np.abs(den) < 1e-12, 1, den)) ** 2)
    S = np.where(np.abs(beta) < 1e-12, 1.0, (np.sin(np.where(np.abs(beta) < 1e-12, 1, beta)) / np.where(np.abs(beta) < 1e-12, 1, beta)) ** 2)
    return S * G

d_na = 1e-3 / 600            # 600本/mm の格子
lam1, lam2 = 589.00e-9, 589.59e-9
s_axis = np.linspace(0.3515, 0.3560, 4000)

fig, axes = plt.subplots(1, 3, figsize=(14, 4.8), sharey=True)
for ax, Ns in zip(axes, [300, 1000, 3000]):
    y1 = grating_I(s_axis, lam1, 0.8 * d_na, d_na, Ns)
    y2 = grating_I(s_axis, lam2, 0.8 * d_na, d_na, Ns)
    raw = y1 + y2
    top = raw.max()
    tot, deg = raw / top, np.degrees(np.arcsin(s_axis))
    ax.plot(deg, tot, "k", lw=1.6, label="2本の合計(観測されるスペクトル)")
    ax.plot(deg, y1 / top, "--", lw=1, label="589.00 nm 単独")
    ax.plot(deg, y2 / top, "--", lw=1, label="589.59 nm 単独")

    # 2線の間に本当にくぼみができているかを判定する
    i1, i2 = int(np.argmax(y1)), int(np.argmax(y2))
    seg = tot[min(i1, i2):max(i1, i2) + 1]
    j = int(np.argmin(seg))
    if 0 < j < len(seg) - 1:
        dip = seg[j] / max(seg[:j].max(), seg[j:].max())
        note = f"中央のくぼみ = 頂点の {dip*100:.1f}%(2本に分離)"
    else:
        note = "くぼみなし(1本に融合して分離不能)"
    print(f"N = {Ns}: {note}")
    ax.set_title(f"照射溝数 $N$ = {Ns}($R = mN$ = {Ns}、必要値 998)\n{note}", fontsize=11)
    ax.set_xlabel("回折角 [度]")
    ax.grid(alpha=0.3)
axes[0].set_ylabel("規格化強度"); axes[0].legend(fontsize=8.5)
plt.tight_layout(); plt.show()

照射溝数300・1000・3000でナトリウムD線の2本が分離していく様子を比較した図

左($N = 300$、$R = 300$)では 2 本の線が完全に融合し、ピークがひとつしか立ちません。中央($N = 1000$、$R = 1000$)で初めて 2 つの頂点が分かれ、右($N = 3000$、$R = 3000$)では谷がほぼゼロまで落ちて完全に分離します。必要な分解能は $R = 589.0/0.59 \approx 998$ ですから、ちょうど $R$ がこの値をまたぐ $N = 1000$ で「かろうじて分離」に切り替わる という理論の予言そのものです。

さらに面白いのは谷の深さです。$N = 1000$ のとき、2 つの頂点の間の谷は頂点の $0.809$ 倍でした。レイリー基準を $\mathrm{sinc}^2$ 型の 2 本のピークに適用したときの谷の理論値は $8/\pi^2 = 0.811$ で、教科書に載っている「レイリー基準では中央のくぼみが 81% になる」という数字とぴたり一致します。「一方の頂点を他方の第 1 零点に置く」という一見恣意的な合格ラインが、実は $R = mN$ という設計式と矛盾なく結びついていることが数値で確かめられました。600 本/mm なら $N = 998$ は 1.66 mm 幅に相当し、卓上分光器でも十分到達できる値です。

アポダイゼーションの効果

最後に、開口の透過率分布を変えたときのサイドローブと主極大幅のトレードオフを可視化します。

a_ap = 50e-6

def rect_ap(x):
    return (np.abs(x) <= a_ap / 2).astype(float)

def hann_ap(x):
    A = np.zeros_like(x)
    s = np.abs(x) <= a_ap / 2
    A[s] = 0.5 * (1 + np.cos(2 * np.pi * x[s] / a_ap))   # ハン窓(縁で0)
    return A

def gauss_ap(x):
    return np.exp(-x ** 2 / (2 * (a_ap / 6) ** 2))       # ガウシアン(σ = a/6)

fig, axes = plt.subplots(1, 2, figsize=(13, 5.4), gridspec_kw={"width_ratios": [1, 1.5]})
xs = np.linspace(-40e-6, 40e-6, 3000)
for f, name, col in [(rect_ap, "矩形(一様)", "#4C72B0"),
                     (hann_ap, "ハン(レイズドコサイン)", "#DD8452"),
                     (gauss_ap, "ガウシアン $\\sigma=a/6$", "#55A868")]:
    axes[0].plot(xs * 1e6, f(xs), color=col, lw=2.2, label=name)
    stA, IA = fraunhofer_1d(f, L=8e-3, N=2**20)
    sel = np.abs(stA) < 5 * LAMBDA / a_ap
    axes[1].semilogy(stA[sel] / (LAMBDA / a_ap), np.maximum(IA[sel], 1e-9),
                     color=col, lw=2, label=name)
axes[0].set_xlabel("開口面上の位置 $x'$ [μm]($a$ = 50 μm)")
axes[0].set_ylabel("透過率 $A(x')$")
axes[0].set_title("開口の透過率分布(=窓関数)")
axes[1].set_ylim(1e-8, 2)
axes[1].set_xlabel("規格化した回折角  $\\sin\\theta \\,/\\, (\\lambda/a)$")
axes[1].set_ylabel("規格化強度(対数軸)")
axes[1].set_title("アポダイゼーション:サイドローブを下げると主極大が太る")
for ax in axes:
    ax.legend(fontsize=9.5); ax.grid(alpha=0.3, which="both")
plt.tight_layout(); plt.show()

矩形・ハン・ガウシアンの開口透過率分布と、それぞれの遠方場サイドローブを対数軸で比較した図

矩形開口の最大サイドローブは $-13.3$ dB、ハン分布では $-31.5$ dB と 18 dB も下がります。代償として半値全幅は $0.886\lambda/a$ から $1.44\lambda/a$ へと 1.63 倍に太りました。ガウシアン分布に至ってはサイドローブが対数軸から完全に消え、代わりに半値全幅は $1.59\lambda/a$ になります。コントラストと分解能はトレードオフの関係にある という、フーリエ変換に由来する普遍的な制約が、1 枚のグラフに凝縮されています。系外惑星のコロナグラフがわざと分解能を捨ててアポダイズ開口を使う理由も、これで腑に落ちるはずです。

まとめ

本記事では、フラウンホーファー回折を「開口関数のフーリエ変換」として一気通貫で理解しました。要点を整理します。

  • 出発点 はキルヒホッフ回折積分。距離 $r$ の平方根を二項展開して二次までとると(フレネル近似)、指数の肩に「観測点の二次項・交差項・開口点の二次項」の 3 つが現れる
  • フラウンホーファー条件 $z \gg a^2/\lambda$(フレネル数 $N_F \ll 1$)のもとで、開口点の二次位相 $k(x’^2+y’^2)/(2z)$ が 1 rad 未満になり、これを捨てると積分は純粋なフーリエ変換になる。レンズを置けば $z = f$ でこの項が厳密に打ち消され、後焦点面がフーリエ面になる
  • 中心的な結果 は $U(x,y) \propto \tilde{A}(x/\lambda z,\, y/\lambda z)$。空間周波数と回折角は $f_x = \sin\theta_x/\lambda$ で結ばれる
  • 単スリット: $I = I_0\,\mathrm{sinc}^2(\pi a\sin\theta/\lambda)$、暗点は $a\sin\theta = m\lambda$、第 1 サイドローブは $4.72\%$($-13.3$ dB)
  • 円形開口: $I = I_0[2J_1(u)/u]^2$、エアリー半径 $1.22\lambda/D$($= 3.8317/\pi$)、ディスク内に光量の $83.8\%$。レイリー基準 $\theta_{\min} = 1.22\lambda/D$ が望遠鏡・顕微鏡・眼の分解能を決める
  • 多重スリット: $I = I_0\,\mathrm{sinc}^2\beta \cdot [\sin(N\delta/2)/\sin(\delta/2)]^2$。回折が包絡線、干渉が縞。$d/a$ が整数だと欠落次数が生じる
  • 回折格子: 角分散 $d\theta/d\lambda = m/(d\cos\theta)$、分解能 $R = mN$。分解能は溝間隔にも角度にもよらず、次数と照射溝数の積だけで決まる
  • アポダイゼーション は信号処理の窓関数と同一。サイドローブ低減と主極大の太りは必ずトレードオフになる
  • FFT を使えば解析解のない任意の開口でも回折像が計算でき、本記事では全ケースで解析解と $10^{-4}$ 台の誤差で一致することを確認した

この「開口 → フーリエ変換 → 遠方場」という見方は、光学に留まりません。アンテナの開口分布と放射パターン、合成開口レーダーのアジマス圧縮、X 線結晶構造解析における逆格子、電子顕微鏡の回折図形 — いずれも同じ数式の別の顔です。フーリエ変換をひとつ理解すれば、これらすべてが地続きになります。

次のステップとして、以下の記事も参考にしてください。