Spike-triggered LFP phase

Methods for performing phase analysis.

elephant.phase_analysis.spike_triggered_phase(hilbert_transform, spiketrains, interpolate)[source]

Calculate the set of spike-triggered phases of a neo.AnalogSignal.

Parameters:
hilbert_transformneo.AnalogSignal or list of neo.AnalogSignal

neo.AnalogSignal of the complex analytic signal (e.g., returned by the elephant.signal_processing.hilbert function). If hilbert_transform is only one signal, all spike trains are compared to this signal. Otherwise, length of hilbert_transform must match the length of spiketrains.

spiketrainsneo.SpikeTrain or list of neo.SpikeTrain

Spike trains on which to trigger hilbert_transform extraction.

interpolatebool

If True, the phases and amplitudes of hilbert_transform for spikes falling between two samples of signal is interpolated. If False, the closest sample of hilbert_transform is used.

Returns:
phaseslist of np.ndarray

Spike-triggered phases. Entries in the list correspond to the neo.SpikeTrain`s in `spiketrains. Each entry contains an array with the spike-triggered angles (in rad) of the signal.

amplist of pq.Quantity

Corresponding spike-triggered amplitudes.

timeslist of pq.Quantity

A list of times corresponding to the signal. They correspond to the times of the neo.SpikeTrain referred by the list item.

Raises:
ValueError

If the number of spike trains and number of phase signals don’t match, and neither of the two are a single signal.

Examples

Create a 20 Hz oscillatory signal sampled at 1 kHz and a random Poisson spike train, then calculate spike-triggered phases and amplitudes of the oscillation:

>>> import neo
>>> import elephant
>>> import quantities as pq
>>> import numpy as np
...
>>> f_osc = 20. * pq.Hz
>>> f_sampling = 1 * pq.ms
>>> tlen = 100 * pq.s
...
>>> time_axis = np.arange(
...     0, tlen.magnitude,
...     f_sampling.rescale(pq.s).magnitude) * pq.s
>>> analogsignal = neo.AnalogSignal(
...     np.sin(2 * np.pi * (f_osc * time_axis).simplified.magnitude),
...     units=pq.mV, t_start=0*pq.ms, sampling_period=f_sampling)
>>> spiketrain = (elephant.spike_train_generation.
...     homogeneous_poisson_process(
...     50 * pq.Hz, t_start=0.0*pq.ms, t_stop=tlen.rescale(pq.ms)))
...
>>> phases, amps, times = elephant.phase_analysis.spike_triggered_phase(
...     elephant.signal_processing.hilbert(analogsignal),
...     spiketrain,
...     interpolate=True)