Source code for neurokit2.rsp.rsp_segment
from ..signal import signal_cyclesegment
from .rsp_peaks import rsp_peaks
[docs]
def rsp_segment(rsp_cleaned, peaks=None, sampling_rate=1000, show=False, **kwargs):
"""**Segment a respiratory signal into individual breaths**
Segment a respiratory signal into individual breaths. Convenient for visualizing all the breaths.
Parameters
----------
rsp_cleaned : Union[list, np.array, pd.Series]
The cleaned respiratory channel as returned by ``rsp_clean()``.
peaks : dict
The samples at which the peaks (exhalation onsets) occur. Dict returned by ``rsp_peaks()``. Defaults to ``None``.
sampling_rate : int
The sampling frequency of ``rsp_cleaned`` (in Hz, i.e., samples/second). Defaults to 1000.
show : bool
If ``True``, will return a plot of breaths. Defaults to ``False``.
**kwargs
Other arguments to be passed.
Returns
-------
dict
A dict containing DataFrames for all segmented breaths.
See Also
--------
rsp_clean, rsp_peaks
Examples
--------
.. ipython:: python
import neurokit2 as nk
sampling_rate=100
rsp = nk.rsp_simulate(duration=30, sampling_rate=sampling_rate, method="breathmetrics")
@savefig p_rsp_segment.png scale=100%
rsp_epochs = nk.rsp_segment(rsp, sampling_rate=sampling_rate, show=True)
@suppress
plt.close()
"""
# Sanitize inputs
if peaks is None:
_, peaks = rsp_peaks(rsp_cleaned, sampling_rate=sampling_rate)
peaks = peaks["RSP_Peaks"]
if len(rsp_cleaned) < sampling_rate * 10:
raise ValueError("The data length is too small to be segmented.")
output = signal_cyclesegment(rsp_cleaned, peaks, sampling_rate=sampling_rate, show=show, signal_name="rsp", **kwargs)
# if an axes object is requested
if show == "return":
return output
# else extract breaths
breaths, _ = output
return breaths