Ansys Lumerical | 带2D输出耦合器的出瞳扩展器的优化

图片

附件下载

联系工作人员获取附件

本文提出并演示了一种以二维光栅为外耦合器的出瞳扩展器(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 设置光学系统

  1. 在Zemax OpticStudio中打开文件EPE_2D_out-coupler.zprj,查看系统设置。

IC是一个倾斜的光栅,被认为已经过优化。该系统的核心是OC,它是一种二维光栅,由以六边形周期结构排列的平行四边形柱组成。

在OpticStudio内置的波导系统中,准直光束入射到IC光栅上,并通过波导传播到OC。二维光栅的六边形周期结构允许光束传播并分布到波导中的大区域,如下图所示。通过这种方式,光线通过OC传播,并在多个位置被提取到眼盒,有效地模拟了瞳孔。

图片

探测器设置为直接在超频光栅的输出端捕获光线。优化的目标是增强朝向眼睛的辐照度图输出的均匀性,同时最大限度地提高总功率。

为了准备优化,OC光栅被分成几个区域,在这些区域中,光栅特性将独立优化。

第 2 步:在 optiSLang 中设置优化

  1. 在optiSLang中打开文件[[EPE_2D_out-coupler.opf]]以检查优化设置。

  2. 双击 Python 图标“EPE_2D_for_OptiSlang.py”以可视化代码。

这种优化不会只调整高度和占空比等最基本的参数,而是会使用2D光栅提供的七个参数作为自变量,这些参数将用作变量,因此可以优化柱子本身的形状,如下图所示。

图片

为了进行优化,超频光栅被划分为几个区域,在这些区域内,光栅特性将独立优化。不是在每个区域单独设置所有这些参数,而是通过定义如下的参数函数来控制跨 OC 多个区域的光栅参数:

图片


V代表这些变量(dC,dR,dL,θC,θR,θL,h)中的任意一个。n代表1,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 步:查看优化结果

  1. 双击后处理 (1) 图标以可视化优化结果。

优化开始时,首先执行灵敏度分析以确定最重要的参数。使用此输入,进化算法运行并生成一系列结果。这些结果可以直接在帕累托图中的optiSLang中可视化。

下图中红色标记的设计称为帕累托前。帕累托前沿说明了多个目标之间的权衡,其中没有一个设计在性能方面主导另一个目标。这意味着所有这些设计都显示了多个标准(例如均匀性与总功率)的不同平衡。我们收集了 3 个结果并在下面显示它们。对于每个设计点,对应一对图,分别显示眼框内的对比度和均匀性。

图片

第 4 步:使用所需设计更新系统

1.将“敏感度”块复制/粘贴到页面中,然后双击块标题“AMOP (1)”进行编辑。

   a.在“适配”选项卡中,选中“显示高级设置”选项,然后选中“仅使用启动设计”。

   b.在“其他”选项卡中,选中“评估设置”菜单中的“再次求解开始设计”选项。

   c.在“开始设计”选项卡中,选择“从系统导入起始值”选项,然后选择在帕累托图上确定的所需设计(例如#986)。

2.在OpticsStudio中,点击编程选项卡中的“交互式扩展”按钮,然后运行OptiSlang仿真。

优化已经在附件中完成,打开文件时可以可视化优化结果。有时,我们可能想选择一个优化的设计,并在OpticStudio中进行研究。但是,optiSLang 仅将输入参数保存在表格中。我们不保留OpticStudio系统。为了在optiSLang中选择特定的设计,并将参数推送到OpticStudio的光学系统中,我们可以复制灵敏度模块,并将其起点定义为所需的设计。通过禁用动态采样,运行该模块将简单地从所选设计中读取参数值,并将相应的数据推送到OpticStudio中。然后,用户可以手动将新系统保存为其他名称。在optiSLang中获取具有任何设计设计的OpticStudio系统的另一种选择是在python代码中添加一个命令,以便在optiSLang中运行优化时直接将系统保存为.zmx文件(例如TheSystem.SaveAs('design_optimized.zmx)。请注意,第二种方法仅在我们在 optiSLang 中运行优化之前在 Python 中进行更改时才有效。

重要模型设置

  • 由于系统依赖于 Python 代码,因此假定已安装 Python 以及脚本中调用的所有其他模块。

  • 确保为所有光栅表面选择了正确版本的动态链接。

  • 在optiSLang中运行任何内容之前,确保“交互式扩展”在OpticStudio(编程选项卡)中处于活动状态非常重要。

  • 在本文中,我们演示了optiSlang可用于处理具有许多参数的复杂优化问题,但需要注意的是,在可能的情况下,依靠系统的对称性始终是简化优化的最佳方法。

使用参数更新模型

  • 本例中的光学系统呈现的是具有两个一维光栅的 EPE,这些光栅分为几个部分。由用户自定义光栅的形状、性质和位置。这些部分的形状和数量也可以直接在光学系统中定制。

  • 变量和优化目标在设置 optiSLang 时定义,并且可以自定义。有关如何在optiSLang中设置优化模型的更多详细信息,请参阅文章《Ansys Lumerical | 采用一维光栅的出瞳扩展器的优化》一文的附录。

  • 在本文中,变量是使用函数间接定义的。在示例的 Python 代码中,它的名称为“linsp”。任何自定义函数也可以由用户使用,定义可以简单地在Python代码中更新。

进一步发展模型

  • 在这个演示中,我们只考虑中心场,即通常入射到波导上的准直光束。为了进行更全面的优化,可以添加更多视场以覆盖全视场的均匀性。

  • 同样,该系统仅针对单个波长而设计。根据系统设计,优化可以包括多个波长。

  • 一些辐照度分布看起来更均匀,但会导致更高的对比度。可以通过修改 Python 代码来改进标准。

  • 另一个需要优化的维度是晶格角。在所展示的系统中,柱子以六边形结构排列,但Lumerical支持不同的排列,可以带来更多的可能性。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/578739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu18设置开机自启动

项目需求:机器人开机上电后工控机首先运行机械臂控制代码,再运行算法代码 1.终端执行以下代码 gnome-session-properties 2.设置开机自启动选项 在弹出界面点击添加,名称随便填,命令填入要启动的脚本,注释随便填。 …

【CAD二次开发】如何通过lsp实现dll程序的自动加载

通常我们在收到一个dll格式的CAD插件的时候会通过NETLOAD手动加载,这个缺点是每次重启CAD后都需要再加载dll插件; 有没有什么方法可以实现dll插件的自动加载呢; 答案是有,下面我们分享几种简单的方法实现dll的自动加载; 方法1&…

nginx: [error] open() “/var/run/nginx/nginx.pid“ failed (2: No such file or directory)

该错误消息通常表示 Nginx 在启动过程中无法找到指定路径的日志文件或进程号文件。 我这边是因为服务器断电,导致该问题 这个问题可能有几种原因和解决方法: 1. 确保 Nginx 配置文件中的日志路径正确。在 Nginx 配置文件中查找 error_log 和 pid 配置指…

密码学学习笔记(二十三):哈希函数的安全性质:抗碰撞性,抗第一原象性和抗第二原象性

在密码学中,哈希函数是一种将任意长度的数据映射到固定长度输出的函数,这个输出通常称为哈希值。理想的哈希函数需要具备几个重要的安全性质,以确保数据的完整性和验证数据的来源。这些性质包括抗碰撞性、抗第一原象性和抗第二原象性。 抗碰…

MidJourney笔记(9)-daily_theme-docs-describe

/daily_theme 切换 #daily-theme 频道更新的通知。 但我发现在对话框那里,是没有这个命令的: 但官网是有介绍,不知道是不是版本问题还是这个命令已经无效。 但后来,我发现这个命令是要在Midjourney服务对话框那里才有,在我们后面添加的Mid

测试C#使用AForge从摄像头获取图片

百度“C# 摄像头”关键词,从搜索结果来看,使用OpenCV、AForge、window动态链接库获取摄像头数据的居多,本文学习基于Aforge.net连接摄像头并从摄像头获取图片的基本方法。   AForge相关包(尤其是相关的控件)主要针对…

计算机网络简述

前言 计算机网路是一个很庞大的话题。在此我仅对其基础概述以及简单应用进行陈述。后续或有补充以形成完善的计算机网络知识体系。 一.计算机网络的定义 根据百度词条的描述,计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过…

智能优化算法应用:基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.减法平均算法4.实验参数设定5.算法结果6.…

OKCC语音机器人的人机耦合来啦

目前市场上语音机器人的外呼形式基本就分为三种,一种纯AI外呼,第二种也是目前主流的AI外呼转人工。那么第三种也可能是未来的一种趋势,人机耦合,或者也叫人机协同。 那么什么是人机耦合呢? 人机耦合是为真人坐席创造相…

跟着LearnOpenGL学习11--材质

文章目录 一、材质二、设置材质三、光的属性四、不同的光源颜色 一、材质 在现实世界里,每个物体会对光产生不同的反应。 比如,钢制物体看起来通常会比陶土花瓶更闪闪发光,一个木头箱子也不会与一个钢制箱子反射同样程度的光。 有些物体反…

K8S的二进制部署

K8S的源码包部署 搭建准备: k8smaster01:20.0.0.32 kube-apiserver kube-controller-manager kube-scheduler etcdk8smaster02:20.0.0.33 kube-apiserver kube-controller-manager kube-scheduler node节点01:20.0.0.34 …

二分查找及其复杂的计算

(一)二分查找及其实现 二分查找,也称为折半查找,是一种高效的搜索算法,用于在有序数组(或有序列表)中查找特定元素的位置。 二分查找的基本思想是将待查找的区间不断地二分,然后确…

支付宝沙箱环境配置结合内网穿透实现远程调试Java SDK接口

文章目录 1.测试环境2.本地配置2. 内网穿透2.1 下载安装cpolar内网穿透2.2 创建隧道3. 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名5. 使用固定二级子域名进行访问 1.测试环境 MavenSpring bootJdk 1.8 2.本地配置 获取支付宝支付Java SDK,…

Jmeter 压测 —— 非GUI模式执行实例!

1、上传脚本 把在Windows下调试好的脚本上传的Linux系统/home目录下。 注意:只留测试脚本,屏蔽其它监控组件,比如:查看结果树、聚合报告、监听器等。 2、执行脚本 ①输入命令执行脚本 jmeter -n -t case.jmx -l case.jtl -n&…

神经网络:模型部署

【一】模型压缩的必要性与可行性? 模型压缩是指对算法模型进行精简,进而得到一个轻量且性能相当的小模型,压缩后的模型具有更小的结构和更少的参数,可以有效降低计算和存储开销,便于部署在端侧设备中。 随着AI技术的…

多组件卡片式问答引擎

#本篇文章联合同花顺人工智能领域开发者严同学创作 1.简介 为了满足用户个性化需求以及精细化运营,越来越多的企业推出多组件式的卡片问答,这种回答方式不会千篇一律,能够更好地为客户提供服务,帮助客户解决问题。 使用这种问答…

JAVA中的栈和堆

JAVA在程序运行时,在内存中划分5片空间进行数据的存储。分别是:1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。 基本,栈stack和堆heap这两个概念很重要,不了解清楚&…

从零实现一套低代码(保姆级教程) --- 【6】在项目中使用redux状态管理

摘要 在上一篇文章中的末尾,我们也完成了Input组件的属性面板配置。现在我们的低代码项目已经小有成就了。但是后面的内容还是不少的。 如果你是第一次看到这篇文章,那么请移步到第一节: 从零实现一套低代码(保姆级教程&#xf…

防雷接地设备综合应用方案

防雷接地设备是一种用于保护建筑物、设备和人员免受雷电危害的设备。 防雷接地设备主要包括以下几种: 防雷针:防雷针是一种用于吸引雷电并将其导入地面的金属棒,通常安装在建筑物的最高点或其他易受雷击的位置。 防雷带:防雷带…

【论文笔记】BiFormer: Vision Transformer with Bi-Level Routing Attention

论文地址:BiFormer: Vision Transformer with Bi-Level Routing Attention 代码地址:https://github.com/rayleizhu/BiFormer vision transformer中Attention是极其重要的模块,但是它有着非常大的缺点:计算量太大。 BiFormer提…