/ proof-of-concept / benchcompress
Sign in
proof-of-concept / benchcompress
benchcompress / src / zia / _filters.py
56 lines · 1.7 KBBlameHistoryRaw
1from typing import cast
2import numpy as np
3from scipy.signal import butter, lfilter
6def bandpass_filter(array: np.ndarray, *, sampling_frequency: float, lowcut: float, highcut: float) -> np.ndarray:
7 """Apply a bandpass filter to the input array.
9 Args:
10 array: Input signal array
11 sampling_frequency: Sampling frequency in Hz
12 lowcut: Lower cutoff frequency in Hz
13 highcut: Higher cutoff frequency in Hz
15 Returns:
16 Filtered signal array
17 """
18 nyquist = 0.5 * sampling_frequency
19 low = lowcut / nyquist
20 high = highcut / nyquist
21 b, a = butter(5, [low, high], btype="band")
22 return cast(np.ndarray, lfilter(b, a, array, axis=0))
25def lowpass_filter(array: np.ndarray, *, sampling_frequency: float, highcut: float) -> np.ndarray:
26 """Apply a lowpass filter to the input array.
28 Args:
29 array: Input signal array
30 sampling_frequency: Sampling frequency in Hz
31 highcut: Cutoff frequency in Hz
33 Returns:
34 Filtered signal array
35 """
36 nyquist = 0.5 * sampling_frequency
37 high = highcut / nyquist
38 b, a = butter(5, high, btype="low")
39 return cast(np.ndarray, lfilter(b, a, array, axis=0))
42def highpass_filter(array: np.ndarray, *, sampling_frequency: float, lowcut: float) -> np.ndarray:
43 """Apply a highpass filter to the input array.
45 Args:
46 array: Input signal array
47 sampling_frequency: Sampling frequency in Hz
48 lowcut: Cutoff frequency in Hz
50 Returns:
51 Filtered signal array
52 """
53 nyquist = 0.5 * sampling_frequency
54 low = lowcut / nyquist
55 b, a = butter(5, low, btype="high")
56 return cast(np.ndarray, lfilter(b, a, array, axis=0))
↑↓ move↵openescclose