From e8c9556297d2a535e05405114680eee519fe739c Mon Sep 17 00:00:00 2001 From: Peter Swain <pswain@Home-iMac.local> Date: Tue, 14 May 2024 10:43:30 +0100 Subject: [PATCH] change: rename butterworth_filter ; lowpass_filter Renamed butterworth_filter to flavin_filter. --- src/wela/fft_filtering.py | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/wela/fft_filtering.py b/src/wela/fft_filtering.py index 7469f01..f0c0842 100644 --- a/src/wela/fft_filtering.py +++ b/src/wela/fft_filtering.py @@ -105,24 +105,18 @@ def snr(fft_freqs, fft_power, cutoff_freq): return snr -def butterworth_filter(data, 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", - ) +def lowpass_filter(data, cutoff, fs, N): + """Apply low-pass filter to a single time-series.""" + data = data - np.mean(data) + sos = signal.butter(N, cutoff, btype="lowpass", fs=fs, output="sos") + filtered_data = signal.sosfiltfilt(sos, data) + return filtered_data + np.mean(data) + + +def flavin_filter(data, cutoff=1 / 350, fs=1 / 5, N=2): + """Apply high-pass Butterworth filter to time series arranged in rows.""" + # use a digital filter assuming regularly spaced sampling + sos = signal.butter(N=N, Wn=cutoff, btype="highpass", fs=fs, output="sos") # fill NaNs between data points data = pd.DataFrame(data).interpolate(axis=1).to_numpy() # subtract time series by mean -- GitLab