在设计光学全息图时,分析元件上的条纹频率以确保可制造性是很重要的。本文提供了自定义分析,允许对序列全息图 1、全息图 2 和光学制造全息图表面等类型进行此类研究。还提供了源代码,用于演示如何通过 ZOS-API 创建自定义分析和准备设置对话框,用以开放用户分析设置的自定义交互。
在 OpticStudio 序列模式中可用的工具允许通过两束构建光的干涉来定义全息图。由于全息图的定义十分灵活,用户可能使用过于密集的条纹图案来模拟不可生产的全息图。本文介绍了用于观察全息图条纹结构和密度的 ZOS-API 分析。
我们提供了用于用户分析的源代码作为示例。该分析使用了 UserAnalysisSettings 模式。虽然这不是一个完整的演练,但它演示了如何在 API 分析中设置参数值和获取分析值。
为了运行分析,请下载并解压本文附件。解决方案文件和相关补充文件(源代码文件等)可以在项目文件夹中找到。可执行的用户分析文件“ Hologram Construction Interference.exe "应该保存到目录“ …\Documents\Zemax\User Analysis\ ”内。在可执行文件被保存后,应重新启动 OpticStudio,然后在 编程 (The Programming Tab) … 自定义分析 (User Analyses) … 全息构造 (Hologram Construction Interference) 中,“ HologramFringes ”分析将变为可用。
根据全息图表面上任意点的相对路径长度和两个构造光源发射到该点的光线能量传播方向的差异,可以计算出任意点上的干涉数据。自定义分析分为两部分:第一部分是针对全息图 1 和全息图 2 表面的情况,第二部分是针对光学制造全息图面的情况。前者使用纯粹的几何关系处理,但后者需要打开构造文件和执行真正考虑构造光学元件的光线追迹。
为了计算光学制造全息图 1 或 2 表面形式的全息条纹图,我们可以简单地追迹从这两种全息图结构到全息图表面的光线,并检查它们的相对路径长度,以找到干涉图。在自定义分析中,这种计算类似于基于路径长度差的干涉图方法。
对于条纹密度,这种计算是基于全息图表面上给定点上构造光向量(光线方向余弦)的差值和构造光束波长的差值。在自由空间中,干涉如下描述:
在该表达式中,Λ 为条纹间距(密度的倒数),ro 和 rr 是构造光向量,f 是条纹面的正交方向。如图所示,其中红色虚线表示自由空间中的干涉条纹:
然而,OpticStudio 将全息图建模为薄膜,代表除了在全息图表面的平面上,在任何地方都不能有条纹。我们可以使用表面法线来考虑表面轮廓:
f' 处于薄膜平面内,所以 σ 是我们关心的值(即全息图表面平面内的条纹间距),取这个值的倒数就可以得到条纹密度。需要注意的是,所有这些计算都是纯局部的,因为确定在任何给定位置的条纹密度的计算是在整个全息图表面的点网格上执行的。
在使用全息图 1 和 2 表面的情况下,构造光源被定义为 XYZ 坐标中的点,在构造点和全息图表面之间的光线路径中没有光学干涉。因此,对于全息图表面上的每个点,我们可以通过纯粹的几何处理来计算两个源点光线矢量的差,而不需要追迹光线。在这种情况下,对于全息图表面上的每个采样点,我们在两个构造光源和该点之间分别作出一个矢量,然后利用这两个矢量之间的差值以及波长来确定全息图表面的条纹频率。
光学制造全息图的情况有点复杂,因为它们的特性包括两个独立光学系统产生的像差效应。当以 OFH 为分析对象时,我们必须分别打开每个构造 ZMX 文件(使用 IOpticalSystem 在后台完成),并运行批量处理光线追迹来检索全息图表面网格中每条光线的方向余弦。在光线追迹中,我们也在给定的点检索表面法向量,用于条纹密度计算。
全息图分析允许用户绘制条纹频率(每透镜单位的条纹),或者直接在规范化尺度上显示构造光束的干涉条纹。分析设置如下:
当打开自定义分析时,将以 UserAnalysis 模式调用可执行文件,这意味着我们只需调用 RunUserAnalysis() 函数,然后结束运行。在本例中,使用 RunUserAnalysis() 函数中定义的默认设置。加载分析之后,用户可以从操作界面打开分析设置来选择自定义选项。
在界面中,ZOS-API 自定义分析的设置窗口会像其他分析窗口一样初始化,可以从窗口左上角的“ 设置 ”下拉列表中打开。点击按钮初始化 User analysis.exe 文件,但是使用不同的模式调用它,以避免调用 RunUserAnalysis 函数,而是调用 ShowUserAnalysisSettings 函数。在附加的源代码中,这个辅助功能可以在文件的底部附近找到。在这个函数中,我们初始化了一个新的设置表单。在 Visual Studio 中,可以通过在解决方案资源管理器中的 AnalysisSettingsForm.cs 上右键单击并选择“ 打开 ”来看到设置窗口:
在这里,我们可以看到所有已定义的设置(按钮、组合框等)。通过单击单个按钮,我们可以在属性窗口中看到该设置的属性,包括其名称、类型和其他信息。您还可以从这里向表单引入其他设置实体。
这些设置实际上是通过调用 AnalysisSettingsForm() 函数在代码中使用的。通过右键单击 AnalysisSettingsForm() 函数并选择“ go to definition ”,可以看到设置表单的定义。从那里,我们可以看到一些组件出现在设置列表内:
点击设置窗口中的 OK 按钮后,返回程序的 ShowUserAnalysisSettings() 函数。我们使用 API 的 SetIntegerValue()、SetDoubleValue() 等函数获取设置数值。最后,我们调用 RunUserAnalysis() 函数来使用所需的设置重新计算分析。在 RunUserAnalysis() 函数中,可以看到首先采取的操作之一是设置一些默认值,然后检查设置窗口之前是否调用过。如果是,则通过 GetDoubleValue()、GetIntegerValue() 等获取检索用户设置。这样就完成了设置窗口和用户分析计算之间的交互。
假设全息图表面的通光孔径为圆形,由 LDE 的净口径/半直径单元定义(忽略孔径在 表面属性 (Surface Properties) > 忽视孔径 (Aperture are ignored) 中定义)。在光学制造全息图的情况下,这仍然是正确的,因为全息图的大小是由重构全息图表面的通光半直径决定的。建议对全息图表面使用“ 浮动孔径 (Floating Aperture) ”或“无 (None) ”光圈类型,以避免混淆。
对于光学全息图,假设在所有三个文件(两个构造文件和一个重构文件)中的系统单位是相同的。
该分析对曲面全息图是有效的,在弯曲全息图面上计算得到结果。对于所有类型的全息图,在条纹密度计算中,条纹间距计算在采样点处的全息图表面的局部切平面内。在干涉图视图中,构造点到实际表面坐标(包括矢高)的路径长度是根据路径长度计算的。但是,由于结果被投影到 2D 数据网格中,所以在分析输出时必须小心。特别地,对于全息图 1 和 2,光线的栅格在表面通光半直径上是等距的。对于光学制造的全息图,光线在光瞳中是等间距的。还请注意,该分析目前仅适用于圆锥全息图基底形状。也就是说,不支持光学全息图中复杂的表面矢高选项(光学全息图的“ 形状 ”参数必须为0)。
对于光学制造全息图,重现全息图的几何形状必须精确匹配结构文件中的光阑表面的几何形状。
构造文件中支持反射镜。如果光学全息图构造文件的光阑面在镜像空间中(光线通过奇数面镜子反射),则认为光线入射到光阑面的“ 前方 ”(即使它们沿 -Z 方向传播)。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删