2010年3月29日月曜日

ENSOの周期 psd関数のオプション1 Taper



前回使ったmatplotlib.mlabのpsd関数にはいくつかオプションがある。それを試してみよう。
デフォルトではもとのデータにHanningウィンドウ(データ・ウィンドウ、データ・テーパ)をかけている。
これはオプションで変えることができる。

ウィンドウをはずす場合
前回のコードに続けて。
window=mlab.window_noneがウィンドウ無しの場合である。
#window_none()
Pxx_no,f_no=mlab.psd(x, NFFT=len(x),Fs=12,window=mlab.window_none) 
plt.figure()
plt.loglog(f,Pxx,'k')
plt.loglog(f_no,Pxx_no,'r')
plt.loglog([1./7.,1./7.],[1.E-9,1.E2],'k--')
plt.loglog([1./2.,1./2.],[1.E-9,1.E2],'k--')
plt.savefig("NINO_psd_no.png")
plt.show()
データの端の影響でスペクトルの漏れがあり、フィルタ無しの場合(赤線)にはピークの立つ場所が増える。

次は、Hammingウィンドウをかける場合。
window=np.hamming(len(x))でデータと同じ長さのHammingウィンドウをかけている。
#numpy hamming
Pxx_ham,f_ham=mlab.psd(x, NFFT=len(x),Fs=12,window=np.hamming(len(x))) 
plt.figure()
plt.loglog(f,Pxx,'k')
plt.loglog(f_ham,Pxx_ham,'r')
plt.loglog([1./7.,1./7.],[1.E-9,1.E2],'k--')
plt.loglog([1./2.,1./2.],[1.E-9,1.E2],'k--')
plt.savefig("NINO_psd_ham.png")
plt.show()
このケースではHanningフィルター(黒線)とHammingフィルター(赤線)とではあまり差がないが、一般にはHammingフィルターの方が良いようだ(見延2001)。

参考文献
見延 2001:大気海洋物理学特論4 大気海洋統計データ解析 第3章


0 件のコメント: