トップ «前の日記(2010/05/21(Fri)) 最新 次の日記(2010/05/28(Fri))»
【ソース+水=麦茶色の何か】

半期 四半期 全カテゴリ

今日の一言


2010/05/27(Thu) メビウスジェイド [長年日記]

_ [Linux][Ubuntu][Debian][FC][C++][研究関係][雑記]FFTWを使う

データ処理でフーリエ変換をしたいのだが、自分で書くのは面倒くさい。

liboctaveを入れてもいいのだが、どうも中で動いているのはfftwっぽい。

なので、直接fftwをインストールして使うことにする。

ここ(http://www.fftw.org/)からソースをDL。

で、解凍し./configure。

ここで、「--enable-threads」をつけるとスレッドでつかえるようになる。

また、デフォルトの精度はdouble(倍精度)だが、単精度の浮動小数点数で計算したい場合は「--enable-float」を設定出来る。

環境によっては、「--enable-long-double」を設定することで、4倍精度での浮動小数点数で計算出来る。

※ 「--enable-float」のときは,「--enable-sse」を付けると高速化が期待できる(SSE 付きのプロセッサのみ)

なので、こんな感じでインストールする。

double

 $ ./configure --enable-threads
 $ make
( $ make check )
 $ sudo make install
 $ sudo ldconfig

float

 $ ./configure --enable-threads --enable-float --enable-sse
 $ make
( $ make check )
 $ sudo make install
 $ sudo ldconfig

普通に--enable-floatオプション有りと無しでconfigure、make、make installすると、libfftw3とlibfftw3fの両方をインストール可能。

「libfftw3」がdouble版、「libfftw3f」がfloat版。

コンパイルはこんな感じで。

double

 $ gcc -lm -lfftw3 -o hoge hoge.c

float

 $ gcc -lm -lfftw3f -o hoge hoge.c

それぞれ別のライブラリを使うので注意!

また、ソースの方も、関数や型名をdouble時の

 fftw_****

から

 fftwf_****

に置き換えなくてはならない。

*置き換えなくてはならないものの詳細は不明。やって見てエラーが出たら直すでいいかと

*とりあえず、大文字のFFT****は置き換えなくてOKっぽい。

あとは、このへん(http://www32.atwiki.jp/amaeda/)を見ながら頑張るべし!

以上!