山东饰品行业网站制作,广州网站营销,用nodejs做的网站,网站搜索排名高怎么做附件下载
联系工作人员获取附件 本文演示了一种仿真方法#xff0c;并举例说明了使用一维光栅的出瞳扩张器#xff08;EPE#xff09;系统的优化示例。
在此工作流程中#xff0c;我们使用 Lumerical 构建光栅模型#xff0c;并使用 RCWA 求解器模拟其响应。完整的EPE系… 附件下载
联系工作人员获取附件 本文演示了一种仿真方法并举例说明了使用一维光栅的出瞳扩张器EPE系统的优化示例。
在此工作流程中我们使用 Lumerical 构建光栅模型并使用 RCWA 求解器模拟其响应。完整的EPE系统内置于OpticStudio中并与Lumerical动态链接以集成精确的光栅模型。最后利用optiSLang对光栅模型进行整体控制实现整个EPE系统所需的光学性能。 概述 设计具有EPE的AR系统可以增加眼盒的尺寸这对系统级的优化来说是一个挑战因为它需要大量的参数。在本文中波导由三个在Lumerical中设计的1D倾斜光栅组成。这些光栅分别用于 OpticStudio 光学系统中的内耦合器 IC、折叠光栅和外耦合器 OC通过动态链路。折叠光栅和超频光栅都被划分为几个区域在优化过程中分别调整光栅参数。
然后optiSLang 通过 Python 节点处理优化。optiSLang 的使用具有很大的优势例如能够在每个优化周期内执行预处理和后处理例如使用瞳孔函数对结果进行卷积。此外可以通过在 python 代码中定义函数来控制参数而不是直接使用不同区域中的所有单个光栅特性从而减少变量总数从而缩短优化时间。该过程由 Sensitivity 模块启动以便系统在运行优化时可以识别影响最大的参数。
本文分为以下 4 个主要步骤
第 1 步使用 Zemax 和 Lumerical 设置光学系统
在本节中我们将介绍要优化的光学系统。我们可以在文章中找到系统类型相同的增强现实光学系统 。请注意在原始设计中能量不会扩散到整个眼盒中因为大部分光在与折叠光栅和外耦合器进行几次交互后被外耦合。
第 2 步在 optiSLang 中设置优化
本文的目的是演示如何使用 optiSlang 来控制使用 Zemax 构建的光学系统的优化。本节介绍将用于优化的参数以及用作优化目标的指标。
第 3 步查看优化结果
优化已经设置结果可用。在本节中我们将提供有关 optiSlang 文件结构的信息并解释如何可视化来自多个优化运行的结果。
第 4 步使用所需设计更新系统
最后一部分是分步指南用于从不同的运行中选择特定设计并将相应的参数推送到光学系统。 运行和结果
第 1 步使用 Zemax 和 Lumerical 设置光学系统 在Zemax OpticStudio中打开文件EPE_1D_out-coupler.zar检查系统设置。
三个一维光栅以 Lumerical 形式构建为倾斜光栅但折叠光栅和 OC 光栅被初始化为倾斜角为 1° 的简单二元光栅。优化将使用倾斜角度、深度和占空比作为折叠和超频光栅的每个部分中的变量。 在OpticStudio内置的波导系统中准直光束入射到IC光栅上通过波导传播到折叠光栅然后将光线重定向到OC。 探测器设置为直接在超频光栅的输出端捕获光线。优化的目标是增强朝向眼睛的辐照度图输出的均匀性同时最大限度地提高总功率。
为了准备优化折叠和超频光栅被分成多个部分。这些部分的数量和形状可以根据用户的需要轻松定制。在本例中波导上的光栅区域形状为圆形耦合光栅、矩形耦合光栅和多边形折叠光栅。 第 2 步在 optiSLang 中设置优化 在 optiSLang 中打开 EPE_1D_optimization.opf 文件以检查优化设置。 双击 Python 图标“EPE_1D_for_OptiSlang.py”以可视化代码。
在附件中准备了一个python文件EPE_1D_for_OptiSlang.py用于将optiSLang链接到OpticStudio。
在本文中我们希望控制折叠光栅和超频的光栅高度、占空比和倾斜角度。不是在每个部分中单独设置所有这些参数而是使用定义如下的参数函数来控制给定光栅的多个区域的光栅参数 其中 i 是区域编号N 是光栅中的区域总数。 这些参数通过optiSlang按照预定义的优化算法例如进化算法进行变化。不同的参数值被设置到python代码中并将其向下传输到OpticStudio中的每个光栅部分。在这个过程中Python代码在OpticStudio中将这些变量转换为确切的参数。只有当我们使用optiSLang而不是OpticStudio中的内置优化器来优化系统时才能使用Python中定义的函数进行这种预数据处理。通过这种方式optiSLang可以基于一些在OpticStudio UI中没有直接公开的虚拟或高级变量来优化系统。
设置好参数后代码的其余部分包括调用OpticStudio来追踪光线并从探测器收集结果。使用 optiSLang 优化系统的另一个好处是后数据处理。在这个优化过程中我们不直接优化眼盒上的辐照度分布。取而代之的是我们首先使用瞳孔函数对辐照度分布进行卷积然后根据这个卷积结果设置优化目标。在此示例中优化目标是对比度、总功率和均匀性定义如下 Python 代码的最后一部分是绘制眼框处的辐照度结果以及其卷积结果然后导出图片。这对于用户直接在optiSLang后处理中检查每个优化系统的辐照度很有用。 第 3 步查看优化结果 双击“optiSLang 1”图标以可视化优化结果。
优化开始时首先执行灵敏度分析以确定最重要的参数。使用此输入进化算法运行并生成一系列结果。这些结果可以直接在帕累托图中的optiSLang中可视化。
下图中红色标记的设计称为帕累托前。帕累托前沿说明了多个目标之间的权衡其中没有一个设计在性能方面主导另一个目标。这意味着所有这些设计都显示了多个标准例如均匀性与总功率的不同平衡。我们收集了 2 个结果并在下面显示它们。对于每个设计点对应一对图分别显示眼框内的对比度和均匀性。 第 4 步使用所需设计更新系统
1.将“敏感度”块复制/粘贴到页面中然后双击块标题“敏感度 1”进行编辑。 a.在“动态采样”选项卡中取消选中“动态采样”选项 b.在“其他”选项卡中选中“隐藏评估设置”菜单中的“再次求解开始设计”选项 c.在“开始设计”选项卡中选择“从系统导入起始值”选项然后选择在帕累托图上标识的所需设 计例如#449。
2.在OpticsStudio中点击编程选项卡中的“交互式扩展”按钮然后运行OptiSlang仿真。
优化已经在附件中完成打开文件时可以可视化优化结果。有时我们可能想选择一个优化的设计并在OpticStudio中进行研究。但是optiSLang 仅将输入参数保存在表格中。我们不保留OpticStudio系统。为了在optiSLang中选择特定的设计并将参数推送到OpticStudio的光学系统中我们可以复制灵敏度模块并将其起点定义为所需的设计。通过禁用动态采样运行该模块将简单地从所选设计中读取参数值并将相应的数据推送到OpticStudio中。然后用户可以手动将新系统保存为其他名称。在optiSLang中获取具有任何设计外观设计的OpticStudio系统的另一种选择是在python代码中添加一个命令以便在optiSLang中运行优化时直接将系统保存为.zmx文件例如TheSystem.SaveAsdesign_optimized.zmx。请注意第二种方法仅在我们在 optiSLang 中运行优化之前在 Python 中进行更改时才有效。 重要模型设置 由于系统依赖于 Python 代码因此假定已安装 Python 以及脚本中调用的所有其他模块。 在optiSLang中运行任何内容之前确保“交互式扩展”在OpticStudio编程选项卡中处于活动状态非常重要。 使用参数更新模型 本例中的光学系统呈现的是具有两个一维光栅的 EPE这些光栅分为几个区域。由用户自定义光栅的形状、性质和位置。每个部分的形状和数量也可以直接在光学系统中定制。 变量和优化目标在设置 optiSLang 时定义并且可以自定义。 在本文中变量是使用函数间接定义的。在示例的 Python 代码中它的名称为“linsp”。任何自定义函数也可以由用户使用定义可以简单地在Python代码中更新。 进一步发展模型 在这个演示中我们只考虑中心场即通常入射到波导上的准直光束。为了进行更全面的优化可以添加更多视场以覆盖全视场的均匀性。 同样该系统仅针对单个波长而设计。根据系统设计优化可以包括多个波长。 一些辐照度分布看起来更均匀但会导致更高的对比度。可以通过修改 Python 代码来改进标准。 准备 Python 代码
Python 代码的基本结构可以通过转到 OpticStudio 编程 Python 交互式扩展来启动。还有一些模块被导入到样板中例如 numpy、scipy 和 matplotlib。 通过尝试读取变量OSL_WORKING_DIR我们可以知道这个Python代码是由optiSLang调用的还是手动执行的。在灵敏度分析或优化过程中optiSLang会自动改变定义的变量的值。另一方面如果我们直接运行这段Python代码而不使用optiSLang那么这些变量的值将是常数。
可以完成代码以将变量值链接到光学系统的参数跟踪光线从探测器收集数据并处理结果。例如在此示例中我们先使用瞳孔函数对检测器输出进行卷积然后再计算均匀性和对比度等关键参数。 在 optiSLang 代码中设置变量和优化目标
Python代码准备好后我们就可以开始在optiSLang中规划优化了。第一步是打开一个空文件将“求解器”向导拖动到场景中然后选择“Python 集成”以选择事先准备好的代码。
在求解器向导窗口中可以通过浏览 python 代码来选择变量。突出显示变量名称右键单击它然后选择“用作参数”。 参数设置好后我们应该测试 Python 代码是否可以成功运行。为此我们打开OpticStudio并打开交互式扩展模式如下所示。然后在求解器向导中我们可以单击向下箭头并选择“使用输入测试运行”如下所示。如果效果良好您应该会在OpticStudio中看到交互式扩展对话框指示“已连接”。 计算完成后可以按照与设置变量相同的方式选择响应参数。在此示例中我们右键单击 Python 代码中的变量“Uniformity”、“Contrast”和“TotalPower”然后选择“用作响应”。然后 3 个变量将显示在右侧列中。
向导的下一页将要求用户定义每个参数的参考值和范围。参考值将遵循我们在上一步中设置参数时的设置。范围由设计师决定没有标准答案。请注意此范围是绝对的。在优化过程中参数不会突破边界。这与我们通常对Zemax OpticStudio优化器的期望不同。
在向导的下一页中我们需要根据给定的响应设置优化标准。如下图所示我们只需将响应拖动到底部即可设置约束或目标。在这种情况下我们设定了 3 个目标最小化对比度、均匀性和最大化总功率。我们还可以为对比度和总功率设置 2 个额外的约束以避免一些极端情况即结果均匀而总功率极低或相反的情况。 可选设置并行计算
这不是绝对必要的但可以为 OptiSLang 设置并行计算以加快优化速度。如果用户拥有多个Lumerical FDTD求解器许可证则可以考虑这样做。要进行设置第一步是右键单击参数化系统模块选择“编辑”然后在窗口底部并行设置最大限制。将该数字设置为不大于 8 的任何数字或 Lumerical FDTD 求解器许可证总数的编号。
应直接在 Python 节点上执行相同的操作如下图所示。右键单击 Python 节点然后选择“编辑”。要设置详细信息我们需要首先单击右上角的汉堡包状标记选中“属性和占位符”然后单击“确定”按钮。然后我们可以将“MaxParallel”设置为所需的数字如下所示为了说明我们将其设置为 6。还需要在窗口底部将“最大并行”选项设置为所需的数字。如果先设置此参数则上面的 MaxParallel 也会自动更改但仔细检查它是否按预期设置会更安全。
最后建议勾选“重试执行”将“重试次数”设置为20将“尝试之间的延迟”设置为1000毫秒。此设置避免了 OptiSLang 尝试访问具有 1 个以上线程的同一 OpticStudio 实例的竞争情况。 请注意如果并行设置设置为大于 1 的数字则还需要打开相同数量的 OpticStudio 实例以便 OptiSLang 可以为每个实例创建一个线程。 灵敏度和优化设置
可以通过将向导拖动到参数化系统模块来设置灵敏度系统。参数和条件将被复制我们不需要再次设置它们。默认情况下它将建议 AMOP 模型我们可以保留此设置。AMOP 是一种迭代抽样方法它将设计采样到设计空间中直到达到目标标准设计的最大值或模型质量。
同样可以通过将优化向导的实例拖动到 AMOP 模块来设置优化。请注意当它询问优化方法时我们应该选择 Real Run因为这个系统永远不会有高质量的最佳预后元模型 MOP。MOP 是在 Most and Will 2008 中提出的它基于对最佳输入变量集和最合适的近似模型多项式或具有线性或二次基础的 MLS的搜索。对于优化算法建议使用进化算法该算法适用于非常不均匀和不连续的解空间。
一切设置完成后转到OpticStudio以激活编程选项卡中的“交互式扩展”然后单击OptiSlang中的“运行”按钮。