ZEMAX | 使用API模擬旋轉對稱不規則性(RSI)
繼上次的內容《ZEMAX | 旋轉對稱不規則性(RSI)簡介》,在這篇文章中,我們將展示 Zemax 應用程序編程接口(ZOS-API)與 Matlab 的強大功能如何用于模擬關鍵制造缺陷,例如拋物面鏡上的旋轉對稱不規則性(RSI)。
旋轉對稱不規則性(RSI) 是指光學表面形狀中的一組旋轉對稱誤差。誤差由 Zernike 多項式表示,具有三階球差和高階球差的形式。
拋物面鏡示例
我們將演示如何向拋物面鏡添加 RSI 和總不規則性。示例為F/3,有效焦距為150 mm的反射鏡。
為了演示,我們將根據以下規范在表面上添加總不規則性和 RSI :
關于此規范的更多信息請查看,旋轉對稱不規則性(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,然后選擇交互式擴展,以交互模式進行連接,如下所示:
連接代碼將自動打開:
回到 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;
我們也可以檢查這些表面誤差的最終P-V。
>> abs(max( sagdiff(:))-min( sagdiff(:))
/ (500*10^-6))
該值為0.995,而不是我們要求的B = 1.000。這是與縮放 Zernikes 的迭代期間使用的精度設置有關。更嚴格的精度設置將返回更接近1.000的結果,但計算時間會更長。
完成模擬后,我們關閉交互模式。
>> TheApplication.CloseApplication()
相關閱讀 - 編程
ZEMAX | 在 Mathematica 中與 OpticStudio 交互
ZEMAX | 在MATLAB或Python中使用ZOS-API進行光線追跡的批次處理
ZEMAX | ZOS-API、ZPL 和 DLL 之間的區別
ZEMAX | 如何使用 ZOS-API 創建飛行時間自定義分析
歡迎掃碼添加宇熠工作人員微信,
進入 zemax 微信交流群。
一起來學習光學設計吧!
掃碼邀您入群
武漢宇熠科技是 ZEMAX 中國區官方指定代理商,提供 ZEMAX 光學設計軟件的培訓、銷售、技術支持、二次開發、解決方案及 ZEMAX 軟件相關全方位定制服務。有關 ZEMAX ,您可以點擊文末“閱讀原文”了解更多信息,或致電垂詢武漢宇熠工作人員:
銷售熱線:027-87878386
咨詢郵箱:sales@ueotek.com
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















