- ベストアンサー
Excel VBAによるFFTの実装方法について
- Excel VBAによるFFTの実装方法について質問があります。データ数はおおよそ5万点で、2の累乗でないものを使用したいです。
- 質問者はExcel VBAでFFTを行いたいと考えています。しかし、C言語もExcel VBAも未熟なため、効率的な方法が分かりません。
- FFTのためのExcel VBAのコードは存在するのでしょうか?データ数は10万点までを想定しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
今晩は。ちょっとお節介かもしれませんが、 大量のデータの処理をこれからもなされるのでしたら、No.3の回答と重なるところもありますが、 1) scilab, Octave, Rなどの科学計算に特化したソフトウエアの中からを1つ 2) Ruby, Python, Perlなどのテキスト処理と科学計算も可能なプログラム言語の中から1つ を習得されることをお勧めします。 前者は、Excelに読み込める程度に整形されているのでしたら直接読むことができますし、行列計算やグラフ作成、統計計算などが簡単にできます。(PDFなどのファイルにグラフを直接書けます、また計算やグラフはかなり高速です) http://hotic.blog129.fc2.com/blog-entry-10.html http://cse.naro.affrc.go.jp/takezawa/r-tips/r/40.html 1、2行のプログラムで読み込むことができます。 後者はというと、テキストデータから必要の部分を切り出したり、基本的な計算をしたりするのに使えます。 最近では行列計算ライブラリやGSLやFFTなどのC言語で書かれたライブラリを直接使うライブラリが提供されていますので、ほとんどの場合は2)だけ処理が可能です。行列計算ライブラリは結構強力で計算速度もかなりでます。最近回答したものですが、 http://oshiete1.nifty.com/qa7525007.html のNo.7に100万個の128次元ベクトルの中から、特定の点にもっとも近いものを選び出すというプログラムを掲載していますが、計算部分は実質2行で2秒で結果を出してくれます。後でC言語で書き直して0.2秒と速くなりましたが、プログラムを書くエネルギーを比べるとCで書くのはとても引き合いませんでした。 Octave→scilab→Rと使うプログラムを変えてきましたが、初めてだったらscilabがとっつきやすいように思います。 私自身は最近ではruby+Rを直接呼び出すライブラリ+行列計算ライブラリを使っています。多量のテキストの中からデータ部分を取り出す必要が有るので基本的にはRubyでデータ処理をし、多変量解析やFFTなどの高度な計算やグラフはRを直接呼び出して使う方法をとっています。
その他の回答 (3)
- kmee
- ベストアンサー率55% (1857/3366)
(1)実験データをテキスト出力 (2) (1)テキストFFTを計算し、結果をCSV形式で出力 (3) (2)をExcelで清書 とはできませんか? 多分、VBAにFFTW移植するより、プログラムが早く作れて処理も速いと思いますよ。 (2)には ・#1にあるような、scilab等の数値処理ソフト(他に、MATLAB,FreeMAT,R) ・Perl,Ruby,Python等のスクリプト言語+FFTモジュール。例えば、PerlにはMath::FFTWがあります。 ・C言語でFFTW 等があります。 ついでに、gnuplot等でグラフにして、LaTeX等でレポート作成とかすれば、Excel無しで全自動にできるかもしれません。
お礼
ご回答ありがとうございました。 たしかにその通りだと思います。 もともと効率化をするためにすべてExcel内でやってしまいたいと考えていましたが、それが困難ならばNo.3さんのアドバイスの通りに、例えばC言語ですべて処理してしまうのが時間的に効率的ですね。 私の場合はCを使用した経験があるため、Cで作ってみます。 ありがとうございました。
- luka3
- ベストアンサー率72% (424/584)
「VBA FFT」で検索するとたくさん出てきますけど。 ・高速フーリエ変換 Excel VBA用FFTプログラム http://tsuyu.cocolog-nifty.com/blog/2007/03/publi.html ですとか どうしてもそのC言語プログラムと同じ動作にしたいのであれば、 おっしゃるとおり自分でコードを書き換えるしかないと思います。
お礼
ご回答ありがとうございます。 私も簡単にですが[Excel VBA FFT]と検索して、使ってみましたが計算速度が遅かったり2の累乗のデータ点しか対応していなかったりと、不都合が多かったため質問させていただきました。 引き続き、Excel VBAで使える実用的なコードを探してみます。 (もし可能であれば自分で作成します。) ありがとうございました。
- Interest
- ベストアンサー率31% (207/659)
私なら、Scilab (freeのMatlabクローン)を使います。 プログラミング言語が何であれ、FFTのコードを自分で書いてデバッグするなんて嫌ですから。 Scilab公式サイト(ダウンロードはこちらから) http://www.scilab.org/ 使い方 http://www.oishi.info.waseda.ac.jp/~oishi/sir/note.html Scilabのfft関数(実行用のコード例あり) http://help.scilab.org/docs/5.3.3/ja_JP/fft.html
お礼
回答ありがとうございました! Scilabというものがあるのですか。 今度時間がある時に使ってみたいと思います。 情報ありがとうございました。
お礼
回答が遅くなり大変申し訳ありませんでした。 頂いたアドバイス大変参考になりました。 Scilabについて勉強したいと考えております。 本当にありがとうございました。