Ansys Zemax|如何有效地模拟散射

附件下载

联系工作人员获取附件

概要

OpticStudio中,有两个用来提升散射模拟效率的工具:Scatter To List以及Importance Sampling。在这篇文章中,我们详细讨论了这两个工具,并且以一个杂散光分析为例示范了如何使用Importance Sampling。

如何有效的模拟散射

对于绝大多数光学系统进行散射模拟是非常重要的,尤其在杂散光分析中散射模拟更是关键所在。Zemax OpticStudio有很多内建散射模型,这些模型支持使用者输入任何散射分布。在非序列光线追迹中,需要使用非常多的光线射向模拟物件才能精确而适当的模拟散射分布。特别是当观察目标相对于散射点占据的立体角很小时,这个问题会更加严重。最简单直接的办法就是增加入射或是散射的光线数量使更多的光线到达要观察目标。但是追迹更多光线会需要更多的时间,因此模拟散射就变的非常费时。

在OpticStudio中,我们可以使用“Scatter To List”来改进散射模拟效率,此设定强制系统只追迹那些散射到指定物件的光线而忽略其他光线。不过这并不是说光线一定会散射到指定物件上,因此对于大量光线模拟这种方法并不能改善太多。另一个OpticStudio中的“Importance Sampling”设定,则可以大幅地增进散射模拟的效率。这两个工具都可以在Object Properties的Scatter To标签中找到。

图片

Importance Sampling原理上与Scatter To List大不相同。如果我们在Importance Sampling中加入一个物件,OpticStudio则会以这个物件为中心画出一个虚拟的球体,然后所有的散射光将只会往这个球体过去。OpticStudio还会考虑散射分布,调整这些光线的权重,让被照物体的散射光通量合理分布,这可以让信噪比提升。当然,使用者可以自定义目标的虚拟球体的大小,以决定散射光要应用的立体角大小。

在下面的系统中,一道光束入射到一个Lambertian散射的平面上,可以看到散射光线形成一个半球。即使每条入射光线有多达10条散射光线,还是只有一小部分的散射光才能击中探测器。

图片

但是如果我们开启Importance Sampling,如下图,就会有大量的光线到达探测器。

图片

使用Importance Sampling时有几个重要的特性须先了解。首先,散射光线的目标并不是物件本身,而是以该物件中心为圆心所形成的一个虚拟球体。此外,这个目标球体应该要比物件本身稍微大,以确保散射光线可以填满整个物体。

设定目标球体时,有一个Limit参数主要用来确保散射面的BSDF分布在目标立体角中不会剧烈变化。这个参数必须设定,与OpticStudio分配这些散射光能量的方式有关。就像我们前面提到的,光线的散射方向与BSDF无关,因此这些光线的光通量必须要能适当调整。每个由Importance Sampling设定产生的散射光线都会有相同数量的光通量。OpticStudio会把立体角内的BSDF平均分配到每一条散射光线。下图的散射函数图中,我们在Magnitude of Scatter Vector区域中标出一个特定区段(垂直的红线),并显示OpticStudio会如何选取一个概略的BSDF值(水平的红线)来分配给所有的Importance Sampling散射光线。

图片

如果BSDF在所选立体角内有很明显的变化,光通量在目标球体上的分布就会不正确。

下图是一般散射与Importance Sampling的比较表。图表系统中,共有10万条光线(Analysis Rays),而散射的目标物体相对于散射点占据0.2球面度的立体角,图表中纵轴显示的则是有击中目标物体的数量。

图片

可以看到开启Importance Sampling时,击中探测器的光线数量远大于一般散射,并仅耗费相当于追踪一条散射光线的时间。

模拟望远镜中的散射光

太空望远镜是最常被提到使用杂散光分析的光学系统。原因是目标信号(外太空的星体)通常非常弱,任何杂散光造成的无用信号会掩盖目标信号。本文范例中,我们将会测量在望远镜镜筒内散射,并且最终击中探测器的杂散光。

图片

这个系统为Maksutov望远镜,内建有一个离轴的光源,用来模拟系统杂光的来源。此光源的光线先进入望远镜,然后在镜筒的表面上反射/散射。请注意:在光学元件的表面上也可能会有一些散射,但我们为了演示功能,只考虑镜筒造成的杂散光。我们把望远镜筒的内侧表面设为Lambertian散射特性,散射比例为100%。假设这个镜筒消除了镜面反射(Specular Reflection)。如果我们执行光线追迹,Detector Viewer就会给出下图。

图片

探测器显示大约有4%的光线(0.6%的能量)真正到达探测器上。因此要精准的测量散射光在探测器上的能量,我们会需要尽可能多的光线击中探测器。

现在我们使用Importance Sampling,在第二个校正镜上设定一个目标球体;我们无法使用探测器本身,因为它并没有直接的从任何散射点接收到光线。请注意:Size栏位定义目标球体的半径。我们故意把这个参数设的比主镜的孔径大一点,以确保可以包含到所有可能击中探测器的路径。Limit栏位保持预设值。

图片

再一次光线追迹后,我们可以看到如下的探测器统计结果。

图片

通过使用Importance Sampling,我们可以让探测器上的光线提高到约两倍,并且可以更清楚看到散射的分布状况。在探测器上的总能量也明显增加了,这代表之前的取样光线数不够。

现在我们测量到达探测器的能量,我们可以决定是否需要进一步的测量分析以消除杂散光。如果信噪比仍然很高,高于我们的需求,我们也许就可以省下在望远镜内放置挡板的时间以及成本。如果需要更进一步的降低杂散光信号,我们可能就需要分析如何放置挡板,以让信噪比符合要求。

总结

OpticStudio中的Importance Sampling功能增强了散射效率。因其限制让杂散光永远只往目标物体射去,就可以让该物件上能量的信噪比提升。

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

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

相关文章

简单的jar包重打包Failed to get nested archive for entry 报错处理

简单的jar包重打包Failed to get nested archive for entry 报错处理 1. 需求 公司有一个后端项目,项目已经打好了jar包,现在我们发现jar包依赖的子包有问题,其中的一个mybatis xml文件查询数据不正确,我们需要替换项目&#xf…

批量将labelme的json文件转为png图片查看

文章目录 前提修改 l a b e l m e labelme labelme然后你就可以在这个环境下用代码批量修改了 前提 安装anaconda或者miniconda安装labelme 修改 l a b e l m e labelme labelme 查看labelme所处环境的路径:conda info --envs 比如我的是在py39_torch里面 修改la…

秋招力扣Hot100刷题总结——链表

1. 反转链表题目连接 题目要求:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 代码及思路 遍历所有节点,将所有节点的next指向前一个节点由于要改变节点的next指向,而链表是单向的,因此需要…

【Mac】植物大战僵尸杂交版 for Mac(经典策略塔防游戏)游戏介绍

游戏介绍 植物大战僵尸杂交版 for Mac是一款非常受欢迎的策略塔防游戏,植物大战僵尸游戏以其独特的主题、幽默的风格和富有挑战性的关卡设计而著称。玩家需要种植各种植物来防御入侵的僵尸,每种植物都有其特定的功能和攻击方式。植物大战僵尸杂交版&…

Android 上下滑隐藏显示状态栏

一、DisplayPolicy类中监听滑动事件,然后发送广播事件 Android12类路径: frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.javamSystemGestures new SystemGesturesPointerEventListener(mUiContext, mHandler,new SystemGest…

SQL注入(head、报错、盲注)

目录 【学习目标、重难点知识】 【学习目标】 【重难点知识】 1. 报错注入 1.1 那么什么是报错注入呢? 1.2 报错注入原理 extractvalue函数 updatexml函数 1.3 靶场解析 靶场练习 2. HEAD注入 2.1 相关全局变量 2.2 靶场解析 burp暴力破解 靶场练习 3…

java常见面试题汇总

🌏个人博客主页:意疏-CSDN博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 关注 收藏支持一下笔者吧~ 阅读指南: 开篇说明一、封装 继承 多态1.封装2.继承3.多态 二、什么是重载…

初始化列表 / 隐式转换 / 静态

目录 初始化列表隐式转换单参数的隐式类型转换多参数的隐式类型转换explicit关键字 static 初始化列表 大部分时候成员变量在对象实例化的时候调用构造函数就整体定义了,注意此时只有定义,不算初始化。而定义后的值的值是在构造函数里面给的。我们知道构…

<数据集>无人机航拍不同高度牧羊识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:6065张 标注数量(xml文件个数):6065 标注数量(txt文件个数):6065 标注类别数:1 标注类别名称:[sheep] 序号类别名称图片数框数1sheep6065149785 使用标注工具&…

Macos M1 IDEA本地调试 HBase 2.2.2

# 1. 前提 执行 mvn clean package assembly:single -DskipTests没问题,并在hbase-assembly/target目录下生成hbase-2.2.2-bin.tar.gz 文件夹 证明Maven 下载依赖没问题 1.1 报错 1 这里应该是报错找不到 com.google.protobuf:protoc:exe:osx-aarch_64:3.5.1 …

入门STM32—外部中断

外部中断的存在使得微控制器能够及时响应外部事件,避免频繁的轮询操作,从而提高系统的实时性、效率和低功耗性能。 1.什么是外部中断? 外部中断是指微控制器接收到外部引脚的信号变化时触发的中断。STM32F103系列微控制器支持多个外部中断线…

鸿蒙(API 12 Beta3版)【DRM会话管理(C/C++)】数字版权保护开发

DRM会话管理(MediaKeySession)支持媒体密钥管理及媒体解密等,MediaKeySession实例由系统管理里的MediaKeySystem实例创建和销毁。 开发步骤 导入NDK接口,接口中提供了DRM相关的属性和方法,导入方法如下。 #include &…

学习嵌入式第二十九天

ipc进程间通信方式 PC,即进程间通信(Inter-Process Communication),是操作系统中不同进程之间交换数据的一种机制。以下是一些常见的IPC方式: 管道:用于父子进程或兄弟进程之间的通信。消息队列&#xff…

selenium-java实现自动登录跳转页面

如果要一直刷新一个网页,总不能人工一直去点,所以想到大学时候学过selenium技术,写个脚本来一直刷新,因为经常写java语言,所以选用java语言来写 实验环境 注意,需要先准备好Google浏览器和Chrome-Driver驱…

ffmpeg6.1集成Plus-OpenGL-Patch滤镜

可参考上一篇文章。ffmpeg6.1集成ffmpeg-gl-transition滤镜-CSDN博客 安装思路大致相同, 因为 Plus-OpenGL-Patch也是基于 ffmpeg 4.x 进行开发的,所以在高版本上安装会有很多报错。 这是我安装后的示例,需要安装教程或者改代码可私信我。 …

记录一次 Redis 优化发送数据(使用管道批量传送)

一 项目背景 此前的项目中,鉴于客户方服务器的安全配置对 MQ 中间件有所限制,我们只得采用 Redis 的 list 作为简易的 MQ 来传送报文数据。然而,近段时间客户关闭了相关端口,导致大量数据积压,需要进行补发。在补发过程…

大数据背景下基于Python的牛油果销售数据可视化分析

注:源码在最后,只是一次实验记录,不合理的地方自行修改。 一 研究背景及意义 21世纪以来,随着科学技术的进步,人们的生活水平也随之大幅提升提高。在科技和经济快速发展下,全球已经进入了大数据时代。大数…

8.21-部署eleme项目

1.设置主从从mysql57服务器 (1)配置主数据库 [rootmsater_5 ~]# systemctl stop firewalld[rootmsater_5 ~]# setenforce 0[rootmsater_5 ~]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.serv…

使用 Fyne 构建 GUI 应用:设置标签文本和自增计数器

引言 Fyne 是一个用 Go 语言编写的跨平台 GUI 框架,它提供了一套丰富的组件来帮助开发者快速构建出漂亮的用户界面。在本文中,我们将通过一个简单的案例来演示如何使用 Fyne 创建 GUI 应用程序,该程序包含设置标签文本和自增计数器的功能。 …

「字符串」前缀函数|KMP匹配:规范化next数组 / LeetCode 28(C++)

目录 概述 思路 核心概念:前缀函数 1.前缀函数 2.next数组 1.考研版本 2.竞赛版本 算法过程 构建next数组 匹配过程 复杂度 Code 概述 为什么大家总觉得KMP难?难的根本就不是这个算法本身。 在互联网上你可以见到八十种KMP算法的next数组…