mne.preprocessing.find_ecg_events(raw, event_id=999, ch_name=None, tstart=0.0, l_freq=5, h_freq=35, qrs_threshold='auto', filter_length='10s', return_ecg=False, reject_by_annotation=True, verbose=None)[source]

Find ECG events by localizing the R wave peaks.

rawinstance of Raw

The raw data.


The index to assign to found ECG events.

ch_nameNone | str

The name of the channel to use for ECG peak detection. If None (default), ECG channel is used if present. If None and no ECG channel is present, a synthetic ECG channel is created from the cross-channel average. This synthetic channel can only be created from MEG channels.


Start ECG detection after tstart seconds. Useful when the beginning of the run is noisy.


Low pass frequency to apply to the ECG channel while finding events.


High pass frequency to apply to the ECG channel while finding events.

qrs_thresholdfloat | str

Between 0 and 1. qrs detection threshold. Can also be “auto” to automatically choose the threshold that generates a reasonable number of heartbeats (40-160 beats / min).

filter_lengthstr | int | None

Number of taps to use for filtering.


Return the ECG data. This is especially useful if no ECG channel is present in the input data, so one will be synthesized. Defaults to False.


Whether to omit bad segments from the data before fitting. If True (default), annotated segments whose description begins with 'bad' are omitted. If False, no rejection based on annotations is performed.

New in version 0.18.

verbosebool, str, int, or None

If not None, override default verbose level (see mne.verbose() and Logging documentation for more). If used, it should be passed as a keyword-argument only.


The events corresponding to the peaks of the R waves.


Name of channel used.


The estimated average pulse. If no ECG events could be found, this will be zero.

ecgarray | None

The ECG data of the synthesized ECG channel, if any. This will only be returned if return_ecg=True was passed.