- ベストアンサー
MATLABでテキストデータを読み込んで高速フーリエ変換する方法
- MATLABを使用してテキストデータを読み込み、高速フーリエ変換を行いグラフ化する方法について解説します。
- 具体的に、テキストデータの読み込み、フーリエ変換、グラフ化の手順を説明します。
- また、時間窓の両端が異なる場合に出る擬似的なスペクトルを抑える窓関数の畳み込み方についても紹介します。
- みんなの回答 (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が出てくると思います) 頑張ってください。 ・上記関数たちを使ったけどうまく動かない、なぜ動かないのか見てほしい ・他にこんなことをしたいんだけどどうすれば出来るのか などありましたらその旨補足願います。 参考になれば幸いです。