• 締切済み

時系列に不等間隔なデータのスペクトル解析

こんにちは。 私は、個人的に物理を学んでいるものです。 一人では手におえない問題に直面してしまいまして、皆様のお力をお借り出来たら…と思い、投稿させていただきました。 どうか、よろしくお願い致します。 早速ですが… 時系列に不等間隔なデータのスペクトル解析の方法を探しておりまして、 先日、Lomb-Scargle periodogram法というものを見つけることが出来ました。 このアルゴリズムを使用したいので、早速式を導きたいと思ったのですが、とても難しく、全く手がつかない状態です。 どのようにしてスペクトル解析が行われているかが理解できません。 Numerical Recipesのサブルーチンについている英語の解説を読みましても、データの平均値と分散を式の中で使用しているくらいしか分かりません。 この方法についてご存知の方がいらっしゃいましたら、教えていただけると幸いです。 また、普通周期解析をする際、等間隔のデータを用いる場合にはフーリエ変換を用いますが、Lomb-Scargleのperiodogram法では、何故不等間隔のデータも扱えるのかも知ることが出来たら…と考えています。 どうか、よろしくお願い致します。

みんなの回答

noname#65504
noname#65504
回答No.2

Lomb-Scargle periodogram法というのは知らないのですが、検索すると結構引っかかりますね。 http://richter.colorado.edu/~sethmc/science/scargle.html http://www.camda.duke.edu/camda04/papers/days/thursday/glynn/paper http://www.clecom.co.uk/science/autosignal/help/Numeric_Summary_(Lomb-Scarg.htm http://www.hulinks.co.jp/support/flexpro/v7/dataanalysis_lomb.html 3つ目のサイトに参考文献としてあげられているものです。この論文を読んでみてはいかがでしょうか? Jeffrey Scargle, Astrophysical Journal, v263, p.835 and William Press and G.B. Rybicki, Astrophysical Journal, v338, p.277. なお、ピリオドグラム(統計量)を利用した解析法については、時系列解析に関する本に載っていることがあります。

  • N64
  • ベストアンサー率25% (160/622)
回答No.1

関連するQ&A

  • 不等間隔での数値積分

    C言語を用いて,数値積分を行っています. シンプソン法を用いて等間隔のデータ列の積分は,理論式も一般の教科書に掲載されていて,プログラムも作製し,実行することができたのですが, 不等間隔のデータ列の場合の対処に困っています. 不等間隔の場合のシンプソン法の理論式は存在するというのはいくつかの教科書やWEBなどでも記述されているのですが,実際の式が掲載されている文献を見つけることができません. 不等間隔のシンプソン法の理論展開をご存知の方がいらっしゃいましたら,ご教授ねがいます.

  • scilabを使って時系列データをフーリエ変換するには?

    scilabを使ったフーリエ変換についての質問です。 あるデータ(メトロノームに合わせた指タッピングの時間間隔データでっす)を、フーリエ変換しなければいけないのですが分かりません。゜゜(´□`。)°゜。 具体的には、その時系列データ(512個あってexcelに収まってマス、A列に時間(5432ミリ秒とか)、B列に強さ(200g重とか))を、scilabを用いてフーリエ級数変換・・・スペクトル密度のグラフをつくる、な感じなことをするらしいのですが、プログラムがぜんぜんうまく書けません(今月末までつくらないといけないのに・・・)゜(゜≧□≦゜)゜ 生データの自己相関関数をつくって、フーリエ級数変換、高速フーリエ変換、グラフをプロット、のような流れなのかなぁ?と思うのですが、合ってますかぁ? もしよかったらサンプルプログラムを書いてくださると助かります(*^o^*) 先週から私なりにチャレンジしているんですが、エラーばっかりなんですぅ(涙) どうか、よろしくお願いします☆

  • エクセルでのフーリエ解析について

    ある実験データをエクセルのフーリエ解析ツールで解析したのですが、 出てきた複素数の値をどのような式にあてはめれば、 フーリエ級数を求められるのでしょうか? ※FFTでフーリエ級数を求めて、データ間の補間に使用したいと考えています。参考書などを見ても、パワースペクトルを求めるところまでしか書ていないので・・・

  • パワースペクトルからの時系列信号生成

    独学でMatlabを用いた信号処理を学んでいます。 ある論文で、パワースペクトルを所与として時系列信号を生成するということをしています。再現したいのですが、その具体的な実装方法がわからず困っています。 以下に自分の理解を書きます。 いまある時系列(長さn;2の階乗)をy、そのfft結果をY、そしてパワースペクトルをPyと表します。通常の解析では、パワースペクトルは  Py = Y.*conj(Y) / n で求められると思います。いまは逆にPyが与えられています。Yからyに戻すのは逆フーリエ変換により可能です。しかし、PyからYへの戻し方がわかりません。単にPyのルートをとるのでは複素数情報が失われてしまい結果が違ってしまいます。 なにかとても簡単なところでつまづいているだけな気はするのですが、ご教示いただければ幸いです。どうぞよろしくお願いいたします。 参考までに、論文ではPyはたとえば次のような式です。 Py = 0.625 ./ ((abs( (exp(-j.*2.*pi.*f.*dt) - 1.02 .* exp(-20.*j.*pi.*dt)) ... .* (exp(-j.*2.*pi.*f.*dt) - 1.02 .* exp(20.*j.*pi.*dt)) )).^2);

  • 有機化学の教科書、兼スペクトルデータ集についてお聞きします。

    有機化学の教科書、兼スペクトルデータ集についてお聞きします。 私は現在、大学院で有機合成を行っているのですが、 構造解析が苦手で、専門としている化合物以外はわからない状態です。 そこで、教科書、兼、スペクトルデータ集のようなものを買いたいと考えているのですが、 以下の2点で迷っております。 「シルバーシュタイン 有機化合物のスペクトルによる同定法」 「有機化合物の構造決定―スペクトルデータ集」 皆様は、この二つのうちどちらがおすすめでしょうか? よろしくお願いします。

  • 2つの時系列データのコヒーレンスの計算について

    工学系の学生をしております。時系列データの処理について勉強しているのですが、コヒーレンスの計算が理解できないので、質問させていただきます。 2つの時系列x(t),y(t)のコヒーレンスを計算したいのですが、教科書(例えば、日野幹雄:スペクトル解析)によると、 coh(w)=|Sxy(w)|^2/( Sxx(w)・Syy(w) )  coh:x(t)とy(t)のコヒーレンス Sxy:x(t)とy(t)のクロススペクトル  Sxx:x(t)のパワースペクトル  Syy:y(t)のパワースペクトル となっており、コヒーレンスcohは0から1の間の値ととると書かれています。 なのですが、x(t),y(t)のフーリエスペクトルをX(w),Y(w)とすると、  Sxx(w)=X*(w)・X(w)/T = |X(w)|^2/T  Syy(w)=Y*(w)・Y(w)/T = |Y(w)|^2/T  Sxy(w)=X*(w)・Y(w)/T = |X(w)|・|Y(w)|/T・exp(-theta) (ここで、X*,Y*はX,Yの複素共役、thetaはクロススペクトルSxyの偏角) となるため、cohの式に入れると、  coh(w)=|Sxy(w)|^2/( Sxx(w)・Syy(w) ) = ( |X(w)|・|Y(w)| )^2 / ( |X(w)|^2・|Y(w)|^2 ) = 1 となってしまい、周波数によらず常に1になってしまうのですが、 上記の考え方は間違っていますでしょうか? 他にもいくつか教科書を読んでみたのですが、どうにも一人で解決出来ず、こちらに質問させていただきました。 よろしくお願いいたします。

  • 離散フーリエ変換によるパワースペクトルについて

    研究で、閉ループ内の自然循環について調べています。 各箇所での温度変動の特徴を調べるために、ある一定時間の温度のデータをパソコンのフリーソフトで周波数解析(=DFT(離散フーリエ変換)計算)を行いパワースペクトルを得ました。 その評価の仕方は一応わかっているのですが、離散フーリエ変換についてまったく知識がないので、どのような計算でパワースペクトルが得られるのかわかりません…。 たとえば、計算は、サンプリング周期2sで1000sの温度変動のデータ(データ点500個)を用いて行い、横軸に周波数[Hz]、縦軸にパワースペクトル[℃の2乗/Hz]でグラフを出したって感じです。ちなみに作動流体は水です。 ウィキペディアなどで調べても、あれらがこの解析にどう利用されているのかがわかりません…上記の場合なら式はどうなるのかや、このような解析が行える理由等をわかりやすく示していただけないでしょうか? お願いします!

  • フーリエ変換のスペクトル

    フーリエ変換を勉強しても、なかなかわからないことが多くて困っています。現在EXCELのフーリエ解析ツールで変換して、パワースペクトルまで求められるようになっていますが、パワースペクトルがよくわかりません。 パワースペクトルは周波数領域の比みたいなものと勝手に認識しているのですが、例えばsin波の振幅を2倍するとピークのパワースペクトルはどうなるのか等、法則みないなものはありますか?実際に色々試しているのですが、よくわかりません。また、周波数0以外のデータの総和に何か法則がありそうなのですが、やはりよくわかりません。 1次元の周期成分を持つデータをフーリエ変換して、ピークが出るのですが、その値が何を示してるのかを上司に説明できるようになりたいので、アドバイスお願いします。

  • ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値に

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(k=0~N-1) f(k)exp(-2πkni/N) を考えています。 また、離散フーリエ変換して得られるスペクトルは √(Re^2+Im^2) で計算します。 離散フーリエ変換を適用する関数を、 振幅1の直流、及び振幅1で周波数5[Hz]の正弦波とします。 (この2つの信号は別々の信号で合成されていません。) サンプリング周波数を20[Hz]とした場合、サンプリングして得られるデータ列はそれぞれ、 直流: 「1, 1, 1, 1」 正弦波: 「0, 1, 0, -1」 となると想定されます。 (正弦波をサンプリングする場合は位相が関わってきますが、今回は気にしないで下さい。) このデータ列に対して上記の離散フーリエ変換を適用した場合、 得られるフーリエスペクトルの振幅値はそれぞれ、 直流: 「4」(直流のフーリエスペクトルの振幅値値) 正弦波: 「2」(5[Hz]のフーリエスペクトルの振幅値) となります。 (データ点数は上の通り4点) ここで質問なのですが、 離散フーリエ変換して得られるスペクトルの振幅値から元の関数の振幅値を求める場合、 フーリエスペクトルをサンプリングの総データ点数で割ることは数学的に納得できます。 しかしこの例の場合、フーリエスペクトルを総データ点数で割ると、 直流: 「4 -> 1」 正弦波: 「2 -> 0.5」 となってしまい、直流は正しいのですが、正弦波の元の振幅値を正確に求めることは出来ません。 この例の場合、フーリエスペクトルの振幅値から正弦波の振幅値を正しく求めるには、 「フーリエスペクトルの振幅値*2/データ点数」 としてやらなければいけません。 上記のことに関して、なぜこのようになるのかを(2をかける理由を)教えて頂けないでしょうか。 当方、数学についてはあまり詳しくないため、簡単に説明して頂けると幸いです。

  • フーリエスペクトルの振幅について

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの 振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(k=0~N-1) f(k)exp(-2πkni/N) を考えています。 また、離散フーリエ変換して得られるスペクトルは √(Re^2+Im^2) で計算します。 離散フーリエ変換を適用する関数を、 振幅1の直流、及び振幅1で周波数5[Hz]の正弦波とします。 (この2つの信号は別々の信号で合成されていません。) サンプリング周波数を20[Hz]とした場合、 サンプリングして得られるデータ列はそれぞれ、 直流: 「1, 1, 1, 1」 正弦波: 「0, 1, 0, -1」 となると想定されます。 (正弦波をサンプリングする場合は位相が関わってきますが、 今回は気にしないで下さい。) このデータ列に対して上記の離散フーリエ変換を適用した場合、 得られるフーリエスペクトルの振幅値はそれぞれ、 直流: 「4」(直流のフーリエスペクトルの振幅値値) 正弦波: 「2」(5[Hz]のフーリエスペクトルの振幅値) となります。 (データ点数は上の通り4点) ここで質問なのですが、 離散フーリエ変換して得られるスペクトルの振幅値から 元の関数の振幅値を求める場合、 フーリエスペクトルをサンプリングの総データ点数で割ることは 数学的に納得できます。 しかしこの例の場合、フーリエスペクトルを総データ点数で割ると、 直流: 「4 -> 1」 正弦波: 「2 -> 0.5」 となってしまい、直流は正しいのですが、 正弦波の元の振幅値を正確に求めることは出来ません。 フーリエスペクトルの振幅値から正弦波の振幅値を正しく求めるには、 「フーリエスペクトルの振幅値*2/データ点数」 としてやらなければいけません。 上記のことに関して、 なぜこのようになるのかを(2をかける理由を)教えて頂けないでしょうか。