前回使った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 件のコメント:
コメントを投稿