光学喵-光学课堂 首页 资讯 查看内容

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

2022-3-27 10:31| 发布者:Davis| 查看:1136| 评论:0|原作者: 光电资讯

摘要:This article showcases the powerful combination of Zemax\'s application programming interface (API) and Matlab for simulating key manufacturing defects, such as Rotationally Symmetric Irregularity (RSI), on optical surfaces. Through example code and a ste

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

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

抛物面镜示例

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

为了演示,我们将根据以下规范在表面上添加总不规则性和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是ZUI大总表面不规则度,C是ZUI大允许RSI。AddBC 函数的工作原理如下:

  • RSI项分配随机值:Z11Z22Z37Z56
  • 检查RMS表面误差。
  • 缩放以达到C的正确值。
    • 这仅需要一次缩放,因为将每个Zernike系数缩放一个常数会使RMS缩放相同的常数。
  • 将随机值分配给模型B的其他Zernike多项式,完全不规则。
    • 在不干扰RSI项的值的情况下使用:Z11Z22Z37Z56
    • 使用Z5 – Z37模拟总不规则性。
  • 迭代缩放Zernike项以达到正确的总不规则性。
在交互模式下运行Matlab示例代码
与Matlab的API交互模式很方便,因为您可以使用Matlab命令行控制API。这使您可以即时尝试新命令和更改命令。
您可以从编程选项卡中选择Matlab,然后选择交互式扩展,以交互模式进行连接,如下所示:
连接代码将自动打开:
回到OpticStudio,单击变成选项卡上的交互式扩展将使OpticStudio进入侦听模式。
在Matlab中,现在可以使用以下命令进行连接:
>> TheApplication = MATLABZOSConnection9(7)
请注意,您的MATLABZOSConnection编号和实例可能与此处给出的不同。例如,如果这是您第一次连接,您可能有MATLABZOSConnection(1)
使用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);
上述两个命令的输出如下所示:

稍后,我们将设定镜面的起始缺陷。
>> startingsag = abc.getSag(primarySystem,3);
>> figure(); imagesc(startingsag); axis square;


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

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

请注意,此时,如果我们正在运行公差,我们可以在调用AddBC时为B和C选择随机值。收集镜子的扰动缺陷,并减去起始缺陷,使表面误差扰动可见。
>> bcsag = abc.getSag( primarySystem, 3);
>> sagdiff = bcsag-startingsag;
>> figure(); imagesc( sagdiff ); axis square;
我们也可以检查这些表面误差的ZUI终P-V。
>> abs(max( sagdiff(:))-min( sagdiff(:)) / (500*10^-6))
该值为0.995,而不是我们要求的B = 1.000。这是与缩放Zernikes的迭代期间使用的精度设置有关。更严格的精度设置将返回更接近1.000的结果,但计算时间会更长。
完成模拟后,我们关闭交互模式。
>> TheApplication.CloseApplication()
(文章来源:本文转载翻译于Zemax官网,因为能力有限,如文中有什么不当之处请随时联系我们,我们将及时进行修改。)

路过

雷人

握手

鲜花

鸡蛋

最新评论

联系客服 关注微信 访问手机版 返回顶部