Skip to content

Commit 2c6fef7

Browse files
Refactor bilateral_symmetry to use centralized phase computation utilities
1 parent d1ea34c commit 2c6fef7

1 file changed

Lines changed: 13 additions & 15 deletions

File tree

pyeyesweb/analysis_primitives/bilateral_symmetry.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@
1717
"""
1818

1919
import numpy as np
20+
import warnings
2021
from collections import deque
21-
from scipy.signal import hilbert
2222
from sklearn.cross_decomposition import CCA
2323

24+
from pyeyesweb.utils.signal_processing import compute_hilbert_phases
25+
from pyeyesweb.utils.math_utils import compute_phase_locking_value
26+
2427

2528
class BilateralSymmetryAnalyzer:
2629
"""
@@ -102,25 +105,20 @@ def _compute_phase_synchronization(self, left_signal, right_signal):
102105
Returns:
103106
float: Phase locking value (0-1, where 1 is perfect synchronization)
104107
"""
105-
if len(left_signal) < 10: # Need minimum data for Hilbert
106-
return np.nan # Not enough data for analysis
108+
if len(left_signal) < 10: # Need minimum samples for Hilbert Transform
109+
return np.nan
107110

108111
try:
109-
# Extract phases using Hilbert transform
110-
left_analytic = hilbert(left_signal - np.mean(left_signal))
111-
right_analytic = hilbert(right_signal - np.mean(right_signal))
112-
113-
left_phase = np.angle(left_analytic)
114-
right_phase = np.angle(right_analytic)
115-
116-
# Compute Phase Locking Value (PLV)
117-
phase_diff = left_phase - right_phase
118-
plv = np.abs(np.mean(np.exp(1j * phase_diff)))
119-
112+
left_centered = left_signal - np.mean(left_signal)
113+
right_centered = right_signal - np.mean(right_signal)
114+
sig = np.column_stack([left_centered, right_centered])
115+
116+
phase1, phase2 = compute_hilbert_phases(sig)
117+
plv = compute_phase_locking_value(phase1, phase2)
118+
120119
return plv
121120

122121
except Exception as e:
123-
import warnings
124122
warnings.warn(f"Phase symmetry computation failed: {e}", RuntimeWarning)
125123
return np.nan
126124

0 commit comments

Comments
 (0)