お世話になります。
仕事でFFTのプログラムを内製しようとしています。
初心者なので、他の人(今は退社していません)が昔作ったFFTのプログラムを参考にしようと思いそれを解読中です。
そのプログラムはC言語で書かれていますが、「ガウスの消去法を使って連立方程式を解く」というプロセスが含まれています。
私の認識では、FFTではガウスの消去法を使う事はないので、私が見たプログラムはFFTではなくDFTのプログラムではないかと思っています。
FFTのプログラムでガウスの消去法を使う事はあるのでしょうか?勉強中なのと、周りに知っている人がいないため、どなたか教えて下さい。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
ここで、
e^ix=cos(x)+i * sin(x) を使って
f_real(j) + i*f_imag(j)
= Σ((x_real(k) + i * x_imag(k))*(cos(-2*π*(j^k)/n) + i*sin(-2*π*(j^k)/n))
※ -2*π*(j^k)/n=θとして、上記式を展開
= Σ(x_real(k)*cosθ + i * x_imag(k)*cosθ + i*x_real(k)*sinθ - x_imag(k)*sinθ )
∴ 実数部と虚数部に分けて
f_real(j)= Σ(x_real(k)*cosθ- x_imag(k)*sinθ )
f_imag(j) = Σ( x_imag(k)*cosθ + x_real(k)*sinθ )
つまり、DFTは、ひたすら「θを計算→sinθ,cosθを計算→掛けて足す」 を繰り返すだけです。
(三角関数の性質(周期等)を利用して、先に使用するcos,sinを計算しておく、等といった工夫を加えることもできますが)
FFTは、DFTの特殊なケース(xの数 n が2のべき乗個のとき)に、対称性等を利用して計算を減らしたものです。
どちらにも、多元連立方程式を解くようなものは出てきません。
もう一度、処理の流れを確かめてください。
・その消去法は、実際にプログラムで使用されているのでしょうか?
定義されているだけで、呼び出されていない(実行されていない)、ということは無いでしょうか?
・そのプログラムは、純粋にFFTを計算するだけのものでしょうか?
一連の処理の中にFFTがある、というものではありませんか?
生のデータ→前処理→FFT→後処理→欲しいデータ
という流れで、前処理や後処理に使われているだけではないでしょうか?
○VBA
プログラムを作ること自体は問題ありません。
http://ja.wikipedia.org/wiki/%E9%AB%98%E9%80%9F% …
にVisual Basicの例が載っていますが、ほぼここままでVBAでも動作すると思います。
ただし、メモリ量や計算速度が実用的なレベルになるかどうかまではわかりません。
お世話になります。お礼が遅くなり申し訳ありません。
あれからよく勉強して確認してみました。
FFTとDFTについては仰る通りである事確認し理解出来ました。
どうもありがとうございました!
消去方はDFTで求めたピークを2次式で近似する時に用いていたもので、周波数解析に直接関係あるものではありませんでした。
丁寧にご教示いただきありがとうございました!
No.3
- 回答日時:
>ちなみにFFTはC言語やVBでコード化されているものが多いように思うのですが、
>VBAでやっても問題ないのでしょうか?
問題ありません。
VBAのメリット:
Excelワークシートにデータを書き出せば表やグラフを簡単に作れる
なのでデバッグも簡単
デメリット:
計算が遅い
FFT呼出などはExcelのバージョンによって動かなくなったりする
割り込みとか、VBより不自由な点もある?
ExcelだとFFT機能がすでにあるので、それをVBAから呼び出す手もあります。
ただしmy7gohさんの場合は、まだそのソフトの出力データの流れを把握されてないようなので、そのソースをそのまま移植した方が早いかも知れませんが。
ExcelのFFT機能を使うには、アドインで分析ツールを追加する必要があります。
Excel2003ならツール:アドインで「分析ツール」と「分析ツール-VBA」を追加します。
するとツール:分析ツール:フーリエ解析で、手動でFFTできます。
http://homepage1.nifty.com/gfk/fourier-transform …
自動でFFTさせる方法を調べるには、ツール:マクロ:新しいマクロの記録、でFFT操作をVBAで出力させてみると良いでしょう。
http://www.gizcollabo.jp/vbtomo/log/archive/chos …
http://www.riam.kyushu-u.ac.jp/gikan/report/12/0 …
VBAで書いたFFTを公開している方もいらっしゃいます。
そのほうがバージョンによって動かなくなるリスクが減って良いかも知れません。
http://blog.livedoor.jp/sce_info3-craft/archives …
VBA以外では、MATLABやScilabといった数値計算用の言語だと科学技術計算ライブラリが豊富で、FFTライブラリも当然付いています。
お世話になります。お礼が遅くなり申し訳ありません。
結局勉強して自分でFFTのプログラムを作りました。
VBAとCで作って動くことは確認出来ました。
仰る通りVBAだと簡単でしたが計算速度が遅いのでCで作りこんで行こうと思います。
親切に教えていただき誠にありがとうございました。
No.1
- 回答日時:
それって、FFT以外の計算も含まれた、総合的な「数値演算ライブラリ」とかではないでしょうか?
または
・方程式を解く→その結果を使って作った数列をFFT
とか
・FFT→変換結果を最小二乗近似→そのために連立方程式を解く
とか、全体の流れの中で使用するけど、FFTとは独立したもの、だとか。、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
なぜ、θが微小なとき、tanθ≒θと...
-
電磁気の問題です
-
高校物理の質問です。 【問題】...
-
慣性モーメント
-
機械設計のねじ
-
中が中空の球の慣性モーメント...
-
-cosθがsin(θ-π/2)になる理由が...
-
なぜsinθはθに近似できるのです...
-
剛体に働く力のつりあい(斜面...
-
テイラー展開のような微分を使...
-
図のような2力の合力を計算によ...
-
フーリエ級数展開をExcelのFFT...
-
物理の問題での答え方(加法定理)
-
有限長ソレノイドコイルの中心...
-
この問題の(3)なのですが一体何...
-
わからない
-
解説お願いします。物理です。
-
慣性モーメント
-
解き方を教えてください!お願...
-
剛体振り子の運動方程式について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
中が中空の球の慣性モーメント...
-
-cosθがsin(θ-π/2)になる理由が...
-
なぜ、θが微小なとき、tanθ≒θと...
-
高校物理の質問です。 【問題】...
-
電磁気の問題です
-
有限長ソレノイドコイルの中心...
-
機械設計のねじ
-
√3sinX−cosX≦√3 (0≦θ≦2π) のと...
-
空間平均について
-
解き方を教えてください!お願...
-
慣性モーメント
-
矩形波duty比を変えた場合のフ...
-
くさび状態の2物体間のすべりの...
-
なぜsinθはθに近似できるのです...
-
(111)面を上にもってくる...
-
放物運動(初速、角度、距離、...
-
斜方投射でのtanθに絶対値をつ...
-
テイラー展開のような微分を使...
-
空間高調波とは???
-
太陽光の反射角の計算
おすすめ情報