こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBAにてFFT

Excel VBAにておよそ5万点のデータをFFTする方法についての質問をさせてください。

いつもはあるソフトを用いて実験データのFFTを行っているのですが、作業効率を改善したいと考えExcel VBAにてFFTをしたいと考えています。

私はC言語を少しですが学習したことがあるので、FFTWのようなFFT を実装したフリーソフトウェアが存在しているのを知っています。
時間節約のためExcel VBAにてFFTのコードを位置から書くのではなく、FFTWのアルゴリズムでExcel VBAで利用できるプログラムを使いたいと考えています。
この場合、自分でFFTWのコードを見ながらExcel VBA用にコードを書きかえるしか手はないのでしょうか。私はC言語もExcel VBAも未熟であるため、この作業を行うことができそうにありません、、、
Excel VBAで利用することのできるFFTのコードはあるのでしょうか。

なお、FFTするためのデータ点数は約5万点、多いと10万点ほどで、データ点数が2の累乗に限定しないものを使いたいと考えています。

投稿日時 - 2012-07-20 12:31:32

QNo.7600661

すぐに回答ほしいです

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

今晩は。ちょっとお節介かもしれませんが、
大量のデータの処理をこれからもなされるのでしたら、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を直接呼び出して使う方法をとっています。

投稿日時 - 2012-07-20 22:51:01

お礼

回答が遅くなり大変申し訳ありませんでした。

頂いたアドバイス大変参考になりました。
Scilabについて勉強したいと考えております。

本当にありがとうございました。

投稿日時 - 2012-10-03 13:00:31

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

(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無しで全自動にできるかもしれません。

投稿日時 - 2012-07-20 18:35:21

お礼

ご回答ありがとうございました。

たしかにその通りだと思います。
もともと効率化をするためにすべてExcel内でやってしまいたいと考えていましたが、それが困難ならばNo.3さんのアドバイスの通りに、例えばC言語ですべて処理してしまうのが時間的に効率的ですね。

私の場合はCを使用した経験があるため、Cで作ってみます。

ありがとうございました。

投稿日時 - 2012-07-20 19:00:21

ANo.2

「VBA FFT」で検索するとたくさん出てきますけど。

・高速フーリエ変換 Excel VBA用FFTプログラム
http://tsuyu.cocolog-nifty.com/blog/2007/03/publi.html

ですとか

どうしてもそのC言語プログラムと同じ動作にしたいのであれば、
おっしゃるとおり自分でコードを書き換えるしかないと思います。

投稿日時 - 2012-07-20 15:49:08

お礼

ご回答ありがとうございます。

私も簡単にですが[Excel VBA FFT]と検索して、使ってみましたが計算速度が遅かったり2の累乗のデータ点しか対応していなかったりと、不都合が多かったため質問させていただきました。

引き続き、Excel VBAで使える実用的なコードを探してみます。
(もし可能であれば自分で作成します。)

ありがとうございました。

投稿日時 - 2012-07-20 18:15:30

ANo.1

私なら、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

投稿日時 - 2012-07-20 13:16:57

お礼

回答ありがとうございました!

Scilabというものがあるのですか。
今度時間がある時に使ってみたいと思います。

情報ありがとうございました。

投稿日時 - 2012-07-20 17:17:08

あなたにオススメの質問