3. 单层膜理论:从菲涅尔公式到特征矩阵法

做光学薄膜设计这些年,我越来越觉得单层膜理论是整个学科的基石。你想想看,不管多复杂的多层膜系,本质上都是单层膜的叠加。今天咱们就把这块硬骨头啃下来。

3.1 菲涅尔公式:光在界面上的行为

光从一种介质射到另一种介质时,会发生什么?反射和折射。菲涅尔公式就是描述这个过程的数学工具。说白了,它告诉我们光在界面上有多少被反射、多少被透射。

对于垂直入射的情况(这是咱们最常用的),菲涅尔公式可以简化成:

r = (n1 - n2) / (n1 + n2)    # 振幅反射系数
t = 2 * n1 / (n1 + n2)       # 振幅透射系数

这里 n1 和 n2 分别是入射介质和出射介质的折射率。注意,r 可以是负值,表示反射光有 180° 的相位变化。

能量反射率和透射率

R = |r|²
T = (n2/n1) * |t|²

而且 R + T = 1(不考虑吸收时)

我记得刚入行时,有个项目要做增透膜,我直接用这个公式算单层膜的反射率,结果发现怎么算都不对。后来才意识到——我忽略了薄膜上下两个界面的干涉效应。嗯,这里要注意,菲涅尔公式只描述单个界面,而薄膜有上下两个界面。

3.2 单层膜的反射与透射

单层膜其实就是一个薄膜夹在两个介质中间。光在薄膜上下表面都会发生反射和透射,这两束反射光会发生干涉。所以单层膜的反射率不是简单的两个界面反射率相加。

单层膜反射率的计算公式:

R = (r1² + r2² + 2*r1*r2*cos(2δ)) / (1 + r1²*r2² + 2*r1*r2*cos(2δ))

其中:
r1 = (n0 - n1)/(n0 + n1) # 空气-薄膜界面的反射系数
r2 = (n1 - ns)/(n1 + ns) # 薄膜-基底界面的反射系数
δ = 2π * n1 * d / λ # 薄膜的相位厚度

这里 d 是薄膜的物理厚度,λ 是波长。

我的经验:当薄膜的光学厚度(n1*d)等于 λ/4 时,cos(2δ) = -1,这时候反射率会出现极值。这就是为什么 λ/4 膜层在设计中这么重要。

我曾经做过一个项目,需要在 550nm 处实现零反射。按照理论计算,用折射率为 1.38 的 MgF₂ 镀在折射率 1.52 的玻璃上,单层膜就能做到。但实际镀出来反射率还有 0.5% 左右。为什么?因为薄膜的折射率不是理想值,而且膜层有微小的吸收和散射。

3.3 特征矩阵法入门

说到特征矩阵法,我得先坦白——这是我个人最喜欢的分析方法。它把复杂的多层膜问题变成了矩阵乘法,思路清晰,计算方便。

对于单层膜,特征矩阵是这样的:

M = [cos(δ)        i*sin(δ)/n1]
    [i*n1*sin(δ)   cos(δ)     ]

其中 δ = 2π * n1 * d / λ,i 是虚数单位。

有了这个矩阵,整个膜系的反射和透射特性就可以通过矩阵运算得到:

[B]   [cos(δ)        i*sin(δ)/n1] [1 ]
[C] = [i*n1*sin(δ)   cos(δ)     ] [ns]

然后:
Y = C / B # 膜系的导纳
r = (n0 - Y) / (n0 + Y) # 反射系数
R = |r|² # 反射率

注意:特征矩阵法中的 δ 是复数!当薄膜有吸收时,折射率 n1 要写成 n1 - i*k1,其中 k1 是消光系数。我见过不少新手在这个地方翻车。

为什么特征矩阵法这么有用?因为它把光学薄膜问题变成了线性代数问题。你想想看,多层膜就是多个矩阵相乘,计算机处理起来特别快。我当年做 100 层膜的设计,用特征矩阵法几秒钟就算完了。

3.4 知识体系总览

下面这张图是我自己整理的,把单层膜理论的核心逻辑串起来了:

单层膜理论核心知识体系 菲涅尔公式 描述单个界面行为 单层膜理论 上下界面干涉 特征矩阵法 矩阵运算求解 关键参数:折射率 n、厚度 d、波长 λ、相位厚度 δ = 2π·n·d/λ 应用场景 • 增透膜设计(λ/4 膜层) • 高反射膜设计 • 分光膜设计 常见坑点 • 忽略薄膜吸收(k 值) • 相位计算忘记用弧度 • 折射率色散未考虑 核心思想 菲涅尔公式 → 单层膜干涉 → 特征矩阵法 → 多层膜系统 从简单到复杂,从单界面到多界面,层层递进

3.5 实战:用 Python 计算单层膜反射率

光说不练假把式。下面是我写的一个简单脚本,用特征矩阵法计算单层 MgF₂ 增透膜的反射率:

import numpy as np
import matplotlib.pyplot as plt

def single_layer_reflectance(n0, n1, ns, d, wavelength):
    """
    计算单层膜反射率
    n0: 入射介质折射率(空气=1)
    n1: 薄膜折射率
    ns: 基底折射率
    d: 薄膜物理厚度 (nm)
    wavelength: 波长 (nm)
    """
    # 相位厚度
    delta = 2 * np.pi * n1 * d / wavelength
    
    # 特征矩阵
    M11 = np.cos(delta)
    M12 = 1j * np.sin(delta) / n1
    M21 = 1j * n1 * np.sin(delta)
    M22 = np.cos(delta)
    
    # 矩阵乘法
    B = M11 * 1 + M12 * ns
    C = M21 * 1 + M22 * ns
    
    # 导纳和反射率
    Y = C / B
    r = (n0 - Y) / (n0 + Y)
    R = np.abs(r)**2
    
    return R

# 参数设置
n0 = 1.0      # 空气
n1 = 1.38     # MgF2
ns = 1.52     # BK7玻璃
d = 100       # 厚度100nm

# 计算不同波长的反射率
wavelengths = np.linspace(400, 700, 100)
R_values = [single_layer_reflectance(n0, n1, ns, d, wl) for wl in wavelengths]

# 绘制结果
plt.plot(wavelengths, R_values)
plt.xlabel('波长 (nm)')
plt.ylabel('反射率')
plt.title('单层MgF2增透膜反射率')
plt.grid(True)
plt.show()

我的建议:运行这段代码时,试试改变薄膜厚度 d,看看反射率曲线怎么变化。你会发现当 d = λ/(4n1) 时,反射率最低。这就是 λ/4 膜层的由来。

好了,单层膜理论就讲到这里。记住三个核心点:菲涅尔公式是基础,干涉效应是关键,特征矩阵法是工具。把这些吃透了,后面学多层膜就轻松多了。


公众号:蓝海资料掘金营,微信deep3321