Source code for neurokit2.signal.signal_zerocrossings
# -*- coding: utf-8 -*-
import numpy as np
[docs]
def signal_zerocrossings(signal, direction="both"):
"""**Locate the indices where the signal crosses zero**
Note that when the signal crosses zero between two points, the first index is returned.
Parameters
----------
signal : Union[list, np.array, pd.Series]
The signal (i.e., a time series) in the form of a vector of values.
direction : str
Direction in which the signal crosses zero, can be ``"positive"``, ``"negative"`` or
``"both"`` (default).
Returns
-------
array
Vector containing the indices of zero crossings.
Examples
--------
.. ipython:: python
import neurokit2 as nk
signal = nk.signal_simulate(duration=5)
zeros = nk.signal_zerocrossings(signal)
@savefig p_signal_zerocrossings1.png scale=100%
nk.events_plot(zeros, signal)
@suppress
plt.close()
.. ipython:: python
# Only upward or downward zerocrossings
up = nk.signal_zerocrossings(signal, direction="up")
down = nk.signal_zerocrossings(signal, direction="down")
@savefig p_signal_zerocrossings2.png scale=100%
nk.events_plot([up, down], signal)
@suppress
plt.close()
"""
df = np.diff(np.sign(signal))
if direction in ["positive", "up"]:
zerocrossings = np.where(df > 0)[0]
elif direction in ["negative", "down"]:
zerocrossings = np.where(df < 0)[0]
else:
zerocrossings = np.nonzero(np.abs(df) > 0)[0]
return zerocrossings