お世話になります。
仕事で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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- 数学 「FFTの基本は、DFTはサンプル数Nが偶数なら 2つのDFTに分解できるということ。 分解するとD 3 2022/03/31 21:01
- 物理学 フーリエ級数展開をExcelのFFTでシミュレートする 5 2023/07/03 22:02
- ダイヤルアップ Raspberry Piでアナログモデム経由で音声再生 1 2022/05/20 18:01
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 数学 Pythonのspecgramに関する質問です。 1 2022/12/04 19:18
- au(KDDI) ■AU「 スマホトクするプログラム」について 4 2023/08/09 08:54
- その他(ビジネス・キャリア) グーグルの障害者訓練プログラム募集あるがどうだろ?6時間勤務で月収22万!! 1 2023/02/17 20:36
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
電磁気の問題です
-
高校物理の質問です。 【問題】...
-
なぜ、θが微小なとき、tanθ≒θと...
-
くさび状態の2物体間のすべりの...
-
機械設計のねじ
-
太陽光の反射角の計算
-
反射型の回折格子について
-
光波~ヤングの実験の応用
-
中が中空の球の慣性モーメント...
-
sinとcosの使い分けの仕方を教...
-
電磁気学
-
-cosθがsin(θ-π/2)になる理由が...
-
高校1年生 物理基礎 三角比の利...
-
球面のリーマン計量
-
矩形波duty比を変えた場合のフ...
-
XRD回折強度の補正(ローレ...
-
サインカーブの長さ
-
√3sinX−cosX≦√3 (0≦θ≦2π) のと...
-
近似について
-
放物運動(初速、角度、距離、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
電磁気の問題です
-
なぜ、θが微小なとき、tanθ≒θと...
-
アインシュタインの縮約記法
-
機械設計のねじ
-
中が中空の球の慣性モーメント...
-
有限長ソレノイドコイルの中心...
-
-cosθがsin(θ-π/2)になる理由が...
-
高校物理の質問です。 【問題】...
-
標的への斜方投射
-
【数学】梯子の角度はハシゴの...
-
√3sinX−cosX≦√3 (0≦θ≦2π) のと...
-
太陽光の反射角の計算
-
くさび状態の2物体間のすべりの...
-
sinとcosの使い分けの仕方を教...
-
この問題を教えてください。(電...
-
フーリエ級数展開をExcelのFFT...
-
なぜsinθはθに近似できるのです...
-
変位と速度
-
格子定数の求め方,近似について
-
矩形波duty比を変えた場合のフ...
おすすめ情報