今日の一言
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/)を見ながら頑張るべし!
以上!
[TrackBack URL: http://akihiro-i.net/~akihiro-i/diary/tb.rb/20100527]