这个 2D FDTD 示例展示了如何获得光栅耦合器的宽带特性,并将结果与实验数据进行比较。 此外,该应用示例演示了多频波束计算的正确使用和优势,并将结果与标准单频波束计算进行了比较。 要更好地了解单频和多频波束计算之间的差异,请访问此页面。
一、设置
1.1 光栅耦合器结构
模拟的 SOI 结构针对 1310nm 处的最大耦合效率进行了优化,它由放置在 700nm 厚的 SiO2 层上的 200nm 厚的硅波导组成。 然后波导被 700nm 厚的 SiO2 包层覆盖,如图 2 所示。光栅本身的占空比为 50%,光栅周期为 500nm,凹槽的蚀刻深度为 30nm,如图 3 所示。
1.1.1 光栅耦合器结构组参数设置
该结构组仅包括:waveguide部分(输入波导、输出波导、底层),不包括Substrate,BOX,Cladding
index:waveguide部分折射率,即Si折射率,3.4993
targtet lengtth:光栅部分目标长度,实际长度将限制为整数个周期
h total:光栅总厚度
etch depth:刻蚀深度
duty cycle:占空比
ptich:光栅周期
input length:输入波导长度
output length:输出波导长度
其组成结构如下:
1.埋置的氧化硅(BOX)厚度必须高于700 nm(分别为1µm),以确保在波长为1.3µm(分别为1.55µm)时,可忽略的光泄漏
2.所使用的波长λ=1.3µm和TE偏振对于系统紧凑性是有利的选择。
打开其折射率监视器,观察其折射率分布
注:
1.因为结构组使用了参考坐标系,将y的参考坐标设置成了-1.3um(相当于从BOX的上表面开始,建立结构)。因此有关input length、output length、lower layer的y min都是从0开始的。
红点表示坐标原点所在地(相对于结构组的参考系来说;但此处是x=0的位置,y=-1.3的位置)
2.包层(cladding)是从BOX上表面(即-1.3um开始)的,这是因为要将waveguide结构完全包住,从右侧带圈的序号也可以看出,有意将包层的mesh order设置的较低(为5),为的是能够和光栅结构完整贴合。0.7+0.2=-0.4-(-1.3)(um)
1.1.2 耦合器设置脚本
1.1.2.1 ceil
1.1.2.2 案例中设置的target length的确是50um,光栅周期pitch也是0.5um,按程序n_periods = ceil(%target length%/pitch); 执行后本应该为50/0.5=100,但通过输出显示为101,即101个周期。推测还是为ceil函数向上取整的缘故(但其实100已经是整数了,此处存疑)。因为光栅部分的长度就是:101×0.5+0.5/2(需要加半个周期的刻蚀部分)=50.75(lower layer的长度)
deleteall;
####################################################
# Grating coupler
# The grating coupler deflects guided modes out of the waveguide.光栅耦合器将导模偏转出波导
#
# Input properties
# target length: the actual length will be ceiled to an integer number of periods
# 目标长度:实际长度将限制为整数个周期
#
# Copyright Lumerical Solutions, Inc.
#####################################################
n_periods = ceil(%target length%/pitch); # 强制向上舍入数字
fill_width = pitch*%duty cycle%;
etch_width = pitch*(1-%duty cycle%);
L = n_periods*pitch + etch_width;
if(%etch depth% > %h total%) {
%etch depth% = %h total%;
}
# 如果刻蚀深度设置的超过光栅总厚度,那就将刻蚀深度设置为总厚度
# input waveguide
addrect;
set("name","input waveguide");
set("x min",-%input length%);
set("x max",0);
set("y min",0);
set("y max",%h total%);
# lower layer below grating
if(%etch depth% < %h total%) {
addrect;
set("name","lower layer");
set("x min",0);
set("x max",L);
set("y min",0);
set("y max",%h total%-%etch depth%);
}
# output waveguide
addrect;
set("name","output waveguide");
set("x min",L);
set("x max",L+%output length%);
set("y min",0);
set("y max",%h total%);
#add grating
for(i=1:n_periods){
addrect;
set("name","post");
set("x min",pitch*(i-1)+etch_width);
set("x max",pitch*i);
set("y min",%h total%-%etch depth%);
set("y max",%h total%);
}
# set material and z span for all structures
selectall; # 选中当前群组范围内所有实体对象
set("material",material);
if(get("material")==")
{ set("index",index); }
# 从当前选择的实体对象(即结构组)获取所需的属性值
set("z",0);
set("z span",1e-6);
1.1.3 仿真区域的设置
由设置可见,边界条件均为PML。能够吸收所有的入射光,而使反射为零。mesh设置为包括waveguide结构。
1.2 高斯光束设置
代表激光束的正确光源设置与优化光栅耦合器结构一样重要,以实现最大的耦合效率。 特别是,我们需要确定最佳入射角 θin、激光束腰半径 ω0 以及输入激光束中心与光栅耦合器末端(波导起点)之间的距离 d。
最佳入射角可以通过扫描一系列角度并记录在 1310nm(常用于光通信的波段) 的优化单频下耦合到波导中的功率来获得。 为此,请打开 Broadband Grating Coupler.fsp 并启动“Sweep Injection Angle”扫描。 扫描完成后,您可以可视化“耦合功率”扫描结果,并观察到最大耦合功率达到了 13.9 度左右,这与论文中的实验结果非常吻合。
最佳束腰直径可由下式计算:
其中 Lc 是光栅特征长度。 论文中计算的 Lc 为 13 +/-1um,这为我们提供了 16 到 18.6 um 之间的最佳束腰半径。 如何估计最佳束腰的替代方法是使用 MODE,特别是 FDE 求解器。 为此,只需将模拟结构复制到 MODE 或使用相关文件 Broadband Grating Coupler.lms 并搜索通过以下等式获得的有效折射率 2.86 附近的模式:
其中
p 是衍射级,Λ是光栅周期,kin 是入射波矢量的模(大小)。
公示的解释:
该公式是布拉格条件。推导如下:
有效折射率 2.86 的由来:
(p取1的原因,参考文献也有提到,是因为要得到的就是+1衍射级)
有限差分本征模式求解器(FDE)可找到并计算光栅耦合器模式(图 4)在 1310nm 处的空间分布,让我们更好地了解最佳光束分布。 当我们需要确定高斯光束属性时,此信息在 FDTD 模拟设置期间很有帮助。 请注意,由于我们使用的是全矢量光束轮廓(薄透镜选项),因此光束腰由数值孔径决定。 与特定光束 NA 相关的光束轮廓可以通过“可视化光束数据”按钮显示(图 5)。 此外,光束选项选项卡允许我们定义距焦点的距离并将光束腰定位在光栅耦合器平面附近,而不是在源注入平面上。
图 4:1310nm 的光栅耦合器模式分布
构建 FDTD 模拟所需的最后一个缺失参数是光束中心和光栅末端之间的最佳距离 d。 该距离由简单的关系 d=Lc 给出,介于 12 和 14um 之间。 该属性在我们的模拟中由相对于光栅耦合结构的源位置定义。
1.2.1 高斯光束(部分北荣转载自Thorlabs索雷博)
1.2.1.1 光束原理及参数解释
高斯光束的传输特性,是在远处沿传播方向成特定角度扩散,该角度即是光束的远场发散角,也就是一对渐近线的夹角,它与波长成正比,与其束腰半径成反比,计算式是:2波长/ pi束腰半径),故而,束腰半径越小,光斑发散越快;束腰半径越大,光斑发散越慢。
1.2.1.2 光束设置
标量近似
若焦平面(focal plane)位于注射平面(injection plane)的前面,则腰围距离(distance from waist)可以设置为负数,以便指定汇聚光束。或者可以将其设置为正值,以指定随着光束从注入平面传播而发散的光束。
薄透镜法
薄透镜法仅适用于高斯型光束,不适用于柯西-洛伦兹光束(Cauthy-Lorentz)。
薄透镜方法注入全矢量光束(fully-vectorial beam),其中光束轮廓是通过以不同角度传播的平面波之和(所以可以设置number of plane waves)来计算的,表示从给定数值孔径的透镜得到的光束,以及透镜被照明部分的入射直径与透镜总直径之间的给定的比值。
1.2.2 MODE Solutions的仿真
1.2.2.1 仿真区域的边界条件(链接)
在大多数模拟中,器件基板和其他周围材料远远超出模拟边缘。因此,BC 最明显的选择是 PML,它将在模拟边界处吸收场。 Metal BC 似乎是一个糟糕的选择,因为真正的设备没有被金属盒子包围。尽管有这种最初的印象,我们通常建议从 Metal BC 开始。一些模拟最终可能需要 PML,但很大一部分可以完全使用金属边界完成。
如果模拟边缘的模态场非常小,那么 BC 的选择基本上是无关紧要的(当边界场为零时,BC 无关紧要)。在这种情况下,我们可以选择数值上最有效的 BC,而不是物理上最正确的 BC。与 PML 边界相比,金属边界具有以下优势:
1.Metal BC 的模拟速度比 PML 快。
2.PML 边界可以引入非物理的“PML”模式。
3.PML 边界可以在其他无损系统中引入非常少量的增益或损失。
只要模拟区域边缘的模态场非常小,金属边界条件通常是最佳选择。它们将给出与 PML 相同的结果,但模拟不会遇到上述问题。
确实延伸到模拟区域边缘的模式需要 PML 边界。这最有可能发生在不完全局限于结构并具有一些辐射损耗的模式中。例如,在研究弯曲波导时,应该使用 PML,因为弯曲会导致辐射损耗。
1.2.2.2 计算模式
TE polarization fraction是指TE模式纯粹度。若该值为100,则表示纯TE模式,若该值为0,则表示TM模式。如列表第三个,就为纯TE模式。
1.3 监视器设置
在本文中,耦合功率间接测量为:
我们通过在光栅耦合器下方和上方放置功率传输监视器来复制这种方法,以测量反射和传输,该反射和传输随后在后处理期间从注入的功率中减去。 除了这种方法,我们还使用了直接测量方法,在波导末端放置了一个功率传输监视器,以便直接测量耦合到波导中的功率。 请注意,模态场超出了波导接口,因此监视器也必须扩展,以便测量 100% 的耦合功率。 模态场的扩展可以通过模态扩展监视器获得。
1.3.1 监视器
1.3.1.1 XY_plane
因为source是TE模(polarization angle设置为90度),电场振动方向垂直于入射面,即为Ez方向有值,其他方向无取值。
二、结果和讨论
2.1 作为波长函数的耦合功率
为了绘制耦合功率的波长依赖性,有必要运行带角度注入的宽带模拟。 这种类型的模拟可以从使用多频波束计算中受益,我们通过比较开启和关闭多频波束计算的两个模拟的结果来证明这一点。 此外,我们将研究耦合功率的间接测量和直接测量之间的差异。 要运行模拟,首先打开Broadband Grating Coupler.fsp,然后运行Broadband Grating Coupler.lsf。 模拟完成后将生成以下图。
图 6:模拟耦合功率作为 1280 - 1340 nm 之间波长的函数
θ=13.9 度时的最大模拟耦合功率为 55.7%,与测量的最大值 56% 完全一致。 此外,与以单频计算的光束源相比,多频光束计算的精度更高,在 FWHM 处带宽窄 10%。 请注意,在 1310nm 处的结果几乎相同。 这是以 1310nm 为中心的单频模拟的结果,因此,计算出的光束在该特定波长处是准确的。
耦合到波导中的功率的直接测量与使用反射和传输功率的间接计算的比较显示几乎相同的结果。 因此,使用直接方法似乎更方便,因为它只需要一个显示器,无需后期处理。
2.2 作为注入角函数的耦合功率
为了模拟作为注入角函数的耦合功率,我们使用参数扫描来收集预定义波长范围内的耦合功率值。 为此,只需运行脚本 Broadband Grating Coupler Injection Angle Sweep.lsf。 该脚本将模拟设置为单频模式,因为我们有兴趣在 1310nm 的优化频率下获得此特性。 此外,单频计算的仿真速度稍快,这很方便,因为我们需要在参数扫描期间运行多个仿真。 最后,脚本将收集扫描结果并绘制图 7 所示的特性。结果再次显示,在 13.9 度时的最大耦合效率为 55.7%,这与测量值非常吻合。
图 7:模拟耦合功率与 1310nm 处 11 - 18 度之间的注入角函数
三、Scripts脚本学习
3.1 Broadband Grating Coupler Injection Angle Sweep.lsf
3.1.1 clear
3.1.2 layoutmode
3.1.3 switchtolayout
3.1.4 shiftselect
用于选择多个实体对象
3.1.6 预定义的sweep
由截图可见,参数是光源的入射角,angle theta,扫描结果是Output的传输功率T
3.1.7 getsweepresult
3.1.8 plotxy
3.1.9 CoupledPower取绝对值的原因
由于方向问题,Output的T结果为负数。
3.1.10 multifrequency beam calculation的语句
在光源设置中,没找到该属性选项。通过运行程序发现如下的警告信息:
“多频光束计算”已弃用,请改用“频率相关配置文件(frequency dependent profile)”
clear;
#Set wavelength at which to calculated the coupling efficiency characteristic
##设置计算耦合效率特性的波长
Wavelength=1310e-9;
#Check if the simulation is in layout mode
runsim=layoutmode;
if (runsim==0) {
switchtolayout;
}
select("source");
set("wavelength start",Wavelength);
set("wavelength stop",Wavelength);
set("multifrequency beam calculation",0);#暂时没找到这个设置在哪里
select("R");
shiftselect("T");#连同上面的R一起选择对象
shiftselect("Output");
set("wavelength center",Wavelength);
set("wavelength span",0);
set("frequency points",1);
#Run the predefined sweep
runsweep("Sweep Injection Angle");
#Collect and plot the sweep results
CoupledPower=getsweepresult("Sweep Injection Angle","Coupled power");#返回扫描的数据集
Theta=CoupledPower.Theta;#.用来检索数据集的参数和属性
CoupledPower=abs(CoupledPower.T);
plotxy(abs(Theta),CoupledPower*100,"Theta [Deg]","Coupled Power [%]","Coupled power as function of injection angle at "+num2str(Wavelength)+" nm");
对于许多模拟,默认方法是合适的,因为源配置文件在模拟带宽上的变化可以忽略不计。但是,在某些情况下,应使用与频率相关的配置文件:
1.光束源(高斯透镜或薄透镜),其中光源轮廓随仿真带宽而发生重大变化。随着光束NA的增加,光束轮廓与频率的关系越来越大。
2.模式源或端口,其中模式配置文件随带宽发生较大变化。
3.需要与频率无关的源角度的波束源。注入角度的频率依赖性随着标称源角的增加而增加。
4.平面波以需要与频率无关的源角的角度注入。请注意,这将是一个衍射平面波,因此请考虑将BFAST作为周期性结构的替代方案。
5.将平面波注入到色散介质中,其中→E和→H随频率发生重大变化。
3.2 Broadband Grating Coupler
clear; # 清楚工作区所有变量
#Define the source bandwidth
CenterWavelength=1310e-9;
Span=60e-9;
#Plot Bandwidth and resolution 带宽和分辨率
PlotCenterWavelength=1310e-9;
PlotSpan=60e-9;
FrequencyPoints=61;# 一个波长一个点
#Check if the simulation is in layout mode
runsim=layoutmode;
if (runsim==0) {
switchtolayout;
}
#Run simulation with multifrequency beam calculation on
select("source");
set("center wavelength",CenterWavelength);
set("wavelength span",Span);
set("multifrequency beam calculation",1);# 开启该选项,打上勾
select("R");
shiftselect("T");
shiftselect("Output");
set("wavelength center",PlotCenterWavelength);
set("wavelength span",PlotSpan);
set("frequency points",FrequencyPoints);
run;
#Get direct measurement of the power coupled into the waveguide#直接测量耦合到波导中的功率
OUTmulti=getresult("Output","T");
w=OUTmulti.lambda;#提取数据集中的波长
OUTmulti=OUTmulti.T;
#Get reflected and transmitted power in order to calculate the coupled power
#(Indirect method used in the reference papper)
#获取反射和传输功率以计算耦合功率
#(参考论文中使用的间接方法)
Tmulti=getresult("T","T");
Tmulti=Tmulti.T;
Rmulti=getresult("R","T");
Rmulti=Rmulti.T;
CoupledTmultiCalc=1-abs(Tmulti)-abs(Rmulti);
#Switch to single frequency beam calculation and run the simulation once again
#切换到单频波束计算并再次运行仿真
switchtolayout;
select("source");
set("multifrequency beam calculation",0);
run;
#Get direct measurement of the power coupled into the waveguide
#直接测量耦合到波导中的功率
OUTsingle=getresult("Output","T");
OUTsingle=OUTsingle.T;
#Get reflected and transmitted power in order to calculate the coupled power
#(Indirect method used in the reference papper)
#获取反射和传输功率以计算耦合功率
#(参考论文中使用的间接方法)
Tsingle=getresult("T","T");
Tsingle=Tsingle.T;
Rsingle=getresult("R","T");
Rsingle=Rsingle.T;
CoupledTsingleCalc=1-abs(Tsingle)-abs(Rsingle);
#Plot the coupled power as function of wavelength and compare
#the single vs multi frequency calculation results
#and the direct vs indirect method
#绘制作为波长函数的耦合功率并进行比较
#单频vs多频计算结果
#以及直接与间接方法
plot(w*1e9,abs(OUTmulti*100),abs(OUTsingle*100),CoupledTmultiCalc*100,CoupledTsingleCalc*100,"Wavelength[nm]","Coupled power [%]");
legend("Broadband Direct","Single Direct","Broadband Calc","Single Calc");
参考文献:Vivien et al., “Light injection in SOI microwaveguides using high-efficiency grating couplers,” in Journal of Lightwave Technology, vol. 24, no. 10, pp. 3810-3815, Oct. 2006, doi: 10.1109/JLT.2006.878060.