吸収を考えた途端にフレネル係数が破綻した話

Python

はじめに

 大学の電磁気4で始めてフレネル反射やブリュスター角を習いました。
 仕事で新人の頃に吸収がある物質のブリュスター角の計算をしようとしたとき、屈折角が複素数になってしまい、これはどういう意味だ、、?となってしまいました。
 光学やってました!ってアピールしていたのにブリュスター角も計算出来ず、恥ずかしい思いをしました。
 あの頃の自分に向けて、教科書の内容を実際の物質に適用しようとしたときに、引っかかる点についてまとめてみたいと思います。

複素屈折率のおさらい

吸収のある物質の屈折率は複素数で表されます。

$$\tilde{n} = n + i\kappa$$

$n$ は普通の屈折率、$\kappa$(消光係数)が吸収の強さに対応します。
なぜ屈折率の虚部が吸収の強さに対応するのでしょうか?

媒質を進む電場の平面波の式に複素屈折率を入れると分かります。

$$E(z,t) = E_0 \, e^{-\frac{2\pi \kappa z}{\lambda_0}} \cdot e^{i\left(\frac{2\pi n z}{\lambda_0} – \omega t\right)}$$

$\kappa$の項が指数関数的な電場強度の減衰を表す、というのが分かりますね。

また、$\tilde{n} = n + i\kappa$と$\tilde{n} = n – i\kappa$の2種類があって教科書や人によって書き方が異なります。
これは$E(z,t)=E_0\,e^{i{kz-\omega t}}$と$E(z,t)=E_0\,e^{-i{kz-\omega t}}$に対応します。
eの肩の部分が正になると電場が指数関数的に強くなるため、そのような現実的にあり得ない表現を回避しているのです。

電場強度とパワーについて

光は電磁波の一種であり、その振幅は電場(若しくは磁場)です。教科書の議論は電場を基にしていますよね。

その一方で、電場は観測する事が出来ません。光の電場の振動の周期がとても早いためです。
観測できるのはパワーです。

パワーは単位時間あたりのエネルギーのことです。
エネルギーを用いるのが自然に思えますが、測定(積算)時間を伸ばせばエネルギーは再現なく増えてしまうため、パワーを用いるのが適当です。

電場とパワーの関係ですが、電場を2乗して時間で平均したものがパワーです。
係数を無視したざっくりとした理解だと、電場振幅を2乗すればパワー、でよいです。

パワーは単位時間あたりのエネルギーなので保存則が成り立ちますが、振幅は保存則が成り立ちません。実測上ではパワーを扱うことが多いですが、教科書での議論の中心は振幅(電場)なのでここは分けて理解する必要があります。

フレネル反射とは

 屈折率が異なる2個の物質の界面に光が当たった場合、一部が反射される現象をフレネル反射と呼びます。この時一部の光は界面を透過し、屈折を起こします。

フレネル反射が起こると、反射された光の振幅が変化します。これは反射前後の振幅の比率で表せます。
また、振幅だけでなく光の位相がずれます。これは大きさが1の複素数として表すことができます。

フレネル反射前後での振幅の大きさと位相のずれを合わせて複素数で表したものをフレネル係数もしくは複素反射率と呼びます。

通常、反射率というときは、反射前後でのパワーの比率のことを指します。
振幅の2乗がパワーだったので、フレネル係数を2乗して絶対値を取ったものが、反射率となります。

透過率についてはもう少し複雑で補正が必要になります。

ブリュスター角(吸収なし)

 P偏光でフレネル反射が起こった場合、ある角度で光が入射すると反射率が0になります。
これをブリュスター角とよびます。
透過率が100%になるため、ブリュスター角を活用する場面は多いです。

P偏光のフレネル係数の公式は下記です。

$$r_p = \frac{\tilde{n}_2 \cos \theta_1 – \tilde{n}_1 \cos \theta_2}{\tilde{n}_2 \cos \theta_1 + \tilde{n}_1 \cos \theta_2}$$

補足説明

  • $n_1$: 入射側の屈折率(空気なら $1$)
  • $n_2$: 反射側の物質の屈折率
  • $\theta_1$: 入射角
  • $\theta_2$: 屈折角(スネルの法則から求める)

ためしに空気-ガラスの界面を考えて、反射率($r_p$の2乗の絶対値)の入射角依存性グラフをPythonを使って書いてみます。

import numpy as np
import matplotlib.pyplot as plt

# 屈折率の定義
n1 = 1.0  # 空気
n2_trans = 1.5     # ガラス

# 入射角(0度から89度まで)
theta1 = np.radians(np.linspace(0, 89, 200))

def fresnel_rp(n1, n2, theta1):
    # スネルの法則: n1*sin(theta1) = n2*sin(theta2)
    # sin(theta2) = (n1/n2) * sin(theta1)
    sin_theta2 = (n1 / n2) * np.sin(theta1)
    cos_theta2 = np.sqrt(1 - sin_theta2**2)
    cos_theta1 = np.cos(theta1)
    
    # P偏光の振幅反射率
    rp = (n2 * cos_theta1 - n1 * cos_theta2) / (n2 * cos_theta1 + n1 * cos_theta2)
    return np.abs(rp)**2  # 反射率(R = |r|^2)

# 反射率の計算
R_trans = fresnel_rp(n1, n2_trans, theta1)

# グラフ描画
plt.figure(figsize=(8, 5))
plt.plot(np.degrees(theta1), R_trans, label='Glass (n=1.5, κ=0)')

plt.xlabel('Angle of Incidence (deg)')
plt.ylabel('Reflectance (Rp)')
plt.title('P-polarized Fresnel Reflectance')
plt.ylim(0, 0.2)
plt.legend()
plt.grid(True)
plt.show()
空気-ガラス界面におけるp偏光照明のフレネル係数、58度あたりで反射率が0になっている。

入射角60度手前で確かに反射率が0になっていて、ブリュスター角であると分かります。

ブリュスター角$\theta_B$を解析的に求めてみます。
$r_p=0$となればよいので、右辺の分子が0として下記で求まります。

$$\tan \theta_B = \frac{n_2}{n_1}$$

この式で計算すると、ブリュスター角は56度と求められます。

ここで$n_2$が複素数(吸収あり)になるとどうでしょうか?
ブリュスター角が複素数として求まるため、角度を表しているのかよく分かりません。
次回は波数ベクトルと複素屈折率の関係から、この疑問を整理します。

まとめ

本記事では、以下の事項についてまとめました。

・屈折率が複素数の意味

・電場強度とパワーの違いについて

・フレネル反射とブリュスター角(吸収なし)

次回予定

あの頃の自分にもわかるように、、と書いていたら長くなってしまいました。
吸収あるときのフレネル反射については次回記事にて書きたいと思います。

参考文献

 大学から大学院入試の頃に読んでいた教科書。マクスウェル方程式から始まります。
フレネル反射を求めるには界面での電場の連続条件を用います。本記事では省略しましたが、ここだと詳細に説明されています。

理論電磁気学は数式中心ですが、直感的理解を大事にしたい若しくは気楽に反射・屈折、フレネル係数、複素屈折率まで体系的に学びたい方にはヘクトの光学がおすすめです。

このブログでは光学現象をPythonで実際に計算して可視化することで理解できたことを記事にしています。

コメント

タイトルとURLをコピーしました