Ansys Zemax | 如何模拟双折射偏振器件
这篇文章介绍了什么是双折射现象、如何在OpticStudio中模拟双折射 (birefringence)、如何模拟双晶体的双折射偏振器以及如何计算偏振器的消光比。(联系我们获取文章附件)
什么是双折射现象
一般的光学材料都是均匀的各向同性的,也就是说无论光从哪个方向穿过材料,其折射率都保持一致。对于单轴材料来说,例如方解石 (Calcite),其晶轴定义了材料的对称轴。这类材料对光线的偏折能力随入射光的偏振态及入射光与晶轴的夹角不同而不同。因此对于任意一束光,两个正交的偏振态下可能存在不同的折射角。这种现象称为光的双折射。
光线在双折射材料中的折射总是遵循斯涅耳定律 (Snell`s Law) 的,但是材料中的有效折射率与入射光的偏振态和入射方向与晶轴夹角相关。其中“寻常光 (Ordinary)”的折射角由下式定义:

其中no为寻常光的折射率,这是斯涅耳定律的一般形式。“非寻常光 (Extraordinary)”的折射角由下式定义:

该式同样遵循斯涅耳定律,但是此时的折射率是角度θw的函数,该角度表示晶轴向量a和折射光波矢k的夹角。
光线向量S指向能量传播方向。在普通材料中,光线向量S与波矢k为同一向量,此时我们使用k表示。但在双折射材料中,光线向量S与波矢k的方向存在较小的夹角,因此需要单独考虑。其中向量S和k与晶轴向量a共面且满足:

非寻常光的有效折射率由下式定义:

其中ne为非寻常折射率。
双折射输入面
准确的进行双折射光线的追迹要比追迹普通光线复杂的多:我们必须分别考虑寻常光和非寻常光的折射率和波矢方向。因此双折射光线追迹功能只在光线入射到双折射输入 (Birefringent-In) 表面时开始执行,在双折射输出 (Birefringent-Out) 表面结束。并且在双折射输入和双折射输出表面之间只允许存在坐标间断 (Coordinate Break) 表面。
在寻常光追迹中,光线向量S和波矢k的方向一致,因此OpticStudio使用寻常光的波矢k的分量来定义光线的方向余弦。
在非寻常光追迹中,k、S和晶轴向量a处于同一平面但不重合,因此使用S的分量定义光线的方向余弦。
以下为模拟一块方解石晶体双折射的示例,其中虚线表示晶轴:

入射光线入射到方解石晶体上并分裂为两个方向的光线。其中寻常光线产生正常的折射,由于入射表面为平面,因此光线没有发生偏折。非寻常光线则产生双折射,因此即便光线正入射平面也产生了偏折。
下图为OpticStudio中有关双折射晶体的设置:

光线在入射到双折射输入面之前都是按照正常情况进行光线追迹。双折射输入表面与标准表面一样(可定义为圆锥面),此时材料使用的是CALCITE,OpticStudio将使用该材料折射率进行寻常光光线追迹。OpticStudio将在相同的材料库中寻找材料名为CALCITE-E的材料,并使用该材料折射率进行非寻常光光线追迹。通过使用两种实际材料,追迹过程可以考虑材料的所有属性(透过率、色散和热膨胀属性等)。
晶轴方向与表面法向量的夹角在双折射输入表面中定义:

在双折射输入面的局部坐标系下直接输入晶轴的方向余弦。其中参数“显示轴线 (Draw Axis)”用来定义布局图中表示晶轴的虚线的长度(透镜单位)。如果您不想显示晶轴则设置该参数为零即可。
您可能会对布局图中的结果存在一些疑问:光线因双折射而分裂为寻常光和非寻常光两个分量,但是在序列模式下光线是无法产生分裂的(这意味着输入一条光线时输出也是一条光线)。实际上OpticStudio执行了两次光线追迹分别追迹两种情况,并使用模式参数 (Mode Flag) 来决定当前光线追迹的类型:
·如果模式参数为0,则将追迹寻常光线
·如果模式参数为1,则将追迹非寻常光线
上文中显示的布局图同时显示了多重结构下模式参数为0和模式参数为1的结构:


双折射偏振器件
模拟双折射偏振器件通常需要使用两块双折射材料,并且材料的晶轴方向存在一定夹角。例如洛匈偏振器 (Rochon polarizer) 使用两块双折射棱镜组成偏振器(本例为KDP晶体):

在这个偏振器中,两块KDP晶体材料的棱镜以晶轴夹角为90°组合在一起,如上图所示。第一块棱镜的晶轴(上图橙色虚线表示)的方向余弦为 (0, 0, 1),与局部Z轴重合。在第二块棱镜中,晶轴的方向余弦为 (0, 1, 0),与局部X轴重合。这些参数都是在双折射输入表面中输入的。您可以输入任意方向余弦来定义以表面顶点为起点的晶轴方向。
当光线穿过双折射材料时,材料的折射率在偏振态P和S下并不相同。(需要注意的是偏振态S和前文中的向量S不同。S向量为光线向量,表示光能量的传播方向。与该向量相联系的电场垂直于S,向量S实际上是偏振态S和P在该方向上的叠加。同样需要注意的是在双折射介质中,偏振态S和P方向的定义与其他计算如镀膜和菲涅尔表面效应计算中所指的偏振方向并不相同。)在双折射介质中,S和P表示与晶轴垂直或平行的方向,而不是参考于表面法向量。其中寻常光的折射率为垂直方向(S偏振态)的折射率,非寻常光的折射率为平行方向(P偏振态)的折射率。
如果模式参数为0,则系统追迹寻常光线(只包含S分量),P分量光的透过率为0。如果设置模式参数为1则系统追迹非寻常光线,S分量光的透过率为0。
这个方法可以正确设置每个模式的透过率,但如果想得到总透过率,则需要将每种模式的光组合叠加在一起。如果系统中包含2组双折射面,则共需要进行4次光线追迹;如果系统中有3组双折射面,则共需要进行8次光线追迹,以此类推。
对于该偏振器来说,我们需要设置4个结构以表示4次光线追迹:

对于每个结构来说:
结构1:追迹了晶体1中的寻常光和晶体2中的寻常光
结构2:追迹了晶体1中的寻常光和晶体2中的非寻常光
结构3:追迹了晶体1中的非寻常光和晶体2中的寻常光
结构4:追迹了晶体1中的非寻常光和晶体2中的非寻常光
之后我们需要将各个结构的场振幅 (field amplitudes) 叠加在一起,而不是强度叠加在一起。这一点非常关键,我们之后将详细讨论。
计算消光比
在本节使用的示例文件中我们可以看到,第二块晶体的非寻常折射率使光线在晶体与晶体的交界面发生了偏折。在第一块晶体中,光轴方向与局部Z轴一致,因此不同偏振态光线的折射率相同。需要注意的是,在双折射介质中S偏振所在的平面与晶轴垂直,P偏振所在平面与晶轴平行。因此当光线沿晶轴方向入射时,两偏振态的光无法区分。在第二块晶体中,晶轴方向与局部X轴重合,S偏振态仍然与晶轴方向垂直,P偏振态与晶轴平行。此时两种偏振态的光可以被区分开来,因此Y方向上的偏振光在晶体与晶体的交界面上会产生偏折。

在本例中,结构1和3(均追迹晶体2中的寻常光线)的光线不发生偏折,而结构2和4的光线发生双折射偏折。
假设我们需要计算偏振光的消光比。如果通过实验的方法进行测量,我们需要使用Y方向偏振的光入射偏振器并测量透过的光强,再计算X方向的偏振光透过的光强并计算两者之比。实际上这也是OpticStudio计算消光比的方式。唯一复杂的点在于透过的光强为两个结构的相干叠加。因此我们需要先计算场振幅的叠加再计算光强。最简便的方法是使用ZPL宏来完成这一计算过程。
以下是我们需要用到的宏语言关键词(完整的语法请参考用户手册)
POLDEFINE Ex, Ey, PhaX, PhaY:用来定义光线的起始偏振态
POLTRACE Hx, Hy, Px, Py, wavelength, vec, surf:用来对特定的光线在特定的表面上执行偏振光线追迹,并将追迹结果保存在参数vec定义的数组中。数据保存格式如下所示:
2: E-Field X component, real
3: E-Field Y component, real
4: E-Field Z component, real
5: E-Field X component, imaginary
6: E-Field Y component, imaginary
7: E-Field Z component, imaginary
为了计算结构1和结构3中光线的总能量,我们使用以下宏程序进行计算:

数据依照如下格式进行打印:

宏程序的主函数部分如下所示:

使用这段宏追迹轴上光线的消光比时其结果为无穷大;当计算倾斜光线时其结果显示少部分X方向的偏振光穿过了偏振器,因此存在一定的消光比数值:

使用偏振光瞳图 (Polarization Pupil Map) 也可以计算场振幅并查看给定入射偏振态下的透过率,如下图所示:

在实际使用情况中可能存在任意数量的双折射晶体,因此有可能存在更多数量的多重结构。您可以在该功能的参数设置中以空格为间隔输入任意数量的结构进行分析。
小结
这篇文章介绍了在OpticStudio中模拟双折射元件基本技巧:
·OpticStudio在双折射材料中进行光线追迹时会追迹两条光线,这两条光线分别表示寻常光和非寻常光
·使用双折射输入面中的模式参数和多重结构功能可以分析任意偏振态光线的偏振追迹结果
·分析由2个双折射晶体组成的偏振器件需要4个多重结构;分析由3个双折射晶体组成的偏振器件需要8个多重机构,以此类推
·在计算多个结构光的总透过光强时需要计算光线振幅的叠加而不仅仅是光强的叠加
相关文章:
Ansys Zemax | 如何模拟双折射偏振器件
这篇文章介绍了什么是双折射现象、如何在OpticStudio中模拟双折射 (birefringence)、如何模拟双晶体的双折射偏振器以及如何计算偏振器的消光比。(联系我们获取文章附件) 什么是双折射现象 一般的光学材料都是均匀的各向同性的,也就是说无论光…...
Java关键字之:this
一、this关键字的使用 1、this可以用来修饰、调用:属性、方法、构造器 2、this修饰属性和方法 this理解为:当前对象 或 当前正在创建的对象 在类的方法中。我们可以使用“this.属性"或”this.方法“的方式。调用当前对象属性或者方法。但是&#…...
嵌入式Linux驱动开发(九)Linux中断
1. Linux中断简介 1)中断号 linux内核中使用一个int变量表示中断号。 2)申请中断: 该函数可以自动激活中断,但是可能引起睡眠,所以需要小心使用。 int request_irq(unsigned int irq, //要申请中断的中断号irq_ha…...
数据库系统-并发控制
文章目录 一、为什么要并发控制1.2 并发控制解决的问题1.2.1 脏读1.2.2 幻读1.2.3 不可重复读1.2.4 数据丢失问题 二、事务调度及可串行性2.1 事务2.1.1 事务的宏观2.1.2 事务的微观2.1.3 事务的特性 ACID 2.2 事务调度与可串行性2.3 冲突可串行化判定 三、基于封锁的并发控制方…...
Java8 教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5 以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。 Java 8入门教程 - 从简单的步骤了解Java…...
从零开始学架构——高可用存储架构
双机架构 存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用,其复杂性主要体现在如何应对复制延迟和中断导致的数据不一致问题。因此,对任何一个高可用存储方案,我们需要从以下几个方面去进…...
连ChatGPT都不懂的五一调休,到底怎么来的?
今天是周几? 你上了几天班了? 还要上几天班放假? 五一啥安排? 出行的票抢到了吗? 调休到底是谁发明的?! 五一劳动节是要劳动吗? 为什么昨天是周一,今天还是周一&a…...
AES工作流程
工作流程 模式 1:加密 ⚫ 复位EN 重置AES模块 ⚫ 设置模式寄存器mode[1:0]00,设置流数据处理模式寄存器CHMOD[1:0] ⚫ 写AES_KEYRx寄存器,CTR和CBC模式下写AES_IVRx寄存器 ⚫ 写EN1,使能AES ⚫ 写AES_DINR 寄存器4次 ⚫ 等待CCF标…...
C++11
C11 统一的列表初始化 在介绍这里的列表初始化之前,首先我认为这是一个比较鸡肋的功能特性,而且使用起来会和之前C98时有些区别。 // 首先可以定义普通的内置类型的变量int x1 1;int x2 { 1 };int x3{ 1 }; // 这样看起来着实有些怪int arry1[] { 1,…...
ubuntu18.04 配置zlmediakit 支持ffmpeg转码记录
1、zlmediakt 默认不支持ffmepg转码,需要在根目录下的CamkeLists.txt里面option(ENABLE_FFMPEG "Enable FFmpeg" OFF) 将OFF改成ON, 删除原有的build目录,sudo mkdir build. cd build,cmake .. 这样在编译生成文件夹release/linux/debug/生…...
H68K配置路由功能
系统环境Armbian ubuntu系统 参考 如何使用Debian/Ubuntu等Linux做软路由(物理机版本,非虚拟机容器版) - 知乎 https://zhuanlan.zhihu.com/p/587068225 按照他操作的结果,就是只有一个网卡正常 最后一顿操作就出现了我这么个配置 更新源…...
*2.5 迭代法的收敛阶与加速收敛方法
学习目标: 了解迭代法的基本概念和原理。学习者需要理解迭代法的基本概念和原理,包括迭代过程、迭代格式、收敛性等基本概念。 熟练掌握迭代法的收敛阶和收敛速度。学习者需要了解迭代法的收敛阶和收敛速度,掌握如何计算迭代法的收敛阶和收敛…...
仪表板展示 | X-lab开放实验室GitHub开源项目洞察大屏
背景介绍 X-lab开放实验室是一个开源软件产业开放式创新的共同体,由来自国内外著名高校、创业公司、部分互联网与IT企业的专家学者与工程师所构成,目前已在包括开源治理标准制定、开源社区行为度量与分析、开源社区流程自动化、开源全域数据治理与洞察等…...
【c语言】五大内存区域 | 堆区详解
创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…...
【JavaScript】动态表格
🎊专栏【 前端易错合集】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 🍔介绍 就是在输入框中输入数字后,再按…...
Css如何优雅的实现抽奖转盘
如图,抽奖转盘,可以拆分为几部分: 1.底部大圆; 2.中间小圆; 3.扇形区; 4.扇形内部奖品区; 5.抽奖按钮; 6.点击抽奖按钮时旋转动效及逻辑; 这其中,扇形区&am…...
在Java的小问题
问题1:如何在Java中创建一个对象? 解决方法: 在Java中,要创建一个对象,需要以下步骤: 创建一个类,定义对象的属性和行为。在类中定义一个构造函数,用于初始化对象的属性。在程序中…...
HashMap的扩容机制、初始化容量大小的选择、容量为什么是2的次幂
前置知识 先来看看HashMap中的成员属性 解释: size当前的容器中Entry的数量,也就是当前K-V的数量loadFactory装载因子,用来衡量HashMap满的程度,loadFactory的默认值是0.75threshold临界值,当实际KV数量超过threshol…...
[jenkins自动化2]: linux自动化部署方式之流水线(下篇)
目录 1. 引言: 2. 进阶操作 流水线 -> 2.1 简介: -> 2.2 最终效果图展示: -> 2.3 有没有心动, 真的像流水线一样, 实现了一键部署启动 3. 实现方式 3.1 下载几个插件 3.2 创建流水线任务 3.3 点击配置 3.4 根据流水线语法 写一个简单的helloworld 3.5 执行…...
idea使用 ( 二 ) 创建java项目
3.创建java项目 3.1.创建普通java项目 3.1.1.打开创建向导 接 2.3.1.创建新的项目 也可以 从菜单选择建立项目 会打开下面的选择界面 3.1.2.不使用模板 3.1.3.设置项目名 Project name : 项目名 Project location : 项目存放的位置 确认创建 3.1.4.关闭tips 将 Dont s…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
