• ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.2

スペクトル密度を求めるには、 1.生データをFFTして2乗 ていうのと、 2.生データの自己相関関数を計算してそれをFFT ていう2通りの道筋があるわけですが、(ウィーナー=ヒンチン) ノイズを大量に含むデータで、ノイズをたくさん含む生データの場合は、2.の方がノイズの処理がしやすくていいでしょう。

asakoooooo
質問者

お礼

ありがとうございます! 2通りやり方があるのですね。 勉強してみます!

その他の回答 (1)

回答No.1

Excelからのデータの読み込みはうまくいっているのでしょうか。参考URLにその方法が書かれています。フーリェ級数変換は関係ないと思います。FFTを使えばよいと思いますが、FFTの使い方はコツが必要です。単にFFTしても512個のデータをフーリェ変換しますので、グラフに出力しても周波数との対応がとれません。そこらへんは自分で考えるかwebで検索してみて下さい。scilabではあまり情報がありませんので、matlab関連で検索するとよいかもしれません。

参考URL:
http://tokida.sakura.ne.jp/Hobbies/computer/Scilab.htm#SEC2
asakoooooo
質問者

お礼

いろいろやっているのですが、まだうまくいっていません。。。(涙) MATLABのファイルを参考にしてプログラムをつくっているのですが、scilabにはない関数があったりして、それを代替する関数がうまくかみ合っていないのかもしれないです。。。

関連するQ&A

  • フーリエ変換 自己相関

    ある信号を自己相関し、その関数をフーリエ変換するとパワースペクトルが求められますが、 パワースペクトルには位相情報がありません. 自己相関で積分した時点で位相情報が消えてしまうと思うのですが、 ではなぜ、ある信号をフーリエ変換しても位相情報は消えないのでしょうか? フーリエ変換も積分ですよね? フーリエ変換は複素指数関数を使うからでしょうか?

  • エクセルを使用しフーリエ変換でグラフを作るには?

    課題でエクセルでフーリエ変換でグラフにするのですが、サンプリング周波数と時系列データから時間波形とフーリエスペクトルのグラフを作らないとなりません。 エクセルの使い方やフーリエ変換も勉強したばかりで分からないことだらけです。ネットや本などで調べても出来そうになかったので、どうか教えていただけると幸いです。

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

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(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をかける理由を)教えて頂けないでしょうか。 当方、数学についてはあまり詳しくないため、簡単に説明して頂けると幸いです。

  • Scilab

    scilabで x(n)=U(n)-U(n-N)をfftを用いてフーリエ変換する プログラムを教えてください!

  • フーリエ変換をしたいのですがデータがないのです…そこで

    私は、今、授業の課題研究でフーリエ変換を試みています。インターネットなどでいろいろな情報を集めてみたものの、EXCELでフーリエ変換する際のデータをどうやって出すのか分かりません。この、データを出す方法を教えていただけませんか?ちなみに、J-POPをフーリエ変換して1/fゆらぎのグラフを書きたいのです。どなたか至急教えてください。お願いします!

  • フーリエ変換はsin波cos波で・・・

    フーリエ変換についてなんですけど、 フーリエ変換はある波長でも何でもつまりは、方程式をsin波とcos波の実数倍をたし合わせたもので表現しようというものですよね? なのに、なぜ、フーリエ変換した後のグラフはスペクトルがあるグラグになるのですか?

  • MATLABでtxtから読み込み,高速フーリエ変換

    とある大学生です. あるプロットデータの解析で高速フーリエ変換したいのですが,やり方がわかりません. MATLABを使えば簡単らしいですが,あまり詳しくなく手こずっており,ネットで調べてもわかりませんでした. データ提出の締め切りも近いため,この場をお借りして質問しました. 具体的には,以下に示すようなテキストデータを読み込んで,高速フーリエ変換をしてグラフ化したいです. それで各箇所の周波数を解析する予定です. テキスト読み込み,フーリエ変換,グラフ化のすべてをこなせるコマンド記述が知りたいです. ご回答,よろしくお願い致します. filename.txt ----------------------------------------------- (何行かあるヘッダー) 時間(秒) [TAB] 箇所1 [TAB] 箇所2 [TAB] 箇所3 0.0000 [TAB] 1.000 [TAB] 2.012 [TAB] 1.111 1.029 [TAB] 4,000 [TAB] 2.111 [TAB] 1.109 3.100 [TAB] 8.888 [TAB] 1.029 [TAB] 5.921 ~省略~ 40.0000 [TAB] 2.987 [TAB] 3.195 [TAB] 123.11 (何行かあるフッダー) ----------------------------------------------- あと,できればでいいのですが・・・ 時間窓の両端が同じ値でない場合に出る擬似的なスペクトルを抑える窓関数の畳み込み方も教えていただきたいです.

  • scilabのグラフが表示されません。

    scilabのグラフが表示されません。 plotでグラフを表示させようとすると、何も表示されずに強制終了されてしまいます。 デモプログラムでも、グラフが表示されないため、プログラム自体に問題があるわけではないようです。 scilab 5.2.2を使用しています。同じような症状や、原因をご存じの方はおられないでしょうか?

  • 自己相関関数とパワースペクトル密度関数、フーリエ変換について。

    自己相関関数とパワースペクトル密度関数、フーリエ変換について。 パワースペクトル、パワースペクトル密度と自己相関関数についての質問です。 (tは時間、hは次数、fは周波数として) ある信号x(t)の自己相関関数r(h)をフーリエ変換すると、その信号のパワースペクトル密度関数p(f)になるとネットにあったのですが、パワースペクトル密度関数p(f)と、信号x(t)をそのままフーリエ変換して得たパワースペクトルX(f)はどう違うんでしょうか。 ちなみに数学的な話というよりはコンピュータ上の処理(離散値)で考えています。 もともとパワースペクトルが『自己相関関数の離散フーリエ変換として定義される』と本にはあったのを読みました。 しかし同じ本の中に、『自己相関関数のフーリエ変換は正しくはピリオドグラムと言い、パワースペクトルとはピリオドグラムの平均値で求められる』とも書いてありました。 パワースペクトルとパワースペクトル密度関数はいったいどう違うのか…?とずっと考えているのですが分かりません。 あと(自己、相互)相関関数と(自己、相互)相関係数にはどのような関係があるのですか。回答よろしくお願いします。 前回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をかける理由を)教えて頂けないでしょうか。