2010年3月30日火曜日

ENSOの周期 psd関数のオプション2 Zero padding



前回の続き。
pad_toによってzero paddingの量を変えることができる。

pad_to: integer The number of points to which the data segment is padded when performing the FFT. This can be different from NFFT, which specifies the number of data points used. While not increasing the actual resolution of the psd (the minimum distance between resolvable peaks), this can give more points in the plot, allowing for more detail. This corresponds to the n parameter in the call to fft(). The default is None, which sets pad_to equal to NFFT

下がその例である。
差を良く見るために2年から7年の周期(周波数1/2から1/7)の間だけプロットしている。
黒線がzero paddingを行わない場合。
赤線がデータの長さまで、zero paddingを行う場合。つまり、これはzero paddingを行わないのと同じだ。
青線がデータ長の2倍まで zero paddingを行う場合。より多くの点が加わっていることがわかる。

from read_NINO import read_NINO

import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import numpy as np

data=read_NINO()
x=data["NINO3 ANOM"]
Pxx,f=mlab.psd(x, NFFT=len(x),Fs=12)  
# zero padding (length of data) 
Pxx2,f2=mlab.psd(x, NFFT=len(x),pad_to=len(x),Fs=12)
# zero padding (length of data) *2
Pxx3,f3=mlab.psd(x, NFFT=len(x),pad_to=2*len(x),Fs=12)
plt.figure()
plt.loglog(f,Pxx,'k-o')
plt.loglog(f2,Pxx2,'r-+')
plt.loglog(f3,Pxx3,'b-x')
plt.xlim([1./7.,1./2.])
plt.ylim([10E-3,10e1])
plt.savefig("NINO_psd_zeropadding.png")
plt.show()

0 件のコメント: