AOシミュレータで透過型AOの可能性をみる


透過型AOが実現可能かどうかをすばるAOチームのOliver 氏の開発したシミュレータ(Cfits)を使って検証するのが目的です。
AOに関してはこちらのページに随時まとめていこうと思います。
  1. インストールと動作確認(go)
  2. AOの可能性検証に必要なファイル(go)
  3. PSFを作成(go)
  4. 現在の問題点(go)
  5. コマンドレファレンス(go)

インストールと動作確認

とりあえず、Oliver 氏によるインストール手順を示したページ(こちら)に従えばインストールは無事に完了します。
但し、Oliver 氏は恐らくsolaris を、私はdebian を使っているのでmakefile を書くスクリプトに多少の変更が必要でした。ついでに、Oliver 氏はCfits をroot で用いるように設定していたので、インストール前にいくつかのヘッダファイルに書いてあるファイル名を書き換えてやる必要がありました。(流石にroot では用いたくないので…)

インストールが終われば、高速フーリエ変換を最適化するためのタスクをコマンドを走らせます。
web には『1日くらい』と書いてあったのに、メモリ(2G)をフルに使って(でもCPU占有率3%)約10日、走り続けてやっと終わりました。(その間パソコンが使えなかった)
高速フーリエ変換を最適化しておくと、実際のシミュレーションの時に計算が速くなるそうです。

高速フーリエ変換の最適化も終わったので、動作確認&入出力ファイルの確認です。

AOの可能性検証に必要なファイル

AOシミュレータを使ってAOの可能性を見るときに必要なファイルは各時刻の波面ファイルです(AO素子で修正されたものではなくて)。
これはmktwfs コマンドで作ることができます。
右のような画像が、一定の時間ステップごとに作られます。これは0.001[s]毎、5ステップの画像。画像は一定枚数ごとにまとめて保存されています(時間や枚数は調整が可能)。これは、望遠鏡の瞳における波面のphaseファイルです。さらに、主鏡の形やスパイダーの配置を反映するamplitude ファイルが必要になります。

これらのファイルを使ってPSF(Point Spread Function)を作るのが目的になります。

PSFを作成

AOシミュレータを使って波面ファイルからPSFファイルを作成する手順は以下のとおりです。手順の理由・PSFに関してはこちらのページを参考。
  1. 大気のマスターイメージ・ファイルを作る。
  2. 波面ファイルを作る。=>瞳のphase ファイルとamplitude ファイルができる。
  3. 瞳のphase ファイル・ampritude ファイル(ただし瞳の形を考慮するために一度IRAFで編集する必要がある)をシミュレータにロードする。
  4. phase イメージ・ampritude イメージを複素数(瞳関数)に変換する。
  5. 瞳関数をFourier 変換する。
  6. Fourier 変換したものを>phase イメージ・ampritude イメージに変換する。
  7. ampritude イメージをファイルに保存して2乗する。
たとえば、単純に円形の瞳のPSFを作ると右のようになりました。(左の図:瞳関数。ただし、phase は0として揃えている。右の図:PSF。)


検証その1:Broad Band Filterを想定して検証

PSFを使って、マスクをかける効果について確かめることができたので、透過型AOの検証を行います。まずは、BBF(Broad Band Filter:広帯域フィルター) を想定した検証です。この場合、波面の傾きをtip-tiltで補正し、それに±π/2でマスクをかけることを考えます。

検証その1:Naroow Band Filterを想定して検証

透過型AOの検証2つ目は、NBF(Narrow Band Filter:狭帯域フィルター) を想定した検証です。この場合、位相は、2nπのずれは同位相とみなせます。tip-tiltはなしです。

問題点

2008.09

画像がfits ファイルなのかどうかの問題。
波面のファイルなどはfits 形式で保存されているようですが、IRAF を使って画像が開けないので、一手間加えないといけません。

=>これは拡張子の問題だったので、「.fits」で書き込むように設定しなおせば開けるようになりました。

2008.08

シミュレーション全体の時間を決めるAOtimeMAXというパラメータ(ここで設定)が現在2.0s 以上にできない点です。(segmentation fault になる。)
刻み幅などを短くしてもエラーは改善されず、プログラムの方で何か問題があるのかなと現在調べている状態です。

=>これは波面の画像の枚数(ここで設定)でリミットされているようです。波面のファイルはWFTIME_STEPで決められた時間ごとにTIME_SPANセットできます。(WFTIME_STEP * TIME_SPAN枚ほど画像ができる。)これらの画像分だけシミュレーションができるようです。


コマンドレファレンス

とりあえずよく使うコマンドの備忘録です。色付はパラメータです。
Fourier 変換した後座標がひっくり返るので、このコマンドで元に戻します。
コマンド名内容メモ
ml?利用可能なモジュール名を表示
proclst modulenamemodulename の中にある利用可能なコマンドを表示
p? commandcommand の使い方を提示するヘルプ同じ内容のものがwebにもあります。そのコピーは ~/Cfits/HELP_html/ にもあります。
seve_fl imageename outputfileイメージの保存imagename ファイルをoutputfilename に保存します。作った画像は「イメージ」としてシミュレータのメモリーに残っていますが、「ファイル」として残すにはこのコマンドが必要。
loadfits inputfilename imagenameファイルのロードinputfilename ファイルを取り込んでimagename イメージとしてロードします。シミュレータで画像を処理するには必ず「イメージ」として取り込まなければいけません。
img_stats imagenameイメージの情報を表示imagename イメージの情報(平均や最大値・最小値など)を表示します。
mkmastert t0 t1 4096大気層のマスターイメージを作成波面センサに入れる大気層を作る左の場合は画像サイズが4096のマスターイメージができる。必ず2枚セットで作ります。
mktwfs波面ファイルを作成subAOsim と同様にAOsim.conf ファイル、turble.proc ファイル、turblance phase screen ファイルが必要。
breakcube imagenamecube ファイルを個々の画像に分解imagename イメージ(波面ファイルのようにcube データになっているもの)を個々のイメージに直します。できるイメージ名はimagename_0%d5 になります。
amph2c ampimage phaseimage outputimageamplitute とphase から複素数に変換ampimage とphaseimage の2つのイメージから複素数イメージoutputimage を作成します。
fft2d inputimage outputimage2次元Fourier 変換imputimage を2次元(複素数)Fourier 変換してoutputimage を作成します。(実=>複素数Fourier 変換を行うにはfft2dr を用います。)
permut imagenameピクセルの並替え
c2amph inputimage ampimage phaseimage複素数からamplitute とphase に変換複素数イメージinputimage からampimage とphaseimage の2つのイメージを作成します。
initfft高速フーリエ変換の最適化とにかくメモリと時間が必要!一回やれば良いようです。
subAOsimAOシミュレータを起動シミュレータを動作させるには、AOsim.conf ファイル、turble.proc ファイル、turblance phase screen ファイルが必要。



back to Home