Matlab でアプリケーション プログラミング インターフェイス (API) を使用して、放物面ミラー上の回転対称イレギュラリティ (RSI) をモデル化します。
著者: Erin Elliott
ダウンロード
はじめに
Matlab と API を使用して放物面ミラーにイレギュラリティと RSI を追加する方法を紹介します。RSI の説明については、ナレッジベースの記事「回転対称イレギュラリティ (RSI) の概要」を参照してください。
放物面ミラーの例
放物面ミラーに RSI と全イレギュラリティを追加する様子を紹介します。 このミラーは F ナンバーが 3 で、有効焦点距離は 150 mm です。
デモとして、以下の仕様でこの放物面に全イレギュラリティと RSI を追加します。
これにより、面上での P-V が 1 波長の全イレギュラリティと、P-V が 0.3 波長の RSI が配置されます。 ナノメートルの単位では、500 nm の全面イレギュラリティと 150 nm の全 RSI に相当します。
コードの構造
ファイル ErinsABCFunctions.m に Matlab コードのサンプルが用意されています。 このファイルは、基本的なサポート関数を収めています。たとえば、.ZMX ファイルのレンズ データ エディタ (LDE) に記述された情報を表示する displayLDE があります。
イレギュラリティと RSI のモデル化に関連する関数も、このファイルにあります。prepareSurface 関数は、標準面または偶数次非球面をゼルニケ標準サグ面に変更します。
ここで最も重要な関数は AddBC (面番号, 波長, B, C) です。B は面の最大全イレギュラリティ、C は最大許容 RSI です。AddBC 関数は次のように機能します。
- Z11、Z22、Z37、および Z56 の各 RSI 項にランダム値を割り当てます。
- RMS 面誤差を確認します。
- C の適切な値が得られるようにスケーリングします。
- 全イレギュラリティ B をモデル化するために他のゼルニケ多項式にランダム値を割り当てます。
- 正しい全イレギュラリティに達するように、ゼルニケ項を反復スケーリングします。
インタラクティブ モードでの Matlab サンプルの実行
Matlab と API のインタラクティブ モードでは Matlab のコマンド ラインから API を制御できるので、このモードは効率的です。これにより、新しいコマンドの試用やリアルタイムでのコマンド変更ができます。
インタラクティブ モードで接続するには Parabola_StartingFile.zmx ファイルを開きます。 次のように、[プログラミング] (Programming) タブで [Matlab] (Matlab)、[インタラクティブ拡張機能] (Interactive Extension) の順に選択します。
接続コードが自動的に開きます。
OpticStudio に戻り、[プログラミング] (Programming) タブで [インタラクティブ拡張機能] (Interactive Extension) ボタンをクリックします。 OpticStudio が「リスニング」モードになります。
Matlab で、次のコマンドを使用して接続できるようになります。
>> TheApplication = MATLABZOSConnection9(7)
実際の MATLABZOSConnection の番号とインスタンスは、ここに示したものと異なることがあります。 たとえば、初めての接続では MATLABZOSConnection(1) であることが考えられます。
Matlab を使用した RSI のモデル化
接続すると、次のように Matlab のコマンド ラインからファイルの読み込みと .ZMX ファイルからの情報収集ができます。
>> primarySystem = TheApplication.PrimarySystem
>> theLDE = primarySystem.LDE
>> theMFE = primarySystem.MFE
>> systemData = primarySystem.SystemData
>> savefilename = System.String.Concat(pwd,'\LensFileForTesting.zmx')
>> primarySystem.SaveAs(savefilename)
Matlab から ErinsABCFunctions.m ファイルを開きます。 これで、ErinsABCFunctions にある関数を読み込むことができます。
>> 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()
KA-01975
コメント
サインインしてコメントを残してください。