coherence_analysis

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 a Quantity).

  • 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 // 8 with 50% overlap yields ~15 segments. Choose nperseg so at least two segments fit, otherwise the result is degenerate.