本文提出并演示了一种以二维光栅为外耦合器的出瞳扩展器(EPE)系统的仿真方法,并给出了优化和公差分析的实例。
在此工作流程中,我们使用 Lumerical 构建光栅模型,并使用 RCWA 求解器模拟其响应。完整的EPE系统内置于OpticStudio中,并动态链接到Lumerical,以集成精确的光栅模型。外耦合器(OC)是一种具有复杂结构的二维光栅,其功能在局部进行了优化。最后,利用optiSLang通过修改光栅模型,对系统级优化进行整体控制,实现整个EPE系统所需的光学性能。
设计具有EPE的AR系统,可以增加眼盒的尺寸,这对系统级的优化来说是一个挑战,因为它需要大量的参数。一种解决方案是使用多个一维光栅来模拟瞳孔,有关详细信息,请参阅《Ansys Lumerical | 采用一维光栅的出瞳扩展器的优化》。在本文中,波导由Lumerical设计的两个光栅组成。内耦合器(IC)是一维斜光栅,外耦合器(OC)是由平行四边形柱组成的二维光栅。这些光栅通过动态链路在OpticStudio光学系统中使用。2D OC光栅被分成几个部分,其中的光栅参数部分可以分别进行调整。
然后,optiSLang 通过 Python 节点处理优化。optiSLang 的使用带来了很大的优势,例如能够在每个优化周期内执行预处理和后处理(例如,使用瞳孔函数对结果进行卷积)。此外,可以通过在 python 代码中定义函数来控制参数,而不是直接使用不同区域中的所有单个光栅特性,从而减少变量总数,从而缩短优化时间。该过程由 Sensitivity 模块启动,以便系统在运行优化时可以识别影响最大的参数。在文章中《Ansys Lumerical | 采用一维光栅的出瞳扩展器的优化》 ,可以学习如何优化一维光栅的最基本特性:高度、占空比和倾斜角度。在文章《Ansys Lumerical|带 1D-2D 光栅的出瞳扩展器》中,介绍了OpticStudio中2D光栅的设计,但由于仅在OpticStudio中执行,因此优化受到限制。在这项工作中,我们演示了如何使用 optiSlang 通过使用 7 个不同的变量来局部控制平行四边形柱子的形状来执行 2D 光栅的复杂优化。
本文分为 4 个主要步骤,如下所示:
第 1 步:使用 Lumerical 设置光学系统
在本节中,我们提出了将被优化的光学系统。我们可以在文章《Ansys Lumerical|带 1D-2D 光栅的出瞳扩展器》中找到同一类型的系统。请注意,在最初的设计中,能量不会分布在整个眼盒中,因为大部分光在与折叠光栅和外耦合器进行几次交互后被外耦合。
第 2 步:在 optiSLang 中设置优化
本文的目的是演示如何使用 optiSlang 来控制使用 Zemax 构建的光学系统的优化。本节介绍将用于优化的参数,以及用作优化目标的指标。
第 3 步:查看优化结果
优化已经设置,结果可用。在本节中,我们将提供有关 optiSlang 文件结构的信息,并解释如何可视化来自多次优化运行的结果。
第 4 步:使用所需设计更新系统
最后一部分是分步指南,用于从不同的运行中选择特定设计,并将相应的参数推送到光学系统。
第 1 步:使用 Zemax 和 Lumerical 设置光学系统
IC是一个倾斜的光栅,被认为已经过优化。该系统的核心是OC,它是一种二维光栅,由以六边形周期结构排列的平行四边形柱组成。
在OpticStudio内置的波导系统中,准直光束入射到IC光栅上,并通过波导传播到OC。二维光栅的六边形周期结构允许光束传播并分布到波导中的大区域,如下图所示。通过这种方式,光线通过OC传播,并在多个位置被提取到眼盒,有效地模拟了瞳孔。
探测器设置为直接在超频光栅的输出端捕获光线。优化的目标是增强朝向眼睛的辐照度图输出的均匀性,同时最大限度地提高总功率。
为了准备优化,OC光栅被分成几个区域,在这些区域中,光栅特性将独立优化。
第 2 步:在 optiSLang 中设置优化
3.在optiSLang中打开文件[[EPE_2D_out-coupler.opf]]以检查优化设置。
4.双击 Python 图标“EPE_2D_for_OptiSlang.py”以可视化代码。
这种优化不会只调整高度和占空比等最基本的参数,而是会使用2D光栅提供的七个参数作为自变量,这些参数将用作变量,因此可以优化柱子本身的形状,如下图所示。
为了进行优化,超频光栅被划分为几个区域,在这些区域内,光栅特性将独立优化。不是在每个区域单独设置所有这些参数,而是通过定义如下的参数函数来控制跨 OC 多个区域的光栅参数:
V代表这些变量(dC,dR,dL,θC,θR,θL,h)中的任意一个。n代表1,2,3,41,2,3,4中的任意一个数字,对应于 4 个角的部分。由这个方程可知,每个部分的 7 个光栅参数可以通过 4 个角的参数和wn和非线性功率p来进行一些加权来控制。请注意,对称性也被用于减少系统的大小和变量的数量。
在随附的文件夹中,准备了一个python文件EPE_2D_for_OptiSlang.py,用于将optiSLang链接到OpticStudio。有关如何设置此类文件的更多详细信息,请参阅文章《Ansys Lumerical | 采用一维光栅的出瞳扩展器的优化》的附录。
光栅参数按照预定义的优化算法(例如进化算法)通过optiSlang进行变化。不同的参数值被设置到python代码中,并将其向下传输到OpticStudio中的每个光栅部分。在这个过程中,Python代码在OpticStudio中将这些变量转换为确切的参数。只有当我们使用optiSLang而不是OpticStudio中的内置优化器来优化系统时,才能使用Python中定义的函数进行这种预数据处理。通过这种方式,optiSLang可以基于一些在OpticStudio UI中没有直接公开的虚拟或高级变量来优化系统。
设置好参数后,代码的其余部分包括调用OpticStudio来追踪光线并从探测器收集结果。使用 optiSLang 优化系统的另一个好处是后数据处理。在这个优化过程中,我们不直接优化眼盒上的辐照度分布。取而代之的是,我们首先使用瞳孔函数对辐照度分布进行卷积,然后根据这个卷积结果设置优化目标。在此示例中,优化目标是对比度、总功率和均匀性,定义如下:
Python 代码的最后一部分是绘制眼框处的辐照度结果,以及其卷积结果,然后导出图片。这对于用户直接在optiSLang后处理中检查每个优化系统的辐照度很有用。
第 3 步:查看优化结果
4.双击后处理 (1) 图标以可视化优化结果。
优化开始时,首先执行灵敏度分析以确定最重要的参数。使用此输入,进化算法运行并生成一系列结果。这些结果可以直接在帕累托图中的optiSLang中可视化。
下图中红色标记的设计称为帕累托前。帕累托前沿说明了多个目标之间的权衡,其中没有一个设计在性能方面主导另一个目标。这意味着所有这些设计都显示了多个标准(例如均匀性与总功率)的不同平衡。我们收集了 3 个结果并在下面显示它们。对于每个设计点,对应一对图,分别显示眼框内的对比度和均匀性。
第 4 步:使用所需设计更新系统
5.将“敏感度”块复制/粘贴到页面中,然后双击块标题“AMOP (1)”进行编辑。
6.在OpticsStudio中,点击编程选项卡中的“交互式扩展”按钮,然后运行OptiSlang仿真。
优化已经在附件中完成,打开文件时可以可视化优化结果。有时,我们可能想选择一个优化的设计,并在OpticStudio中进行研究。但是,optiSLang 仅将输入参数保存在表格中。我们不保留OpticStudio系统。为了在optiSLang中选择特定的设计,并将参数推送到OpticStudio的光学系统中,我们可以复制灵敏度模块,并将其起点定义为所需的设计。通过禁用动态采样,运行该模块将简单地从所选设计中读取参数值,并将相应的数据推送到OpticStudio中。然后,用户可以手动将新系统保存为其他名称。在optiSLang中获取具有任何设计设计的OpticStudio系统的另一种选择是在python代码中添加一个命令,以便在optiSLang中运行优化时直接将系统保存为.zmx文件(例如TheSystem.SaveAs('design_optimized.zmx)。请注意,第二种方法仅在我们在 optiSLang 中运行优化之前在 Python 中进行更改时才有效。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删