Ansys Lumerical | 采用一維光柵的出瞳擴(kuò)展器的優(yōu)化

附件下載

聯(lián)系工作人員獲取附件


本文演示了一種仿真方法,并舉例說明了使用一維光柵的出瞳擴(kuò)張器(EPE)系統(tǒng)的優(yōu)化示例。

在此工作流程中,我們使用 Lumerical 構(gòu)建光柵模型,并使用 RCWA 求解器模擬其響應(yīng)。完整的EPE系統(tǒng)內(nèi)置于OpticStudio中,并與Lumerical動態(tài)鏈接,以集成精確的光柵模型。最后,利用optiSLang對光柵模型進(jìn)行整體控制,實(shí)現(xiàn)整個(gè)EPE系統(tǒng)所需的光學(xué)性能。



概述



設(shè)計(jì)具有EPE的AR系統(tǒng),可以增加眼盒的尺寸,這對系統(tǒng)級的優(yōu)化來說是一個(gè)挑戰(zhàn),因?yàn)樗枰罅康膮?shù)。在本文中,波導(dǎo)由三個(gè)在Lumerical中設(shè)計(jì)的1D傾斜光柵組成。這些光柵分別用于 OpticStudio 光學(xué)系統(tǒng)中的內(nèi)耦合器 (IC)、折疊光柵和外耦合器 (OC),通過動態(tài)鏈路。折疊光柵和超頻光柵都被劃分為幾個(gè)區(qū)域,在優(yōu)化過程中分別調(diào)整光柵參數(shù)。


然后,optiSLang 通過 Python 節(jié)點(diǎn)處理優(yōu)化。optiSLang 的使用具有很大的優(yōu)勢,例如能夠在每個(gè)優(yōu)化周期內(nèi)執(zhí)行預(yù)處理和后處理(例如,使用瞳孔函數(shù)對結(jié)果進(jìn)行卷積)。此外,可以通過在 python 代碼中定義函數(shù)來控制參數(shù),而不是直接使用不同區(qū)域中的所有單個(gè)光柵特性,從而減少變量總數(shù),從而縮短優(yōu)化時(shí)間。該過程由 Sensitivity 模塊啟動,以便系統(tǒng)在運(yùn)行優(yōu)化時(shí)可以識別影響最大的參數(shù)。


本文分為以下 4 個(gè)主要步驟:


第 1 步:使用 Zemax 和 Lumerical 設(shè)置光學(xué)系統(tǒng)

在本節(jié)中,我們將介紹要優(yōu)化的光學(xué)系統(tǒng)。我們可以在文章中找到系統(tǒng)類型相同的增強(qiáng)現(xiàn)實(shí)光學(xué)系統(tǒng) 。請注意,在原始設(shè)計(jì)中,能量不會擴(kuò)散到整個(gè)眼盒中,因?yàn)榇蟛糠止庠谂c折疊光柵和外耦合器進(jìn)行幾次交互后被外耦合。

第 2 步:在 optiSLang 中設(shè)置優(yōu)化

本文的目的是演示如何使用 optiSlang 來控制使用 Zemax 構(gòu)建的光學(xué)系統(tǒng)的優(yōu)化。本節(jié)介紹將用于優(yōu)化的參數(shù),以及用作優(yōu)化目標(biāo)的指標(biāo)。

第 3 步:查看優(yōu)化結(jié)果

優(yōu)化已經(jīng)設(shè)置,結(jié)果可用。在本節(jié)中,我們將提供有關(guān) optiSlang 文件結(jié)構(gòu)的信息,并解釋如何可視化來自多個(gè)優(yōu)化運(yùn)行的結(jié)果。

第 4 步:使用所需設(shè)計(jì)更新系統(tǒng)

最后一部分是分步指南,用于從不同的運(yùn)行中選擇特定設(shè)計(jì),并將相應(yīng)的參數(shù)推送到光學(xué)系統(tǒng)。



運(yùn)行和結(jié)果


第 1 步:使用 Zemax 和 Lumerical 設(shè)置光學(xué)系統(tǒng)

1.在Zemax OpticStudio中打開文件EPE_1D_out-coupler.zar,檢查系統(tǒng)設(shè)置。

三個(gè)一維光柵以 Lumerical 形式構(gòu)建為傾斜光柵,但折疊光柵和 OC 光柵被初始化為傾斜角為 1° 的簡單二元光柵。優(yōu)化將使用傾斜角度、深度和占空比作為折疊和超頻光柵的每個(gè)部分中的變量。



在OpticStudio內(nèi)置的波導(dǎo)系統(tǒng)中,準(zhǔn)直光束入射到IC光柵上,通過波導(dǎo)傳播到折疊光柵,然后將光線重定向到OC。



探測器設(shè)置為直接在超頻光柵的輸出端捕獲光線。優(yōu)化的目標(biāo)是增強(qiáng)朝向眼睛的輻照度圖輸出的均勻性,同時(shí)最大限度地提高總功率。


為了準(zhǔn)備優(yōu)化,折疊和超頻光柵被分成多個(gè)部分。這些部分的數(shù)量和形狀可以根據(jù)用戶的需要輕松定制。在本例中,波導(dǎo)上的光柵區(qū)域形狀為圓形(耦合光柵)、矩形(耦合光柵)和多邊形(折疊光柵)。


第 2 步:在 optiSLang 中設(shè)置優(yōu)化

2.在 optiSLang 中打開 EPE_1D_optimization.opf 文件以檢查優(yōu)化設(shè)置。

3.雙擊 Python 圖標(biāo)“EPE_1D_for_OptiSlang.py”以可視化代碼。

在附件中,準(zhǔn)備了一個(gè)python文件EPE_1D_for_OptiSlang.py,用于將optiSLang鏈接到OpticStudio。


在本文中,我們希望控制折疊光柵和超頻的光柵高度、占空比和傾斜角度。不是在每個(gè)部分中單獨(dú)設(shè)置所有這些參數(shù),而是使用定義如下的參數(shù)函數(shù)來控制給定光柵的多個(gè)區(qū)域的光柵參數(shù):



其中 i 是區(qū)域編號,N 是光柵中的區(qū)域總數(shù)。



這些參數(shù)通過optiSlang按照預(yù)定義的優(yōu)化算法(例如進(jìn)化算法)進(jìn)行變化。不同的參數(shù)值被設(shè)置到python代碼中,并將其向下傳輸?shù)絆pticStudio中的每個(gè)光柵部分。在這個(gè)過程中,Python代碼在OpticStudio中將這些變量轉(zhuǎn)換為確切的參數(shù)。只有當(dāng)我們使用optiSLang而不是OpticStudio中的內(nèi)置優(yōu)化器來優(yōu)化系統(tǒng)時(shí),才能使用Python中定義的函數(shù)進(jìn)行這種預(yù)數(shù)據(jù)處理。通過這種方式,optiSLang可以基于一些在OpticStudio UI中沒有直接公開的虛擬或高級變量來優(yōu)化系統(tǒng)。

設(shè)置好參數(shù)后,代碼的其余部分包括調(diào)用OpticStudio來追蹤光線并從探測器收集結(jié)果。使用 optiSLang 優(yōu)化系統(tǒng)的另一個(gè)好處是后數(shù)據(jù)處理。在這個(gè)優(yōu)化過程中,我們不直接優(yōu)化眼盒上的輻照度分布。取而代之的是,我們首先使用瞳孔函數(shù)對輻照度分布進(jìn)行卷積,然后根據(jù)這個(gè)卷積結(jié)果設(shè)置優(yōu)化目標(biāo)。在此示例中,優(yōu)化目標(biāo)是對比度、總功率和均勻性,定義如下:



Python 代碼的最后一部分是繪制眼框處的輻照度結(jié)果,以及其卷積結(jié)果,然后導(dǎo)出圖片。這對于用戶直接在optiSLang后處理中檢查每個(gè)優(yōu)化系統(tǒng)的輻照度很有用。


第 3 步:查看優(yōu)化結(jié)果

4.雙擊“optiSLang (1)”圖標(biāo)以可視化優(yōu)化結(jié)果。

優(yōu)化開始時(shí),首先執(zhí)行靈敏度分析以確定最重要的參數(shù)。使用此輸入,進(jìn)化算法運(yùn)行并生成一系列結(jié)果。這些結(jié)果可以直接在帕累托圖中的optiSLang中可視化。

下圖中紅色標(biāo)記的設(shè)計(jì)稱為帕累托前。帕累托前沿說明了多個(gè)目標(biāo)之間的權(quán)衡,其中沒有一個(gè)設(shè)計(jì)在性能方面主導(dǎo)另一個(gè)目標(biāo)。這意味著所有這些設(shè)計(jì)都顯示了多個(gè)標(biāo)準(zhǔn)(例如均勻性與總功率)的不同平衡。我們收集了 2 個(gè)結(jié)果并在下面顯示它們。對于每個(gè)設(shè)計(jì)點(diǎn),對應(yīng)一對圖,分別顯示眼框內(nèi)的對比度和均勻性。



第 4 步:使用所需設(shè)計(jì)更新系統(tǒng)

5.將“敏感度”塊復(fù)制/粘貼到頁面中,然后雙擊塊標(biāo)題“敏感度 (1)”進(jìn)行編輯。

a.在“動態(tài)采樣”選項(xiàng)卡中,取消選中“動態(tài)采樣”選項(xiàng)

b.在“其他”選項(xiàng)卡中,選中“隱藏評估設(shè)置”菜單中的“再次求解開始設(shè)計(jì)”選項(xiàng)

c.在“開始設(shè)計(jì)”選項(xiàng)卡中,選擇“從系統(tǒng)導(dǎo)入起始值”選項(xiàng),然后選擇在帕累托圖上標(biāo)識的所需設(shè)計(jì)(例如#449)。

6.在OpticsStudio中,點(diǎn)擊編程選項(xiàng)卡中的“交互式擴(kuò)展”按鈕,然后運(yùn)行OptiSlang仿真。

優(yōu)化已經(jīng)在附件中完成,打開文件時(shí)可以可視化優(yōu)化結(jié)果。有時(shí),我們可能想選擇一個(gè)優(yōu)化的設(shè)計(jì),并在OpticStudio中進(jìn)行研究。但是,optiSLang 僅將輸入?yún)?shù)保存在表格中。我們不保留OpticStudio系統(tǒng)。為了在optiSLang中選擇特定的設(shè)計(jì),并將參數(shù)推送到OpticStudio的光學(xué)系統(tǒng)中,我們可以復(fù)制靈敏度模塊,并將其起點(diǎn)定義為所需的設(shè)計(jì)。通過禁用動態(tài)采樣,運(yùn)行該模塊將簡單地從所選設(shè)計(jì)中讀取參數(shù)值,并將相應(yīng)的數(shù)據(jù)推送到OpticStudio中。然后,用戶可以手動將新系統(tǒng)保存為其他名稱。在optiSLang中獲取具有任何設(shè)計(jì)外觀設(shè)計(jì)的OpticStudio系統(tǒng)的另一種選擇是在python代碼中添加一個(gè)命令,以便在optiSLang中運(yùn)行優(yōu)化時(shí)直接將系統(tǒng)保存為.zmx文件(例如TheSystem.SaveAs('design_optimized.zmx')。請注意,第二種方法僅在我們在 optiSLang 中運(yùn)行優(yōu)化之前在 Python 中進(jìn)行更改時(shí)才有效。



重要模型設(shè)置

·由于系統(tǒng)依賴于 Python 代碼,因此假定已安裝 Python 以及腳本中調(diào)用的所有其他模塊。

·在optiSLang中運(yùn)行任何內(nèi)容之前,確?!敖换ナ綌U(kuò)展”在OpticStudio(編程選項(xiàng)卡)中處于活動狀態(tài)非常重要。


使用參數(shù)更新模型

·本例中的光學(xué)系統(tǒng)呈現(xiàn)的是具有兩個(gè)一維光柵的 EPE,這些光柵分為幾個(gè)區(qū)域。由用戶自定義光柵的形狀、性質(zhì)和位置。每個(gè)部分的形狀和數(shù)量也可以直接在光學(xué)系統(tǒng)中定制。

·變量和優(yōu)化目標(biāo)在設(shè)置 optiSLang 時(shí)定義,并且可以自定義。

·在本文中,變量是使用函數(shù)間接定義的。在示例的 Python 代碼中,它的名稱為“l(fā)insp”。任何自定義函數(shù)也可以由用戶使用,定義可以簡單地在Python代碼中更新。


進(jìn)一步發(fā)展模型

·在這個(gè)演示中,我們只考慮中心場,即通常入射到波導(dǎo)上的準(zhǔn)直光束。為了進(jìn)行更全面的優(yōu)化,可以添加更多視場以覆蓋全視場的均勻性。

·同樣,該系統(tǒng)僅針對單個(gè)波長而設(shè)計(jì)。根據(jù)系統(tǒng)設(shè)計(jì),優(yōu)化可以包括多個(gè)波長。

·一些輻照度分布看起來更均勻,但會導(dǎo)致更高的對比度??梢酝ㄟ^修改 Python 代碼來改進(jìn)標(biāo)準(zhǔn)。


準(zhǔn)備 Python 代碼

Python 代碼的基本結(jié)構(gòu)可以通過轉(zhuǎn)到 OpticStudio > 編程> Python > 交互式擴(kuò)展來啟動。還有一些模塊被導(dǎo)入到樣板中,例如 numpy、scipy 和 matplotlib。



通過嘗試讀取變量OSL_WORKING_DIR,我們可以知道這個(gè)Python代碼是由optiSLang調(diào)用的還是手動執(zhí)行的。在靈敏度分析或優(yōu)化過程中,optiSLang會自動改變定義的變量的值。另一方面,如果我們直接運(yùn)行這段Python代碼而不使用optiSLang,那么這些變量的值將是常數(shù)。

可以完成代碼以將變量值鏈接到光學(xué)系統(tǒng)的參數(shù),跟蹤光線,從探測器收集數(shù)據(jù)并處理結(jié)果。例如,在此示例中,我們先使用瞳孔函數(shù)對檢測器輸出進(jìn)行卷積,然后再計(jì)算均勻性和對比度等關(guān)鍵參數(shù)。


在 optiSLang 代碼中設(shè)置變量和優(yōu)化目標(biāo)

Python代碼準(zhǔn)備好后,我們就可以開始在optiSLang中規(guī)劃優(yōu)化了。第一步是打開一個(gè)空文件,將“求解器”向?qū)蟿拥綀鼍爸?,然后選擇“Python 集成”以選擇事先準(zhǔn)備好的代碼。

在求解器向?qū)Т翱谥?,可以通過瀏覽 python 代碼來選擇變量。突出顯示變量名稱,右鍵單擊它,然后選擇“用作參數(shù)”。



參數(shù)設(shè)置好后,我們應(yīng)該測試 Python 代碼是否可以成功運(yùn)行。為此,我們打開OpticStudio并打開交互式擴(kuò)展模式,如下所示。然后在求解器向?qū)е?,我們可以單擊向下箭頭并選擇“使用輸入測試運(yùn)行”,如下所示。如果效果良好,您應(yīng)該會在OpticStudio中看到交互式擴(kuò)展對話框,指示“已連接”。



計(jì)算完成后,可以按照與設(shè)置變量相同的方式選擇響應(yīng)參數(shù)。在此示例中,我們右鍵單擊 Python 代碼中的變量“Uniformity”、“Contrast”和“TotalPower”,然后選擇“用作響應(yīng)”。然后 3 個(gè)變量將顯示在右側(cè)列中。

向?qū)У南乱豁搶⒁笥脩舳x每個(gè)參數(shù)的參考值和范圍。參考值將遵循我們在上一步中設(shè)置參數(shù)時(shí)的設(shè)置。范圍由設(shè)計(jì)師決定,沒有標(biāo)準(zhǔn)答案。請注意,此范圍是絕對的。在優(yōu)化過程中,參數(shù)不會突破邊界。這與我們通常對Zemax OpticStudio優(yōu)化器的期望不同。

在向?qū)У南乱豁撝?,我們需要根?jù)給定的響應(yīng)設(shè)置優(yōu)化標(biāo)準(zhǔn)。如下圖所示,我們只需將響應(yīng)拖動到底部即可設(shè)置約束或目標(biāo)。在這種情況下,我們設(shè)定了 3 個(gè)目標(biāo):最小化對比度、均勻性和最大化總功率。我們還可以為對比度和總功率設(shè)置 2 個(gè)額外的約束,以避免一些極端情況,即結(jié)果均勻而總功率極低,或相反的情況。



(可選)設(shè)置并行計(jì)算

這不是絕對必要的,但可以為 OptiSLang 設(shè)置并行計(jì)算以加快優(yōu)化速度。如果用戶擁有多個(gè)Lumerical FDTD求解器許可證,則可以考慮這樣做。要進(jìn)行設(shè)置,第一步是右鍵單擊參數(shù)化系統(tǒng)模塊,選擇“編輯”,然后在窗口底部并行設(shè)置最大限制。將該數(shù)字設(shè)置為不大于 8 的任何數(shù)字,或 Lumerical FDTD 求解器許可證總數(shù)的編號。

應(yīng)直接在 Python 節(jié)點(diǎn)上執(zhí)行相同的操作,如下圖所示。右鍵單擊 Python 節(jié)點(diǎn),然后選擇“編輯”。要設(shè)置詳細(xì)信息,我們需要首先單擊右上角的漢堡包狀標(biāo)記,選中“屬性和占位符”,然后單擊“確定”按鈕。然后我們可以將“MaxParallel”設(shè)置為所需的數(shù)字,如下所示(為了說明,我們將其設(shè)置為 6)。還需要在窗口底部將“最大并行”選項(xiàng)設(shè)置為所需的數(shù)字。如果先設(shè)置此參數(shù),則上面的 MaxParallel 也會自動更改,但仔細(xì)檢查它是否按預(yù)期設(shè)置會更安全。

最后,建議勾選“重試執(zhí)行”,將“重試次數(shù)”設(shè)置為20,將“嘗試之間的延遲”設(shè)置為1000毫秒。此設(shè)置避免了 OptiSLang 嘗試訪問具有 1 個(gè)以上線程的同一 OpticStudio 實(shí)例的競爭情況。



請注意,如果并行設(shè)置設(shè)置為大于 1 的數(shù)字,則還需要打開相同數(shù)量的 OpticStudio 實(shí)例,以便 OptiSLang 可以為每個(gè)實(shí)例創(chuàng)建一個(gè)線程。


靈敏度和優(yōu)化設(shè)置

可以通過將向?qū)蟿拥絽?shù)化系統(tǒng)模塊來設(shè)置靈敏度系統(tǒng)。參數(shù)和條件將被復(fù)制,我們不需要再次設(shè)置它們。默認(rèn)情況下,它將建議 AMOP 模型,我們可以保留此設(shè)置。AMOP 是一種迭代抽樣方法,它將設(shè)計(jì)采樣到設(shè)計(jì)空間中,直到達(dá)到目標(biāo)標(biāo)準(zhǔn)(設(shè)計(jì)的最大值或模型質(zhì)量)。

同樣,可以通過將優(yōu)化向?qū)У膶?shí)例拖動到 AMOP 模塊來設(shè)置優(yōu)化。請注意,當(dāng)它詢問優(yōu)化方法時(shí),我們應(yīng)該選擇 Real Run,因?yàn)檫@個(gè)系統(tǒng)永遠(yuǎn)不會有高質(zhì)量的最佳預(yù)后元模型 (MOP)。MOP 是在 (Most and Will 2008) 中提出的,它基于對最佳輸入變量集和最合適的近似模型(多項(xiàng)式或具有線性或二次基礎(chǔ)的 MLS)的搜索。對于優(yōu)化算法,建議使用進(jìn)化算法,該算法適用于非常不均勻和不連續(xù)的解空間。

一切設(shè)置完成后,轉(zhuǎn)到OpticStudio以激活編程選項(xiàng)卡中的“交互式擴(kuò)展”,然后單擊OptiSlang中的“運(yùn)行”按鈕。