API による回転対称イレギュラリティ (RSI) のモデル化

Matlab でアプリケーション プログラミング インターフェイス (API) を使用して、放物面ミラー上の回転対称イレギュラリティ (RSI) をモデル化します。 

著者: Erin Elliott

ダウンロード

Article Attachments

はじめに

Matlab と API を使用して放物面ミラーにイレギュラリティと RSI を追加する方法を紹介します。RSI の説明については、ナレッジベースの記事「回転対称イレギュラリティ (RSI) の概要」を参照してください。

放物面ミラーの例

放物面ミラーに RSI と全イレギュラリティを追加する様子を紹介します。  このミラーは F ナンバーが 3 で、有効焦点距離は 150 mm です。

 

LDE

Layout

デモとして、以下の仕様でこの放物面に全イレギュラリティと RSI を追加します。
ISO
これにより、面上での 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) の順に選択します。

 

Connection

 

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

 

Connection

 

OpticStudio に戻り、[プログラミング] (Programming) タブで [インタラクティブ拡張機能] (Interactive Extension) ボタンをクリックします。  OpticStudio が「リスニング」モードになります。

 

Connection 

Matlab で、次のコマンドを使用して接続できるようになります。

>> TheApplication = MATLABZOSConnection9(7)

実際の MATLABZOSConnection の番号とインスタンスは、ここに示したものと異なることがあります。  たとえば、初めての接続では MATLABZOSConnection(1) であることが考えられます。  

 

Connection

 

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 つのコマンドによる出力は次のようになります。

 

Result

Result

以降の処理のために、ミラーの開始サグを収集します。

>> startingsag = abc.getSag(primarySystem,3);
>> figure(); imagesc(startingsag); axis square;

 

Result

 

これで、AddBC を使用して面のイレギュラリティ B と C を追加できます。

>> bctable = abc.AddBC( primarySystem, 3, 500.0, 1, 0.3);
>> disp( bctable);

 

Result


 
この時点で公差解析を実行すると、AddBC を呼び出すときに B と C にランダム値を選択できます。
変動後のサグを収集し、その値から開始サグを減算することでミラー面の誤差の変動を確認します。

>> bcsag = abc.getSag( primarySystem, 3);
>> sagdiff = bcsag-startingsag;
>> figure(); imagesc( sagdiff ); axis square;

 

Result


 
また、これらの面誤差の最終的な P-V も確認できます。

>> abs(max( sagdiff(:))-min( sagdiff(:)) / (500*10^-6))
 
この値は 0.995 であり、要求した B = 1.000 とは異なっています。この相違は、ゼルニケ係数を正しくスケーリングするために必要な反復で使用された精度の設定に起因しています。  厳格な精度を設定すれば 1.000 に近い値が返されますが、計算には長時間を要します。
シミュレーションを終了した後は、インタラクティブ モードを閉じる必要があります。

>> TheApplication.CloseApplication()

KA-01975

この記事は役に立ちましたか?
2人中2人がこの記事が役に立ったと言っています

コメント

0件のコメント

サインインしてコメントを残してください。