scipy 1.8.0 Pypi GitHub Homepage
Other Docs
NotesParametersReturnsBackRef
find_peaks_cwt(vector, widths, wavelet=None, max_distances=None, gap_thresh=None, min_length=None, min_snr=1, noise_perc=10, window_size=None)

The general approach is to smooth :None:None:`vector` by convolving it with :None:None:`wavelet(width)` for each width in :None:None:`widths`. Relative maxima which appear at enough length scales, and with sufficiently high SNR, are accepted.

Notes

This approach was designed for finding sharp peaks among noisy data, however with proper parameter selection it should function well for different peak shapes.

The algorithm is as follows:

  1. Perform a continuous wavelet transform on :None:None:`vector`, for the supplied :None:None:`widths`. This is a convolution of :None:None:`vector` with :None:None:`wavelet(width)` for each width in :None:None:`widths`. See cwt .

  2. Identify "ridge lines" in the cwt matrix. These are relative maxima at each row, connected across adjacent rows. See identify_ridge_lines

  3. Filter the ridge_lines using filter_ridge_lines.

versionadded

Parameters

vector : ndarray

1-D array in which to find the peaks.

widths : float or sequence

Single width or 1-D array-like of widths to use for calculating the CWT matrix. In general, this range should cover the expected width of peaks of interest.

wavelet : callable, optional

Should take two parameters and return a 1-D array to convolve with :None:None:`vector`. The first parameter determines the number of points of the returned wavelet array, the second parameter is the scale (:None:None:`width`) of the wavelet. Should be normalized and symmetric. Default is the ricker wavelet.

max_distances : ndarray, optional

At each row, a ridge line is only connected if the relative max at row[n] is within max_distances[n] from the relative max at row[n+1] . Default value is widths/4 .

gap_thresh : float, optional

If a relative maximum is not found within :None:None:`max_distances`, there will be a gap. A ridge line is discontinued if there are more than :None:None:`gap_thresh` points without connecting a new relative maximum. Default is the first value of the widths array i.e. widths[0].

min_length : int, optional

Minimum length a ridge line needs to be acceptable. Default is cwt.shape[0] / 4 , ie 1/4-th the number of widths.

min_snr : float, optional

Minimum SNR ratio. Default 1. The signal is the value of the cwt matrix at the shortest length scale ( cwt[0, loc] ), the noise is the :None:None:`noise_perc'th percentile of datapoints contained within a window of 'window_size` around cwt[0, loc] .

noise_perc : float, optional

When calculating the noise floor, percentile of data points examined below which to consider noise. Calculated using :None:None:`stats.scoreatpercentile`. Default is 10.

window_size : int, optional

Size of window to use to calculate noise floor. Default is cwt.shape[1] / 20 .

Returns

peaks_indices : ndarray

Indices of the locations in the :None:None:`vector` where peaks were found. The list is sorted.

Find peaks in a 1-D array with wavelet transformation.

See Also

cwt

Continuous wavelet transform.

find_peaks

Find peaks inside a signal based on peak properties.

Examples

>>> from scipy import signal
... xs = np.arange(0, np.pi, 0.05)
... data = np.sin(xs)
... peakind = signal.find_peaks_cwt(data, np.arange(1,10))
... peakind, xs[peakind], data[peakind] ([32], array([ 1.6]), array([ 0.9995736]))
See :

Back References

The following pages refer to to this document either explicitly or contain code examples using this.

scipy.signal._peak_finding.find_peaks scipy.signal._peak_finding.find_peaks_cwt

Local connectivity graph

Hover to see nodes names; edges to Self not shown, Caped at 50 nodes.

Using a canvas is more power efficient and can get hundred of nodes ; but does not allow hyperlinks; , arrows or text (beyond on hover)

SVG is more flexible but power hungry; and does not scale well to 50 + nodes.

All aboves nodes referred to, (or are referred from) current nodes; Edges from Self to other have been omitted (or all nodes would be connected to the central node "self" which is not useful). Nodes are colored by the library they belong to, and scaled with the number of references pointing them


GitHub : /scipy/signal/_peak_finding.py#1190
type: <class 'function'>
Commit: