Pythonってさあ……
ライブラリ充実してますね、今更に今更ですが。
以前、このブログでFFTW3ライブラリのラッパーを紹介しましたが、信じられないほどに読みにくいコードだったかもしれませんが、実はPythonのモジュールの1つであるnumpyには、fftあるんですよね……
まあ、あるってことは知ってたんですが、僕が想定していたのは専用のライブラリモジュールで、numpyにあるのは知らなかったんですよ。
と言う訳で。
何だか順序的には逆になってしまった感がありますが、ここにnumpyでのfft()のメモを残しておくことにします。何を今更と思われるかもしれませんが、僕の特技『手のひら返し』の威力の前に、その文言はあまりに無力です。
片腹痛しです。
まあ、あなたは頭が痛くなってるかもしれませんが。
無理せず、ご自愛を。
#!/usr/bin/env python #coding:utf-8 import numpy import numpy.fft t=numpy.arange(0.0,4.0,1.0/4.0) sig=numpy.cos(2.0*numpy.pi*2.0*t) print sig freq=numpy.fft.fft(sig) print abs(freq)
単純な構成にしました。本当は、
import numpy from numpy import * from numpy.fft import fft
とでもしたらいいんでしょうけど、初っ端からそれだとどれがどのモジュールなのか見分けがつきません。特に僕はプログラマで言ったら、そうですねぇ……まあ、ロリですから(ここでのロリは幼いを意味します)、そういう部分は出きるだけはっきりさせといた方がいいんです。
で、これの実行結果は、まああんまり大したことないんですけど、次のようになります。
[ 1. -1. 1. -1. 1. -1. 1. -1. 1. -1. 1. -1. 1. -1. 1. -1.] [ 0. 0. 0. 0. 0. 0. 0. 0. 16. 0. 0. 0. 0. 0. 0. 0.]
上が入力信号(sig)、下が周波数分布(freq)ですね。
このプログラムは、表示の際に絶対値に変換している(abs()だよ)んですが、それを外すと以下のような結果になります。
[ 1. -1. 1. -1. 1. -1. 1. -1. 1. -1. 1. -1. 1. -1. 1. -1.] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 16.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
結論:
numpyは使う予定がなくても、入れておくべきモジュールだと思う。