Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化

附件下載

聯系工作人員獲取附件

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

在此工作流程中,我們使用 Lumerical 構建光柵模型,并使用 RCWA 求解器模擬其響應。完整的EPE系統內置于OpticStudio中,并與Lumerical動態鏈接,以集成精確的光柵模型。最后,利用optiSLang對光柵模型進行整體控制,實現整個EPE系統所需的光學性能。

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖1

概述

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖2

設計具有EPE的AR系統,可以增加眼盒的尺寸,這對系統級的優化來說是一個挑戰,因為它需要大量的參數。在本文中,波導由三個在Lumerical中設計的1D傾斜光柵組成。這些光柵分別用于 OpticStudio 光學系統中的內耦合器 (IC)、折疊光柵和外耦合器 (OC),通過動態鏈路。折疊光柵和超頻光柵都被劃分為幾個區域,在優化過程中分別調整光柵參數。

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

本文分為以下 4 個主要步驟:

第 1 步:使用 Zemax 和 Lumerical 設置光學系統

在本節中,我們將介紹要優化的光學系統。我們可以在文章中找到系統類型相同的增強現實光學系統 。請注意,在原始設計中,能量不會擴散到整個眼盒中,因為大部分光在與折疊光柵和外耦合器進行幾次交互后被外耦合。

第 2 步:在 optiSLang 中設置優化

本文的目的是演示如何使用 optiSlang 來控制使用 Zemax 構建的光學系統的優化。本節介紹將用于優化的參數,以及用作優化目標的指標。

第 3 步:查看優化結果

優化已經設置,結果可用。在本節中,我們將提供有關 optiSlang 文件結構的信息,并解釋如何可視化來自多個優化運行的結果。

第 4 步:使用所需設計更新系統

最后一部分是分步指南,用于從不同的運行中選擇特定設計,并將相應的參數推送到光學系統。

運行和結果

第 1 步:使用 Zemax 和 Lumerical 設置光學系統

1.在Zemax OpticStudio中打開文件EPE_1D_out-coupler.zar,檢查系統設置。

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

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖3

在OpticStudio內置的波導系統中,準直光束入射到IC光柵上,通過波導傳播到折疊光柵,然后將光線重定向到OC。

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖4

探測器設置為直接在超頻光柵的輸出端捕獲光線。優化的目標是增強朝向眼睛的輻照度圖輸出的均勻性,同時最大限度地提高總功率。

為了準備優化,折疊和超頻光柵被分成多個部分。這些部分的數量和形狀可以根據用戶的需要輕松定制。在本例中,波導上的光柵區域形狀為圓形(耦合光柵)、矩形(耦合光柵)和多邊形(折疊光柵)。

第 2 步:在 optiSLang 中設置優化

2.在 optiSLang 中打開 EPE_1D_optimization.opf 文件以檢查優化設置。

3.雙擊 Python 圖標“EPE_1D_for_OptiSlang.py”以可視化代碼。

在附件中,準備了一個python文件EPE_1D_for_OptiSlang.py,用于將optiSLang鏈接到OpticStudio。

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

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖5

其中 i 是區域編號,N 是光柵中的區域總數。

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖6

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

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

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖7

Python 代碼的最后一部分是繪制眼框處的輻照度結果,以及其卷積結果,然后導出圖片。這對于用戶直接在optiSLang后處理中檢查每個優化系統的輻照度很有用。

第 3 步:查看優化結果

4.雙擊“optiSLang (1)”圖標以可視化優化結果。

優化開始時,首先執行靈敏度分析以確定最重要的參數。使用此輸入,進化算法運行并生成一系列結果。這些結果可以直接在帕累托圖中的optiSLang中可視化。

下圖中紅色標記的設計稱為帕累托前。帕累托前沿說明了多個目標之間的權衡,其中沒有一個設計在性能方面主導另一個目標。這意味著所有這些設計都顯示了多個標準(例如均勻性與總功率)的不同平衡。我們收集了 2 個結果并在下面顯示它們。對于每個設計點,對應一對圖,分別顯示眼框內的對比度和均勻性。

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖8

第 4 步:使用所需設計更新系統

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

a.在“動態采樣”選項卡中,取消選中“動態采樣”選項

b.在“其他”選項卡中,選中“隱藏評估設置”菜單中的“再次求解開始設計”選項

c.在“開始設計”選項卡中,選擇“從系統導入起始值”選項,然后選擇在帕累托圖上標識的所需設計(例如#449)。

6.在OpticsStudio中,點擊編程選項卡中的“交互式擴展”按鈕,然后運行OptiSlang仿真。

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

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖9

重要模型設置

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

·在optiSLang中運行任何內容之前,確保“交互式擴展”在OpticStudio(編程選項卡)中處于活動狀態非常重要。

使用參數更新模型

·本例中的光學系統呈現的是具有兩個一維光柵的 EPE,這些光柵分為幾個區域。由用戶自定義光柵的形狀、性質和位置。每個部分的形狀和數量也可以直接在光學系統中定制。

·變量和優化目標在設置 optiSLang 時定義,并且可以自定義。

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

進一步發展模型

·在這個演示中,我們只考慮中心場,即通常入射到波導上的準直光束。為了進行更全面的優化,可以添加更多視場以覆蓋全視場的均勻性。

·同樣,該系統僅針對單個波長而設計。根據系統設計,優化可以包括多個波長。

·一些輻照度分布看起來更均勻,但會導致更高的對比度。可以通過修改 Python 代碼來改進標準。

準備 Python 代碼

Python 代碼的基本結構可以通過轉到 OpticStudio > 編程> Python > 交互式擴展來啟動。還有一些模塊被導入到樣板中,例如 numpy、scipy 和 matplotlib。

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖10

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

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

在 optiSLang 代碼中設置變量和優化目標

Python代碼準備好后,我們就可以開始在optiSLang中規劃優化了。第一步是打開一個空文件,將“求解器”向導拖動到場景中,然后選擇“Python 集成”以選擇事先準備好的代碼。

在求解器向導窗口中,可以通過瀏覽 python 代碼來選擇變量。突出顯示變量名稱,右鍵單擊它,然后選擇“用作參數”。

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖11

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

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖12

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

向導的下一頁將要求用戶定義每個參數的參考值和范圍。參考值將遵循我們在上一步中設置參數時的設置。范圍由設計師決定,沒有標準答案。請注意,此范圍是絕對的。在優化過程中,參數不會突破邊界。這與我們通常對Zemax OpticStudio優化器的期望不同。

在向導的下一頁中,我們需要根據給定的響應設置優化標準。如下圖所示,我們只需將響應拖動到底部即可設置約束或目標。在這種情況下,我們設定了 3 個目標:最小化對比度、均勻性和最大化總功率。我們還可以為對比度和總功率設置 2 個額外的約束,以避免一些極端情況,即結果均勻而總功率極低,或相反的情況。

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖13

(可選)設置并行計算

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

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

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

Ansys Lumerical | 采用一維光柵的出瞳擴展器的優化的圖14

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

靈敏度和優化設置

可以通過將向導拖動到參數化系統模塊來設置靈敏度系統。參數和條件將被復制,我們不需要再次設置它們。默認情況下,它將建議 AMOP 模型,我們可以保留此設置。AMOP 是一種迭代抽樣方法,它將設計采樣到設計空間中,直到達到目標標準(設計的最大值或模型質量)。

同樣,可以通過將優化向導的實例拖動到 AMOP 模塊來設置優化。請注意,當它詢問優化方法時,我們應該選擇 Real Run,因為這個系統永遠不會有高質量的最佳預后元模型 (MOP)。MOP 是在 (Most and Will 2008) 中提出的,它基于對最佳輸入變量集和最合適的近似模型(多項式或具有線性或二次基礎的 MLS)的搜索。對于優化算法,建議使用進化算法,該算法適用于非常不均勻和不連續的解空間。

一切設置完成后,轉到OpticStudio以激活編程選項卡中的“交互式擴展”,然后單擊OptiSlang中的“運行”按鈕。

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

12
1
6