• 検索結果がありません。

光波の回折伝搬計算に関するメンバー関数

ドキュメント内 Wave Field Library (WFL) Polygon Source Library (PSL) (ページ 100-106)

第 3 章 リファレンス 55

3.3 WaveField クラス

3.3.18 光波の回折伝搬計算に関するメンバー関数

WaveField& AsmProp(double d)

戻り値 対象オブジェクトへの参照

説 明 高速畳み込みを用いた帯域制限角スペクトル法[2]により,距離d[m]だけ光波を伝搬(回折)する.Fresnel 近似のような伝搬距離dに関する制約はないが,この関数では円状畳み込みであるため,数10cm以上伝搬する とエリアシング誤差を生じる場合が多い.

Note

より正確な伝搬結果が必要な場合はこの関数の呼び出し前にEmbed()メンバー関数でサンプリング領域を4 倍拡張して呼出し後にExtract()メンバー関数を用いるか(サンプルコード参照),これらを一括して行う ExactAsmProp()メンバー関数を用いる.

ExactAsmProp()メンバー関数は正確な伝搬結果を与えるが,一方この関数の方が演算が高速であり,必要なメ モリ容量も約1/4という利点がある.

この計算法では伝搬後のサンプリング間隔は伝搬前と変化しない.

Example高速・コンパクトだが誤差が多い計算 W a v e F i e l d wf ;

wf . L o a d W f ( " s a m p l e . wf " );

wf . A s m P r o p (10 e - 3 ) ; //角スペクトル法による回折計算

3.3 WaveFieldクラス 101

wf . N o r m a l i z e ();

wf . S a v e A s W f ( " s a m p l e 1 . wf " ); //正規化して保存

Example正確な計算 W a v e F i e l d wf ;

wf . L o a d W f ( " s a m p l e . wf " );

wf . E m b e d ( 1 ) ; //4倍拡張

wf . A s m P r o p (10 e - 3 ) ; //角スペクトル法による回折計算

wf . E x t r a c t (1) //4分の1縮小

wf . N o r m a l i z e ();

wf . S a v e A s W f ( " s a m p l e 1 . wf " ); //正規化して保存

WaveField& AsmPropFs(double d)

戻り値 対象オブジェクトへの参照

説 明 帯域制限角スペクトル法[2]により,フーリエ空間にあるオブジェクト(スペクトル状態)を距離d[m]だけ 伝搬(回折)する.したがってオブジェクトはスペクトルでなければならない.フーリエ空間で追加の処理が必 要な場合にはこの関数が便利である.Fresnel近似のような伝搬距離dに関する制約はないが,数10cm以上伝 搬するとエリアシング誤差を生じる場合が多い.

Note

AsmProp()メンバー関数と同様,より正確な伝搬結果が必要な場合はFFTの呼び出し前にEmbed()メンバー 関数でサンプリング領域を拡張して逆FFTの後にExtract()メンバー関数を用いる.

この計算法では伝搬後のサンプリング間隔は伝搬前と変化しない.

Example

W a v e F i e l d wf ;

wf . L o a d W f ( " s a m p l e . wf " );

wf . Fft ( -1); //フーリエスペクトルに変換する

wf . A s m P r o p F s (10 e - 3 ) ; //角スペクトル法による回折計算

wf . Fft ( 1 ) ; //複素振幅に戻す

wf . N o r m a l i z e ();

wf . S a v e A s W f ( " s a m p l e 1 . wf " ); //正規化して保存

WaveField& ExactAsmProp(double d)

戻り値 対象オブジェクトへの参照

説 明 高速畳み込みを用いた帯域制限角スペクトル法[2]により,距離d[m]だけ光波を伝搬(回折)する.Fresnel 近似のような伝搬距離dに関する制約はない.またAsmProp()メンバー関数と異なり,この関数では線状畳み 込みをおこなうため伝搬に伴うエリアシング誤差は生じない.

Note

この関数はAsmProp()メンバー関数に比べて正確な伝搬結果を与えるが,演算中に一時的に必要なメモリ容量 が4倍であり,その分計算も遅い問題点があり,ラフな計算ではAsmProp()メンバー関数で十分であることも 多い.

この計算法では伝搬後のサンプリング間隔は伝搬前と変化しない.

Example

W a v e F i e l d wf ;

wf . L o a d W f ( " s a m p l e . wf " );

wf . E a c t A s m P r o p (10 e - 3 ) ; //正確な角スペクトル法による回折計算

wf . N o r m a l i z e ();

wf . S a v e A s W f ( " s a m p l e 1 . wf " ); //正規化して保存

WaveField& ShiftedAsmProp(const WaveField& source, int prec = 1)

戻り値 対象オブジェクトへの参照

説 明 sourceオブジェクトを精度指数precのシフテッド角スペクトル法 [4]で伝搬した結果を対象のオブジェ

クトに代入する.

Note

この関数では二つのオブジェクトの原点のグローバルなx, y位置がずれていてもかまわない.

伝搬距離はsourceオブジェクトと対象オブジェクトのローカル原点のグローバルz値の差から自動的に計算さ れる.

サンプリング間隔PxPyとサンプリング数は同一でなければならない.

この関数は,ShiftedFresnelProp()メンバー関数と異なり,近距離の伝搬計算でも正しい結果を得ることが できる.その半面,ある程度距離の長い伝搬ではShiftedFresnelProp()メンバー関数の方が計算精度が高い ことが多い.

精度指数precは通常1である.1以上の値を設定した場合,計算精度は向上するが,2のprec乗のサンプリ ング数拡張を行うので,メモリ消費量が増加し計算速度が低下する.

Example

W a v e F i e l d a , b ; a . L o a d W f ( " i n p u t . wf " );

b . C o p y P a r a m ( a );

a . S e t O r i g i n ( V e c t o r (0 , 0 , 0 ) ) ; // aの 原 点 は グ ロ ー バ ル 座 標(0 , 0 , 0) b . S e t O r i g i n ( V e c t o r (10 e -3 , 10 e -3 , 50 e - 3 ) ) ; // bの 原 点 は グ ロ ー バ ル 座 標(10 , 10 , 5 0 ) [ mm ]

b . S h i f t e d A s m P r o p ( a ); // abの 位 置 に 伝 搬 し た 結 果 をbに 入 れ る .

b . S a v e A s W f ( " r e s u l t . wf " );

WaveField& ShiftedAsmPropAdd(const WaveField& source, int prec = 1)

戻り値 対象オブジェクトへの参照

説 明 sourceオブジェクトを精度指数precのシフテッド角スペクトル法 [4]で伝搬した結果を対象のオブジェ

クトに加算する.

Note

詳細はShiftedAsmProp()メンバー関数参照.

サンプリング間隔PxPyとサンプリング数は同一でなければならない.

3.3 WaveFieldクラス 103 WaveField& ShiftedAsmPropEx(const WaveField& source)

戻り値 対象オブジェクトへの参照

説 明 sourceオブジェクトをシフテッド角スペクトル計算法により伝搬した結果を対象のオブジェクトに代入す

る.サンプリング数可変型.

Note

この関数ではShiftedAsmProp()メンバー関数とは異なり,伝搬元のsourceオブジェクトと伝搬先の対象オ ブジェクトは異なったサンプリング数でもよい.

WaveField& ShiftedAsmPropAddEx(const WaveField& source)

戻り値 対象オブジェクトへの参照

説 明 sourceオブジェクトをシフテッド角スペクトル法[4]により伝搬した結果を対象のオブジェクトに加算す

る.サンプリング数可変型.

Note

この関数ではShiftedAsmPropAdd()メンバー関数とは異なり,伝搬元のsourceオブジェクトと伝搬先の対 象オブジェクトは異なったサンプリング数でもよい.

WaveField& FresnelProp(double d)

戻り値 対象オブジェクトへの参照

説 明 Fresnel近似により,距離d[m]だけ光波を伝搬(回折)する.伝搬距離dにはFresnel近似の制約がある.

また,伝搬後のサンプリング間隔は伝搬前に比べて大きくなる.

WaveField& FourierProp(double f)

戻り値 対象オブジェクトへの参照

説 明 焦点距離f[m]のレンズを用いた2fセットアップによるフーリエ回折により光波を伝搬(回折)する.回折 後のサンプリング間隔は回折前とは異なる.

WaveField& BackFourierProp(double f)

戻り値 対象オブジェクトへの参照

説 明 焦点距離f[m]のレンズを用いた2f セットアップによるフーリエ回折により光波を後方伝搬(逆回折)す る.回折後のサンプリング間隔は回折前とは異なる.

WaveField& ShiftedFresnelProp(const WaveField& source)

WaveField& ShiftedFresnelProp(const WaveField& source, const ShiftedFresnelPropDescriptor&

sfpd)

WaveField& ShiftedFresnelProp(const Vector& origin, double px, double py) WaveField& ShiftedFresnelProp(const Vector& origin, double px, double py, const ShiftedFresnelPropDescriptor& sfpd)

戻り値 対象オブジェクトへの参照

説 明 第1と第2の形式ではsourceオブジェクトをシフテッドフレネル型計算法[5]により伝搬した結果を対 象のオブジェクトに代入する.この場合sourceオブジェクトの内容は変化しない(out-place型).第3と第4 の形式では対象オブジェクトそのものを位置origin,サンプリング間隔px,pyに伝搬した結果に変化させる (in-place型).第2と第4の形式ではShiftedFresnelPropDescriptor型デスクリプタsfpdを用いた事前計 算により高速化を行う.

Note

この関数では伝搬元と伝搬先の原点のグローバルなx,y位置がずれていてもかまわない.またそれぞれのPxPyが異なっていてもよい.

out-place型での伝搬距離はsourceオブジェクトと対象オブジェクトのローカル原点のグローバルz値の差

から自動的に計算される.in-place型での伝搬距離は伝搬前の対象オブジェクトの原点とoriginから計算さ れる.

この関数では伝搬元と伝搬先のサンプリング数は等しくなければならない.サンプリング数を変えたい場合は ShiftedFresnelPropEx()メンバー関数あるいはShiftedFresnelAdd()メンバー関数を用いる.

Exampleout-place

W a v e F i e l d a , b ; a . L o a d W f ( " i n p u t . wf " );

a . S e t O r i g i n ( V e c t o r (0 , 0 , 0 ) ) ; // aの 原 点 は グ ロ ー バ ル 座 標(0 , 0 , 0)

b . S e t O r i g i n ( V e c t o r (10 e -3 , 10 e -3 , 100 e - 3 ) ; // bの 原 点 は グ ロ ー バ ル 座 標(10 , 10 , 1 0 0 ) [ mm ]

b . S h i f t e d F r e s n e l P r o p ( a ); // abの 位 置 に 伝 搬 し た 結 果 をbに 入 れ る .

b . S a v e A s W f ( " r e s u l t . wf " );

Exampleout-place型でデスクリプタを利用 W a v e F i e l d a ;

a . L o a d W f ( " i n p u t . wf " );

a . S e t O r i g i n ( V e c t o r (0 , 0 , 0 ) ) ; // aの 原 点 は グ ロ ー バ ル 座 標(0 , 0 , 0) d o u b l e d = 100 e -3 , px = 5 e -6 , py = 3 e -6;

S e t D e f a u l t ( a . G e t N x () , a . G e t N y () , px , py , a . G e t W a v e l e n g t h ( ) ) ; W a v e F i e l d b , c , d ;

b . S e t O r i g i n ( V e c t o r (10 e -3 , 0 , d ));

c . S e t O r i g i n ( V e c t o r ( -10 e -3 , 0 , d ));

d . S e t O r i g i n ( V e c t o r (0 , 10 e -3 , d ));

//以下で伝搬計算.重複する無駄な計算を行わないので複数伝搬で高速化

S h i f t e d F r e s n e l D e s c r i p t o r s f p d ( d , px , py , a ); //デスクリプタ構築 b . S h i f t e F r e s n e l P r o p ( a , s f p d ); // abに 伝 搬 c . S h i f t e F r e s n e l P r o p ( a , s f p d ); // acに 伝 搬 d . S h i f t e F r e s n e l P r o p ( a , s f p d ); // adに 伝 搬 b . S a v e A s W f ( " result - b . wf " );

c . S a v e A s W f ( " result - c . wf " );

d . S a v e A s W f ( " result - d . wf " );

Examplein-place

W a v e F i e l d a ;

3.3 WaveFieldクラス 105

a . L o a d W f ( " i n p u t . wf " );

a . S e t O r i g i n ( V e c t o r (0 , 0 , 0 ) ) ; // aの 原 点 は グ ロ ー バ ル 座 標(0 , 0 , 0) a . S h i f t e d F r e s n e l P r o p ( V e c t o r (10 e -3 , 10 e -3 , 100 e -3 , a . G e t P x ()/2 , a . G e t P x ( ) ) ;

// aそ の も の を 伝 搬 す る a . S a v e A s W f ( " r e s u l t . wf " );

WaveField& ShiftedFresnelPropAdd(const WaveField& source, const ShiftedFresnelPropDescriptor& sfpd)

戻り値 対象オブジェクトへの参照

説 明 sourceオブジェクトをシフテッドフレネル型計算法により伝搬しそ,その結果を対象のオブジェクトに加

算する.

WaveField& ShiftedFresnelPropEx(const WaveField& source)

戻り値 対象オブジェクトへの参照

説 明 sourceオブジェクトをシフテッドフレネル型計算法により伝搬した結果を対象のオブジェクトに代入す

る.サンプリング数可変型.

Note

この関数ではShiftedFresnelProp()メンバー関数とは異なり,伝搬元のsourceオブジェクトと伝搬先の対 象オブジェクトは異なったサンプリング数でもよい.

WaveField& ShiftedFresnelPropAddEx(const WaveField& source)

戻り値 対象オブジェクトへの参照

説 明 sourceオブジェクトをシフテッドフレネル型計算法により伝搬しそ,その結果を対象のオブジェクトに加

算する.サンプリング数可変型.

Note

この関数の第1の形式では,ShiftedFresnelPropAdd()メンバー関数とは異なり,伝搬元のsourceオブジェ クトと伝搬先の対象オブジェクトは異なったサンプリング数でもよい.

WaveField& Rotate(const WaveField& source, RMatrix& crmat, SFrequency* c = NULL, Interpol ip = CUBIC8, bool Jacobian = false)

戻り値 対象オブジェクトへの参照

説 明 sourceオブジェクトを回転変換し,対象オブジェクトに代入する.RMatrix型のcrmatが座標回転の回 転行列を与える.キャリア周波数がゼロになるように,回転変換後は変換前の光波のキャリヤ信号成分が取り除 かれている.取り除いたキャリア信号成分の周波数は,SFrequency型のポインタcがNULLでない場合に*c

に設定される.回転変換で用いる補間方法はInterpol列挙型ipで指定する.また,Jacobian = trueの場 合はヤコビアンを用いた厳密計算を行う.

Note

回転変換の理論については文献[6,7]を参照.

WaveField& RotateFs(const WaveField& source, RMatrix& crmat, SFrequency* c = NULL, Interpol ip = CUBIC8, bool Jacobian = false)

戻り値 対象オブジェクトへの参照

説 明 sourceオブジェクトをフーリエ空間で回転変換 [6, 7]し,対象オブジェクトに代入する.sourceオブ ジェクトと対象オブジェクトはいずれもフーリエ空間になければならない.RMatrix型のcrmatが回転行列 を与える.回転変換後はキャリア周波数がゼロになるようにスペクトルがシフトしており,このシフト量は SFrequency型のポインタcがNULLでない場合に*cに設定される.回転変換で用いる補間方法はInterpol 列挙型ipで指定する.また,Jacobian = trueの場合はヤコビアンを用いた厳密計算を行う.

Example

R M a t r i x rm = C R M a t r i x Y ( 1 5 * Deg ); //座標をy軸 の 周 り に1 5度 回 転 す る 行 列 W a v e F i e l d a , b ;

a . L o a d W f ( " i n p u t . wf " );

a . Fft ( -1); // aを フ ー リ エ 変 換

b . F a k e F f t (); // bも 形 だ け フ ー リ エ 領 域 に 移 す

b . R o t a t e F s ( a , rm ); // aを 回 転 変 換 し てbに 入 れ る

b . Fft ( 1 ) ; // bを 逆 フ ー リ エ 変 換

b /= b . G e t N ();

b . S a v e A s W f ( " r e s u l t . wf " );

ドキュメント内 Wave Field Library (WFL) Polygon Source Library (PSL) (ページ 100-106)