Peak Detection in Python: How does the scipy.signal.find_peaks_cwt function work?

12.3k views Asked by At

I'm looking to identify some peaks in some spectrograph data, and was trying to use the scipy.signal.find_peaks_cwt() function to do it.

However, the official documentation I've found isn't too descriptive, and tends to pick up false peaks in noise while sometimes not picking up actual peaks in the data.

Could anyone give me a better explanation of the parameters in this function that I can play with, including "widths", or could you show me some alternatives?

1

There are 1 answers

3
Yoan Tournade On

If your signal is relatively clean, I suggest first using simpler alternatives, like the PeakUtils indexes function. The code is way more direct than with scipy.signal.find_peaks_cwt:

import numpy as np
from peakutils.peak import indexes
vector = [ 0, 6, 25, 20, 15, 8, 15, 6, 0, 6, 0, -5, -15, -3, 4, 10, 8, 13, 8, 10, 3, 1, 20, 7, 3, 0 ]
print('Detect peaks with minimum height and distance filters.')
indexes = indexes(np.array(vector), thres=7.0/max(vector), min_dist=2)
print('Peaks are: %s' % (indexes))

enter image description here

The Scipy find_peaks_cwt will really prove usefull in presence of noisy data, as it uses continuous wavelet transform.