RCWA 与 TMM 光学建模 — 从零开始的完整学习指南

写给大一学生的光学建模入门教程。假设你学过高中物理(知道反射、折射、干涉这些词),正在学微积分,刚开始接触电磁学。我们从最基础开始,一步一个台阶,走到你能理解 RCWA 在我们的薄膜反演项目中究竟做了什么、为什么它比 RT+TMM 精确 23 倍。


第0章:这本指南在讲什么?(10min)

0.1 用一句话说清楚

我们有这样一块材料:

硅片上长着微米大小的金字塔纹理,上面覆盖了 10 层薄膜(包括一层钙钛矿吸收层)。我们想知道其中某一层的厚度是多少。我们的工具只有一样:拿不同颜色、不同角度的光照上去,测量反射回来多少光。

这等于在问:给定一个复杂的多层结构,怎样从反射光谱反推膜厚?

0.2 两种做法,天壤之别

我们试了两种计算方法:

方法反演精度(Joint MAE)相当于
RCWA(严格耦合波分析)4.91 nm一根头发直径的 1/15
RT+TMM(光线追迹 + 传输矩阵)113.8 nm一根头发直径

为什么差这么多? 答案藏在金字塔纹理的尺寸和光的波长关系里:

  • 金字塔周期
  • 我们用的光波长
  • 差不多大 → 这不是”大物体反射小光波”的简单情况,而是”光和结构互相较劲”的共振区

RT+TMM 假设”结构远大于波长”(几何光学近似),这个假设在共振区不成立。RCWA 不做任何近似,直接求解 Maxwell 方程组——付出的代价是计算量大得多,但得到的结果是 23 倍的精度提升。

0.3 这本指南怎么带你学

你的起点:高中物理 + 大一微积分
           ↓
第1章  光是什么(折射率 n 的物理含义)
第2章  光的颜色、能量与吸收(n&k 的完整图像)
第3章  一束光照到界面上(Fresnel 方程)
第4章  两束光相遇(干涉、薄膜干涉、增透膜)
第5章  十束光、一百束光(TMM 传输矩阵法)← 从这里开始用数学省力
第6章  TMM 的数学根源(从 Maxwell 方程推导 TMM)
第7章  周期性结构(光栅、衍射、共振区)
第8章  RCWA 的核心思想(Fourier 展开 + 特征值)
第9章  反演问题(从反射光谱推膜厚)
第10章 为什么 RT+TMM 会失败(23倍的物理根源)
第11章 计算工具链(代码怎么跑)
第12章 下一步往哪走
附录A  公式速查卡
附录B  项目 Bug 日志

每章大约 30-60 分钟。前 4 章是物理基础,第 5-6 章是 TMM 的数学核心,第 7-8 章是 RCWA 的数学核心。

阅读建议

如果你只想”会用”而不想”深究”,读第 0-5 章 + 第 9-10 章就够了(约 3-4 小时)。如果你想彻底搞懂 RCWA 的数学原理,再加上第 6-8 章(约 6-8 小时)。


第1章:光,到底是什么?(45min)

1.1 两种说法,说的是一回事

历史上对光有两种描述:

牛顿说:光是粒子。因为它走直线、会反射、能穿过真空。

惠更斯说:光是波。因为它会干涉、会绕过障碍物(衍射)。

两百多年后,量子力学告诉我们:两个都对。光在某些情况下表现得像粒子(光子),在某些情况下表现得像波(电磁波)。在光学建模里,我们绝大多数时候把它当来处理——因为反射、折射、干涉、衍射这些现象,用波动理论解释起来非常自然。

1.2 高中就学过的:反射和折射

一束光从空气斜射到水面,你会看到:

  1. 一部分光弹回来(反射)——入射角 = 反射角:
  2. 一部分光进入水中,改变方向(折射)——Snell 定律:

这个 叫做折射率(refractive index)。

1.3 n 的物理含义——光为什么会慢下来?

折射率 有一个非常直观的定义:

  • :光在真空中的速度
  • :光在介质中的速度

就是”光在这个材料里慢了多少倍”。

材料折射率 光速变慢了多少为什么会有这个值?
真空1.00不慢(没有原子阻挡
空气1.0003几乎不慢原子密度极低
1.33慢了 1.33 倍水分子极化响应
玻璃1.50慢了 1.5 倍二氧化硅的高电子密度
钙钛矿~2.5慢了 2.5 倍高折射率半导体
硅(Si)~3.5慢了 3.5 倍超高电子密度

物理直觉

光是一种电磁波,当它进入材料后,电场会推拉材料中的电子。电子跟着振动,这个振动反过来又产生新的电磁波。新波和原来的波叠加,整体效果就是”光走得慢了”。电子越多、越容易被推动, 就越大。

Snell 定律 也可以这样理解:光在两种介质中传播速度不同 → 波前到达界面的时间不同步 → 传播方向偏转。

1.4 折射生出的”副产品”:全内反射

当光从”光密”介质( 大)射向”光疏”介质( 小)时:

如果 ,且 足够大,则方程 无解!

此时的入射角叫临界角 。超过这个角度,光全部反射,没有透射。

光纤通信就是利用全内反射——光”困”在光纤芯里不断反射传播。

1.5 几何光学的局限

高中物理讲的光(反射定律、折射定律、透镜成像)统称为几何光学(Ray Optics)——把光当作一根根”光线”处理。

几何光学能解释的现象:

  • ✅ 镜子反射、透镜聚焦
  • ✅ 彩虹的颜色(色散: 随波长变化)
  • ✅ 海市蜃楼

几何光学不能解释的现象:

  • ❌ 肥皂泡的彩色条纹(薄膜干涉)
  • ❌ CD/DVD 表面的彩虹(光栅衍射)
  • ❌ 为何增透膜能”消除”反射(干涉相消)
  • ❌ 为什么金字塔纹理在 时效果特殊(共振区衍射)

要解释这些,必须把光当作——下一章我们正式跨入波动光学。

1.6 回到项目:为什么 n 是我们的”原料”?

在我们的 RCWA 项目中,所有计算的第一步都是:

读取材料的 n(λ) 和 k(λ)

随波长变化的数据(每个材料几百个数据点),是所有后续计算的基础。“垃圾进,垃圾出”——材料光学常数的准确性,直接决定了反演结果的精度。


📝 第1章自测

  1. 折射率 是什么意思?(答案:光在该材料中的速度是真空中速度的一半
  2. 光从玻璃()射向空气,临界角是多少?(答案:
  3. 几何光学不能解释什么现象?举两个例子。(答案:薄膜干涉、光栅衍射、增透膜等)

第2章:光的颜色、能量与吸收(45min)

2.1 电磁波谱:光在”光谱”中的位置

光是电磁波的一种。电磁波按波长从长到短排列:

无线电波 → 微波 → 红外(IR) → 可见光 → 紫外(UV) → X射线 → γ射线
  长λ, 低能量  ←——————————————→  短λ, 高能量

可见光只占整条谱线的一小段:380nm–780nm

颜色波长范围典型波长
380-450 nm400 nm
450-495 nm470 nm
绿495-570 nm550 nm ← 人眼最敏感
570-590 nm580 nm
590-620 nm600 nm
620-780 nm700 nm
近红外780-2500 nm1100 nm ← Si 的带隙边界

我们的项目用到的光:400–1100 nm。从蓝紫光一直覆盖到近红外。

2.2 光子能量:波长和能量怎么换算?

一个光子的能量:

  • (普朗克常数)

把焦耳换成电子伏特(eV):。于是非常实用的公式:

“1240”从哪来? 纯粹是常数换算:,除以 再乘以 ,得到

波长 光子能量 例子
400 nm3.1 eV蓝光,能激发大多数半导体
550 nm2.25 eV绿光
780 nm1.59 eV红光,钙钛矿(~1.6eV 带隙)刚好能吸收
1100 nm1.13 eV近红外,Si 的带隙边缘

2.3 为什么硅看起来是灰黑色的?

这跟吸收有关。

硅的带隙 。光子能量低于 1.12 eV()→ 硅透明;光子能量高于 1.12 eV()→ 硅吸收。

可见光(1.6–3.1 eV)远大于 Si 的带隙 → 所有可见光都被强烈吸收 → 你看到的是”黑灰色”(没有任何可见光反射回来)。

2.4 吸收系数 α:光在材料中如何衰减

一束光垂直进入吸收材料,强度随深度指数衰减

  • :进入材料时的光强
  • :进入深度
  • 吸收系数(单位:1/m 或 1/nm)。 越大,光衰减越快。

物理直觉

如果你的钙钛矿膜厚 500 nm,,则光穿过膜后还剩 。穿过整个膜后大约 39% 被吸收了。

2.5 复折射率:一句话解释 n 和 k 的关系

前面我们只讲了折射率 ,但完整的材料光学描述需要复折射率(complex refractive index):

  • (实部):决定光的传播速度和折射方向(相位)
  • (消光系数):决定光的吸收(衰减)

的关系:

→ 材料吸收光。 → 材料透明(如玻璃在可见光波段 )。

为什么用复数? 因为吸收 = 指数衰减,而复指数天然描述衰减:

光在材料中: 让光振荡传播, 让光强度慢慢”消失”(被吸收)。一个复数搞定两件事,数学上非常优雅。

2.6 回到项目:为什么我们关注整个 400-1100nm 范围?

因为不同波长”看到”的材料不一样:

  • λ < 500 nm:钙钛矿强烈吸收,光只穿透表面几十纳米
  • λ ≈ 550-700 nm:中等吸收,光能穿透几百纳米
  • λ > 780 nm(钙钛矿带隙以上):钙钛矿接近透明,光穿透到下面的硅层

这些不同波长的”穿透深度信息”都编码在 中。反演算法通过多个波长联合拟合来提取膜厚——这正是为什么我们需要宽光谱而不是单一波长。


📝 第2章自测

  1. 光子能量公式是什么?500nm 的光子能量是多少 eV?(答案:
  2. 硅为什么对可见光不透明?(答案:可见光光子能量 1.6-3.1eV 全部大于 Si 的带隙 1.12eV,被强烈吸收)
  3. 复折射率 中, 决定什么? 决定什么?(答案: 决定传播速度和折射, 决定吸收/衰减)

第3章:一束光照到界面上——Fresnel 方程(60min)

3.1 问题设定

一束平面波从介质 1(折射率 )以角度 射向介质 2(折射率 )。

核心问题:多少能量反射回去?多少能量透过去?

之前高中物理只告诉你”会反射和折射”,但不告诉你反射多少。Fresnel 方程告诉我们这个比例。

3.2 必须先分两种偏振

光是一种横波:电场 垂直于传播方向振动。但这个”垂直方向”有两种可能:

s 偏振(TE):E 垂直纸面 ┊(German "senkrecht"=垂直)
p 偏振(TM):E 平行纸面 →(German "parallel"=平行)
                     ↑
                 入射面(纸面)

为什么必须区分?

因为 E 场方向不同 → 边界条件不同 → 反射率不同。你看太阳镜消除水面反光就是利用了 p 偏振在 Brewster 角附近几乎不反射的特性。

3.3 Fresnel 方程

对于非磁性材料,反射系数(amplitude reflection coefficient):

其中 由 Snell 定律给出:

3.4 从 r 到 R:反射率

是振幅比(电场反射了多少), 是能量比(光强反射了多少)。

这是因为光强电场振幅的平方。

对于无吸收材料(),非偏振光(自然光)的反射率就是两者的平均:

3.5 垂直入射:最简单的情况

(光垂直打上去), 一样:

算一个实际例子:

  • 空气()→ 硅(),垂直入射:

  • 31% 的光被反射! 这就是为什么硅片看起来反光很强——不加任何处理,仅一个硅表面就反射近三分之一的可见光。

再算一个:空气()→ 玻璃():

只有 4% 反射。 差越大,反射越多——这是非常直观的物理规律。

3.6 斜入射时发生了什么?

随着角度增大:

  • 单调增加(始终增大)
  • 先下降到最小值,再上升

存在一个特殊角度——Brewster 角),在这个角度 偏振的光完全不反射:

对于空气→玻璃:。这就是偏振太阳镜的原理——在 Brewster 角附近,水平表面的反射光主要是 s 偏振,被垂直偏振的镜片过滤。

3.7 相位翻转:为什么 可以是负数?

如果 (光从折射率低的到高的),(对于垂直入射)。

负号意味着相位翻转 180° 相移)。物理上发生了:入射波的电场方向在反射时颠倒了。

这个 180° 翻转在下一章的薄膜干涉中是关键——它改变了”两束反射光是不是同相”的判定条件。

3.8 回到项目:Fresnel 方程的实际意义

在我们的钙钛矿器件中:

  • 10 层膜 → 11 个界面
  • 每个界面都遵循 Fresnel 方程
  • 每一层的光学常数 不同
  • 入射角 在金字塔斜面上是”局部入射角”

RCWA 计算本质上就是在每一个界面、每一个 Fourier 分量上应用更复杂的”广义 Fresnel 方程”。


📝 第3章自测

  1. 空气→硅,垂直入射,反射率多少?(答案:
  2. 的关系是什么?(答案: 是振幅比, 是能量比)
  3. s 偏振和 p 偏振有什么区别?(答案:s 偏振 E 场垂直于入射面,p 偏振 E 场平行于入射面,反射率不同)

第4章:干涉——两束光相遇会发生什么?(60min)

4.1 叠加原理:1+1 不一定等于 2

两束相同频率的光相遇:

  • 振幅相加
  • 强度不等于

强度取决于两束光的相位差

交叉项 就是干涉项

结果通俗说法
+1相长干涉(变亮)
-1相消干涉(变暗)
0不干涉

4.2 什么决定相位差?

相位差 = 光程差 ×

光程 = n·d
光程差 = 两条路径的光程之差
相位差 = (2π/λ) × 光程差

物理上,光在折射率为 的介质中走过距离 ,“有效距离”不是 而是 。因为光速变慢 → 走同样的几何距离需要更长时间 → 相当于走了”更长”的路。

4.3 薄膜干涉:最经典的例子

一束光打到薄膜上:

入射光 → 薄膜上表面
           ├─ 反射束1(上表面反射)──────┐
           │                              ├→ 这两束光相遇 → 干涉
           └─ 透射后在下表面反射 → 折射出来 → 反射束2

两条反射光走的路不一样长:

  • 光束 2 多走了 的光程

相位差 = 几何程差转成的相位 + 反射引入的相位跳变:

  • 如果反射来自”折射率更高的介质”(),反射会产生 相位翻转
  • 否则没有翻转

4.4 增透膜的原理

在玻璃()上镀一层 MgF2():

  • 从空气→MgF2 的反射: 翻转(
  • 从 MgF2→玻璃的反射: 翻转(

两束反射光都有 翻转 → 翻转抵消 → 相位差仅取决于路程差。

如果我们选择膜厚 使路程差 = (相位差 = ):

这就是著名的四分之一波长增透膜。两束反射光恰好反相 → 相消 → 反射为零。

对于 λ=550nm(绿光)、n_MgF2=1.38:
d = 550 / (4 × 1.38) = 99.6 nm

这就是为什么增透膜通常是 100nm 左右的超薄膜。

4.5 增透膜的局限性

一个膜厚只能完美消除一个波长的反射。对于其他波长,路程差不再是精确的 ,消光不完全。

  • 附近:(完美)
  • 又回升到几个百分点

这就是为什么多层增透膜更好——用 3-5 层不同厚度的膜覆盖更宽的波长范围。

4.6 从一层到十层

一层膜有两个反射面 → 两束反射光干涉。十层膜有十一个反射面 → 成千上万条反射光互相干涉。

用 Fresnel 方程一层层手工算?不可能——光在每层之间可以来回反射无数次,每一束都跟所有其他束相干。

我们需要一个更系统的方法——下一章的 TMM

4.7 回到项目

我们的 10 层钙钛矿堆栈中:

  • MgF2(120nm)作为宽带抗反射层,减少前表面反射
  • 每一层的厚度都和干涉条件有关
  • 改变钙钛矿层的厚度 → 干涉条件改变 → 整体变化
  • 这就是我们能用反射光谱反演膜厚的物理基础:膜厚编码在干涉图案里

📝 第4章自测

  1. 相长干涉和相消干涉的条件分别是什么?(答案:相位差 →相长;→相消)
  2. 增透膜的厚度公式和原理?(答案:,使两束反射光的光程差 ,相位差 ,相消干涉)
  3. 为什么多层膜的手工计算不可行?(答案:光在层间来回反射无数次,每束光都相干,手工追踪不可能)

第5章:多层膜——TMM 传输矩阵法(75min)

5.1 问题的本质:我们面对的是什么

10 层膜,每层有自己的 。光在每个界面:

  • 一部分反射
  • 一部分透射
  • 反射光和透射光在更远的界面上又会产生新的反射和透射

这导致无数条光路,每条都带有不同的振幅和相位。手工追踪不可能。

5.2 TMM 的巧妙之处

关键洞察:我们不需要追踪每一条光线!只需要描述每一层膜对其两侧边界处电磁场之间的关系

如果每一层用一个 矩阵 描述,那么:

  • 光通过第 1 层:状态变换为
  • 再通过第 2 层:状态变换为
  • 通过所有 N 层:状态变换为

整个 10 层膜的光学响应,压缩成一个 矩阵连乘

5.3 单层膜的特征矩阵

对于第 层膜(复折射率 ,厚度 ,入射角 ):

其中:

5.4 逐一解读矩阵里的每一项

符号物理含义如果为零会怎样
相位厚度:光穿过这一层积累了多少相位 → 层无限薄,无需考虑
波在层内传播的”非衰减振荡”部分=1 时层无影响
波在层内传播的”转换”部分=0 时无反射产生
导纳(admittance):材料对光的”接受程度” 差大 → 界面反射强
这层材料”阻抗多大”阻抗大 → 反射多

物理类比

TMM 的矩阵形式和电路中的传输线理论完全一样。如果把光波类比为电信号,每一层膜就是一个传输线段—— 是特征阻抗, 是相位延迟。这个类比不是巧合,而是因为 Maxwell 方程和传输线方程在数学上同构。

5.5 组装全系统的矩阵

对于 N 层膜(编号 1,2,…,N),总矩阵:

注意:矩阵乘法不交换)→ 层的顺序至关重要。

得到总矩阵后,反射系数:

  • :入射介质(通常是空气)的导纳
  • :衬底(基底)的导纳
  • :系统输出端的”等效导纳”

5.6 手算一个 2 层例子:空气→MgF2→玻璃

空气()→ MgF2(, )→ 玻璃(

对于

从原来的 4% 降到了 1.4%。虽然没降到 0%(因为 才是理想值,而 MgF2 只有 1.38),但已经显著改善。

5.7 TMM 的程序实现:用矩阵连乘代替手工推算

TMM 的 Python 实现核心不到 30 行:

def tmm(wl, n_list, d_list, theta_deg=0):
    """计算多层膜的反射率"""
    import numpy as np
    n0 = n_list[0]      # 入射介质
    n_sub = n_list[-1]  # 衬底
    
    # 计算每层的角度(Snell 定律)
    theta = [np.deg2rad(theta_deg)]
    for j in range(1, len(n_list)):
        theta.append(np.arcsin(n0 * np.sin(theta[0]) / n_list[j]))
    
    # 构建设置矩阵
    M = np.eye(2, dtype=complex)
    for j in range(1, len(n_list) - 1):
        n = n_list[j]
        d = d_list[j-1]
        delta = 2 * np.pi * n * d * np.cos(theta[j]) / wl
        eta = n * np.cos(theta[j])  # s 偏振
        
        M_j = np.array([
            [np.cos(delta), 1j * np.sin(delta) / eta],
            [1j * eta * np.sin(delta), np.cos(delta)]
        ])
        M = M @ M_j
    
    # 计算反射率
    B = M[0,0] + M[0,1] * n_sub * np.cos(theta[-1])
    C = M[1,0] + M[1,1] * n_sub * np.cos(theta[-1])
    r = (n0 * np.cos(theta[0]) * B - C) / (n0 * np.cos(theta[0]) * B + C)
    return abs(r)**2

5.8 回到项目:TMM 在 RCWA Hybrid 模式中的角色

在我们的项目中,Hybrid 模式这样工作:

  1. RCWA 处理金字塔纹理 Si:求出”经过纹理后到达薄膜底部的光的分布”
  2. TMM 处理上面的 10 层平面薄膜:用上面那个 30 行的矩阵连乘

两个模块”拼接”在一起,就得到了完整的

纯 TMM(无 RCWA)只能处理平面——这就是为什么单独 TMM 对纹理器件 MAE 高达 113.8nm。


📝 第5章自测

  1. TMM 的核心思想是什么?(答案:用 2×2 矩阵描述每层膜的电磁场变换,矩阵连乘得到全系统响应)
  2. 是什么?(答案:相位厚度,
  3. 为什么矩阵顺序不能交换?(答案:物理上,光必须从第1层走到第N层,顺序颠倒意味着结构颠倒)

第6章:TMM 的数学根源——从 Maxwell 方程推导 TMM(90min)

本章说明

本章是”知其所以然”的部分。如果你暂时不想深入数学推导,可以跳过本章,直接记住第5章的结论继续前进。但如果你想知道”TMM 的矩阵到底怎么来的”,本章会给你完整的推导链。

6.1 Maxwell 方程:一切电磁现象的”宪法”

在大一电磁学课上你会逐渐遇到这四条方程。对于无自由电荷、无自由电流的介质:

其中 (非磁性材料 )。

后两个方程是关键:它们说变化电场 变化磁场,互相产生 → 电磁波可以自我维持地传播。

6.2 从 Maxwell 到波动方程

两边取旋度,代入

,这就是波动方程:

6.3 平面波解

假设波沿 方向传播,只含

  • :波数
  • :角频率

验证它确实是波动方程的解:求两次导后两边相等。

6.4 复波数的物理含义

当材料有吸收(),

代入平面波解:

  • 第一个指数因子:波的空间和时间振荡(频率
  • 第二个指数因子:波的衰减(衰减率

复波数用一个复数同时表达了”传播”和”衰减”两个物理过程。

6.5 边界条件:为什么界面必须有反射

Maxwell 方程要求:在两种介质的分界面上

  1. 的切向分量连续
  2. 的切向分量连续

直接后果:当一个波从介质 1 入射到介质 2,一般不能只靠一个透射波满足这两个条件——必须引入一个反射波

6.6 从边界条件推出 TMM

考虑两层之间的一个界面。在界面左边(介质 j,厚度 ),场由”向右传播”和”向左传播”两个波叠加。在界面右边(介质 j+1)也一样。

应用切向连续性条件 → 得到一个 的传递关系。逐层连接 → 得到一个 的矩阵连乘。

详细推导步骤(供查阅):

  1. 在介质 j 内写出 的通解(前进波+后退波)
  2. 在层入口 和出口 处写出场值
  3. 消去前进波/后退波的振幅系数
  4. → 得到
  5. 逐层连接:

这就是 TMM 的完整数学来源。

6.7 S 矩阵:TMM 的”数值稳定”版本

TMM 在处理厚吸收层时可能数值不稳定(矩阵元素指数增长)。

S 矩阵(Scattering Matrix)是等效但数值稳定的替代方案:

S 矩阵描述"散射关系":
[出射波] = S · [入射波]

物理上:S 矩阵告诉你”给定入射,各自散射到哪里”,而不是”从左传到右的场怎么变”。处理厚吸收层时天然稳定。

这是”S4”引擎名称的由来——Semiconductor S-matrix Simulation for Slabs。

6.8 回到项目

在我们的 Hybrid RCWA 中,S4 引擎就负责”平面多层膜”部分的 TMM/S 矩阵计算。它吃进 10 层膜的材料参数和厚度,吐出


📝 第6章自测

  1. Maxwell 方程中哪两个耦合关系使得电磁波可以自我维持地传播?(答案:
  2. 复波数 中实部和虚部分别对应什么物理过程?(答案:实部→传播/振荡,虚部→衰减/吸收)
  3. TMM 和 S 矩阵各有什么优缺点?(答案:TMM 简单但数值不稳定,S 矩阵稳定但稍复杂)

第7章:周期性结构——光栅的物理(90min)

7.1 从高中实验说起:Young 双缝

高中物理做过(或听说过)这个实验:一束光通过两条平行狭缝,在屏幕上出现明暗相间的条纹。

产生条纹的原因:两条狭缝相当于两个同步的球面波源。在屏幕上某一点,从两条缝到达的光路程不同 → 相位差 → 干涉。

7.2 从双缝到多缝:光栅

如果把缝从 2 条增加到 N 条(N 很大,缝间距相等),就是光栅(diffraction grating)。

光栅方程:

符号含义单位
光栅周期(相邻缝间距)长度
入射光角度角度(从法线量)
级衍射角角度
衍射级次(整数
光的波长长度

7.3 衍射级次的物理含义

入射光
  ∣ (θ_i=0)
  ↓
═══╪═══╪═══╪═══╪═══  光栅(d)
    ↓    ↓    ↓    ↓
   m=-2 m=-1 m=0  m=+1  m=+2
   ←左偏 ←左偏 直走 右偏→ 右偏→
  • :零级衍射,光直穿过去(镜面透射)
  • :一级衍射,光向两侧偏转
  • :二级衍射,偏转更大

和双缝实验完全一样的原理——只是 N 条缝 = N 个波源,形成的干涉斑更尖锐(“方向选择性更好”)。

7.4 决定衍射行为的关键:d 和 λ 的关系

这正是我们项目的核心物理:

三种光学区域:

区域条件有多少衍射级?适用方法
标量区很多(几十到上百)几何光学(RT)✅
共振区很少(几个)RCWA ✅ / RT ❌
亚波长区只有 等效介质理论

我们的项目: → 共振区。

7.5 共振区的特殊性

在共振区:

  1. 只有少数几个衍射级存在,甚至只有
  2. 这些衍射级的能量分配强烈地依赖于光栅的精确形状
  3. 小到 10nm 的结构变化都会显著改变衍射效率
  4. 几何光学(RT)在这里完全失效——因为几何光学假设有”足够多”的衍射级来模拟镜面反射/折射

这是物理学中一个微妙的点:几何光学(Snell 定律、镜面反射)本质上需要无穷多个衍射级来重建。如果可用的衍射级不够多,几何光学就断裂了。

7.6 从 1D 光栅到 2D 金字塔阵列

我们的金字塔纹理是二维周期结构:在 方向和 方向都重复。

从 1D 光栅到 2D:

  • 1D:只有 1 个周期方向 → 衍射级
  • 2D:有 2 个周期方向 → 衍射级

对每个衍射级:

数学上就是 1D 光栅方程的二维推广。

7.7 Floquet-Bloch 定理(直观理解)

在无限大周期性介质中,电磁场满足:

翻译成人话:偏离一个周期的场,和原来的场一模一样,只差一个固定的相位因子

正因为有这条定理,我们不需要在整个无限空间上求解——只需要在一个周期内求解即可。

这是 RCWA 数学上可行的根本原因。没有 Floquet-Bloch 定理,你不会想在无限大的周期结构上求解 Maxwell 方程。

7.8 回到项目

  • 金字塔周期 → 共振区
  • 需要 RCWA(保留所有可能存在的衍射级
  • RT+TMM 失败的根本原因:在共振区,衍射效应主导(而不是镜面反射/折射主导)

📝 第7章自测

  1. 光栅方程是什么?(答案:
  2. 三种光学区域的划分是什么?(答案:标量区,共振区,亚波长区)
  3. 为什么共振区需要 RCWA?(答案:衍射级很少但每个衍射级的能量分配强烈依赖精确结构形状,几何光学假设失效)

第8章:RCWA——严格求解周期结构(120min)

本章是整本指南最核心的一章

如果你只精读一章,就读这一章。RCWA 的全部思想都浓缩在这里。

8.1 一句话概括 RCWA

把周期结构 Fourier 展开 → 把电磁场也 Fourier 展开 → 代入 Maxwell 方程 → 变成矩阵特征值问题 → 求解 → 得到所有反射和透射。

由五个步骤组成。我们逐一拆解。

8.2 第一步:Fourier 展开介电常数

对于周期为 的结构,介电常数 是周期的:

任何周期函数都可以写成 Fourier 级数(大一微积分会学到):

其中 (光栅矢量,grating vector)。

物理含义:一个周期结构等效于”一个均匀背景 + 一系列正弦波形的起伏”。每个 对应一种起伏的频率。

这和一个复杂声音可以被分解为多个纯音(不同频率的正弦波)完全一样的道理。

8.3 第二步:Fourier 展开电磁场

同理,周期结构中的电磁场也可以展开(Floquet-Bloch 定理允许我们这样做):

  • :第 个衍射级的振幅(随深度 变化)
  • :第 个衍射级的水平波数
  • 是”零级”(直射/镜面反射)
  • 是衍射级

8.4 关键截断:只保留有限个级次

在实际计算中,我们不可能保留无穷多项。截断到 项(即保留 个级次):

越大 → 越精确,但计算量也随 增大而增加。在我们的项目中, 就足够收敛了。

8.5 第三步:代入 Maxwell 方程 → 特征值问题

把 Fourier 展开后的 代入 Maxwell 方程:

经过代数运算 → 一组关于 耦合微分方程。写成矩阵形式:

其中 是一个包含所有 Fourier 系数 的矩阵,

这是一个特征值问题。求解矩阵 的特征值和特征向量:

  • 特征值 → 每个衍射级在结构内的传播常数(propagation constant)
  • 特征向量 → 每个衍射级的场分布模式(mode profile)

物理上:每个”模式”是光栅内部的一种稳定的电磁场分布形态。就像弹簧上的驻波有不同的振动模式,光栅也有不同的电磁场模式。

8.6 第四步:阶梯近似——处理非矩形的形状

RCWA 本身适用于分层均匀的周期结构(每层内 只在横向变化,在纵向不变)。

但金字塔不是矩形的——它的截面是三角形。横截面随深度连续变化。

解决方案:阶梯近似(Staircase Approximation)

△(真实金字塔截面)
  → 切片 →
┌─┐
├─┤
├─┤
├─┤
└─┘(10层矩形阶梯近似)

把金字塔切成 N 个水平薄片,每个薄片近似为矩形(横截面在片内不变)。对每个片独立进行 RCWA 的 Fourier 展开 + 特征值求解。

  • 10 片:够用(R 已经收敛)
  • 20 片:更精确,但计算量翻倍

填充因子

在深度 处,硅所占的面积比例。对于正金字塔(底部最大,顶部最小):

⚠️ 这是我们项目中修复的关键 Bug 之一。原来的错误公式是 ,相当于把金字塔倒过来了——尖端在底下、底面在上面。修复后 R 从 49% 降到正确的 2.9%。

8.7 第五步:S 矩阵级联

每层阶梯的 RCWA 结果用一个 S 矩阵描述(第6章讲过):

第1层 → S₁ → 第2层 → S₂ → ... → S₁₀ → 最终 R(λ,θ)

S 矩阵连乘,层级越多计算量越大,但数值始终稳定。

8.8 三种 RCWA 模式

我们在项目中用了三种 RCWA 计算模式:

模式RCWA 处理什么薄膜如何计算结果
substrate只有裸金字塔 Si不计算薄膜R=2.9%(验证纹理效果正确)
hybrid金字塔 Si(10层阶梯)S4/TMM 单独算薄膜R~15-18%,MAE=4.91nm
conformal金字塔 Si + 全部10层都做 RCWA无(全部 RCWA)R~23%,计算量极大

为什么 Hybrid 是最好的?

  1. Substrate 验证了金字塔纹理的物理正确性(R 从平面~35% 降到 2.9%)
  2. Hybrid 利用 TMM 处理平面薄膜的高效性,只在真正需要 RCWA 的地方用 RCWA → 最好的精度/计算量平衡
  3. Conformal 把所有层都塞进 RCWA → 理论上最严格,但计算量太大,而且实际上并不比 Hybrid 好(纹理结构对薄膜的影响相对较小)

8.9 回到项目:RCWA 给了我们什么

  • 金字塔 Hybrid MAE = 4.91nm:这是 “RCWA 处理纹理 + TMM 处理薄膜” 的完美配合
  • 5nm 网格 MAE = 1.04nm:计算越精细 → 反演越准确
  • 物理验证通过:金字塔纹理确实把 R 从 ~35% 降到了 2.9%,与实验文献的结果一致

📝 第8章自测

  1. RCWA 的五个步骤是什么?(答案:Fourier展开ε → Fourier展开场 → 代入Maxwell → 特征值求解 → S矩阵级联)
  2. 阶梯近似是什么?为什么需要?(答案:把非矩形截面切成N个水平薄片分别RCWA,因为RCWA只能处理分层均匀结构)
  3. 为什么 Hybrid 模式是实际使用的最佳选择?(答案:RCWA处理纹理+TMM处理薄膜,精度与计算量的最佳平衡)

第9章:从 到膜厚——反演问题(60min)

9.1 正问题 vs 反问题

正问题(Forward Problem):已知结构 → 算出光谱

给定:所有材料的 n(λ),k(λ) + 所有层的厚度
计算:R(λ,θ) ← 这是第5-8章做的事

反问题(Inverse Problem):已知光谱 → 推出结构参数

给定:实测的 R_measured(λ,θ)
求:某一层的厚度 d ← 这才是我们真正想要的!

9.2 为什么反问题更困难?

正问题:一组参数 → 一条光谱曲线(唯一确定)。反问题:一条光谱曲线 → 可能对应多组参数(不唯一)。

而且 不是线性的——改变 10nm 膜厚, 不是均匀地变化一下,而是牵动所有干涉条件,产生复杂的光谱形变。

9.3 库方法(Library Approach)

最简单的反演策略:暴力搜索

1. 预计算:对所有可能的厚度 d (50nm, 70nm, 90nm, ..., 600nm)
   逐一跑 RCWA/TMM,得到 R_library(d, λ, θ)

2. 对每一组实测的 R_measured(λ,θ):
   计算它与库中每一条 R_library(d, ·) 的差异

3. 选差异最小的那个 d 作为估计值

数学上:

9.4 网格间距:20nm vs 5nm

预计算库中厚度的间距就是”网格”:

网格间距厚度候选数MAE单角度计算时间
20 nm313.76 nm~28s
5 nm1211.04 nm~118s

把网格从 20nm 加密到 5nm,精度提升了 72%(MAE 从 3.76 降到 1.04nm),但计算量也增加了 4 倍。

9.5 Joint(联合)vs Single-angle(单角度)

  • 单角度:只用 这一个角度的数据
  • Joint:把 拼在一起拟合

理论上 Joint 应该更好(更多信息),但在稠密库和低噪声条件下,两者的差距很小——因为 5nm 网格下光谱形状已经足够独特。

Joint 的优势体现在:更稀疏的库、更高噪声水平、更大的待反演参数空间。

9.6 噪声地板:高角度的困境

时,5nm 膜厚差产生的反射光谱变化已经小于测量噪声)→ 反演进入”噪声地板”。

物理上:大角度入射时,光在膜内的路径非常倾斜,等效路径长度变化对厚度不敏感。所以有时候”更多角度”不一定带来”更多信息”。

9.7 回到项目

  • 我们的最佳结果:Hybrid RCWA, 5nm 网格 → MAE = 1.04 nm
  • 这意味着:用 400-1100nm 光谱,我们可以把钙钛矿膜厚测到 ±1nm 的精度
  • 这在物理上已经非常接近信息论极限(Cramér-Rao 下界)

📝 第9章自测

  1. 正问题和反问题的区别是什么?(答案:正问题=结构→光谱,反问题=光谱→结构)
  2. 库方法的核心思想?(答案:预计算所有可能厚度的光谱,实测光谱与库中最匹配的条目对应的厚度即为估计值)
  3. 为什么更细的网格不一定线性提升精度?(答案:进入噪声地板后,膜厚差产生的光谱变化被测量噪声淹没)

第10章:为什么 RT+TMM 在本项目中失败了?(45min)

10.1 RT 是什么?

RT(Ray Tracing,光线追迹):把光当作几何射线。

每一条射线:

  1. 打到界面 → Fresnel 方程决定反射/折射比例
  2. 追踪到下一个界面 → 继续
  3. 统计最终反射和吸收

10.2 RT 的前提假设

结构的特征尺寸远大于波长

在这个假设下:

  • 衍射可以忽略(所有能量都在 级)
  • 干涉效应极简(相干长度短于路径差)
  • 光的行为 = 几何光学

10.3 我们的项目打破了这个假设

参数判定
金字塔周期 1000 nm
最短波长400 nm(勉强偏标量区)
最长波长1100 nm(纯共振区)
中间波长500-800 nm(共振区)

对于短波长(400nm),纹理勉强够大;但对于长波长(600-1100nm), 差不多 → 衍射效应根本不能忽略。

10.4 数据说明了什么

multi_angle_textured_results_v2.json(RT+TMM 反演结果):

方法MAE (nm)备注
RT+TMM, 249.2灾难性的
RT+TMM, 119.4很差
RT+TMM, 23.7意外地”还行”
RT+TMM, 66.7
RT+TMM, Joint113.8联合反而更差!

10.5 为什么 异常好?

这是 Si(100) 金字塔的刻蚀角。巧合的是,这个角度下入射光与金字塔斜面接近垂直 → Fresnel 反射最小 → 几何近似”偶然地”比较有效。

但这是不可靠的——换一种材料、换一个波长范围,这个巧合就消失了。

10.6 为什么 Joint 比最佳单角度差?

Joint MAE = 113.8nm,而最佳单角度(54.7°)= 23.7nm。

不同角度的 RT 误差不同(衍射缺失的程度随角度变化)。联合拟合时,“角度多”把不同角度的不一致的系统性误差混在一起 → 结果反而比只用最好的角度更差。

这就像一个投票系统里有 5 个评委,其中 4 个评委给的分数偏离了正确答案……但偏离的方向各不相同,平均下来反而不如只听那个碰巧对了的评委。

10.7 最终对比

方法Joint MAE与 RT+TMM 相比
RT+TMM (Joint)113.8 nm基准线
RCWA (20nm 网格)30.8 nm3.7× 更好
RCWA Pyramid-Hybrid4.91 nm23× 更好
RCWA (5nm 网格)1.04 nm109× 更好

10.8 方法选择决策树

你的结构特征尺寸 P 相对于波长 λ?
  ├── P >> λ (>10×) → RT+TMM 就够了
  ├── P ≈ λ (0.5-5×) → 必须用 RCWA ★ 本项目在这里
  └── P << λ (<0.5×) → RCWA 或等效介质理论

📝 第10章自测

  1. RT+TMM 的基本假设是什么?(答案:结构特征尺寸远大于波长
  2. 为什么 Joint 比最佳单角度更差?(答案:不同角度的系统性误差不一致,联合拟合被”坏角度”拖累)
  3. 什么情况下可以放心用 RT+TMM?(答案:结构特征尺寸远大于波长,如毫米级纹理)

第11章:计算工具链——从数学到代码(30min)

11.1 整体架构

你的 Windows 电脑
  ├─ Python 客户端
  │     ├─ 读取材料数据 (n,k 表格)
  │     ├─ 构建输入 JSON
  │     └─ 运行反演分析
  └─ JSON 文件 (存放在 G:\OpenClaw-Workspace\output\)

WSL (Windows Subsystem for Linux)
  └─ RCWA 服务器 (Python)
        ├─ Inkstone 引擎 → 金字塔/共形 RCWA
        └─ S4 引擎 → 平面多层膜 TMM

Windows 和 WSL 通过共享文件系统通信:Windows 写 _rcwa_input.json → WSL 读取 → 计算 → 写 _rcwa_output.json → Windows 读取结果。

11.2 四大引擎

引擎语言用途在我们的项目中
InkstonePythonRCWA 求解器(金字塔、一般光栅)金字塔纹理的 substrate 和 conformal 模式
S4C++Fourier Modal Method(平面多层)Hybrid 模式中的平面薄膜 TMM 计算
RayFlarePython太阳能电池光学框架封装 rcwa_structure 和 rt_tmm API
SolcorePython太阳能电池全物理框架提供材料光学常数和数据结构

11.3 关键脚本

文件作用
rcwa_pyramid_server.pyWSL 上的金字塔 RCWA 服务器(三种模式)
rcwa_bridge_server.pyWSL 上的平面 RCWA 桥接服务器
_run_full_rcwa.py完整反演流程的主控脚本

11.4 如何读输出文件

文件内容
rcwa_inversion_summary.json20nm 网格平面 RCWA 反演汇总
pyramid_rcwa_multi_angle_results.json金字塔 RCWA 多角度反演结果
rcwa_5nm_grid_comparison.json5nm vs 20nm 网格精度对比
multi_angle_textured_results_v2.jsonRT+TMM 反演结果(用于对比)

📝 第11章自测

  1. Windows↔WSL 的通信机制是什么?(答案:共享文件系统 + JSON 输入/输出文件)
  2. Hybrid 模式用了哪两个引擎?(答案:Inkstone(金字塔 RCWA)+ S4(平面 TMM))

第12章:下一步——从学习到研究(15min)

12.1 你现在能做什么

  • ✅ 理解 的物理含义
  • ✅ 用 TMM 手算 2-3 层膜的反射率
  • ✅ 理解为什么衍射在共振区至关重要
  • ✅ 解释 RCWA 的五个核心步骤
  • ✅ 看懂反演结果中的 MAE/RMSE
  • ✅ 解释为什么 RCWA 比 RT+TMM 精确 23 倍

12.2 如果要深入

方向内容难度时间
手写 TMM自己实现一个 10 层 TMM 代码2-4h
手写 RCWA实现 1D 光栅的 RCWA(~200行)⭐⭐⭐1-2 周
FDTD 入门时域有限差分,处理任意形状⭐⭐1 周
实验验证用实际测量的反射光谱做反演⭐⭐取决于实验
机器学习加速用神经网络替代 RCWA 做快速正问题⭐⭐⭐1-2 月

12.3 项目待解决问题

  1. 与真实实验数据对比(目前全是模拟)
  2. 同时反演多层膜厚(不是只反演一层)
  3. 不同噪声水平下的鲁棒性测试
  4. 金字塔刻蚀参数的灵敏度分析

附录A:公式速查卡

核心公式

公式含义
光子能量
复折射率
消光系数
Snell 折射定律
垂直入射振幅反射系数
反射率
Brewster 角
单层增透膜厚度
相位厚度
TMM 特征矩阵
系统总矩阵
光栅方程
金字塔填充因子

常用常数

常数
m/s
J·s
eV·nm
(600nm)~3.9
(600nm)~0.02
(600nm)~2.5
(600nm)~0.1
1.12 eV (λ=1107nm)
~1.6 eV (λ=775nm)
金字塔周期 1000 nm
金字塔高度 707 nm
金字塔斜角
Si(100) 刻蚀角54.7°

附录B:项目 Bug 日志摘要(2026-07-06)

#Bug影响修复
1填充因子公式反转:R 从正确的 2.9% 变成错误的 49%改为
2JSON 浮点数 key 类型不匹配:str(54.7) vs "54.7"读取结果时键名不匹配统一 str(float(ang))
3int('54.7') 崩溃程序因类型错误终止条件转换
4中文/emoji 输出 → GBK 编码崩溃Windows 控制台报错统一使用纯 ASCII [WARNING]
5Import 路径错误:call_rcwarcwa_library模块找不到修正 import 路径
6跨文件 JSON 结构不匹配写入和读取的数据格式不一致统一 JSON schema

每个 Bug 的详细分析见 memory-classified/technical_lessons/2026-07-06_rcwa_bugs.md


编写:覆水 (OpenClaw AI) · 2026-07-07 · 基于 2026-07-06 RCWA 薄膜反演项目 共12章 + 2附录 · 约 50KB · 建议阅读时间 10-15 小时