Linuxサーバ奮戦記 --- FFTW --- 22Nov2008 >>TOP フーリエ変換(FFT:Fast Fourier Transform)なるものを考えてみようと思って探してみたが,殆んどがCで書かれているので僕には判りません。何をしたいかというと,時系列データがある特定の周期を持った波から出来ているとすれば,その周波数を知ることが可能になるということ。 ライブラリーとして FFTW(http://www.fftw.org/)をインストールすることにする。 C言語でフーリエ変換のサイトのソースを参考にして,コンパイルしWEBブラウザ上で実行させることを考えてみた。 PHPの exec で実行させて一次元FFTを(ASCII)出力し,Jpgraphでグラフ化してみる。 時系列データとして適当な物が無いかと探してみたけど・・・,気象庁の過去の気象データをサンプルとして確認してみることに。 ここ10年位頃から1時間毎の気温が収録されていた。試しに京都の2000~2007年分をFFTにかけてみる。(一点未観測があったような~) 他に手頃なデータとして正弦波にランダムノイズを加えて時系列データを作って,FFTを計算する簡単なプログラムも作ってみた。 FFTWのインストール /usr/local/src 以下で作業をするとして。 # tar zxvf fftw-3.2.tar.gz # cd fftw-3.2 # ./configure # make # make install コンパイル ユーザディレクトリ内にソースを置き,コンパイルする。実行プログラムをFFTWとして作成している。 ソース: fftw3.c (http://www.cs.miyazaki-u.ac.jp/~date/lectures/fftw/ を参考) $ gcc -o FFTW fftw3.c -lm -lfftw3 PHPで実行 FFTWと同じところにPHPで実行するHTMLファイルを置く(exec_fftw.php)。
![]() 出力結果 興味深い結果が得られ,メインのピークとして以下のような周波数が求まった。
これらの逆数をとると周期が求まる。秒となるので,時間に変換(1/3600)すると以下の様になる。
![]() 今回得られた結果はあくまでも参考であって,数値・データおよび情報に関して保証するものではありません。ご利用に伴って発生した不利益や問題について,何ら責任を負いません。 |