diff --git a/butterfilter.py b/butterfilter.py new file mode 100644 index 0000000000000000000000000000000000000000..557b1fd238b96bed0f2f89307d6629dd2d9deabd --- /dev/null +++ b/butterfilter.py @@ -0,0 +1,28 @@ +import numpy as np +from scipy import signal + + +def butterfilter(timeseries, params=None): + """Apply Butterworth filter to time series arranged in rows.""" + # second-order-sections output + # by default, using a digital filter + if params is None: + params = { + "order": 2, + "critical_freqs": (1 / 350), + "filter_type": "highpass", + "sampling_freq": 1 / 3, + } + sos = signal.butter( + N=params["order"], + Wn=params["critical_freqs"], + btype=params["filter_type"], + fs=params["sampling_freq"], + output="sos", + ) + # subtract time series by mean + timeseries_norm = timeseries - np.nanmean(timeseries, axis=1).reshape( + timeseries.shape[0], 1 + ) + filtered_timeseries = signal.sosfiltfilt(sos, timeseries_norm, axis=1) + return filtered_timeseries