• 締切済み

スペクトル解析におけるコヒーレンス

2つの変動している時系列をFFTによって複素フーリエ成分に分解し、それぞれの周波数成分での実部と虚部(2つの時系列なので4つの数値)の組み合わせからコヒーレンスとかフェイズを算出できるようになっています。クロススペクトルからの処理とも言えると思いますが。 実際に計算してみるとコヒーレンスの値がどの周波数成分でも1ばかりになっており、どうしたことかと思っています。コヒーレンスの差異は非常にケタの小さいところに出るのだろうかとか、計算が間違ってないかなとチェックしていますが、原因がわかりません。また、全く無相関なはずのランダムデータを2つで調べてもコヒーレンスが1になってしまい、お手上げです。 どのようなものでしょうか。また、ネットで調べてみるとコヒーレンスを計算する場合、特殊な処理が必要との記述もありました。その説明はMatlabによるものなので当方の環境(Fortran)と一致しません。コヒーレンスは1に近い値になるものでしょうか(つまり計算は正しい)。あるいはそれは間違いで何かの処理をしたら正しく(?)計算できるものでしょうか。コヒーレンスの計算はその定義どおりに計算しているので今でも間違っているはずはないのですが。 よろしくお願いします。

みんなの回答

  • kiyos06
  • ベストアンサー率82% (64/78)
回答No.1

1)以下のものを比較する必要がある。 1.1)あなたが考えるコヒーレンス 1.2)計算するソフトのコヒーレンス 2)以下の二つの単純な波で(1.1) (1.2)を比較する。 2.1)a sin(ωt) 2.2)b sin(ωt +φ) 3)これの結果で(1.1),(1.2)が異なる場合には、(1.2)の使い方やオプション等で自分が考えるコヒーレンスに合わせる。

関連するQ&A

  • クロススペクトルを算出する方法

    クロススペクトルを計算して求める具体的な方法についてお尋ねします.2つの時系列があって,各周波数ごとのコヒーレンスとかフェイズを算出して周波数による変化を図示したようなものだと思います. 2つの量をいっぺんに処理するようなので複素数ということになると思いますが.実部,虚部をそれぞれコスペクトル,クオドラチャスペクトルなどと言っていたと思います. さて,そこで質問ですが,1つの時系列でスペクトルを算出するFFTプログラムがある場合,その結果を元にしてクロススペクトルを算出することは可能でしょうか.2つの時系列のそれぞれのスペクトル(振幅,位相)を個別に算出できるプログラムがあり,それらからクロススペクトルを求められないかということです.それともクロススペクトルを求めるルーチンは,2つの時系列を放りこんでそれ専用のFFTのルーチンを経て出力されるものなのでしょうか. スペクトルを求める方法は,FFT, 最大エントロピー,相関関数の変換などいろいろあると思います. FFTだけが手元にあります. よろしくお願いします.

  • 音の逆フーリエ変換

    音のデータをFFTし、目的の周波数帯を削ってRFTするソフトを作っています。しかし、実部の削り方は分かっても、虚部のどこを削ると、目的の周波数帯を削ることができるのか分かりません。あるいは虚部には触れなくてよいのでしょうか。実部だけ目的の部分を削ってRFTすると、意外な音が聞こえてきました。 音声加工、(逆)フーリエ変換について教えてください!

  • パワースペクトルの0dBの値について

    matlabを用いて時系列データのパワースペクトルを計算、対数表示でグラフにプロットしています。 matlabのfft関数のヘルプに記載されていた例を参考に、以下のような自作の関数を組んで計算しているのですが、2つ質問があります。 1. この場合、パワースペクトルの0dBは、時系列の値ではいくつになるのでしょうか? 0dB = 1でしょうか? 2. 関数の中において、power_fftをN_fft(高速フーリエ変換時のデータ長さ)で割っている事の理由がわからなかったのですが、なぜ行っているのでしょうか? ------------------------------------------------ 以下、自作のパワースペクトル表示関数を示します function Power_db(Data_xx) fs = 1000; % サンプリング周波数 [Hz] N_fft = 2^12; % 4096個 xx_fft = fft(Data_xx,N_fft); power_xx = xx_fft.* conj(xx_fft) / N_fft; frequency = fs*(0:2047)/N_fft; % (0:2047)で500Hzまで plot(frequency,20*log10(power_xx(1:2048))) xlabel('Frequency [Hz]'); ylabel('Power Spectrum [dB]'); grid on; --------------------------------------------------------- 以上です。 何か足らない情報などがありましたらお申し付けください。 よろしくお願い致します。

  • 周波数解析のスペクトルについて

    waveファイルで取り込んだ音響データを、FFTを用いて周波数解析を行っています。 元のwaveファイルのデータは、ピーク値で20000示す時があるデータが入っているのですが、 そのFFTの結果が5000000など元の値とは桁違いの数字が出てしまいます。 これはなぜなのでしょうか? よろしくお願いします。 元データ サンプリング周波数:44.1kHz FFT解析条件 サンプル数:2048 窓:ハニング

  • 複素数と実数が混在するように見える式について

    時系列解析で、自己相関係数のフーリエ変換がパワースペクトルになるというウィナーキンチンの関係というものがあります。その式では複素数が含まれているので、実数を入力として複素数が含まれている式で計算された出力結果は普通は複素数ということになります。しかし、自己相関係数は実数の系列で、パワースペクトルも実数になると思います(実部と虚部の2乗和なので)。実数に複素数を絡ませて変換して出てきたものが実数になるということになってしまいます。ここが理解できないのですが、どのように考えていくのでしょうか。絶対に虚部がゼロになるから、ということなのでしょうか。 一般にFFTによるスペクトル変換では実数列は複素数の実部にあてて変換する(例えば虚部はゼロにしておくとか)ので複素数から複素数を入出力するということで理解できます。 実際にプログラムでの処理を考えているので概念的な説明だけでは実装することできません。 なお、私は常に標準的なFFTでフーリエ変換しているので複素数での入出力ということなので実数となる系列では先に進めないという感じなのですが。もし出力が実数ということになったとき実部がそれ、虚部がそれ、実部と虚部の2乗和がそれ、というのならわかるのですが。 よろしくお願いします。

  • 複素フーリエ変換の位相について

    画像のとおり位相0度から始まるA列の正弦波を複素フーリエ変換しました。 その実部、虚部のグラフがReal、Imagです。 虚数のみ正弦波の周波数のところにピークがあって、実部は0です。つまりこれは位相が90度又は-90度という事になります。 試しに45度から始まる正弦波を複素フーリエ変換すると、上記は-45度になりました。 フーリエ変換の位相というのはそれぞれの周波数成分を正弦波として開始時の位相を求めるものと思っていましたが、実は余弦波だとしているという事なのでしょうか?

  • 周波数解析について

    ある時系列データをセンサを使って計測し、FFTを行ったのですが、結果の見方など、いくつか疑問があります。 得られた時系列データを見ると、直流成分に比べて交流成分が非常に微小であったとします。 (たとえば大気温度を計測した結果、直流成分は20℃であり、それから±0.01℃変動など) ここで、この変動がどこから由来するものなのか知るためにFFTを行いました。 そこで質問です。 (1)振幅スペクトル(あるいはパワースペクトル)を求めると、直流成分が大きすぎて、交流成分は潰れて表示されてしまうと思うのですが、普通直流成分は除いて表示するものなのでしょうか? (2)実際には綺麗な周期性はない波形であるためFFTを行うとエイリアシングの様な現象が起こると思うのですが、FFTで得られた結果は低周波数領域、高周波数領域どこでも信憑性のある結果なのでしょうか? といいますのも、 (3)パワースペクトル密度の単位は今回ならば[℃^2/Hz]だと思うのですが、表示の仕方が人によってはデシベルであったり無次元であったりするのですがどれが正しいのでしょうか? 長くなりましたが、よろしくお願い致します。

  • コヒーレンス関数について

    二つの波形の一致率を調べるための方法を聞いたところ「コヒーレンス」を使えばいいとのことで、今コヒーレンス関数を調べております。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2314537 で、一応式は検索できたのですが、 1、http://dspace.wul.waseda.ac.jp/dspace/bitstream/2065/396/9/Honbun-31_chapter3b.pdf 2、http://www.hulinks.co.jp/support/flexpro/v7/dataanalysis_crsp.html#02 3、http://www.cybernet.co.jp/matlab/support/manual/r14/toolbox/signal/spectra7.shtml 4、http://www.onosokki.co.jp/HP-WK/c_support/tech_term/cf_fft/cf3_2.htm たぶん2,3,4は同じ事を書いてるのだと思うのですが、1は左辺に二乗があり、右辺に二乗がありません。これは A)クロスパワースペクトル密度とクロススペクトル、クロスパワースペクトルは別物と言う事でしょうか? B)r^2がクロススペクトルなのでしょうか?それともrがクロススペクトルなのでしょうか? 次に、コヒーレンス関数の式が上の1,2,3,4で求められるとしたら、パワースペクトル、クロスパワースペクトルとはいったいどうやって計算すれば良いのでしょうか? C)パワースペクトル・・・FFTの計算結果の√(実数部^2+虚数部^2)と言う事でいいんでしょうか? D)クロススペクトル・・・FFTの計算結果で、XとYで(実数部、虚数部)がそれぞれ(X,iX)、(Y,iY)があった時、クロススペクトルは ((X+iX)*(Y-Yi))^2=(XY-iXY+iXY+XY)^2 = (2XY)^2 で良いんでしょうか?(虚数部の計算は打ち消しあうので実数部だけでいいんですか?) よろしくお願いします。

  • FFT/スペクトルに関して

    エクセルにてFFTを勉強しているのですが、FFT後に出てくる縦軸のスペクトルとは何でしょうか? 時間軸×音圧 ⇒ 周波数×音圧に変換したんですが、この縦軸は音圧ではなくスペクトルというものだと理解しています。このスペクトルが示すものは単にその周波数の成分が強い傾向にあるというのを示しているだけで、その周波数の音圧がいくらというのを示しているのではないのでしょうか? 現在、訳あってその周波数の絶対量を使用したいのですが、その数字に意味はないのか教えてください。

  • 2次元データの複素フーリエ変換するコードの作成

    数値計算等の2次元や3次元の空間データ(実数)をFFTによって複素フーリエ変換する実際のプログラム化についてお尋ねします。プログラムの実装ということなので実際的な質問で長文になっています。すみません。 まず、手持ちに1次元のFFTプログラムがあるということを前提とします(逆フーリエ変換すると、元の実数の系列が出ることは確認済のコード)。そして2次元配列の実数のデータがあるとします。この2次元のデータを2次元の複素フーリエ成分に変換することが目的です。(私の分野では波数空間への展開ということになり、複素数ですから位相情報も含まれることになります。) 例えば、x,y方向に16x16のデータあるとすると、 do j=1,16 ここでjを固定してi:1~16の実数データについて1次元のFFTをかける。 このとき、FFTにかける16個の実数データを複素数の実部に入れて、虚部はゼロとする。 FFTの出力も複素数となっている。 ここで出てくる複素フーリエ変換の結果は実部・虚部で前半(0~7)であり、後半(8~15)はその対称とか点対称(符号が逆)とかになっている(虚部をゼロとしているから)。それを複素数の2次元配列として保存する。 enddo 次いで、 do i=1,16 iを固定してj方向にFFTをかける。このとき、FFTに放り込むデータは上記の複素フーリエ変換の出力結果である2次元データを使う。具体的には複素数の2次元データをj方向の1次元の複素数配列にコピーしてFFTをかけて、その出力結果を新たな2次元配列の複素数に保存する。 enddo この結果、得られた2次元の複素数のデータが、私の所望のデータである、ということです。 式が指し示すとおりのことをすればいいのだ、ということに尽きるのだろうと思いますが、アルゴリズム的にアンバランスのように見えてこれでいいのかなと思えてしまいます。最初に虚部をゼロにするというようなこととかです。そのため確信が持てません。また、結果を見てもわかりにくい面があります。 このような考え方で実装するということいいのでしょうか。全く間違っているでしょうか。もしその場合、考え方の間違いを指摘して頂けると助かりますが(根本的な間違いだったら指摘しようがないということにもなりますが。) また、例えば、始めから実数の2次元配列をすぐに2次元複素数の実部に入れて、虚部をゼロとしてそこからコード方がすっきりするのかなと思いますが。 この辺が確定すると、3次元は同じことということになります。 サンプルコードがネットに出ているという面もありますが、自分でやる方が組み込みやすいのでお尋ねしました。 長文で申し訳ありませんが、よろしくお願いします。