Python scipy.signal.find_peaks_cwt参数

Python scipy.signal.find_peaks_cwt参数,python,scipy,signal-processing,Python,Scipy,Signal Processing,我正在构建一个心率监护仪,在平滑点之后,我想找到曲线图中存在的峰值数量,因此我想使用方法scipy.signal.find_peaks_cwt()来找到峰值,但我无法理解应该传递什么参数,因为scipy.org中的文档不好 我用闪光灯拍摄了一段10秒的手指视频,心率可能在40bpm到200bpm之间变化 scipy.signal.find_peaks_cwt(vector, widths, wavelet=None, max_distances=None, gap_thresh=None, m

我正在构建一个心率监护仪,在平滑点之后,我想找到曲线图中存在的峰值数量,因此我想使用方法scipy.signal.find_peaks_cwt()来找到峰值,但我无法理解应该传递什么参数,因为scipy.org中的文档不好

我用闪光灯拍摄了一段10秒的手指视频,心率可能在40bpm到200bpm之间变化

scipy.signal.find_peaks_cwt(vector, widths, wavelet=None, max_distances=None, gap_thresh=None, min_length=None, min_snr=1, noise_perc=10)

我真的很困惑宽度参数是什么,任何帮助都会很好。提前感谢

您可以将
widths
参数看作峰值之间可能的宽度列表。该算法平滑这些宽度,然后查找峰值。如果它始终在每个“宽度”中找到一个峰值,则它声明该峰值存在

# sample rate
fs = 100.0

# time vector (10s)
t = np.arange(0,10,1/fs)

# heart rates to test
rates = np.array([40,80,100,150,200])/60  

# create periodic signal that looks a  little like a heartbeat
signal = abs(np.sin(t*np.pi*rates[2])**3)

#add noise
signal_w_noise = signal + np.random.randn(len(signal))*0.1
plt.plot(t,signal_w_noise)

#find peaks
peaks = scipy.signal.find_peaks_cwt(signal_w_noise, fs/rates/10)
plt.plot(t[peaks],signal_w_noise[peaks],'ro')


fs/rates/10
是我使用的宽度。请注意,它们对应于峰值之间预期的样本数。也就是说,
fs/rates
是峰值之间的样本数。您可能需要旋转1/10的因子以获得更好的结果。

请您解释该方法的其他属性以及其意义。我将宽度参数作为np.数组([0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5]),认为这些应该是峰值的可能宽度,所以60/40得到1.5,60/200得到0.3,我假设峰值的宽度应该在这个范围内,对吗??