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 高中就学过的:反射和折射
一束光从空气斜射到水面,你会看到:
- 一部分光弹回来(反射)——入射角 = 反射角:
- 一部分光进入水中,改变方向(折射)——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章自测
- 折射率 是什么意思?(答案:光在该材料中的速度是真空中速度的一半 )
- 光从玻璃()射向空气,临界角是多少?(答案:)
- 几何光学不能解释什么现象?举两个例子。(答案:薄膜干涉、光栅衍射、增透膜等)
闪卡:折射率
问题:折射率 的物理定义是什么? 答案:,即真空中光速除以介质中光速。 越大,光在该材料中走得越慢。
闪卡:Snell 定律
问题:Snell 折射定律怎么写? 答案:,其中 为折射率, 分别为入射角和折射角。
第2章:光的颜色、能量与吸收(45min)
2.1 电磁波谱:光在”光谱”中的位置
光是电磁波的一种。电磁波按波长从长到短排列:
无线电波 → 微波 → 红外(IR) → 可见光 → 紫外(UV) → X射线 → γ射线
长λ, 低能量 ←——————————————→ 短λ, 高能量
可见光只占整条谱线的一小段:380nm–780nm。
| 颜色 | 波长范围 | 典型波长 |
|---|---|---|
| 紫 | 380-450 nm | 400 nm |
| 蓝 | 450-495 nm | 470 nm |
| 绿 | 495-570 nm | 550 nm ← 人眼最敏感 |
| 黄 | 570-590 nm | 580 nm |
| 橙 | 590-620 nm | 600 nm |
| 红 | 620-780 nm | 700 nm |
| 近红外 | 780-2500 nm | 1100 nm ← Si 的带隙边界 |
我们的项目用到的光:400–1100 nm。从蓝紫光一直覆盖到近红外。
2.2 光子能量:波长和能量怎么换算?
一个光子的能量:
- (普朗克常数)
把焦耳换成电子伏特(eV):。于是非常实用的公式:
“1240”从哪来? 纯粹是常数换算:,除以 再乘以 ,得到 。
| 波长 | 光子能量 | 例子 |
|---|---|---|
| 400 nm | 3.1 eV | 蓝光,能激发大多数半导体 |
| 550 nm | 2.25 eV | 绿光 |
| 780 nm | 1.59 eV | 红光,钙钛矿(~1.6eV 带隙)刚好能吸收 |
| 1100 nm | 1.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章自测
- 光子能量公式是什么?500nm 的光子能量是多少 eV?(答案:,)
- 硅为什么对可见光不透明?(答案:可见光光子能量 1.6-3.1eV 全部大于 Si 的带隙 1.12eV,被强烈吸收)
- 复折射率 中, 决定什么? 决定什么?(答案: 决定传播速度和折射, 决定吸收/衰减)
闪卡:光子能量
问题:光子能量 和波长 的关系? 答案:
闪卡:吸收系数
问题:Beer-Lambert 定律怎么写? 和 的关系是什么? 答案:,。
第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章自测
- 空气→硅,垂直入射,反射率多少?(答案:)
- 和 的关系是什么?(答案:, 是振幅比, 是能量比)
- s 偏振和 p 偏振有什么区别?(答案:s 偏振 E 场垂直于入射面,p 偏振 E 场平行于入射面,反射率不同)
闪卡:Fresnel 垂直入射
问题:垂直入射时反射系数和反射率的公式? 答案:,。
闪卡:Brewster 角
问题:Brewster 角是什么?公式? 答案:使 (p 偏振完全不反射)的入射角。。
第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章自测
- 相长干涉和相消干涉的条件分别是什么?(答案:相位差 →相长;→相消)
- 增透膜的厚度公式和原理?(答案:,使两束反射光的光程差 ,相位差 ,相消干涉)
- 为什么多层膜的手工计算不可行?(答案:光在层间来回反射无数次,每束光都相干,手工追踪不可能)
闪卡:薄膜干涉条件
问题:单层膜产生相消干涉(最小反射)的条件是什么? 答案:。膜厚为四分之一波长时两束反射光反相相消。
第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)**25.8 回到项目:TMM 在 RCWA Hybrid 模式中的角色
在我们的项目中,Hybrid 模式这样工作:
- RCWA 处理金字塔纹理 Si:求出”经过纹理后到达薄膜底部的光的分布”
- TMM 处理上面的 10 层平面薄膜:用上面那个 30 行的矩阵连乘
两个模块”拼接”在一起,就得到了完整的 。
纯 TMM(无 RCWA)只能处理平面——这就是为什么单独 TMM 对纹理器件 MAE 高达 113.8nm。
📝 第5章自测
- TMM 的核心思想是什么?(答案:用 2×2 矩阵描述每层膜的电磁场变换,矩阵连乘得到全系统响应)
- 是什么?(答案:相位厚度,)
- 为什么矩阵顺序不能交换?(答案:物理上,光必须从第1层走到第N层,顺序颠倒意味着结构颠倒)
闪卡:TMM 特征矩阵
问题:TMM 中单层膜的特征矩阵是什么? 答案:,其中 为相位厚度, 为导纳。
闪卡:TMM vs 追踪法
问题:为什么 TMM 比追踪每条光线更优越? 答案:TMM 自动包含所有无限多次内部反射的干涉,不需要追踪每条光线路径。
第6章:TMM 的数学根源——从 Maxwell 方程推导 TMM(90min)
本章说明
本章是”知其所以然”的部分。如果你暂时不想深入数学推导,可以跳过本章,直接记住第5章的结论继续前进。但如果你想知道”TMM 的矩阵到底怎么来的”,本章会给你完整的推导链。
6.1 Maxwell 方程:一切电磁现象的”宪法”
在大一电磁学课上你会逐渐遇到这四条方程。对于无自由电荷、无自由电流的介质:
其中 ,(非磁性材料 )。
后两个方程是关键:它们说变化电场 变化磁场,互相产生 → 电磁波可以自我维持地传播。
6.2 从 Maxwell 到波动方程
对 两边取旋度,代入 和 :
记 ,这就是波动方程:
6.3 平面波解
假设波沿 方向传播,只含 和 :
- :波数
- :角频率
验证它确实是波动方程的解:求两次导后两边相等。
6.4 复波数的物理含义
当材料有吸收(),:
代入平面波解:
- 第一个指数因子:波的空间和时间振荡(频率 )
- 第二个指数因子:波的衰减(衰减率 )
复波数用一个复数同时表达了”传播”和”衰减”两个物理过程。
6.5 边界条件:为什么界面必须有反射
Maxwell 方程要求:在两种介质的分界面上
- 的切向分量连续
- 的切向分量连续
直接后果:当一个波从介质 1 入射到介质 2,一般不能只靠一个透射波满足这两个条件——必须引入一个反射波。
6.6 从边界条件推出 TMM
考虑两层之间的一个界面。在界面左边(介质 j,厚度 ),场由”向右传播”和”向左传播”两个波叠加。在界面右边(介质 j+1)也一样。
应用切向连续性条件 → 得到一个 的传递关系。逐层连接 → 得到一个 的矩阵连乘。
详细推导步骤(供查阅):
- 在介质 j 内写出 和 的通解(前进波+后退波)
- 在层入口 和出口 处写出场值
- 消去前进波/后退波的振幅系数
- → 得到
- 逐层连接:
这就是 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章自测
- Maxwell 方程中哪两个耦合关系使得电磁波可以自我维持地传播?(答案: 和 )
- 复波数 中实部和虚部分别对应什么物理过程?(答案:实部→传播/振荡,虚部→衰减/吸收)
- 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 共振区的特殊性
在共振区:
- 只有少数几个衍射级存在(,甚至只有 )
- 这些衍射级的能量分配强烈地依赖于光栅的精确形状
- 小到 10nm 的结构变化都会显著改变衍射效率
- 几何光学(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章自测
- 光栅方程是什么?(答案:)
- 三种光学区域的划分是什么?(答案:标量区,共振区,亚波长区)
- 为什么共振区需要 RCWA?(答案:衍射级很少但每个衍射级的能量分配强烈依赖精确结构形状,几何光学假设失效)
闪卡:光栅方程
问题:光栅方程的三种光学区域和适用方法? 答案:(标量区,RT可用);(共振区,必须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 是最好的?
- Substrate 验证了金字塔纹理的物理正确性(R 从平面~35% 降到 2.9%)
- Hybrid 利用 TMM 处理平面薄膜的高效性,只在真正需要 RCWA 的地方用 RCWA → 最好的精度/计算量平衡
- Conformal 把所有层都塞进 RCWA → 理论上最严格,但计算量太大,而且实际上并不比 Hybrid 好(纹理结构对薄膜的影响相对较小)
8.9 回到项目:RCWA 给了我们什么
- 金字塔 Hybrid MAE = 4.91nm:这是 “RCWA 处理纹理 + TMM 处理薄膜” 的完美配合
- 5nm 网格 MAE = 1.04nm:计算越精细 → 反演越准确
- 物理验证通过:金字塔纹理确实把 R 从 ~35% 降到了 2.9%,与实验文献的结果一致
📝 第8章自测
- RCWA 的五个步骤是什么?(答案:Fourier展开ε → Fourier展开场 → 代入Maxwell → 特征值求解 → S矩阵级联)
- 阶梯近似是什么?为什么需要?(答案:把非矩形截面切成N个水平薄片分别RCWA,因为RCWA只能处理分层均匀结构)
- 为什么 Hybrid 模式是实际使用的最佳选择?(答案:RCWA处理纹理+TMM处理薄膜,精度与计算量的最佳平衡)
闪卡:RCWA 核心思想
问题:RCWA 的五个步骤? 答案:Fourier展开结构 → Fourier展开场 → 代入Maxwell得特征值问题 → 阶梯近似处理非矩形形状 → S矩阵级联得到最终反射率。
闪卡:三种 RCWA 模式
问题:Substrate / Hybrid / Conformal 三种模式的区别? 答案:Substrate=裸纹理验证R
2.9%;Hybrid=RCWA纹理+TMM薄膜 MAE=4.91nm;Conformal=全部RCWA R23%计算量大。
第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 nm | 31 | 3.76 nm | ~28s |
| 5 nm | 121 | 1.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章自测
- 正问题和反问题的区别是什么?(答案:正问题=结构→光谱,反问题=光谱→结构)
- 库方法的核心思想?(答案:预计算所有可能厚度的光谱,实测光谱与库中最匹配的条目对应的厚度即为估计值)
- 为什么更细的网格不一定线性提升精度?(答案:进入噪声地板后,膜厚差产生的光谱变化被测量噪声淹没)
闪卡:反演问题
问题:库方法的厚度估计公式? 答案:
第10章:为什么 RT+TMM 在本项目中失败了?(45min)
10.1 RT 是什么?
RT(Ray Tracing,光线追迹):把光当作几何射线。
每一条射线:
- 打到界面 → Fresnel 方程决定反射/折射比例
- 追踪到下一个界面 → 继续
- 统计最终反射和吸收
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, Joint | 113.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 nm | 3.7× 更好 |
| RCWA Pyramid-Hybrid | 4.91 nm | 23× 更好 |
| RCWA (5nm 网格) | 1.04 nm | 109× 更好 |
10.8 方法选择决策树
你的结构特征尺寸 P 相对于波长 λ?
├── P >> λ (>10×) → RT+TMM 就够了
├── P ≈ λ (0.5-5×) → 必须用 RCWA ★ 本项目在这里
└── P << λ (<0.5×) → RCWA 或等效介质理论
📝 第10章自测
- RT+TMM 的基本假设是什么?(答案:结构特征尺寸远大于波长 )
- 为什么 Joint 比最佳单角度更差?(答案:不同角度的系统性误差不一致,联合拟合被”坏角度”拖累)
- 什么情况下可以放心用 RT+TMM?(答案:结构特征尺寸远大于波长,如毫米级纹理)
闪卡:RT vs RCWA
问题:RT+TMM 和 RCWA 的适用范围? 答案: 用 RT+TMM; 必须用 RCWA;本项目 处于共振区。
第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 四大引擎
| 引擎 | 语言 | 用途 | 在我们的项目中 |
|---|---|---|---|
| Inkstone | Python | RCWA 求解器(金字塔、一般光栅) | 金字塔纹理的 substrate 和 conformal 模式 |
| S4 | C++ | Fourier Modal Method(平面多层) | Hybrid 模式中的平面薄膜 TMM 计算 |
| RayFlare | Python | 太阳能电池光学框架 | 封装 rcwa_structure 和 rt_tmm API |
| Solcore | Python | 太阳能电池全物理框架 | 提供材料光学常数和数据结构 |
11.3 关键脚本
| 文件 | 作用 |
|---|---|
rcwa_pyramid_server.py | WSL 上的金字塔 RCWA 服务器(三种模式) |
rcwa_bridge_server.py | WSL 上的平面 RCWA 桥接服务器 |
_run_full_rcwa.py | 完整反演流程的主控脚本 |
11.4 如何读输出文件
| 文件 | 内容 |
|---|---|
rcwa_inversion_summary.json | 20nm 网格平面 RCWA 反演汇总 |
pyramid_rcwa_multi_angle_results.json | 金字塔 RCWA 多角度反演结果 |
rcwa_5nm_grid_comparison.json | 5nm vs 20nm 网格精度对比 |
multi_angle_textured_results_v2.json | RT+TMM 反演结果(用于对比) |
📝 第11章自测
- Windows↔WSL 的通信机制是什么?(答案:共享文件系统 + JSON 输入/输出文件)
- 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 项目待解决问题
- 与真实实验数据对比(目前全是模拟)
- 同时反演多层膜厚(不是只反演一层)
- 不同噪声水平下的鲁棒性测试
- 金字塔刻蚀参数的灵敏度分析
附录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% | 改为 |
| 2 | JSON 浮点数 key 类型不匹配:str(54.7) vs "54.7" | 读取结果时键名不匹配 | 统一 str(float(ang)) |
| 3 | int('54.7') 崩溃 | 程序因类型错误终止 | 条件转换 |
| 4 | 中文/emoji 输出 → GBK 编码崩溃 | Windows 控制台报错 | 统一使用纯 ASCII [WARNING] |
| 5 | Import 路径错误:call_rcwa → rcwa_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 小时