def butter_low(dt_list, val, lowpass=1.0):
import scipy.signal
#val_mask = np.ma.getmaskarray(val)
#dt is 300 s, 5 min
dt_diff = np.diff(dt_list)
if isinstance(dt_diff[0], float):
dt_diff *= 86400.
else:
dt_diff = np.array([dt.total_seconds() for dt in dt_diff])
dt = malib.fast_median(dt_diff)
#f is 0.00333 Hz
#288 samples/day
fs = 1./dt
nyq = fs/2.
order = 3
f_max = (1./(86400*lowpass)) / nyq
b, a = scipy.signal.butter(order, f_max, btype='lowpass')
#b, a = sp.signal.butter(order, (f_min, f_max), btype='bandstop')
w, h = scipy.signal.freqz(b, a, worN=2000)
# w_f = (nyq/np.pi)*w
# w_f_days = 1/w_f/86400.
#plt.plot(w_f_days, np.abs(h))
val_f = scipy.signal.filtfilt(b, a, val)
return val_f
评论列表
文章目录