前回の続き。
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 件のコメント:
コメントを投稿