これみたいな一定間隔で取られたデータをIDLで離散フーリエ変換する方法。自分で調べたけど全くわからなくて温まった。
データはが1列で6480行ずーーーーーっと値が続いてるやつ。↑の図。これをIDLで離散フーリエ変換する。
IDL> openr,1,'data.dat' ;データのdatファイルを開く
IDL> input=DblArr(1,6480) ;インプットさせる配列、Arrayを用意する
IDL> readf,1,input ; inputにデータを読ませる
IDL> close,1 ; datを閉じる
IDL> result=Abs(fft(input)) ; フーリエ変換してそのパワーをresultに入れる
IDL> freq=findgen(6480)/(6480*40.)*1e6 ;findgenで1から6480まで数を作って周波数変換で6480*40とする。後ろの1e6はμHzで見るために。ここでポイントは40.とドットを打つこと。打たないと整数と思ってくれない。あと10^6じゃだめだった。1e6とする。
IDL> output=plot(freq,result,/ylog) ; outputって名前のところにplotする。plot(x,y,option)。
これで
となる。画像の保存のコマンドもあるだろうけど、ちょっと今はわからないのでwindowに出てきた保存ボタンで保存した。
普通のfftコマンドというかプロシージャーで出てくるアウトプットは
( 0.0135218, 0.00000)( 0.00441036, -0.00179633)
って感じでカッコつきでしかも2列。これは実部と虚部。あとフーリエ変換後の図を見るとわかるんだけど、ちょうど中心に対して軸対称。これは
FD(ω+2ωnyq)=FD(ω)、FD(2ωnyq-ω)=F*D(ω)
で中心に対して複素共役になっているから。ここらへんは勉強不足なので。わかりません。
0 件のコメント:
コメントを投稿