微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何找出峰值上升和衰减

如何解决如何找出峰值上升和衰减

我做了一些信号处理,我是新手。我正在使用 scipy.signal 进行计算。 我能够找到峰值高度、宽度,但我想知道我是否也能找到峰值时间和衰减时间的上升。这将是从左侧宽度点到最高峰值点的距离,然后是从最高峰值点到右侧宽度点的距离。

到目前为止,我有这个,来自教程

import matplotlib.pyplot as plt
from scipy.misc import electrocardiogram
from scipy.signal import find_peaks
x = electrocardiogram()[2000:4000]
peaks,_ = find_peaks(x,height=0)
plt.plot(x)
plt.plot(peaks,x[peaks],"x")
plt.plot(np.zeros_like(x),"--",color="gray")
plt.show()

esults_full = peak_widths(x,peaks,rel_height=1)

我想我正在寻找第一时刻或衍生物

解决方法

这取决于信号的类型,特别是对于该信号,一种有效的方法是找到所有峰值,然后通过由突出范围中的中点定义的突出阈值过滤峰值。

>

一旦我有了感兴趣的峰值,我就使用了前一个和下一个峰值的位置。

import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import electrocardiogram
from scipy.signal import find_peaks,peak_prominences
x = electrocardiogram()[2000:3500]
#b,a = butter(4,0.001,'high')
#x = lfilter(b,a,x)
peaks,_ = find_peaks(x)
prominences,_,_ = peak_prominences(x,peaks)
selected = prominences > 0.5 * (np.min(prominences) + np.max(prominences))
left = peaks[:-1][selected[1:]]
right = peaks[1:][selected[:-1]]
top = peaks[selected]

plt.figure(figsize=(14,4))
plt.plot(x)
plt.plot(top,x[top],"x")
plt.plot(left,x[left],".",markersize=20)
plt.plot(right,x[right],markersize=20)
plt.show()

peaks

如果您想使用高度阈值,删除低于信号频率的频率会很有趣。

from scipy.signal import butter,lfilter
x = electrocardiogram()
plt.figure(figsize=(14,4))
b,0.01,'high')
plt.plot(x[2000:10000])
x = lfilter(b,x)
plt.plot(x[2000:10000])
plt.legend(['original','highpass filtered'])

filtered ECG

关于编码风格偏好,如果你来自 MATLAB,你可能会习惯全局范围内的一切,但我总是说模块是你的朋友 :)。我会简单地导入 scipy.signal 而不是将它们的成员函数作为全局变量导入,您可以为模块使用一些别名,例如 import matplotlib.pyplot as plt,您可以找到用于每个模块的常见别名,但是这更多是为了程序员的互操作性,不是强制性的,所以我按照你的风格写了代码。

衍生品

您可以使用rise = (peaks[top] - peaks[left]) / (top - left)fall = (peaks[top] - peaks[right]) / (top - right),这不是导数的实际值,而是相关的特征特征。

如果你想找到最大的de

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。