ZEMAX | 如何使用ZOS-API分析全息圖的結(jié)構(gòu)條紋
在設(shè)計(jì)光學(xué)全息圖時(shí),分析元件上的條紋頻率以確??芍圃煨允呛苤匾?。本文提供了自定義分析,允許對序列全息圖 1、全息圖 2 和光學(xué)制造全息圖表面等類型進(jìn)行此類研究。還提供了源代碼,用于演示如何通過 ZOS-API 創(chuàng)建自定義分析和準(zhǔn)備設(shè)置對話框,用以開放用戶分析設(shè)置的自定義交互。(聯(lián)系工作人員獲取附件)
簡介
在 OpticStudio 序列模式中可用的工具允許通過兩束構(gòu)建光的干涉來定義全息圖。由于全息圖的定義十分靈活,用戶可能使用過于密集的條紋圖案來模擬不可生產(chǎn)的全息圖。本文介紹了用于觀察全息圖條紋結(jié)構(gòu)和密度的 ZOS-API 分析。
我們提供了用于用戶分析的源代碼作為示例。該分析使用了 UserAnalysisSettings 模式。雖然這不是一個(gè)完整的演練,但它演示了如何在 API 分析中設(shè)置參數(shù)值和獲取分析值。
準(zhǔn)備運(yùn)行分析
為了運(yùn)行分析,請下載并解壓本文附件。解決方案文件和相關(guān)補(bǔ)充文件(源代碼文件等)可以在項(xiàng)目文件夾中找到。可執(zhí)行的用戶分析文件“ Hologram Construction Interference.exe "應(yīng)該保存到目錄“ …\Documents\Zemax\User Analysis\ ”內(nèi)。在可執(zhí)行文件被保存后,應(yīng)重新啟動 OpticStudio,然后在 編程 (The Programming Tab) … 自定義分析 (User Analyses) … 全息構(gòu)造 (Hologram Construction Interference) 中,“ HologramFringes ”分析將變?yōu)榭捎谩?/p>
計(jì)算全息條紋數(shù)據(jù)
根據(jù)全息圖表面上任意點(diǎn)的相對路徑長度和兩個(gè)構(gòu)造光源發(fā)射到該點(diǎn)的光線能量傳播方向的差異,可以計(jì)算出任意點(diǎn)上的干涉數(shù)據(jù)。自定義分析分為兩部分:第一部分是針對全息圖 1 和全息圖 2 表面的情況,第二部分是針對光學(xué)制造全息圖面的情況。前者使用純粹的幾何關(guān)系處理,但后者需要打開構(gòu)造文件和執(zhí)行真正考慮構(gòu)造光學(xué)元件的光線追跡。
為了計(jì)算光學(xué)制造全息圖 1 或 2 表面形式的全息條紋圖,我們可以簡單地追跡從這兩種全息圖結(jié)構(gòu)到全息圖表面的光線,并檢查它們的相對路徑長度,以找到干涉圖。在自定義分析中,這種計(jì)算類似于基于路徑長度差的干涉圖方法。
對于條紋密度,這種計(jì)算是基于全息圖表面上給定點(diǎn)上構(gòu)造光向量(光線方向余弦)的差值和構(gòu)造光束波長的差值。在自由空間中,干涉如下描述:
在該表達(dá)式中, Λ 為條紋間距(密度的倒數(shù)), ro 和 rr 是構(gòu)造光向量, f 是條紋面的正交方向。如圖所示,其中紅色虛線表示自由空間中的干涉條紋:
然而,OpticStudio 將全息圖建模為薄膜,代表除了在全息圖表面的平面上,在任何地方都不能有條紋。我們可以使用表面法線來考慮表面輪廓:
f' 處于薄膜平面內(nèi),所以 σ 是我們關(guān)心的值(即全息圖表面平面內(nèi)的條紋間距),取這個(gè)值的倒數(shù)就可以得到條紋密度。需要注意的是,所有這些計(jì)算都是純局部的,因?yàn)榇_定在任何給定位置的條紋密度的計(jì)算是在整個(gè)全息圖表面的點(diǎn)網(wǎng)格上執(zhí)行的。
計(jì)算全息圖 1 和全息圖 2 表面的全息條紋頻率
在使用全息圖 1 和 2 表面的情況下,構(gòu)造光源被定義為 XYZ 坐標(biāo)中的點(diǎn),在構(gòu)造點(diǎn)和全息圖表面之間的光線路徑中沒有光學(xué)干涉。因此,對于全息圖表面上的每個(gè)點(diǎn),我們可以通過純粹的幾何處理來計(jì)算兩個(gè)源點(diǎn)光線矢量的差,而不需要追跡光線。在這種情況下,對于全息圖表面上的每個(gè)采樣點(diǎn),我們在兩個(gè)構(gòu)造光源和該點(diǎn)之間分別作出一個(gè)矢量,然后利用這兩個(gè)矢量之間的差值以及波長來確定全息圖表面的條紋頻率。
計(jì)算光學(xué)制造全息圖的條紋頻率
光學(xué)制造全息圖的情況有點(diǎn)復(fù)雜,因?yàn)樗鼈兊奶匦园▋蓚€(gè)獨(dú)立光學(xué)系統(tǒng)產(chǎn)生的像差效應(yīng)。當(dāng)以 OFH 為分析對象時(shí),我們必須分別打開每個(gè)構(gòu)造 ZMX 文件(使用 IOpticalSystem 在后臺完成),并運(yùn)行批量處理光線追跡來檢索全息圖表面網(wǎng)格中每條光線的方向余弦。在光線追跡中,我們也在給定的點(diǎn)檢索表面法向量,用于條紋密度計(jì)算。
分析設(shè)置
全息圖分析允許用戶繪制條紋頻率(每透鏡單位的條紋),或者直接在規(guī)范化尺度上顯示構(gòu)造光束的干涉條紋。分析設(shè)置如下:
表面序號 (Surface Number):被分析全息圖表面的表面序號,只有有效的表面才會出現(xiàn)在該選項(xiàng)中(全息圖 1、全息圖 2、光學(xué)制造全息圖)。如果在系統(tǒng)中沒有找到有效的表面,則在加載分析時(shí)將出現(xiàn)錯誤提示。
采樣 (Sampling):用于探測干涉光線的網(wǎng)格采樣密度。追跡的實(shí)際樣本光線數(shù)是這里所示值的兩倍,因?yàn)閮蓚€(gè)構(gòu)造光束都需要光線網(wǎng)格采樣。
條紋縮放 (Fringe Scale):當(dāng)“ 繪制條紋頻率 ”啟用時(shí)此功能將會被禁用。當(dāng)將設(shè)置為繪制干涉時(shí),這個(gè)比例因子決定了每個(gè)繪制的干涉條紋的實(shí)際物理干涉條紋的數(shù)量。例如,值 10 表示在圖中看到的每一條條紋,在全息圖表面都有 10 條實(shí)際物理?xiàng)l紋。對于高功率全息圖,可能需要極高的采樣率來查看完整的條紋圖案并避免混疊效果。增加這個(gè)比例因子可以消除混疊效應(yīng),同時(shí)保持相對較低的采樣。
繪制條紋頻率 (Plot Fringe Frequency):決定分析運(yùn)行的模式。選擇此功能后將顯示條紋頻率(條紋/透鏡單位)。當(dāng)未選中時(shí),分析窗口將顯示帶有標(biāo)準(zhǔn)化單位的條紋圖案。
保存文本數(shù)據(jù) (Save Text Data):允許用戶選擇性地將計(jì)算的原始數(shù)據(jù)保存為文本文件,該文件將被保存到與當(dāng)前透鏡文件相同的目錄中。這里輸入的文本文件名不包含路徑,并以擴(kuò)展名“ .txt ”結(jié)尾(即“ analysis.txt ”)。
在API中編寫自定義分析設(shè)置
當(dāng)打開自定義分析時(shí),將以 UserAnalysis 模式調(diào)用可執(zhí)行文件,這意味著我們只需調(diào)用 RunUserAnalysis() 函數(shù),然后結(jié)束運(yùn)行。在本例中,使用 RunUserAnalysis() 函數(shù)中定義的默認(rèn)設(shè)置。加載分析之后,用戶可以從操作界面打開分析設(shè)置來選擇自定義選項(xiàng)。
在界面中,ZOS-API 自定義分析的設(shè)置窗口會像其他分析窗口一樣初始化,可以從窗口左上角的“ 設(shè)置 ”下拉列表中打開。點(diǎn)擊按鈕初始化 User analysis.exe 文件,但是使用不同的模式調(diào)用它,以避免調(diào)用 RunUserAnalysis 函數(shù),而是調(diào)用 ShowUserAnalysisSettings 函數(shù)。在附加的源代碼中,這個(gè)輔助功能可以在文件的底部附近找到。在這個(gè)函數(shù)中,我們初始化了一個(gè)新的設(shè)置表單。在 Visual Studio 中,可以通過在解決方案資源管理器中的 AnalysisSettingsForm.cs 上右鍵單擊并選擇“ 打開 ”來看到設(shè)置窗口:
在這里,我們可以看到所有已定義的設(shè)置(按鈕、組合框等)。通過單擊單個(gè)按鈕,我們可以在屬性窗口中看到該設(shè)置的屬性,包括其名稱、類型和其他信息。您還可以從這里向表單引入其他設(shè)置實(shí)體。
這些設(shè)置實(shí)際上是通過調(diào)用 AnalysisSettingsForm() 函數(shù)在代碼中使用的。通過右鍵單擊 AnalysisSettingsForm() 函數(shù)并選擇“ go to definition ”,可以看到設(shè)置表單的定義。從那里,我們可以看到一些組件出現(xiàn)在設(shè)置列表內(nèi):
當(dāng)?shù)谝淮渭虞d設(shè)置窗口時(shí),將調(diào)用 AnalysisSettingsForm_Load() 函數(shù)。在這里,我們使用默認(rèn)的用戶選項(xiàng),并在設(shè)置表單的每個(gè)字段中填充默認(rèn)值或之前選擇的值。
當(dāng)單擊設(shè)置中的“ 確認(rèn) ”按鈕時(shí),將調(diào)用 b_OK_Click() 函數(shù)。這就是實(shí)際運(yùn)行用戶選擇設(shè)置的功能,我們將設(shè)置中的數(shù)值分配給全局變量,然后調(diào)用 RunUserAnalysis() 函數(shù),該函數(shù)將從這些全局設(shè)置變量中獲取數(shù)值。
其他的功能允許用戶與其他設(shè)置交互。
點(diǎn)擊設(shè)置窗口中的 OK 按鈕后,返回程序的 ShowUserAnalysisSettings() 函數(shù)。我們使用 API 的 SetIntegerValue()、SetDoubleValue() 等函數(shù)獲取設(shè)置數(shù)值。最后,我們調(diào)用 RunUserAnalysis() 函數(shù)來使用所需的設(shè)置重新計(jì)算分析。在 RunUserAnalysis() 函數(shù)中,可以看到首先采取的操作之一是設(shè)置一些默認(rèn)值,然后檢查設(shè)置窗口之前是否調(diào)用過。如果是,則通過 GetDoubleValue()、GetIntegerValue() 等獲取檢索用戶設(shè)置。這樣就完成了設(shè)置窗口和用戶分析計(jì)算之間的交互。
全息圖分析中的假設(shè)
假設(shè)全息圖表面的通光孔徑為圓形,由 LDE 的凈口徑/半直徑單元定義(忽略孔徑在 表面屬性 (Surface Properties) > 忽視孔徑 (Aperture are ignored) 中定義)。在光學(xué)制造全息圖的情況下,這仍然是正確的,因?yàn)槿D的大小是由重構(gòu)全息圖表面的通光半直徑?jīng)Q定的。建議對全息圖表面使用“ 浮動孔徑 (Floating Aperture) ”或“無 (None) ”光圈類型,以避免混淆。
對于光學(xué)全息圖,假設(shè)在所有三個(gè)文件(兩個(gè)構(gòu)造文件和一個(gè)重構(gòu)文件)中的系統(tǒng)單位是相同的。
該分析對曲面全息圖是有效的,在彎曲全息圖面上計(jì)算得到結(jié)果。對于所有類型的全息圖,在條紋密度計(jì)算中,條紋間距計(jì)算在采樣點(diǎn)處的全息圖表面的局部切平面內(nèi)。在干涉圖視圖中,構(gòu)造點(diǎn)到實(shí)際表面坐標(biāo)(包括矢高)的路徑長度是根據(jù)路徑長度計(jì)算的。但是,由于結(jié)果被投影到 2D 數(shù)據(jù)網(wǎng)格中,所以在分析輸出時(shí)必須小心。特別地,對于全息圖 1 和 2,光線的柵格在表面通光半直徑上是等距的。對于光學(xué)制造的全息圖,光線在光瞳中是等間距的。還請注意,該分析目前僅適用于圓錐全息圖基底形狀。也就是說,不支持光學(xué)全息圖中復(fù)雜的表面矢高選項(xiàng)(光學(xué)全息圖的“ 形狀 ”參數(shù)必須為0)。
對于光學(xué)制造全息圖,重現(xiàn)全息圖的幾何形狀必須精確匹配結(jié)構(gòu)文件中的光闌表面的幾何形狀。
構(gòu)造文件中支持反射鏡。如果光學(xué)全息圖構(gòu)造文件的光闌面在鏡像空間中(光線通過奇數(shù)面鏡子反射),則認(rèn)為光線入射到光闌面的“ 前方 ”(即使它們沿 -Z 方向傳播)。
參考文獻(xiàn)
1. Welford, W. T. Aberrations of the symmetrical optical system Aberrations of optical systems. A. Hilger, Bristol ; Boston, 1986.
2. Welford, W. T. “A Vector Raytracing Equation for Hologram Lenses of Arbitrary Shape.” Optics Communications, vol. 14, no. 3, 1975, pp. 322–323., doi:10.1016/0030-4018(75)90327-2.