MATLABでテキストデータを読み込んで高速フーリエ変換する方法

このQ&Aのポイント
  • MATLABを使用してテキストデータを読み込み、高速フーリエ変換を行いグラフ化する方法について解説します。
  • 具体的に、テキストデータの読み込み、フーリエ変換、グラフ化の手順を説明します。
  • また、時間窓の両端が異なる場合に出る擬似的なスペクトルを抑える窓関数の畳み込み方についても紹介します。
回答を見る
  • ベストアンサー

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 (何行かあるフッダー) ----------------------------------------------- あと,できればでいいのですが・・・ 時間窓の両端が同じ値でない場合に出る擬似的なスペクトルを抑える窓関数の畳み込み方も教えていただきたいです.

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

  • ベストアンサー
  • Kules
  • ベストアンサー率47% (292/619)
回答No.1

まあMatlabに限らず新しい言語に触れる時一番問題になるのは 「関数を知らない」ってことですかね… >テキスト読み込み,フーリエ変換,グラフ化のすべてをこなせる 一つ一つを取ればどれもそれほど難しくなさそうですが、 それを実行するための関数があるかないか、あるとしたらそれは何かを知らなければ どうすることもできませんしね。 ということで。 ・テキスト読み込み dlmreadで区切り文字をタブにするか(出来たかな?)、fopenでファイル識別子を取得してからtextscanかfscanf。 (多分ないと思うけど)一行ずつ読み取りたいならfgetlですかね。 dlmread http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/dlmread.html fopen http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/fopen.html fscanf http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/fscanf.html textscan http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/textscan.html fgetl http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/fgetl.html fgetl,fscanf,textscanを使う場合、フォーマット指定子の使い方を知らないと結構しんどいかも。 (わからなかったら補足願います。ただここじゃなくてCのカテゴリの方が答えはたくさんあるかも) ・高速フーリエ変換 fftで出来ます。 fft http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/fft.html ただ、これはMatlabとは関係ありませんが、高速フーリエ変換って入力の時間が等間隔じゃなくてもできるもんでしたっけ? ・グラフ化 細かいことを考えなければplotで出来ます。 plot http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/plot.html 線の色、太さ、マーカーの種類、マーカーの中を塗りつぶす色、マーカーのエッジの色ぐらいは上記ヘルプを見ればほとんど解決すると思いますが、それ以上のことをしようとするとなかなか大変そうですね。 端的に言えば http://www.mathworks.co.jp/help/ja_JP/techdoc/infotool/hgprop/doc_frame.html にあるAxes→Core Objectsの中身をいじるかたちなんですが。 ・時間窓の両端が同じ値でない場合に出る擬似的なスペクトルを抑える窓関数の畳み込み方 窓関数は自分で作るとして(一般的な窓関数を作るための関数windowもありますが)、畳みこみの計算はconvで出来ます。 window http://www.mathworks.co.jp/help/ja_JP/toolbox/signal/window.html conv http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/conv.html まずは上記関数たちの存在を覚え、ヘルプを読んで使い方を学び、そこからですね。 ものによっては、コマンドウィンドウからlookforを使うことで関数を見つけられたりもします。 (例えばlookfor フーリエ変換 とすれば、多分一番上にfftが出てくると思います) 頑張ってください。 ・上記関数たちを使ったけどうまく動かない、なぜ動かないのか見てほしい ・他にこんなことをしたいんだけどどうすれば出来るのか などありましたらその旨補足願います。 参考になれば幸いです。

関連するQ&A

  • MATLABでの波形のフーリエ変換

    MATLABであるパルスのフーリエ変換をし、そのスペクトルを逆フーリエ変換をすると、元の時間波形に戻らなくて困っています。原因として考えられることとしてはどのようなことでしょうか? よろしくお願いします。

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

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

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

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

  • フーリエ変換

    今僕は周波数解析に「みきの高速フーリエ変換」のソフトを使っているんですが、変換後の結果のグラフをでグラフで作成したときの縦軸は何を表しているんでしょうか?おそらく周波数の頻度だと思うんですが、単位もないのではっきりは分かりません。フーリエ変換の本を読むと縦軸はデシベル表示で最大1になっています。でも実際グラフでは10の8乗級のオーダーの結果なのでどうなんだろう?って思ってます。分かる方いらっしゃいましたらぜひお答えをお願い致します。

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

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

  • MATLABの無償ツールサイラボ?

    こんにちは。 MATLABでデジタルの回路を作成し、結果からフーリエ解析、スペクトル解析をやりたいと思っているんですけど、MATLABをできる環境がありません。 この前、友達からMATLABのフリーウェアのサイラボというものを聞いたことがあると言われてんだけどどなたかご存知の方はいませんか?

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

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

  • フーリエ解析

    エクセルでフーリエ解析を行って、周波数-パワースペクトルグラフを作りたいのですが、パワースペクトルの計算方法がいまいちよくわかりません。 フーリエ解析すると、複素数で結果が出ますが、このあとが・・・ どなたか教えていただけませんか??

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

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

  • 高速フーリエ変換によりパワースペクトルについて

    純粋な正弦波を高速フーリエ変換によりパワースペクトルを求めたのですが 混合波では無いのに元の周波数よりも高い周波数や負の周波数が周期的に検出されます。 これは離散フーリエ変換の周期性や共役性が関係しているのですか? 周期性ですと、元よりも高い周波数は検出されないと思うのですが。 また、この周期的に現れる周波数の他にも細かいパワースペクトルが検出されるのはなぜでしょうか