Optics Japan 2004 講演予稿集, pp.304〜305, 吹田 (2004.11.5)

オブジェクト指向波動光学シミュレーション
ライブラリ — LightWave

Object-Oriented Library for Computer Simulationin Wave-Optics — LightWave
松島恭治

Kyoji Matsushima
関西大学工学部 先端情報電気工学科

Department of Electrical Engineering and Computer Science, Kansai University
E-mail : matsu@kansai-u.ac.jp
ABSTRACT
Object-oriented library for numerical simulation in wave-optics, named LightWave, is reported.
The LightWave library is implemented in C++ language and features high productivity and highspeed simulation. The general idea of the LightWave object and its basic usage is presented.
1yy 0

はじめに(a )近年の PC の発展は目覚ましく，その演算能力は一xx 0

時代前のスーパーコンピュータをすでに凌駕していると言われている．一方，電子ビーム描画等による微z細加工技術も急速に発展しつつあり，それによる計算u 0(x 0, y 0)

機合成ホログラム (以下 CGH) や回折光学素子 (以下DOE) の応用も急速に進みつつある．このような微細構造素子で支配的な効果は回折現象となるため，計算(b )機支援によるその設計・評価には本来巨大な演算能力, yS o u rc eu (x , y )D e s tin a tio n, xが必要であるが，PC の発達によりデスクトップでこの様な素子の設計開発が可能になりつつある．
しかしながら，比較的計算が容易な，微細構造が波P ro p a g a tio n
N y長の 10 倍程度以上のスカラー回折理論 (フーリエ光N x学) 領域であっても，実際に回折型素子の設計ソフト

L ig h t W a v eo b je c tを作成し，その正当性の検証を行うことは容易ではな
い．また，素子によっては極めて巨大な計算量を必要とするものもあるため，実行速度が不十分なソフトでFig. 1 Distribution of complex amplitudes in Fourier

は事実上使い物にならないこともある．そのため，こoptics (a) and the LightWave object (b).の種のソフトの開発者は，フーリエ光学だけでなく数徴は，オブジェクト指向技術を用いて実装されている値計算技術にも十分な知識と技能を必要とする．
そこで我々は，フーリエ光学に関する基本的な知識ため理解が容易で柔軟性が高く，ソフトの生産性が非さえあれば，FFT 等を含む数値計算技術の詳細を必常に高いことである．また，完成したソフトはライブ要としない波動光学シミュレーションライブラリとしラリ無しで書き下ろしたソフトと同等以上に高速実行てLightWave ライブラリの開発を行ってきた [1]．またが可能である．本報告ではこのライブラリの原理と利これを実際の DOE や CGH の設計計算に利用し [2, 3]，用方法について述べる．

その一部をフリーソフトとして配布している1 ．この

2ライブラリは Windows や Linux の開発環境とともにLightWave オブジェクトの概念用いることができ，この様な回折型素子の設計開発をFig. 1(a) は，光学の教科書等で回折現象とその理著しく容易にすることができる．このライブラリの特論の解説に用いられる図である．光は，(x, y, 0) 平面上の複素振幅の分布 u0 (x0 , y0 )，あるいは u(x, y) とし

1 LightWave の一部を以下の Web サイトで配布している．て表わされ，フレネルキルヒホッフ積分や，フレネル

http://www.laser.ee.kansai-u.ac.jp/lightwave

1

Optics Japan 2004 講演予稿集, pp.304〜305, 吹田 (2004.11.5)

O b je c t

22 00 m m

L e n sf = 1 0 m m:o b je c t:P h a s e o f le n s

1: #include <LightWave.h>
2: void main(void)
3: {4:LightWave a(128,128,2e-6);
5:a.LoadBMP("Shion-128gs.bmp", LW_AMPLITUDE);
6:
a.Embed(3);7:a.SPWProp(20e-3);//伝搬距離 20mm
8:
9:LightWave b = a, c = a;10:
b.SetQuadraticPhase(10e-3);// 焦点距離 10mm
11:b *= a;12:
c.SetGaussian(0.3e-3,40); //開口半径 0.3mm
13:c *= b;14:
15:
c.SPWProp(20e-3);//伝搬距離 20mm
16:
c.Extract(3);17:c.Normalize();18:
c.SaveAsBMP("image.bmp", LW_AMPLITUDE);
19: }P u p il

22 00 m m

Im a g e:P u p il fu n c tio n
S c re e nFig. 2 Model of image formation by a lens and its

Fig. 3 A C++ source code to simulate image forma-expression by using LightWave objects.

tion by a lens.

積分等の公式を用いて，波源である u0 (x0 , y0 ) から，

(a )

(b )

(c )

(d )

スクリーン面での u0 (x0 , y0 ) が計算される．

Fig. 1(b) に示すように，この 2 次元複素振幅分布u0 (x0 , y0 ) を離散化し，複素数値の 2 次元配列としてカプセル化したものがLightWave オブジェクトである．
LightWave はオブジェクト指向言語である C++言語を用いて実装されたクラスであり，2 次元配列データ以外に，その光波の波長，複素振幅分布の x 方向と y方向の標本数 (Nx , Ny )，標本化間隔 (∆x , ∆y ) 等を一つのインスタンス (変数) に内包している．ライブラ
リの利用者はこのLightWave オブジェクトを操作することによりシミュレーションを構成する．そのための関数が 130 種以上ライブラリに実装されている．

3Fig. 4 An object (a) and images formed through different sizes of pupil (b)–(d).

LightWave を用いたプログラム例(d) に示す．光学理論通り，瞳の大きさを変えると像LightWave を用いたプログラム例として，Fig. 2 にの鮮明度が変わることがわかる．

示した簡単な結像光学系の C++言語シミュレーショ
ンコードを Fig. 3 に示す．このシミュレーションで4は，Fig. 2 下図に示したとおり，三つのLightWave オ

実行環境とまとめLightWave を用いたプログラムは Windows の Visual Studio.NET 開発環境，あるいは Linux/Unix でブジェクト a, b, c をそれぞれ，物体 (画像)，レンズ位相分布，瞳関数に割り当てて用いる．ソースコード
中の 4〜6 行では，LightWave オブジェクト a を生成gcc コンパイラを用いて作成することができる．特して物体として画像を読み込んでいる．7 行ではそのに gcc 版では 64 ビット CPU&OS の環境下で用いるオブジェクト a を距離 20mm 伝搬している．9〜13 行

ことにより，搭載メモリ量によってのみ制約される

では b, c を生成してそれぞれレンズの位相と円形瞳大きな標本数のオブジェクトを取り扱うことができ関数を設定し，伝搬してきた a を乗算した結果を c にる．利用言語は基本的に C++であるが，ドット NET代入している．c を 15〜18 行でさらに 20mm 伝搬し，版LightWave では，C#等のドット NET 対応言語でその振幅分布を bmp 形式画像ファイルとして保存し利用することも可能である．ている．
参考文献

このソースコードをコンパイルし，LightWave ライ[1] 松島: HODIC Circular 23, 4, 17-27(2003).
[2] K. Matsushima: Technical Digest of ICO 2004, 467–468(2004).
[3] 松島, 森村, 平井, 布施, 栗巣, 江畑: 第 29 回光学シンポ
ジウム, 81(2004).

ブラリファイルと共に実行することにより，シミュレーションが実行できる．このシミュレーションコードでFig. 4(a) を入力画像として，円形瞳関数の大きさを変えて結像した場合のシミュレーション結果を (b)〜2