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