scipy.signal.find_peaks_cwt 参数

kkk*_*kkk 5 python signal-processing scipy

我正在构建一个心率监测器,在平滑点之后我想找到图中存在的峰值数量,因此我想使用 scipy.signal.find_peaks_cwt() 方法来找到峰值,但我无法要了解我应该传递哪些参数,因为 scipy.org 中的文档不好。

http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.find_peaks_cwt.html#scipy-signal-find-peaks-cwt

我在闪光灯打开的情况下拍摄了手指的 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)
Run Code Online (Sandbox Code Playgroud)

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

Bob*_*ley 5

您可以将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')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

fs/rates/10是我使用的宽度。请注意,它们对应于峰之间预期的样本数。即,fs/rates是峰之间的样本数。您可能需要调整 1/10 的系数以获得更好的结果。