coherence_analysis#
- class braintools.metric.coherence_analysis(lfp1, lfp2, dt, nperseg=None, noverlap=None, freq_range=None)#
Compute the magnitude-squared coherence between two LFP signals (Welch).
Coherence is estimated by averaging cross- and auto-spectra over overlapping Hann-windowed segments:
\[C_{xy}(f) = \frac{|\langle P_{xy}(f) \rangle|^2} {\langle P_{xx}(f) \rangle \, \langle P_{yy}(f) \rangle}\]- Parameters:
lfp1 (
Array|ndarray|bool|number|bool|int|float|complex|Quantity) – LFP signals with shape(n_time,).lfp2 (
Array|ndarray|bool|number|bool|int|float|complex|Quantity) – LFP signals with shape(n_time,).dt (
float|Quantity) – Sampling interval (seconds if a float; converted if aQuantity).nperseg (
int|None) – Length of each segment. Default:n_time // 8.noverlap (
int|None) – Overlap between segments. Default:nperseg // 2.freq_range (
Tuple[float,float] |None) –(f_min, f_max)in Hz to retain. If None, returns all frequencies.
- Return type:
Tuple[Array,Array]- Returns:
freqs (jax.Array) – One-sided sample frequencies in Hz.
coherence (jax.Array) – Magnitude-squared coherence in
[0, 1].
Notes
Averaging over segments is essential: with a single segment the estimator is identically 1 at every frequency. The default
nperseg = n_time // 8with 50% overlap yields ~15 segments. Choosenpersegso at least two segments fit, otherwise the result is degenerate.