环形谐振器教程的第 1 部分使用 MODE 来设计和仿真环形谐振器。 自由光谱范围 (FSR) 和品质因数 (Q 因数) 是这种面向片上通信应用的基于绝缘体上硅 (SOI) 波导设计的关键性能指标。 在第 2 部分中,我们将考虑如何为此设计执行参数提取和蒙特卡罗分析过程。 第 3 部分使用 3D FDTD 模拟进行最终模拟和参数提取。
第 1 部分:使用 MODE 进行设计和初始仿真
第 2 部分:使用 MODE 的参数提取和蒙特卡罗
第 3 部分:使用 FDTD 提取最终参数
一、设计和初步模拟
1.1 学习目标
在本例中,我们展示了如何使用 MODE 来设计环形谐振器。 用户将学会:
1.从组件库中插入一个环形谐振器对象
2.使用 Eigenmode Solver 为所需的 FSR 和 Q 因子选择波导间距、耦合长度和环长度
3.将结果与理论设计和 3D FDTD 结果进行比较
此页面包含 6 个部分。 第一部分描述如何设置模型。 如果您想先了解结果,您可以跳过此步骤,打开关联的 .lms 文件并继续执行以下步骤。 第 2 节和第 3 节使用本征模求解器以及讨论和结果部分的分析结果来设计环形谐振器。 第四节和第六节讨论如何设置传播者模拟。 第五部分展示了如何将传播器结果与解析、3D FDTD 结果进行比较。
1.2 创建环形谐振器
1.首先启动 MODE。 您可以在此过程中的任何时候保存 MODE 仿真项目文件 (.lms)。 为此,请在文件菜单中选择保存。
2.按STRUCTURES按钮上的箭头
并从下拉菜单中选择一个矩形。 根据下表设置绝缘基板矩形的属性。
3.按下 COMPONENTS 按钮上的箭头
并从下拉菜单中选择INTEGRATED OPTICS。 这将打开对象库窗口。
4.从列表中选择 RING RESONATOR 并按下 INSERT 按钮。
5.根据下表设置环形谐振器的属性。 用于模拟第一部分的耦合长度和半径只是一个初步猜测,稍后将修改为正确的值。
参数解释:
1.3 添加特征模求解器并找到群折射率
1.按下 SIMULATION 按钮上的箭头
并从下拉菜单中选择 EIGENSOLVER。 根据下表设置属性。 这会将本征求解器区域放置在环形谐振器的输入总线上。
官网案例文件的设置如下:
x=-3.8um
设置到这里时,长下面这个样子:
2.按下RUN运行按钮
打开特征模态求解器分析窗口。 按下 MESH STRUCTURE 按钮以绘制网格结构。 将波长设置为 1.5 微米。
设置界面:
绘制的网格结构
3.单击“计算模式”(Calculate Modes)按钮,然后在模式列表中选择感兴趣的模式(模式#1)
4.切换到频率分析选项卡并设置以下参数:
5.单击频率扫描(FREQUENCY SWEEP)按钮开始扫描。 扫描大约需要一分钟。
6.要将计算的色散绘制为波长的函数,请选择频率分析窗口右下角的 FREQUENCY PLOT 选项卡。 然后在绘图下拉菜单中选择“group index”。 该图可以在频率图选项卡上方看到。 如果你按下 PLOT IN NEW WINDOW 你会得到一个新窗口。 如果放大图,可以看到在 1.55 微米处,群折射率约为 4.63。
通过实际操作,发现在1.55um处,群折射率不是官网说的4.63,而是4.8左右。
如果实验官网给的案例文件,群折射率确实约为 4.63。
1.4 确定耦合长度
1.按SWITH TO LAYOUT按钮
这将删除所有模态数据并允许我们编辑特征模态求解器。
2.将模式求解器的中心移动到 x = 0,以便模式求解器位于两个波导穿过模式求解器的区域。
改为x=0后:
3.按下运行按钮。
打开特征模态求解器分析窗口。 按下 MESH STRUCTURE 按钮以绘制网格结构。 将波长设置为 1.55 微米,然后按查找模式(FIND MODES)。
4.第一和第二模式的 neff 值在模式列表中给出。 我们可以将这些 neff 值代入分析公式(参见讨论和结果页面)以确定耦合长度。
(不知道原文是怎么确定的,往后再看看)
官方案例的计算结果如下:
更新:这里主要看1.10 环形谐振器设计中的step 2第二步,能够根据那个公式,带入有效折射率差,求得耦合长度。
1.5 更新环形谐振器属性并运行传播器仿真
1.按SWITH TO LAYOUT按钮
以便可以编辑模拟。
2.使用前面步骤确定的耦合长度和半径值设置环形谐振器的属性,即
3.按下 SIMULATION 按钮上的箭头
选择varFDTD
从下拉菜单中。
4.根据下表设置属性。
5.图形用户界面中有一个绿色十字,用于设置传播器的核心板模式的位置。 单击 PROP 对象以选择十字,然后拖动它,使其与环形谐振器的硅部分重叠。
6.由于有效指数是宽带材料,因此传播器会在运行模拟之前找到适合有效指数数据的材料。 按下 CHECK 按钮旁边的箭头。
并选择 MATERIAL EXPLORER。 这将打开材料浏览器,您可以在其中检查您刚刚选择的位置是否适合平板模式。 您还可以查看适合测试材料的材料(在图形用户界面中以蓝叉显示)。
解释上面这句话:因为varFDTD为了计算平面波导的结构,首先要提取第三维(z方向上)波导的有效折射率。所以其实材料就必须要找适合用于varFDTD求解的特定折射率的材料。
观察其折射率分布也能发现,波导折射率为2.66左右。
7.接下来,重新编辑传播器区域(其实就是仿真区域)并选择 EFFECTIVE INDEX 选项卡。 平板模式的绘图应如下图所示。
我得到的纵坐标波长范围是默认的0.4-0.7um,不知道官网是怎么设置成1.5-1.6的,此处存疑。
已解决:在执行完第八个步骤,也就是添加光源,设置完光源的波长属性后,能显示正确结果。
8.按 SOURCES 按钮上的箭头
从下拉菜单中。选择MODE光源
根据下表设置属性
9.在上一步中,我们根据模式求解器的有效折射率差计算了耦合长度。 您可以通过设置 x = 0 来查看传播器看到的有效折射率差异,以便模式源位于两个波导之间。 然后选择用户选择模式。 在 MODE 在线帮助的波导耦合器应用示例中更详细地介绍了该技术。
(上面这句话没懂)
1.6 为传播模拟添加监视器
1.按监视器按钮上的箭头
从下拉菜单中选择frequency domain field and power monitor
根据下表设置属性
2.按DUPLICATE按钮创建显示器的副本。
根据下表设置属性。
3.按监视器按钮上的箭头并从下拉箭头选择the field time monitor。
根据下表设置属性。
4.按DUPLICATE按钮创建显示器的副本。
根据下表设置属性。
1.7 运行模拟并绘制结果
1.按RUN按钮运行传播者模拟。
作业管理器将出现并显示模拟的进度。
2.一旦仿真完成运行,对象树中的所有监视器和分析组都将填充数据。 结果视图窗口(可以通过单击“显示结果视图”按钮打开)将显示所选对象的所有结果及其相应的尺寸/值。 通过右键单击“Time_Drop”时间监视器并选择可视化 - E或Spectrum来绘制时间信号和频谱Ey。 (场分布也可以以相同的方式可视化。)
仿造上面步骤绘制的:
1.8 将下降的光功率与 3D FDTD 和理论进行比较
本节中提到的文件可以在安装目录的 Examples 子目录中找到,也可以从在线 MODE 知识库中下载。
1.打开脚本文件编辑器。
2.按下打开按钮
并浏览到 ring_resonator.lsf 脚本文件。
3.将 fdtd_results.ldf 文件保存在同一文件夹中。 这个 lumerical 数据文件 (*.ldf) 包含来自 3D FDTD 模拟的结果。 该数据文件也可以通过运行 ring_resonator.fsp 3D FDTD 模拟和 ring_resonator_fdtd.lsf 脚本文件来创建。 上述脚本文件会自动生成数据文件。
(.ldf文件通过脚本中的savedata命令来保存工作区变量,用loaddata来打开,详见后面脚本学习部分)
4.按下运行脚本按钮
该脚本将计算理论并将数据集发送到可视化器。 数据集包含分析、3D FDTD 和通过下降通道(或输出总线)的传播器传输。
1.9 将其他监视器添加到传播器模拟
ring_resonator.lms 模拟包含在安装目录的示例子目录中,或者可以从在线 MODE 知识库下载,其中包含上述说明中未包含的三个附加监视器。
三个额外的监视器是
1.a field profile monitor
2.a movie monitor
3.an effective index monitor
Field profile monitor
可以像之前创建的添加和删除监视器一样创建字段配置文件。 本例中的field profile monitor是在模拟运行一次完成后设置的。 这样,我们只能将监视器设置为精确地以对应于通过下降监视器下降的最大功率的频率记录数据。
官方案例文件运行结果如下:
Movie monitor
1.要将电影监视器添加到模拟中,请按监视器按钮上的箭头,从下拉菜单中选择movie monitor。
2.电影监视器始终是 2 维的,并显示传播器模拟的 2D 部分的进度,该模拟在传播器压缩传播器区域的 z 维之后运行。
3.在 ring_resonator.lms 模拟中,请注意,设置了常规选项卡以绘制场的 Ey 分量(因为为传播器选择了 TE 平板模式)。 此外,请注意比例从默认值 1 减小到设置值 0.1,因此这些场在电影中更加可见。
4.默认情况下,电影监视器设置为非活动状态。 可以通过用鼠标右键单击对象来激活/停用电影监视器,如屏幕截图所示。 当电影监视器处于活动状态时,与电影监视器同名的电影将保存在当前工作目录中。 电影监视器在模拟中被禁用,因为启用电影监视器后模拟需要更长的时间来运行。
Effective index monitor
有效折射率监视器的创建也与模拟中的其他监视器类似。 它显示了如何在 z 维度上压缩模拟体积。 相反,折射率监视器只会绘制结构的折射率。 更多详细信息可在有效折射率监视器 - 模拟对象页面中找到。
官方案例文件运行结果如下:
微环谐振器的最基本配置如下图所示。 它由一个耦合到两个光波导的环形波导组成。 腔模由紧密间隔的光波导之间的倏逝耦合激发。
主要定义量是平均(有效)环长度 L、循环模式的复传播常数 β、波导耦合器 t11和 t12 的场传输系数以及弯曲损耗。
传播常数 β 的实部是相位常数。 总环损耗是由于 beta 的虚部、弯曲损耗和耦合区域的其他散射损耗造成的。 对于我们正在考虑的高折射率对比波导,在 1550nm 左右的波长处,传播损耗和弯曲损耗很小。 对于此分析,我们将忽略所有损失,但可以在更详细的分析中轻松考虑不同的损失贡献。
对于耦合到两个光波导的环形波导的情况,下降的光功率可以表示为
在共振时,波在完整往返后获得的相位是 2π 的整数倍,即 βL = 2πN,其中 N 为模式数。 如果有效折射率与波长无关,则环长(也称为周长)是共振时有效波长的整数倍,或 L = Nλ0/neff,其中有效折射率定义为 neff = cβ/ω ,λ0 = c/f0 是谐振频率 f0 处的自由空间波长。
实际上,有效折射率确实取决于波长,共振由自由光谱范围 (FSR) 分开,以波长为单位,由下式给出
其中 ng = c(dβ/dω) 是群折射率。
由于高折射率波导的弯曲损耗较低,并且我们忽略了其他损耗源,因此 Q 因子近似为
我们现在将使用上述公式设计一个用于通道间距为 200GHz(1.6nm,1550nm)的 WDM 系统的环形谐振器。 我们希望将系统设计为每 16 个通道下拉(drop)一次。 因此,FSR 应为 3200GHz(1550nm 时为 25.6nm)。 我们希望下降的 FWHM 为 100GHz,对应的 Q 约为 1550nm/0.8nm ~ 2000。
我们将使用由 SOI 波导制成的系统。 波导宽 400nm,高 180nm。
1.10 环形谐振器设计
第 1 步:找到获得所需 FSR 所需的环总长度
我们在 3D 波导截面上使用 Eigenmode Solver 计算从 1500nm 到 1600nm 的群折射率。 我们看到在 1550nm 处的群指数约为 4.63。 这明显大于该波长的有效指数。
现在我们知道了群折射率,我们可以很容易地计算出所需的总环长度。
第 2 步:找出耦合器段的长度和间隙
我们想要设计一个 Q 因子为 1.55mm/0.8nm ~ 2000 的谐振器。对于给定的 Q,我们可以求解 t 的幅值
使用我们已知的群折射率、环长度和中心波长,我们发现 t11 ~ 0.95,因此 t12 ~ 0.31
(t11和t12的平方和为1)
如果我们使用 Eigenmode Solver 计算耦合波导系统的折射率,我们知道耦合长度可以由对称和反对称耦合模式的有效折射率的差异确定,由公式
使用波导之间的 100nm 间隙,我们发现 delta-n = 0.109 在 1550nm。 这给出了大约 1427nm 的耦合长度。 实际上,我们将使用 0 的耦合长度,并且将从靠近直波导的环的弯曲部分获得足够的耦合。
这里1427nm的计算步骤:
这里delta-n = 0.109的由来:
将模式求解器的中心移动到 x = 0后,找到了第一模式和第二模式的neff值,分别为1.985770和1.876785.两者相减就是差值0.108985≈0.109
其上面两张对称和反对称耦合模式的图由以下步骤得出:
1.选择一个模式:比如说第二个,也就是所谓的反对称耦合模式
2.将右下方模式画图选项(mode plot options)中的component切换为Ex,plot第二行选定为real part(因为其实虚部都是0,而且如果用amplitute相当于取了绝对值,看不出来反对称分布)
3.得到图形
对称模式
反对称模式
可以选择环的半径,以使我们具有所需的耦合长度和所需的总环长度。 对于示例的其余部分,我们将使用 3.1 微米的半径,并且我们将在下一步中使用此设计进行传播器仿真。
1.11 传播器模拟
在这个 Propagator 模拟中,MODE 源将计算波导的基本 TE 模式,并使用它将导模注入上波导。 有关 2.5D 变分 FDTD 求解器的概述,请参阅我们网站上的 Lumerical 的 2.5D FDTD 传播方法白皮书。
环形谐振器是一种高 Q 器件,可将光捕获在环中进行多次往返。 这些高 Q 器件在时域中需要比非谐振器件更长的仿真时间。 我们将从 5000fs 的模拟时间开始,尽管可能需要更多时间。 请注意,这比我们的默认模拟时间(1000fs)长。 增加模拟时间很重要,因为如果模拟时间没有设置足够长以使场衰减,频域监视器的结果是不正确的。
运行模拟后,我们可以考虑drop共振附近的 E 场强。
1.12 结果
我们可以将结果与基于我们的目标 FSR 和 Q 的理论曲线进行比较。请注意,我们已经调整了耦合系数的相位以对齐 1550nm 附近的峰值,因为只有耦合系数的幅度由 Q 给出。
结果与理论 FSR 有合理的一致性,但 Q 因子不正确。 这是因为
1.忽略理论曲线计算中的所有损失源
2.没有完全达到 t12 的期望值
3D FDTD 模拟显示较低的总传输,因为它占了更多的损耗源。
请注意,我们已经调整了理论峰值以在 1550nm 处给出最大值(体现在程序中,理论计算那里有相位补偿)。 该峰的精确位置对环的精确光学长度非常敏感。
1.13 下一步
请参阅环形谐振器教程的第 2 部分:环形谐振器(参数提取和蒙特卡罗分析),我们将在其中考虑如何针对此设计进行参数提取和蒙特卡罗分析过程。
1.14 Ring resonator的Scripts学习
按之前建模步骤来的:
# This object makes two offset parallel waveguides and a ring in between. 这个目标制作了两个偏移的平行波导和中间的一个环。
#
# Input properties
# Lc: length of the straight waveguide section in the ring for coupling 耦合环中直波导部分的长度
# base angle: sidewall angle of the waveguide 波导的侧壁角
# base height: height of the waveguide 波导的高度
# base width: width of the waveguide base 波导基的宽度
# gap: gap between two coupling sections 波导底座的宽度
# radius: radius of the ring 圆环的半径
# x span: x span of the straight waveguides 直波导的 x span
#
# Tags: integrated optics waveguide ring resonator ridge
#
# Copyright 2015 Lumerical Solutions Inc
########################################################################## simplify variable names by removing spaces
base_angle = %base angle%;
base_width = %base width%;
base_height = %base height%;
x_span = %x span%;selectall;
set("detail",0.5);
set("material",material);
set("base angle",base_angle);
set("base height",base_height);
set("base width",base_width);# magic number
# The cubic Bezier curve using this magic number in the pole points approximates the semi-circile with least error
# 幻数
# 在极点中使用这个幻数的三次贝塞尔曲线以最小的误差逼近半圆
m=0.55191502449; # Poles for four quarter-circles 四个四分之一圆的极点
px1 = radius*[0;m;1;1]+Lc/2+x_span/2;
py1 = radius*[1;1;m;0];
p1 = [px1,py1];
px2 = radius*[0;m;1;1]+Lc/2+x_span/2;
py2 = radius*[-1;-1;-m;0];
p2 = [px2,py2];
px3 = radius*[-1;-1;-m;0]-Lc/2+x_span/2;
py3 = radius*[0;-m;-1;-1];
p3 = [px3,py3];
px4 = radius*[-1;-1;-m;0]-Lc/2+x_span/2;
py4 = radius*[0;m;1;1];
p4 = [px4,py4];select("arc1");
set("poles",p1); # 用四个坐标画第一个1/4圆,arc1select("arc2");
set("poles",p2);select("arc3");
set("poles",p3);select("arc4");
set("poles",p4);setnamed("inner_top","poles",[-Lc/2+x_span/2,radius;Lc/2+x_span/2,radius]);
setnamed("inner_bottom","poles",[-Lc/2+x_span/2,-radius;Lc/2+x_span/2,-radius]);
setnamed("outer_top","poles",[0,radius+gap+base_width;x_span,radius+gap+base_width]);
setnamed("outer_bottom","poles",[0,-(radius+gap+base_width);x_span,-(radius+gap+base_width)]);
if (Lc==0){setnamed("inner_top","enabled",0); # enabled为0就是不使用该部分,disabledsetnamed("inner_bottom","enabled",0);}
else {setnamed("inner_top","enabled",1);setnamed("inner_bottom","enabled",1);}
按官网下载的示例来的:
(这个ring_resonator应该是自建的结构组,跟库里的不太一样。)
deleteall;
addrect;
set("x",0);
set("x span",lx);
set("y span",base_width);
set("y",radius+gap+base_width);
copy(0,-2*(radius+gap+base_width),0);#拷贝上面的对象,并移动指定距离(dx,dy,dz)copy;
set("y",radius);
set("x span",Lc); # 耦合环中直波导部分的长度,上面copy;
set("y",-radius); # # 耦合环中直波导部分的长度,下面addring; # 添加一个环
set("theta start",-90);
set("theta stop",90);
set("inner radius",radius-base_width/2);
set("outer radius",radius+base_width/2);
set("x",Lc/2); # 将半圆环的圆心x坐标设置在耦合环中直波导部分一半的长度处copy;
set("theta start",90);
set("theta stop",270);
set("x",-Lc/2);selectall;
set("material",material);
if(material=="<Object defined dielectric>") {set("index",index);
}
set("z min",0);
set("z max",height);
1.14.1 set(“poles”,p1)语句的解释
1.14.2 setnamed
1.14.3 copy
1.15 官网文件的Scripts学习
1.15.1 ring_resonator_fdtd.lsf
说明:该文件计算ring_resonator.fsp的结果并保存到ldf文件。 使用 ring_resonator.lsf 绘制最终结果。
#########################################################
# file: ring_resonator_fdtd.lsf
#
# Description: This file calculates the results of
# ring_resonator.fsp and saves them to and
# ldf file. The final resulats are plotted
# using ring_resonator.lsf
#
# Copyright 2016, Lumerical Solutions, Inc.
######################################################### collect data from port 2
Tdrop_dataset = getresult("FDTD::ports::port 2","T");
#获得第二个端口,左侧下拉通道的T数据集合(包含波长信息)
Tdrop_3DFDTD = abs(Tdrop_dataset.T); # .表示从数据集检索参数,返回标量矩阵
lambda_3DFDTD = Tdrop_dataset.lambda;# save data to ldf file
savedata("fdtd_results.ldf",Tdrop_3DFDTD,lambda_3DFDTD); # 将变量保存到ldf文件
1.15.1.1 getresult
1.15.1.2 savedata
1.15.2 ring_resonator.lsf
描述:将传输槽环形谐振器发送到 Visualizer。 传输数据来自 3 个不同的来源:带有 3D FDTD 数据的 .ldf、MODE Solutions 传播器模拟和分析公式
注:该程序只能在MODE文件运行
#########################################################
# file: ring_resonator.lsf
#
# Description: Send transmission trough ring resonator to
# Visualizer. Transmission data comes from 3
# different sources: an .ldf with 3D FDTD data,
# a MODE Solutions propagator simulation and an
# analytical formula
#
#
# Copyright 2012, Lumerical Solutions, Inc.
######################################################### FDTD results
loaddata("fdtd_results.ldf");########################################################
# Results from Propagator
# ring resonator design parameters
lambda0 = 1.55e-6; # center wavelength
FSR = 3200e9*lambda0^2/c; # free spectral range in m 自由光谱范围Q = 2000; # Q# get data from propagator simulation; # MODE文件中有drop
T = getresult("drop",'T');
Tdrop_propagator = -T.T; # 取负,变为正
lambda = c/T.f;
################################################################################################################
# Calculation of theory 理论计算
tau_11 = sqrt((lambda*pi/FSR/Q/2)^2+1)-(lambda*pi/FSR/Q/2);
tau_12 = sqrt(1-abs(tau_11)^2);# offset the phase for a particular peak wavelength
# 偏移特定峰值波长的相位
peak_lambda = 1550e-9;
phase_offset = -2i*pi*peak_lambda/FSR;Tdrop_theory = abs(tau_12)^4/abs(1-tau_11^2*exp(1i*2*pi*lambda/FSR+phase_offset))^2;
######################################################### create dataset
T_result = matrixdataset("T_result"); # 创建一个空矩阵数据集
T_result.addparameter("lambda",lambda); # 向数据集中添加参数
T_result.addattribute("Tdrop_theory",Tdrop_theory);# 向数据集中添加特性
T_result.addattribute("Tdrop_propagator",Tdrop_propagator);
T_result.addattribute("Tdrop_3DFDTD",Tdrop_3DFDTD);visualize(T_result);
1.15.2.1 loaddata
1.15.2.2 FSR的计算
FSR = 3200e9*lambda0^2/c;
一个不成熟的猜测:
1.9 中定义了Q为2000
1.15.2.3 matrixdataset
1.15.2.4 addparameter
1.15.2.5 addattribute
1.15.2.6 visualize
1.15.2.7 运行结果