摘要:這篇文章介紹一些簡單的方法,用來確認Zemax OpticStudio如何計算這些公差Criterion。當使用者不太確定某個Criterion是怎麼來的時候,這些技巧會非常有用。
簡介
Zemax OpticStudio在公差分析方面有完整的功能,過程也有清楚的數學說明,但與公差分析的目標相比 (最終要知道良率或敏感度),其執行過程卻有龐大的細節。
這篇文章將整理幾個常用的確認細節的方法,不同的情境有不同的方法,我們共有以下主題:
1. 當我們說 “計算Criterion” 時,Zemax OpticStudio做了什麼
2. 簡介Criterion種類
3. 說明Diff. MTF Avg./Tan./Sag.的計算方式
4. 使用 “SAVE” 公差指令紀錄Sensitivity計算過程
5. 利用Monte Carlo存檔瞭解公差擾動如何被執行
6. 如何表列所有Monte Carlo檔案的亂數參數
在繼續往下閱讀之前,建議閱讀者可以先閱讀此知識庫中相關的基礎公差分析文章,例如下面幾篇文章:
How to perform a sequential tolerance analysis
How to analyze your tolerance results
當我們說 “計算Criterion” 時,Zemax OpticStudio做了什麼
以下的敘述主要關乎Criterion的計算,不管我們是做Sensitivity分析或是Monte Carlo分析,都適用。
Criterion
首先我們要花一點時間說明Criterion本身,才說明優化等其他動作。在公差分析時,我們所做的事情,就是重複擾動指定參數 (例如元件偏心、傾斜),並計算在該條件下的 “Criterion” 是多少,並與原始設計或格相比分析。
這個Criterion可以是易懂的物理參數,例如某個視場 (Field)、某個波長下的Spot Radius或Tangential MTF。也可以是多個相似的參數用某種方式平均,例如Tangential MTF與Sagittal MTF的平均,或是多個視場下的MTF平均 (通常是RMS)。甚至Criterion可以是經由複雜計算而來,不具實際物理意義。OpticStudio中有許多內建的Criterion,也提供完整的自訂功能讓使用者設計自訂Criterion。 (請參考本文章下面的 “簡介Criterion種類” )
Field
另一個公差分析中常被混淆的觀念是視場 (Field)。當計算Criterion時,如果Field欄位選用Y-Symmetric或XY-Symmetric,事實上OpticStudio並非讀取使用者的Field設定。而是先找出最大視場,然後乘以-1.0、-0.7、0.0、+0.7以及+1.0。若是Y-Symmetric,則共有Y方向的5個視場,若是XY-Symmetric,則包含XY方向共有9個視場。
這樣設計是因為一般來說加入公差後,系統經常就不再是軸對稱了,因此正負視場都要考慮。如果使用者希望自己設定,只要在Field欄位中選擇User-Defined即可。
要注意的是,無論如何設定視場,由於Criterion只有一個,因此最後這些視場上的Criterion都會被平均成一個數值。若希望每個視場分開,表示你需要複數個Criterion,這要用到Tolerance Script的功能。請參考知識庫的這篇文章:用ZPL與Tolerance Script分析複數個公差Criterion。
Comp
Comp這個欄位代表的是補償器的概念,具體來說,如果有補償器的存在, “每次” 當OpticStudio要計算Criterion之前,都會先依指定變數以及評價函數優化過一次系統,然後才計算並輸出Criterion。換句話說,原本的流程是:
原始系統 > 擾動參數 (ex. 偏心、傾斜) > 計算Criterion
加入補償器後變成:
原始系統 > 擾動參數 (ex. 偏心、傾斜) > 優化系統 > 計算Criterion
為什麼會有補償器呢?事實上大部分成像系統都會有一個天生的補償器,就是後焦距。舉例來說,如果一台投影機的投影鏡頭中的一個鏡片的曲率有誤差,造成像距改變,進而影像模糊,我們就可以把投影機前後移動來做一定程度的補償。這時公差分析就應該考慮補償器才不會對於系統公差分析太過悲觀。
注意上面的敘述隱含了一個很重要的觀念,那就是「現實世界中的補償器微調,在OpticStudio中的實作其實就是優化」。
補償器可以是任何參數,但是必須能反應現實世界中真正的操作。
有時候一些高級光學系統可能有多個補償過程,這時就會需要在不同時機點使用不同的變數以及評價函數,OpticStudio透過Tolerance Script支援這種複雜的補償過程。
簡介Criterion種類
前面我們提過,OpticStudio有許多Criterion可用,大致可分為三類,並簡單介紹:系統內建、評價函數、User Script。這些Criterion最終都可對應到一組Merit Function的計算。
其中系統內建中的RMS Spot Radius/X/Y、RMS Angular Radius/X/Y、RMS Wavefront計算方式與利用Optimization Wizard設定出來的評價函數功能一樣,取樣方式使用Gaussian Quadrature,Sampling的設定代表徑向取樣數。
而MTF的部分,則是透過MTFA/T/S或GMTA/T/S這些操作數計算,如果有多個視場,就會在Merit Function中加入所有視場,並經過評價函數公式計算出Merit Function Value。但由於Merit Function是計算 “差值” 的方均根,因此最後的Criterion事實上是取(1 - Merit Function Value)。這個部份請看下一個條目的說明。
Criterion的部分如果系統內建預設的選項不足以滿足使用需求時,使用者可以考慮自行設計Merit Function,然後在Criterion的欄位中選擇 “Merit Function” 就可以了。
最後一個特殊選項就User Script,可以讓使用者進行更複雜的Criterion計算過程,例如前面說過的複數補償器設定過程。Tolerance Script的部分請參考以下兩篇文章:
如何在公差分析報告中加入任意優化操作數
用ZPL與Tolerance Script分析複數個公差Criterion
說明Diff. MTF Avg的計算方式
由於Criterion中MTF的計算方式是技術支援中最常見的問題,以下將說明其運作方式,這裡用Diffraction MTF說明,但是其他的MTF原則上是一樣的,只是操作數的不同 (MTFA/T/S或GMTA/T/S)。
以下用Cooke 40 degree field這個系統內建範例說明,首先我們打開這個範例檔。
移除所有變數以及求解。
固定所有孔徑。
現在執行Tolerance Ribbon > Tolerancing,把Criterion欄位設定如下,並點一下Check計算在現在的值。
可以看到目前的Diff. MTF Avg值為0.40329094,這裡我們利用文章下面敘述的Monte Carlo存檔技巧,來瞭解這個公差是如何計算的。
打開存好的Monte Carlo檔之後,我們檢視他的Merit Function,看到如下圖:
因為視場選擇是Y-Symmetric,如同前面的說明,共有5個視場。而在Merit Function中共有5個MTFA,代表Diffraction MTF Average,這次代表一個視場。而上面的Merit Function Value是0.596709053761491,可以發現前面的Criterion的計算正好就是1減Merit Value。
Merit Function的計算如下:
V是Value,W是Weight,T是Target。
使用 “SAVE” 公差指令紀錄Sensitivity計算過程
在敏感度 (Sensitivity) 分析時,OpticStudio會把每一個tolerance operand的最大最小值代入,並且計算在這些公差的極限狀態下,Criterion的變化如何,然後回報在文字報告中。而當使用者對於這個結果有疑問時,會需要知道OpticStudio實際上是如何調整系統,並得到這個結果的,此時便是用 “SAVE” 這個指令的時候。
舉例來說,假設我們有如下的公差設定以及Sensitivity分析結果
可以看到當公差TRAD = -0.2時,Criterion = 0.04967675。
而TRAD = 0.2時,Criterion = 0.04875308。
假設我們想知道TRAD=0.2時的Criterion是如何計算的,我們可以在TRAD的下面加上一行SAVE指令,如下圖
請注意在File#欄位代表檔案編號,如果有多個SAVE指令,則需要把編號分開。此外編號等於0的話,這個指令將不運作,不會存檔。
現在再執行一次公差分析,文字報表的結果應該相同,但是使用者可以發現在資料夾中多出兩個檔案,如下圖
其中TSAV_MAX_0001代表TRAD=-0.2時的系統狀態,而TSAV_MIN_0001代表TRAD=0.2時的系統狀態。
讓我們打開TSAV_MAX_0001這個檔案,並開啟Merit Function Editor,可以看到如下圖
可以看出系統計算TRAD=0.2的Criterion時,是計算RMS Spot Radius,參考點為質心,使用GQ演算法,取樣是4個Ring以及8個arms。這反應到我們之前的Criterion以及Sampling設定。
此外Merit Function值為0.0487530834843748,與公差報告穩合。
利用Monte Carlo存檔瞭解公差擾動如何被執行
前面我們介紹如何把Sensitivity計算時用到的系統設定儲存下來。而對於Monte Carlo來說,則比較單純,使用者只需要在Monte Carlo Saves欄位中填入要儲存的檔案數量即可,如下圖
有時候如果我們想要瞭解許多不同的公差同時被套用在系統中時的效果,則可以利用Monte Carlo的這個存檔功能。
我以用Cooke 40 degree field這個系統內建範例說明,首先我們打開這個範例檔,移除所有變數以及求解,然後把孔徑固定住,如同文章前面的範例一樣。
假設我們有如下的公差設定
這裡面包含了單透鏡兩邊球面之間的傾斜 (TIRX/Y)、兩兩元件之間的位移與傾斜 (TETX/Y、TEDX/Y)、球面曲率 (TRAD)、球面不規則 (TIRR) 以及空氣與玻璃厚度 (TTHI) 等公差。
注意我們把公差都設定為0。
接著我們執行公差,執行前設定Monte Carlo Runs以及Monte Carlo Saves都設為1,設定如下
然後開啟產生出來的唯一個Monte Carlo檔案
可以看到元件位移的操作 (TETX/Y) 被解讀為CB,而表面不規則以及曲面之間的位移用Irregular面來模擬,此外可以看到後焦距被設為變數,因為我們有設定這個補償器。
利用這樣的技巧,可以檢查一些我們認為可能有問題的Monte Carlo檔案。