kkk*_*kkk 5 python signal-processing scipy
我正在构建一个心率监测器,在平滑点之后我想找到图中存在的峰值数量,因此我想使用 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)
Run Code Online (Sandbox Code Playgroud)
我真的很困惑宽度参数是什么,任何帮助都会很棒。提前致谢
您可以将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 的系数以获得更好的结果。
| 归档时间: |
|
| 查看次数: |
5678 次 |
| 最近记录: |