本文提出并演示了一種以二維光柵耦出的光瞳擴(kuò)展(EPE)系統(tǒng)優(yōu)化和公差分析的仿真方法。
在這個(gè)工作流程中,我們將使用3個(gè)軟件進(jìn)行不同的工作 ,以實(shí)現(xiàn)優(yōu)化系統(tǒng)的大目標(biāo)。首先,我們使用Lumerical構(gòu)建光柵模型并使用RCWA進(jìn)行仿真。其次,我們在OpticStudio中構(gòu)建完整的出瞳擴(kuò)展系統(tǒng),并動(dòng)態(tài)鏈接到Lumerical以集成精確的光柵模型。然后,optiSLang用于通過修改光柵模型來全面控制系統(tǒng)級(jí)優(yōu)化,以實(shí)現(xiàn)整個(gè)出瞳擴(kuò)展系統(tǒng)所需的光學(xué)性能。
本篇文章將分為上下兩個(gè)部分,附件可通過文末”閱讀原文“獲取。
我們將首先在Lumerical和OpticStudio中構(gòu)建仿真系統(tǒng),它們是動(dòng)態(tài)鏈接的。參見Dynamic workflow between Lumerical RCWA and Zemax OpticStudio:https://support.zemax.com/hc/en-us/articles/6367505128979-Dynamic-workflow-between-Lumerical-RCWA-and-Zemax-OpticStudio。
然后,OpticStudio通過Python節(jié)點(diǎn)鏈接到optiSLang進(jìn)行優(yōu)化,如圖1所示。
圖1 Lumerical通過動(dòng)態(tài)鏈接到OpticStudio,OpticStudio 通過 Python 節(jié)點(diǎn)鏈接到 optiSLang,優(yōu)化由optiSLang控制。
如圖2所示,EPE系統(tǒng)包括兩個(gè)用于耦入和耦出的光柵。耦出光柵分為幾個(gè)區(qū),如左側(cè)所示。每個(gè)區(qū)都將經(jīng)過優(yōu)化,以具有不同的光柵形狀。右圖顯示了光在 k 空間中的傳播的變化情況。
有關(guān) k 空間的更多信息,請參閱以下文章:How to simulate exit pupil expander (EPE) with diffractive optics for augmented reality (AR) system in OpticStudio: part 1:https://support.zemax.com/hc/en-us/articles/1500005491081
圖 2 光柵布局圖以及光線在K空間的傳播
第 1 步:系統(tǒng)設(shè)置 (Lumerical)
打開附件中的ZAR文件時(shí),兩個(gè)光柵文件會(huì)被提取到設(shè)置的路徑中。第 一個(gè)光柵如圖3所示,它是耦入光柵中使用的二元光柵。該光柵是固定的,在優(yōu)化過程中不會(huì)改變。
圖 3 耦入光柵結(jié)構(gòu)為二元光柵。
第二個(gè) .fsp 文件如圖 4 所示,它是一個(gè)具有 7 個(gè)變量的平行四邊形柱體。在優(yōu)化期間,耦出中的每個(gè)區(qū)都將使用不同的變量組合集進(jìn)行優(yōu)化 。有關(guān)優(yōu)化設(shè)置的更多信息將在優(yōu)化設(shè)置部分中進(jìn)行說明。
圖 4 耦出光柵中的結(jié)構(gòu)為平行四邊形支柱。
這兩個(gè).fsp文件都是用動(dòng)態(tài)鏈接的形式在OpticStudio中用于模擬完整的EPE系統(tǒng)。
有關(guān)動(dòng)態(tài)鏈接的更多信息,請參閱 Dynamic workflow between Lumerical RCWA and Zemax OpticStudio:https://support.zemax.com/hc/en-us/articles/6367505128979-Dynamic-workflow-between-Lumerical-RCWA-and-Zemax-OpticStudio
第 2 步:系統(tǒng)設(shè)置(OpticStudio)
如圖5所示,在該系統(tǒng)中,準(zhǔn)直光束入射到耦入光柵上,通過波導(dǎo)傳播,并與第二個(gè)光柵耦合。眼盒位于第二個(gè)光柵的較遠(yuǎn)部分。優(yōu)化的目標(biāo)是優(yōu)化眼盒接收的均勻性和總功率。
圖 5 初始EPE系統(tǒng)和眼盒輻照度。
在附件中有一個(gè)OpticStudio中建立的整個(gè)EPE系統(tǒng)的zar文件。如圖 6所示,僅構(gòu)建了第二個(gè)光柵一半的區(qū)域。這是因?yàn)橄到y(tǒng)具有對(duì)稱性。從圖 7 可以看出,探測器的參數(shù)鏡像設(shè)置為 1,這意味著在光線追跡期間,將始終對(duì)-x和+x部分進(jìn)行鏡像。這樣一來,我們可以只用一半的光線獲得相同的模擬結(jié)果。
圖 6 OpticStudio中的 EPE 系統(tǒng)設(shè)置。
圖7 探測器的鏡像參數(shù)設(shè)置為 1,這意味著該探測器在 x 方向上鏡像。
可以看出, 系統(tǒng)中的所有光柵物體都已使用動(dòng)態(tài)鏈接DLL進(jìn)行設(shè)置,如圖 8所示。
圖 8 為 EPE 系統(tǒng)中的光柵加載動(dòng)態(tài)鏈接 DLL。
第3步:優(yōu)化設(shè)置(optiSLang)
3-1.Python 用于評(píng)估系統(tǒng)
附件中包含了一個(gè)python文件EPE_2D_for_optiSLang.py,用于將optiSLang鏈接到OpticStudio。使用python代碼將 Ansys optiSLang附帶的優(yōu)化器與求解器Ansys Zemax OpticStudio + Ansys Lumerical鏈接非常有用。優(yōu)勢在于可以在每個(gè)優(yōu)化周期中進(jìn)行數(shù)據(jù)的預(yù)處理跟后處理,靈活性非常高。本章節(jié)會(huì)對(duì)代碼結(jié)構(gòu)進(jìn)行解釋。
代碼的基本結(jié)構(gòu)首先由 OpticStudio 中的按鈕生成,如圖 9 所示。
有關(guān)編寫API以訪問OpticStudio的更多信息,請參閱知識(shí)庫文章:Knowledgebase > Programming > API:https://support.zemax.com/hc/en-us/sections/1500001168641-API
圖 9 生成Python交互式擴(kuò)展代碼的樣板。
另外幾個(gè)模塊被導(dǎo)入到樣板中。模塊numpy,scipy用于對(duì)來自眼盒的輻照度數(shù)據(jù)進(jìn)行后數(shù)據(jù)處理。模塊matplotlib用于在眼盒上繪制和導(dǎo)出輻照度以供以后查看。導(dǎo)入time和random模塊,以便計(jì)時(shí)器跟蹤計(jì)算時(shí)間。
通過嘗試讀取變量OSL_WORKING_DIR,我們可以知道這個(gè)Python代碼是由 optiSLang調(diào)用還是手動(dòng)調(diào)用。當(dāng)optiSLang調(diào)用 Python代碼時(shí),將創(chuàng)建一些稱為環(huán)境變量的變量來傳遞一些 optiSLang 信息。即使這些變量未在Python文件中定義,當(dāng)optiSLang調(diào)用代碼時(shí),它們是可用的。
有關(guān)optiSLang中的 Environment 變量的更多信息,請參閱optiSLang用戶指南:https://ansyshelp.ansys.com/Views/Secured/corp/v222/en/opti_ug/opti_ug.html
在這個(gè)Python代碼中,有32個(gè)變量,如clen1、h2、rot4、w1 和 power,用于優(yōu)化,需要由optiSLang定義。我們會(huì)將這些變量設(shè)置為 optiSLang中的參數(shù),在靈敏度分析或優(yōu)化時(shí),optiSLang將自動(dòng)改變它們的值。如果我們不是從optiSLang直接運(yùn)行這個(gè)Python代碼,那么這些變量的值將是常量,如下面的代碼所示。
如圖10所示,每個(gè)區(qū)的光柵參數(shù)是通過預(yù)設(shè)的4個(gè)角的數(shù)據(jù)通過插值來確定的。其中 ν 是 dC、dR、dL、θC、θR、θL 、h ,n 是 1,2,3,4,對(duì)應(yīng)于 4 個(gè)角。通過這個(gè)公式,每個(gè)區(qū)上的7個(gè)光柵參數(shù)可以通過具有一定權(quán)重(wn)和非線性值(p)的4個(gè)角的參數(shù)來控制。
圖 10 從 4 個(gè)角插值的各個(gè)區(qū)的參數(shù)計(jì)算。
optiSLang按照預(yù)定義的優(yōu)化算法改變這些參數(shù)。不同的參數(shù)值被設(shè)置到python代碼中,這將進(jìn)一步設(shè)置OpticStudio中每個(gè)光柵塊的參數(shù)。在這個(gè)過程中,Python代碼扮演著將這些變量轉(zhuǎn)換為OpticStudio中精確參數(shù)的工作。只有當(dāng)我們使用optiSLang而不是OpticStudio中的內(nèi)置優(yōu)化器優(yōu)化系統(tǒng)時(shí),這種預(yù)數(shù)據(jù)處理才有可能。通過這種方式,optiSLang可以根據(jù)一些未直接暴露在OpticStudio UI中的虛擬或高級(jí)變量來優(yōu)化系統(tǒng)。
設(shè)置參數(shù)后,我們使用以下代碼段追跡光線。
使用optiSLang優(yōu)化系統(tǒng)的另一個(gè)好處是數(shù)據(jù)后處理。在這個(gè)優(yōu)化過程中,我們不會(huì)直接優(yōu)化眼盒上的輻照度分布。我們首先使用瞳孔函數(shù)對(duì)輻照度分布進(jìn)行卷積,如圖11所示,然后將優(yōu)化目標(biāo)設(shè)置為該卷積結(jié)果的均勻性。這個(gè)結(jié)果的x和y軸可以解釋為人眼在眼盒中的偏移。z軸是人眼看到的平均輻照度。
圖 11 使用瞳孔函數(shù)對(duì)輻照度分布進(jìn)行卷積。
根據(jù)卷積結(jié)果,我們可以計(jì)算對(duì)比度 、總功率和均勻性,如下所示。
這些標(biāo)準(zhǔn)的代碼定義如下。在這種情況下,我們主要希望針對(duì)Contrast和 Total Power進(jìn)行優(yōu)化。均勻性的功能類似于對(duì)比度,兩者都希望眼盒上的輻照度均勻。盡管它們用于相同的目標(biāo),但它們使用不同的定義,在這里我們考慮兩者。
Python代碼的后面一部分,如下所示,繪制了眼盒輻照度的結(jié)果及其卷積結(jié)果。然后導(dǎo)出圖片。這對(duì)于用戶直接在optiSLang后處理中檢查每個(gè)優(yōu)化系統(tǒng)的輻照度分布非常有用。
進(jìn)一步的設(shè)置詳解我們會(huì)在后續(xù)的文章中,進(jìn)行介紹。
相關(guān)閱讀
Zemax Lumerical Speos 聯(lián)合實(shí)現(xiàn)衍射光波導(dǎo)AR系統(tǒng)設(shè)計(jì)仿真
Ansys Speos 聯(lián)合 optiSLang 背光板設(shè)計(jì)優(yōu)化方案
Ansys Zemax 與 Speos 關(guān)于汽車投影燈解決方案
聯(lián)合方案 | Speos 和 Lumerical 聯(lián)合 optiSLang 的顯示屏優(yōu)化設(shè)計(jì)
聯(lián)合方案 | Zemax + Speos 助力HUD抬頭顯示器設(shè)計(jì)