Excel VBAによるFFTの実装方法について

このQ&Aのポイント
  • Excel VBAによるFFTの実装方法について質問があります。データ数はおおよそ5万点で、2の累乗でないものを使用したいです。
  • 質問者はExcel VBAでFFTを行いたいと考えています。しかし、C言語もExcel VBAも未熟なため、効率的な方法が分かりません。
  • FFTのためのExcel VBAのコードは存在するのでしょうか?データ数は10万点までを想定しています。
回答を見る
  • ベストアンサー

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の累乗に限定しないものを使いたいと考えています。

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

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.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を直接呼び出して使う方法をとっています。

fujisan123321
質問者

お礼

回答が遅くなり大変申し訳ありませんでした。 頂いたアドバイス大変参考になりました。 Scilabについて勉強したいと考えております。 本当にありがとうございました。

その他の回答 (3)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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無しで全自動にできるかもしれません。

fujisan123321
質問者

お礼

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

  • luka3
  • ベストアンサー率75% (283/377)
回答No.2

「VBA FFT」で検索するとたくさん出てきますけど。 ・高速フーリエ変換 Excel VBA用FFTプログラム http://tsuyu.cocolog-nifty.com/blog/2007/03/publi.html ですとか どうしてもそのC言語プログラムと同じ動作にしたいのであれば、 おっしゃるとおり自分でコードを書き換えるしかないと思います。

fujisan123321
質問者

お礼

ご回答ありがとうございます。 私も簡単にですが[Excel VBA FFT]と検索して、使ってみましたが計算速度が遅かったり2の累乗のデータ点しか対応していなかったりと、不都合が多かったため質問させていただきました。 引き続き、Excel VBAで使える実用的なコードを探してみます。 (もし可能であれば自分で作成します。) ありがとうございました。

  • Interest
  • ベストアンサー率31% (207/659)
回答No.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

fujisan123321
質問者

お礼

回答ありがとうございました! Scilabというものがあるのですか。 今度時間がある時に使ってみたいと思います。 情報ありがとうございました。

関連するQ&A

  • FFTについて

    エクセル上でFFTをしようとしたら4096点までといわれました。 それ以上の点数で行うことは出来ますでしょうか?よろしくお願いします。

  • エクセル2010または2007でのVBA

    初めまして。 早速ですがエクセルにて、プロジェクト管理票を作っております。 エンジニアが作った作業工程計画のエクセルブックをプロジェクトの通し番号をつけて保存し、 これまでのプロジェクト分すべてを1つのフォルダに保管しています。 その後総務で、この作業工程計画エクセルから、コピー&ペーストでデータを引っ張ってきているのですが、 この作業をVBAで自動化するには、どのようにコードを書けば宜しいでしょうか? ちなみに、コピペするセルは、書かれている情報すべてです。 ですが、あるものはセルA1からG21まで、あるものはA1からC6までしかありません。 よろしくご教示ください。

  • FFTプログラムで問題が生じました。

    C言語でFFTのプログラムを作成しています。入力として周波数の既知な正弦波を利用してプログラムの動作確認をしているのですが、サンプリング周期0.01secの状態でサンプリング数が4096点と8192点の時だけスペクトルの結果がおかしくなってしまいます。例えば、10Hzの入力に対して他の点数(512~32768点)では、きちんと10Hzの位置にスペクトルが現われるのですが4096点と8192点の時は、10Hzの他に同じ大きさの40Hzのスペクトルが現われてしまいます。入力が5Hzの時は、45Hzに現われます。ちょうど折り返し雑音のような誤作動なので何か明確な原因があるのではないかと思うのですが全く分かりません。このようなことはよくあるのでしょうか?それとも単にプログラムのミスでしょうか。回答お願いします。

  • FFTの計算結果について

    FFTについて勉強しています。 「教えてgoo」でFFTで、検索したら、 http://momonga.t.u-tokyo.ac.jp/~ooura/fft-j.html の、計算パッケージが良いと分かったのですが、計算結果の、読み方?が、分かりません。fftsg.c か、fft8g.c を利用して、計算結果を利用してグラフを描こうと考えています。それで、質問なのですが、 1.サンプリング周波数 44.1KHz  16ビットで 8192個のデータを計算させた場合、計算値として得られる、配列は、周波数の小さい順に並んでいるらしいことは、分かるのですが、それぞれのデーターの周波数は、どうなっているんでしょうか?  単純に0Hzから22050Hzを8192で、割った小さい順で良いのでしょうか? 2. また、パワースベクトルは、どの様に計算したらいいのでしょうか? 20log絶対値 で、良いのでしょうか?  よろしくお願いします。

  • 多数のExcelファイルからVBAのコードを抽出したい

    Excelで過去に作成したVBAのコード自体を抽出したいのですが,可能でしょうか? 仕事のパソコンを更新する際,Excelのデータファイルを思い切って整理したいのですが,ちょこちょこVBAを使ったものがあり,そのコードは残したいのです。数が多いので手作業では現実的ではありません。 指定フォルダ内のExcelファイルからVBAのコードだけをコピーして集約できればベストですが,コードそのものの参照が無理なら,コードが含まれるファイルだけをリストアップするような代案でも可です。

  • EXCEL VBAでユーザーフォームを使ってデータを入力したい。

    EXCEL VBAでユーザーフォームを使ってデータを入力したいと思っています。(ユーザーフォームはできています。) 入力項目が4項目あります。 名前 作業コード 開始時間 終了時間 上記4項目と登録ボタンです。 sheet1にユーザーフォームを表示し sheet2の A1に名前 B1に作業コード C1に開始時間 D1に終了時間が 登録ボタンを押すごとに どんどんデータを記録していきたいのです。 VBA初心者ですのでコードがよくわかりません。 ご教授ください。よろしくお願いいたします。

  • ExcelのVBAに明るい方・・・

    Excelの、Sheet1 に 1日目,鈴木くん,点数,・・・ 2日目,佐藤くん,点数,・・・ 2日目,山田くん,点数,・・・ 3日目,佐藤くん,点数,・・・ 3日目,鈴木くん,点数,・・・ 4日目,山田くん,点数,・・・ ・・・ という、元ダネの一覧表があって、 このデータを日々追加入力していくごとに、自動的に、 Sheet2 には、鈴木くんのみの一覧表のデータ 1日目,鈴木くん,点数,・・・ 3日目,鈴木くん,点数,・・・ ・・・ Sheet3 には、佐藤くんのみの一覧表のデータ 2日目,佐藤くん,点数,・・・ 3日目,佐藤くん,点数,・・・ ・・・ Sheet4 には、山田くんのみの一覧表のデータ 2日目,山田くん,点数,・・・ 4日目,山田くん,点数,・・・ ・・・ が、自動的に追加入力されるVBAの記述って、 どうすればいいんでしょうか? VBAに明るい方、どうかよろしくお願いします。

  • エクセルVBAを教えてください

    エクセルVBAを教えてください Gmailの「CSV 形式でユーザー リストをダウンロード」で作成されたCSVを開くと 氏名が文字化けしています それを手作業で 1.メモ帳で開き 2.「名前を付けて保存」で「文字コード=ANSI」で上書き保存して閉じる をしていますが、手間なのでエクセルVBAで自動化したいと思っています エクセルVBAのコーディングを教えてください ネットで探したのですが見つからなくて… ※ファイルの選択などのコーディングは分かりますので、固定のファイル名で結構です 宜しくお願いします

  • Excel VBAについて

    excelにて、A1にデータを入力した時(写真上)、これらを各TrackごとのDanceability、Energy、Loudnessなどに縦に並び替えたいです(写真下)。 VBAでどのようなコードを書けばできるのでしょうか。

  • エクセル VBA

    エクセルのVBAでの質問です。 1つのセルの中にカンマで処理したデータがあるとします。 例えば A組,32番,山田太郎,男,12歳,45人中35位,性格明るい この1つのセルでたとえば3番目だけの「山田太郎」を VBAで取り出す方法はあるのでしょうか。 要するに1つのセルの中でカンマで区切られたデータを 個々に取り出す方法か知りたいのです。 どなたか教えてください。 なぜこのようなことが必要かといいますと、 歯科において、レセ電が導入されることになりました。 そこでそれを開発しているのですが、 最後に点数の検算をしようと考えていまして、 その点数をセルから取り出す方法が知りたいのであります。 もしどなたかご存知でしたら、是非、ご教示ください。 よろしくお願い申し上げます。