碳化硅外延层厚度的确定(2025 国赛 B)优秀范文(一)
摘要
题目要求由外延片在 400–1000 nm 波段测得的反射率谱 反演碳化硅(4H-SiC)外延层的厚度 ,并给出结果的精度与不确定度。本文建立空气 / 外延层 / 衬底三层薄膜的双程干涉正演模型,用菲涅尔方程与特征矩阵给出总反射率 ;在此基础上,先用包络法由反射率极值波长间距给出厚度的闭式初值,再指出折射率—厚度的耦合会令联合反演病态,故将色散常数 锚定文献先验、仅反演 ,并以"全局粗扫定位条纹周期对应 basin + Nelder-Mead 精修"克服初值敏感与相邻周期伪解。整个流程不依赖商业拟合软件,全部由标准库实现,便于在复现与教学中直接使用。最终反演得 、(固定 ),均方根残差 ,与真值 相对误差仅 。蒙特卡洛 220 次重复给出 (95% 置信区间 ),偏差近零;不确定度随测量噪声 近似线性增长。整套方法物理清晰、数值稳健,可为半导体外延质检提供可复现的厚度测定流程。
一、问题重述
给定一片在蓝宝石/硅衬底上外延生长的 4H-SiC 外延片,已测得其反射率随波长变化的曲线 (波长范围 400–1000 nm,采样 201 点,步长 3 nm)。衬底 4H-SiC 的折射率 视为已知,空气折射率 。需要由该光谱反演出外延层的物理厚度 ,并对结果的可靠性做出量化评估。问题本质上是由观测光谱反演薄膜光学参数的不适定反问题:同一厚度会对应一条具有周期性干涉条纹的反射谱,而折射率色散未知时厚度与折射率之间存在强耦合,因此必须借助合理的物理建模与稳健的数值策略才能得到可信解。
二、模型假设
为将问题转化为可计算的数学模型,作如下假设:
- 单层均匀膜假设:外延层为一层厚度均匀、各向同性的介质薄膜,膜内折射率仅随波长变化,不随位置变化。
- 界面理想:膜—空气、膜—衬底两个界面平整、无表面粗糙度与散射,可用特征矩阵精确描述。
- 无吸收:在所考波段外延层与衬底均视为无吸收介质,反射仅由折射率失配引起。
- 色散形式:外延层折射率采用 Cauchy 经验式 ( 取微米),其中 为待定色散常数。
- 衬底与空气折射率已知:, 作为先验固定。
- 测量噪声:实测反射率由无噪模型叠加加性高斯白噪声得到,标准差取 。
三、符号说明
| 符号 | 含义 | 取值/单位 |
|---|---|---|
| 波长 | 400–1000 nm | |
| 空气/外延层/衬底折射率 | 1.0 / 未知 / 2.70 | |
| 外延层厚度(反演目标) | ||
| 外延层 Cauchy 色散常数 | ||
| 单程相位厚度 | ||
| 总反射率 | ||
| 测量噪声标准差 | 0.006 |
四、模型建立
4.1 三层薄膜正演模型
将体系视为空气 () / 外延层 () / 衬底 () 三层结构。光垂直入射时,膜层上下界面的菲涅尔振幅反射系数分别为
外延层引入单程相位厚度 。由特征矩阵可得总反射振幅
总反射率即为 。由于 随 单调变化,反射率在相邻波长处取得极大与极小,形成规则的干涉条纹。
4.2 包络法初值
对无吸收薄膜,相邻两次反射率极值对应的波长 满足相位差 ,由此可导得厚度与极值波长间距 的闭式关系
其中 。该式给出由光谱条纹直接估计厚度的"包络法"初值,计算快、无需迭代,但抗噪能力弱(见第五节)。
4.3 反演目标函数
给定实测谱 ,定义最小二乘代价
其中色散常数 固定为文献先验 ,仅反演 ,以避免 – 的强耦合导致病态。
4.4 条纹周期别名与初值敏感性
由于相位厚度 以 为周期,厚度为 与 ( 为整数)的样品会产生几乎相同的干涉条纹间距,这就是"厚度别名"现象。若仅用包络法或单一初值做局部优化,极易收敛到相邻周期的伪解(如含噪时初值漂至 即落入错误 basin)。因此反演不能依赖单点初值,而必须先用全局粗扫锁定真实周期对应的 basin,再做局部精修——这正是第五节求解流程的设计动机。
五、模型求解与结果分析
5.1 求解流程
- 正演验证:代入真值 ,模型反射率在 间振荡,呈现清晰的干涉条纹(图 1)。
- 包络初值:在无噪数据上包络法给出 ,已十分接近真值;但在含噪实测上包络法受噪声扰动给出 ,偏差显著(图 3),说明包络法不可直接作为最终解,仅宜作粗定位。
- 全局粗扫 + 精修:固定 时,代价 对 具有唯一全局极小(条纹间距唯一确定 ),故在 以 0.04 步长粗扫定位 basin,再以 Nelder-Mead 单纯形法精修 。该组合稳健避开相邻周期别名伪解,对初值不敏感。
- 反演结果:得 、、、迭代 34 步收敛(图 4、图 6)。为验证稳健性,对含噪实测重复以不同随机扰动初始化,结果均收敛至同一 basin,说明该解是真正的全局最优而非局部陷阱。
5.2 残差检验
反演模型与实测之差(残差)在 内随机波动,无明显波长相关的系统结构(图 5),说明正演模型与反演策略已充分解释了观测数据,未遗漏主要物理效应。残差标准差约为 ,与人为注入的噪声水平 同量级,符合"拟合已逼近噪声地板、未过拟合"的预期;若残差仍含低频或周期性结构,则提示模型假设(如无吸收、单层均匀)需要修正。
六、灵敏度分析
6.1 蒙特卡洛不确定度
以固定种子生成 220 组独立加噪实测谱,逐组反演得到厚度估计的分布(图 7)。统计得均值 、标准差 、95% 置信区间 、相对真值偏差 ,色散均值 。结果表明反演无系统偏差,且精度优于 。由图 7 可见,220 次估计近似呈以真值为中心的正态分布,未出现双峰或长尾,进一步佐证反演结果的可靠性与单 basin 收敛特性;若分布出现多峰,则说明数据中存在别名伪解风险,需回检初值策略。
6.2 噪声水平影响
考察不同测量噪声 下的厚度标准差,得到 近似线性关系:
| 0.003 | 0.006 | 0.009 | 0.012 | |
|---|---|---|---|---|
| 0.00175 | 0.00330 | 0.00495 | 0.00676 |
即噪声每增大一倍,厚度不确定度近乎同倍增大(图 8)。这提示在实际质检中,提升光谱信噪比是降低厚度测定不确定度最直接有效的途径;若受硬件限制无法降低 ,则可通过增加波长采样密度或多次测量平均来抑制单次随机误差,但无法突破由 决定的固有不确定度下限。
七、模型评价
优点:(1) 物理模型严谨,三层特征矩阵精确刻画干涉条纹;(2) 包络法提供闭式初值,计算廉价且可解释;(3) 全局粗扫 + Nelder-Mead 精修兼具稳健性与精度,有效规避别名伪解,对初值不敏感;(4) 蒙特卡洛给出可量化的不确定度,便于工程决策与质控阈值设定;(5) 全部计算仅依赖标准库,无需商业拟合软件,复现成本低。
局限:(1) 依赖衬底折射率 与色散常数 的先验;若 未知,与 的耦合会使联合反演严重病态(本文以固定 化解);(2) 包络法抗噪差,须以最小二乘校正;(3) 假设无吸收、界面理想,对高粗糙或吸收样品需引入额外损耗项;(4) 当外延层过薄(仅含个别条纹)时,包络法初值精度下降,宜改用全谱最小二乘直接反演。
八、结论
本文以外延层厚度测定为对象,建立了"正演建模—包络初值—非线性最小二乘反演—蒙特卡洛不确定度量化"的完整链条。在固定色散先验下,反演厚度 ,与真值相对误差仅 ;蒙特卡洛表明测定精度优于 ,且不确定度随测量噪声近似线性增长。与单纯依赖包络法相比,本文以全局粗扫克服别名伪解、以最小二乘校正噪声,显著提升了结果的稳健性与可信度。方法物理清晰、数值稳健、可完全复现,可直接迁移至蓝宝石、氮化镓、砷化镓等其他外延体系的膜厚测定,亦可推广到折射率色散联合反演(在光谱较宽、条纹充足时)与多层膜的逐层解析。
九、参考文献
[1] 全国大学生数学建模竞赛组委会. 2025 高教社杯全国大学生数学建模竞赛 B 题:碳化硅外延层厚度的确定[R]. 2025.
[2] Tompkins H G, Irene E A. Handbook of Ellipsometry[M]. William Andrew, 2005.
[3] Born M, Wolf E. Principles of Optics[M]. 7th ed. Cambridge University Press, 1999.
[4] Heavens O S. Optical Properties of Thin Solid Films[M]. Dover, 1965.
附录:核心 Python 实现
import os, sys, math, random
# 定位并导入真源模块(与配图同源,四路一致)
try:
_HERE = os.path.dirname(os.path.abspath(__file__))
except NameError:
_HERE = os.getcwd()
sys.path.insert(0, os.path.abspath(os.path.join(_HERE, "..", "..", "..", "tools")))
import gen_cumcm2025b as G
# ---- 复算关键数字 ----
# 1) 重建固定实测数据并反演 (d, A),B 固定文献先验
Rmeas, clean = G.build_meas()
x, f, it = G.fit(Rmeas, G.LAM, seed=2026)
d, A = x
rmse = G.rmse(Rmeas, d, A, G.B0)
print("反演:d=%.4f μm A=%.4f RMSE=%.5f 迭代=%d" % (d, A, rmse, it))
# 2) 蒙特卡洛不确定度(220 次重复)
est, mean, std, lo, hi, bias, Amean = G.monte_carlo()
print("MC(%d): mean=%.4f std=%.5f CI=[%.4f,%.4f] bias=%.5f A_mean=%.4f"
% (len(est), mean, std, lo, hi, bias, Amean))
# 3) 噪声灵敏度
sens = G.sensitivity()
print("灵敏度 σ→std: " + ", ".join("σ=%.3f→%.5f" % (s, v) for s, v in sens))