ZEMAX | 使用API模拟旋转对称不规则性(RSI)


ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图1

继上次的内容ZEMAX | 旋转对称不规则性(RSI)简介,在这篇文章中,我们将展示 Zemax 应用程序编程接口(ZOS-API)与 Matlab 的强大功能如何用于模拟关键制造缺陷,例如抛物面镜上的旋转对称不规则性(RSI)。


ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图2


旋转对称不规则性(RSI) 是指光学表面形状中的一组旋转对称误差。误差由 Zernike 多项式表示,具有三阶球差和高阶球差的形式。

抛物面镜示例

我们将演示如何向抛物面镜添加 RSI 和总不规则性。示例为F/3,有效焦距为150 mm的反射镜。

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图3
ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图4

为了演示,我们将根据以下规范在表面上添加总不规则性和 RSI :

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图5

关于此规范的更多信息请查看,旋转对称不规则性(RSI)简介

这将在表面上放置1个完全不规则的P-V波,以及0.3个P-V波的PSI。以纳米为单位,这将是500 nm的总表面不规则性和150 nm的RSI。

代码结构

我们创建了示例 Matlab 代码来对 RSI 进行建模。此代码包括与建模不规则性和RSI 相关的函数。函数 prepare surface 将标准或均匀非球面表面更改为 Zernike  标准凹陷表面。还包括几个基本的支持功能,例如用于显示来自.ZMX文件的镜头数据编辑器 (LDE) 信息的显示LDE。


最重要的函数是 AddBC(表面数,波长,B,C),其中B是最大总表面不规则度,C是最大允许 RSI。AddBC 函数的工作原理如下:

  • 为RSI项分配随机值:Z11、Z22、Z37和Z56。

  • 检查RMS表面误差。

  • 缩放以达到C的正确值。

  • 这仅需要一次缩放,因为将每个Zernike系数缩放一个常数会使RMS缩放相同的常数。

  • 将随机值分配给模型B的其他Zernike多项式,完全不规则。

  • 在不干扰RSI项的值的情况下使用:Z11、Z22、Z37和Z56。

  • 使用Z5 – Z37模拟总不规则性。

  • 迭代缩放Zernike项以达到正确的总不规则性。


在交互模式下运行Matlab示例代码

与Matlab的API交互模式很方便,因为您可以使用 Matlab 命令行控制 API。这使您可以即时尝试新命令和更改命令。


您可以从编程选项卡中选择 Matlab,然后选择交互式扩展,以交互模式进行连接,如下所示:

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图6

连接代码将自动打开:

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图7

回到 OpticStudio,单击变成选项卡上的“交互式扩展”将使 OpticStudio 进入“侦听”模式。

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图8

在 Matlab 中,现在可以使用以下命令进行连接:

>> TheApplication = MATLABZOSConnection9(7)

请注意,您的 MATLABZOSConnection 编号和实例可能与此处给出的不同。例如,如果这是您第一次连接,您可能有 MATLABZOSConnection(1)。

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图9

使用Matlab模拟RSI

建立连接后,我们可以从 Matlab 命令行加载 .ZMX 文件并从文件中收集信息,如下所示:

>> primary system = TheApplication.PrimarySystem

>> theLDE = primarySystem.LDE

>> theMFE = primarySystem.MFE

>> systemData = primarySystem.SystemData

>> savefilename = System.String.Concat

(pwd,'\LensFileForTesting.zmx')

>> primarySystem.SaveAs(savefilename)


所有必需的函数都包含在文件 ErinsABCFunctions.m 中。通过在 Matlab 中打开它,我们可以加载各个函数。

>> abc = ErinsABCFunctions


我们通过将其更改为 Zernike 标准凹陷表面来预设表面。

>> ldetable = abc.displayLDE(primarySystem); disp(ldetable);

>> surfacetable = abc.prepareSurface(primarySystem,3);

disp(surfacetable);


上述两个命令的输出如下所示:

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图10
ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图11

稍后,我们将设定镜面的起始缺陷。

>> startingsag = abc.getSag(primarySystem,3);
>> figure(); imagesc(startingsag); axis square;

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图12

现在我们可以使用 AddBC 添加 B和C 的表面不规则性。

>> bctable = abc.AddBC( primarySystem, 3, 500.0, 1, 0.3);
>> disp( bctable);

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图13

请注意,此时,如果我们正在运行公差,我们可以在调用 AddBC 时为 B和C 选择随机值。收集镜子的扰动缺陷,并减去起始缺陷,使表面误差扰动可见。

>> bcsag = abc.getSag( primarySystem, 3);
>> sagdiff = bcsag-startingsag;
>> figure(); imagesc( sagdiff ); axis square;

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图14

我们也可以检查这些表面误差的最终P-V。

>> abs(max( sagdiff(:))-min( sagdiff(:)) 

/ (500*10^-6))

该值为0.995,而不是我们要求的B = 1.000。这是与缩放 Zernikes 的迭代期间使用的精度设置有关。更严格的精度设置将返回更接近1.000的结果,但计算时间会更长。

完成模拟后,我们关闭交互模式。

>> TheApplication.CloseApplication()


ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图15

点击图片查看培训详情


相关阅读 - 编程

ZEMAX | 旋转对称不规则性(RSI)简介

ZEMAX | 如何用 ZOS-API 创建用户自定义分析

ZEMAX | 在 Mathematica 中与 OpticStudio 交互

ZEMAX | 在MATLAB或Python中使用ZOS-API进行光线追迹的批次处理

ZEMAX | ZOS-API、ZPL 和 DLL 之间的区别

ZEMAX  | 如何使用 ZOS-API 创建飞行时间自定义分析

ZEMAX | 如何使用 ZPL 创建用户自定义求解



欢迎扫码添加宇熠工作人员微信,

进入 zemax 微信交流群。

一起来学习光学设计吧!

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图16

扫码邀您入群


如果您对产品感兴趣,或需要技术支持,欢迎致电垂询!
电话:027-87878386
邮箱:market@ueotek.com
关注武汉宇熠视频号 查看更多精彩视频 

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图17
ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图18

武汉宇熠科技是 ZEMAX 中国区官方指定代理商,提供 ZEMAX 光学设计软件的培训、销售、技术支持、二次开发、解决方案及 ZEMAX 软件相关全方位定制服务。有关 ZEMAX ,您可以点击文末“阅读原文”了解更多信息,或致电垂询武汉宇熠工作人员:

销售热线:027-87878386

咨询邮箱:sales@ueotek.com

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图19
ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图20

ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图21
ZEMAX | 使用API模拟旋转对称不规则性(RSI)的图22
👇点击 阅读原文 咨询产品或技术支持。
登录后免费查看全文
立即登录
App下载
技术邻APP
工程师必备
  • 项目客服
  • 培训客服
  • 平台客服

TOP