filter
Functions
filter_signal(data, lowcut=None, highcut=None, sample_rate=1000, order=2, axis=-1, forward_backward=True)
Apply SOS filter to signal using butterworth design and cascaded filter.
Parameters:
-
data(NDArray) –Signal
-
lowcut(float | None, default:None) –Lower cutoff in Hz. Defaults to None.
-
highcut(float | None, default:None) –Upper cutoff in Hz. Defaults to None.
-
sample_rate(float, default:1000) –Sampling rate in Hz Defaults to 1000 Hz.
-
order(int, default:2) –Filter order. Defaults to 2.
-
forward_backward(bool, default:True) –Apply filter forward and backwards. Defaults to True.
Returns:
-
NDArray–npt.NDArray: Filtered signal
Source code in physiokit/signal/filter.py
generate_arm_biquad_sos(lowcut, highcut, sample_rate, order=3, var_name='biquadFilter')
Generate ARM CMSIS second order section coefficients.
Parameters:
-
lowcut(float) –Lower cutoff in Hz.
-
highcut(float) –Upper cutoff in Hz.
-
sample_rate(float) –Sampling rate in Hz.
-
order(int, default:3) –Filter order. Defaults to 3.
-
var_name(str, default:'biquadFilter') –Variable name. Defaults to 'biquadFilter'.
Returns:
-
str(str) –ARM CMSIS second order section coefficients.
Source code in physiokit/signal/filter.py
get_butter_sos(lowcut=None, highcut=None, sample_rate=1000, order=3)
cached
Compute biquad filter coefficients as SOS. This function caches. For lowpass, lowcut is required and highcut is ignored. For highpass, highcut is required and lowcut is ignored. For bandpass, both lowcut and highcut are required.
Parameters:
-
lowcut(float | None, default:None) –Lower cutoff in Hz. Defaults to None.
-
highcut(float | None, default:None) –Upper cutoff in Hz. Defaults to None.
-
sample_rate(float, default:1000) –Sampling rate in Hz. Defaults to 1000 Hz.
-
order(int, default:3) –Filter order. Defaults to 3.
Returns:
-
NDArray–npt.NDArray: SOS
Source code in physiokit/signal/filter.py
moving_gradient_filter(data, sample_rate=1000, sig_window=0.1, avg_window=1.0, sig_prom_weight=1.5, mode='nearest', fval=0.0)
Compute moving gradient filter to identify peaks in stream of data.
Parameters:
-
data(NDArray) –Data stream (1-D).
-
sample_rate(float, default:1000) –Sampling rate in Hz. Defaults to 1000 Hz.
-
sig_window(float, default:0.1) –Window size in seconds to compute signal gradient. Defaults to 0.1 s.
-
avg_window(float, default:1.0) –Window size in seconds to compute average gradient. Defaults to 1.0 s.
-
sig_prom_weight(float, default:1.5) –Weight to compute minimum signal height. Defaults to 1.5.
-
mode(str, default:'nearest') –Boundary mode passed to
uniform_filter1d. Defaults to "nearest". -
fval(float, default:0.0) –Fill value for boundaries when mode supports it.
Returns:
-
NDArray–npt.NDArray: Moving gradient filter.
Example
import numpy as np moving_gradient_filter(np.array([0, 1, 3, 1, 0]), sample_rate=10).shape (5,)
Source code in physiokit/signal/filter.py
normalize_signal(data, eps=0.001, axis=-1)
Normalize signal about its mean and std.
Parameters:
-
data(NDArray) –Signal
-
eps(float, default:0.001) –Epsilon added to st. dev. Defaults to 1e-3.
-
axis(int, default:-1) –Axis to normalize along. Defaults to -1.
Returns:
-
NDArray–npt.NDArray: Normalized signal
Source code in physiokit/signal/filter.py
quotient_filter_mask(data, mask=None, iterations=2, lowcut=0.8, highcut=1.2)
Applies a quotient filter to identify outliers from list.
Parameters:
-
data(NDArray) –Signal
-
mask(NDArray | None, default:None) –Rejection mask. Defaults to None.
-
iterations(int, default:2) –iterations to apply. Defaults to 2.
-
lowcut(float, default:0.8) –Lower cutoff ratio. Defaults to 0.8.
-
highcut(float, default:1.2) –Upper cutoff ratio. Defaults to 1.2.
Returns:
-
NDArray–npt.NDArray: Rejection mask 0=accept, 1=reject.
Example
import numpy as np quotient_filter_mask(np.array([10, 10, 30, 10])).tolist() [0, 0, 1, 1]
Source code in physiokit/signal/filter.py
remove_baseline_wander(data, cutoff=0.05, quality=0.005, sample_rate=1000, axis=-1, forward_backward=True)
Remove baseline wander from signal using a notch filter.
Parameters:
-
data(NDArray) –Signal
-
cutoff(float, default:0.05) –Cutoff frequency in Hz. Defaults to 0.05.
-
quality(float, default:0.005) –Quality factor. Defaults to 0.005.
-
sample_rate(float, default:1000) –Sampling rate in Hz. Defaults to 1000 Hz.
-
axis(int, default:-1) –Axis to filter along. Defaults to 0.
-
forward_backward(bool, default:True) –Apply filter forward and backwards. Defaults to True.
Returns:
-
NDArray–npt.NDArray: Filtered signal
Source code in physiokit/signal/filter.py
resample_categorical(data, sample_rate, target_rate, axis=0)
Resample categorical data using nearest neighbor.
Parameters:
-
data(NDArray) –Categorical sequence.
-
sample_rate(float) –Original sampling rate.
-
target_rate(float) –Target sampling rate.
-
axis(int, default:0) –Axis to resample along. Defaults to 0.
Returns:
-
NDArray–npt.NDArray: Resampled signal.
Example
resample_categorical(np.array([0, 1, 1, 2]), sample_rate=4, target_rate=2).tolist() [0, 1]
Source code in physiokit/signal/filter.py
resample_signal(data, sample_rate=1000, target_rate=500, axis=-1)
Resample signal using scipy FFT-based resample routine.
NOTE: For very large signals, this may be slow. Consider using resample_poly instead.
Parameters:
-
data(NDArray) –Signal.
-
sample_rate(float, default:1000) –Signal sampling rate (Hz).
-
target_rate(float, default:500) –Target sampling rate (Hz).
-
axis(int, default:-1) –Axis to resample along. Defaults to -1.
Returns:
-
NDArray–npt.NDArray: Resampled signal.
Example
import numpy as np resample_signal(np.arange(10), sample_rate=10, target_rate=5).size 5