ZEMAX | ​OpticStudio 中如何输入 Grid Sag 面型中的数据

概要

本文介绍了OpticStudio如何定义网格矢高(Grid Sag)面型并展示了如何正确输入网格矢高数据。本文的示例文件请在以下链接中下载:


http://forum.zemax.com/Attachment1571.aspx

http://forum.zemax.com/Attachment1572.aspx


介绍

Grid Sag 面型是基于一些基础面型并通过在这些面型上添加矩形相对矢高阵列来定义的,这些基础面型包括平面、球面、圆锥非球面、多项式非球面或泽尼克非球面。通过网格点阵定义的矢高值可相对于基础非球面矢高存在一定偏心。表面形状是通过对网格矢高参数进行线性插值或双三次样条插值拟合来定义的。有关矢高定义的更多信息,请参考帮助文档“网格矢高( Grid Sag)”。


输入网格数据

网格点的所有数据必须在 OpticStudio 之外进行制表和计算,其数据格式必须存储在特定格式的文件中,并在表面属性中的导入(Import )菜单栏中加载这个文件才能正确导入网格矢高面。OpticStudio 读取的文件数据格式为:



其中第一行包含七个参数,其中 nx 和 ny(整数)为每个方向上网格点的数量且 nx 和 ny 必须大于等于5;unitflag 为数据的单位,0表示毫米,1表示厘米,2表示英寸,3表示米;delx 和 dely(浮点数)为网格点阵在 x 和 y 方向上的间距;xdec 和 ydec(浮点数)为坐标偏移量(可选项)。

剩下的 nx*ny 行的数据每行都包括四个浮点数和一个整数(可选项)。其中四个浮点数分别为 Z 矢高;矢高在 X 方向的导数;矢高在 Y 方向的导数;矢高的交叉导数 d/dxdy。第五个可选数据 nodata 用来表示之前的数据是否有效,0或空行表示有效的数据,其他整数表示无效数据。当nodata 为其他时,整行的数据将被替换为0,并且计算只考虑基础面的矢高值。如果输入的数据不是数字,则系统默认将该数据替换为零。

第一行的数据对应网格中左上角的点(沿 -Z 轴方向看去),即 -X 和 +Y 点。随后的数据将从左至右定义这一行的点。定义完一行以后,将顺次定义下一行(ny-1)的点直到所有的点都被定义。数据必须存储为 ASCII 格式并且以 .DAT 为扩展名(如果用于非序列模式,则扩展名为 .GRD )。

各项导数值用于双三次样条曲线插值算法中,用作不同矢高数据点之间的平滑处理。线性插值算法不会使用这些参数。如果所有导数值(dz/dx,dz/dy,d2z/dxdy)为零或没有输入,则 OpticStudio 将使用有线差分算法(Finite difference method)自动评估导数。


本文使用的示例文件 SAG.DAT,数据格式如下图所示:



双三次样条曲线插值算法与线性插值算法的比较

表面上任意点的矢高拟合可以用两种方法中的任意一种进行计算。双三次样条算法是默认算法,它同时对矢高及其一阶导进行插值计算并提供了更加平滑的结果。为获得合理平滑数据,首选双三次样条算法。但对于伪随机形式的数据或波动较大的数据,双三次样条算法可能会得到非常极端的结果,这就意味着面数据的插值可能生成远离网格点的矢高值。对于这种情况,线性插值算法则会的到更加合理的结果。双三次样条或线性插值的选择作为一个参数可由用户选择。


使用Grid Sag面型

对于样条曲线的限制的重要信息请参考“样条曲线表面的备注( Comments about spline surface )”。在 OpticStudio 中网格矢高表面(Grid Sag Surface)的参数定义形式为:



首先将表面类型设置为网格矢高(Grid Sag),注意在本例中我们使用双三次样条曲线插值算法,因此插值类型设置为0,如下图所示:



然后打开网格时高面的表面属性菜单,单击导入( Import )选项卡。再导入数据文件选择框中选择对应的网格矢高数据文件。单击导入完成网格矢高的数据输入。如下图所示:



数据将直接存储在内存中而不会显示在镜头数据编辑器中。这是因为需要显示的数据量有可能会非常庞大。网格文件被导入后,用户可以通过表面数据报告(Surface Data Report)来查看导入的数据,如下图所示:



同时,网格数据将一直保存在内存之中,OpticStudio 在进行计算时将忽略原有的 .DAT 文件。如果需数据被改变,则用户需要重新在表面属性中导入更改后的 .DAT 文件。最终生成的网格矢高面如下图所示:



网格矢高面的几点使用建议

· OpticStudio 使用顶点的曲率半径、非球面系数和网格点数据来计算网格矢高面的近轴光焦度。

· 网格的尺寸只受限于可用内存的大小。每个网格点需要4个8比特的双精度数据和1个1比特值的存储空间。一个255x255点阵的网格文件大约需要 2Mb 的内存。

· 双三次样条插值算法平滑至三阶导,它得到的结果在格点上有精确值且不需要很大的网格文件就能得到很平滑的表面面型,但不能准确地模拟更高阶的非球面。

· 网格矢高表面没有定义网格边界之外的部分时,光线追迹到网格表面之外将被视为光线丢失错误。在定义表面时,将表面区域定义为比光线照射部分尺寸更大的面可以有效避免这一错误。特别是不要将网格大小定义为与与光线照射区域相同的尺寸,否则光线追迹到网格表面边缘时有可能不会再继续追迹。

· 当使用网格矢高表面模拟表面极度弯曲的光学器件时,用户最好将基础面定义为相近的面型,再在此基础上定义相对矢高,而不是直接用网格矢高面定义整个面型。

· 目前而言,OpticStudio 无法直接对网格数据进行优化或公差分析。