Signal Processing
Signal processing utilities for PyEyesWeb.
This module provides signal processing functions including filtering, phase extraction, and smoothing operations used throughout the library.
apply_savgol_filter(signal, rate_hz=50.0)
Apply Savitzky-Golay filter if enough data is available.
Savitzky-Golay filtering smooths data while preserving features better than moving average filters. Uses polynomial order 3 and adaptive window length.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
signal
|
array - like
|
1D signal to filter. |
required |
rate_hz
|
float
|
Sampling rate in Hz (currently unused but kept for API compatibility). |
50.0
|
Returns:
Type | Description |
---|---|
ndarray
|
Filtered signal if sufficient data (≥5 samples), otherwise original signal as array. Window length is min(n_samples, 11) and must be odd. |
Notes
- Requires at least 5 samples for filtering
- Window length must exceed polynomial order (3)
- Returns original signal if filtering fails
Source code in pyeyesweb/utils/signal_processing.py
bandpass_filter(data, filter_params)
Apply a band-pass filter if filter_params is set.
Uses a 4th order Butterworth band-pass filter with zero-phase filtering (filtfilt) to avoid phase distortion.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
data
|
ndarray
|
Signal data of shape (n_samples, n_channels). |
required |
filter_params
|
tuple of (float, float, float) or None
|
Filter parameters as (lowcut_hz, highcut_hz, sampling_rate_hz). If None, returns data unchanged. |
required |
Returns:
Type | Description |
---|---|
ndarray
|
Filtered data with same shape as input. Returns original data if filter_params is None. |
Examples:
>>> data = np.random.randn(1000, 2) # 2 channels, 1000 samples
>>> filtered = bandpass_filter(data, (1.0, 10.0, 100.0)) # 1-10 Hz
Source code in pyeyesweb/utils/signal_processing.py
compute_hilbert_phases(sig)
Compute phase information from signals using Hilbert Transform.
The Hilbert transform creates an analytic signal from which instantaneous phase can be extracted. Assumes input has exactly 2 channels.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
sig
|
ndarray
|
Signal array of shape (n_samples, 2) with two channels. |
required |
Returns:
Name | Type | Description |
---|---|---|
phase1 |
ndarray
|
Phase values for first channel in radians [-π, π]. |
phase2 |
ndarray
|
Phase values for second channel in radians [-π, π]. |
Notes
The Hilbert transform assumes the signal is narrowband or has been appropriately filtered for meaningful phase extraction.
Source code in pyeyesweb/utils/signal_processing.py
validate_filter_params(lowcut, highcut, fs)
Validate filter frequency parameters.
Centralized validation for filter parameters used in bandpass_filter and Synchronization class.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
lowcut
|
float
|
Low cutoff frequency in Hz |
required |
highcut
|
float
|
High cutoff frequency in Hz |
required |
fs
|
float
|
Sampling frequency in Hz |
required |
Returns:
Type | Description |
---|---|
tuple
|
Validated (lowcut, highcut, fs) |
Raises:
Type | Description |
---|---|
ValueError
|
If parameters are invalid |