2022年5月17日
API による回転対称イレギュラリティのモデル化

この投稿では、Matlab による Zemax アプリケーション プログラミング インターフェイス (ZOS-API) の機能を使用して製造上の重要な不具合をモデル化する方法を紹介します。このような不具合として、放物面ミラーの回転対称イレギュラリティ (Radially Symmetric Irregularity - RSI) があります。回転対称イレギュラリティ (RSI) とは、光学面の形状を持つ回転対称誤差の一群です。この誤差は、ゼルニケ多項式で表現され、3 次球面収差とそれよりも高次の球面収差の形態を持ちます。
放物面ミラーの例
放物面ミラーに RSI と全イレギュラリティを追加する様子を紹介します。このミラーは F ナンバーが 3 で、有効焦点距離は 150 mm です。


デモとして、以下の仕様でこの放物面に全イレギュラリティと RSI を追加します。

(この仕様の詳細については、ナレッジベース (zemax.com) の記事「回転対称イレギュラリティ (RSI) の概要」を参照してください。)
これにより、面上での P-V が 1 波長の全イレギュラリティと、P-V が 0.3 波長の RSI が配置されます。ナノメートルの単位では、500 nm の全面イレギュラリティと 150 nm の全 RSI に相当します。
コードの構造
RSI をモデル化する Matlab コードのサンプルが作成されています。このコードには、イレギュラリティと RSI のモデル化に関連する関数が記述されています。この関数 prepareSurface では、標準面または偶数次非球面がゼルニケ標準サグ面に変更されます。また、基本的なサポート関数もいくつか用意されています。たとえば、.ZMX ファイルのレンズ データ エディタ (LDE) に記述された情報を表示する displayLDE があります。
ここで最も重要な関数は AddBC (面番号, 波長, B, C) です。B は面の最大全イレギュラリティ、C は最大許容 RSI です。AddBC 関数は次のように機能します。
-
Z11、Z22、Z37、および Z56 の各 RSI 項にランダムな値を割り当てます。
-
面誤差の RMS 値を確認します。
-
C の適切な値が得られるようにスケーリングします。
-
定数で各ゼルニケ係数をスケーリングすると、同じ定数で RMS 値もスケーリングされるので、このスケーリングは 1 回のみですみます。
-
-
全イレギュラリティ B をモデル化するために他のゼルニケ多項式にランダム値を割り当てます。
-
Z11、Z22、Z37、および Z56 の各 RSI 項の値が影響を受けることはありません。
-
Z5 ~ Z37 を使用して全イレギュラリティをシミュレートします。
-
-
正しい全イレギュラリティに達するように、ゼルニケ項を反復スケーリングします。
インタラクティブ モードでの Matlab サンプルの実行
Matlab と API のインタラクティブ モードでは Matlab のコマンド ラインから API を制御できるので、このモードは効率的です。これにより、新しいコマンドの試用やリアルタイムでのコマンド変更ができます。
次のように、[プログラミング] (Programming) タブで [Matlab] (Matlab)、[インタラクティブ拡張機能] (Interactive Extension) の順に選択するとインタラクティブ モードで接続できます。

接続コードが自動的に開きます。

OpticStudio に戻り、[プログラミング] (Programming) タブで [インタラクティブ拡張機能] (Interactive Extension) をクリックすると OpticStudio が「リスニング」モードになります。
Matlab で、次のコマンドを使用して接続できるようになります。
>> TheApplication = MATLABZOSConnection9(7)
実際の MATLABZOSConnection の番号とインスタンスは、ここに示したものと異なることがあります。たとえば、初めての接続では MATLABZOSConnection(1) であることが考えられます。

Matlab を使用した RSI のモデル化
接続すると、次のように Matlab のコマンド ラインからファイルの読み込みと .ZMX ファイルからの情報収集ができます。
>> primary system = TheApplication.PrimarySystem
>> theLDE = primarySystem.LDE
>> theMFE = primarySystem.MFE
>> systemData = primarySystem.SystemData
>> savefilename = System.String.Concat(pwd,'\LensFileForTesting.zmx')
>> primarySystem.SaveAs(savefilename)
必要な関数はすべて ErinsABCFunctions.m ファイルに収められています。このファイルを Matlab で開くと、これらの関数をそれぞれ単独で読み込むことができます。
>> abc = ErinsABCFunctions
面をゼルニケ標準サグ面に変更することによって、目的の面を準備します。
>> ldetable = abc.displayLDE(primarySystem); disp(ldetable);
>> surfacetable = abc.prepareSurface(primarySystem,3); disp(surfacetable);
上記の 2 つのコマンドによる出力は次のようになります。

以降の処理のために、ミラーの開始サグを収集します。
>> startingsag = abc.getSag(primarySystem,3);
>> figure(); imagesc(startingsag); axis square;
これで、AddBC を使用して面のイレギュラリティ B と C を追加できます。
>> bctable = abc.AddBC( primarySystem, 3, 500.0, 1, 0.3);
>> disp( bctable);
この時点で公差解析を実行すると、AddBC を呼び出すときに B と C にランダム値を選択できます。変動後のサグを収集し、その値から開始サグを減算することでミラー面の誤差の変動を確認します。
>> bcsag = abc.getSag( primarySystem, 3);
>> sagdiff = bcsag-startingsag;
>> figure(); imagesc( sagdiff ); axis square;

また、これらの面誤差の最終的な P-V も確認できます。
>> abs(max( sagdiff(:))-min( sagdiff(:)) / (500*10^-6))
この値は 0.995 であり、目的とする B = 1.000 とは異なっています。この相違は、ゼルニケ係数を正しくスケーリングするために必要な反復で使用された精度の設定に起因しています。厳格な精度を設定すれば 1.000 に近い値が返されますが、計算には長時間を要します。
シミュレーションの終了後はインタラクティブ モードを終了します。
>> TheApplication.CloseApplication()
この投稿で紹介したサンプル コードを利用するには、ナレッジベースの記事「Modeling Rotationally Symmetric Irregularity (RSI) with the API – Knowledgebase (zemax.com)」を参照してください。
この投稿で取り上げているナレッジベース全体はこちらで確認できます。
Zemax の機能を試すには無料体験版をダウンロードしてください。

Principal R&D Engineer – Optical Manager, Application Development Engineering
Zemax an Ansys Company