Scipy 如何找出峰值的上升和衰减

Scipy 如何找出峰值的上升和衰减,scipy,signal-processing,Scipy,Signal Processing,我做了一些信号处理,我是新手。我正在使用scipy.signal进行计算。 我能找到峰的高度、宽度,但我想知道我是否也能找到峰的上升时间和衰减时间。这将是从左宽度点到最高峰值点的距离,然后是最高峰值点到右宽度点的距离 到目前为止,我有这个,这是从教程 import matplotlib.pyplot as plt from scipy.misc import electrocardiogram from scipy.signal import find_peaks x = electrocard

我做了一些信号处理,我是新手。我正在使用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)

我想我在寻找一阶矩或导数这是一个取决于信号类型的东西,对于这个信号,特别是一种有效的方法是找到所有峰值,然后通过突出范围中点定义的突出阈值过滤峰值

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

将numpy导入为np
将matplotlib.pyplot作为plt导入
从scipy.misc导入心电图
从scipy.signal导入查找峰值,峰值突出
x=心电图()[2000:3500]
#b、 a=黄油(4,0.001,‘高’)
#x=L过滤器(b,a,x)
峰值,u=查找_峰值(x)
日珥,u,u=峰值日珥(x,峰值)
选定=日珥>0.5*(np.min(日珥)+np.max(日珥))
左=峰值[:-1][selected[1:]
右=峰值[1:][所选[:-1]]
顶部=峰值[选定]
plt.图(figsize=(14,4))
平面图(x)
plt.绘图(顶部,x[顶部],“x”)
plt.绘图(左,x[左],“,标记大小=20)
plt.绘图(右,x[右],“,”,markersize=20)
plt.show()

如果要使用“高度阈值”,请删除低于信号频率的频率

来自scipy.signal导入黄油,lfilter
x=心电图()
plt.图(figsize=(14,4))
b、 a=黄油(4,0.01,‘高’)
plt.绘图(x[2000:10000])
x=L过滤器(b,a,x)
plt.绘图(x[2000:10000])
plt.图例(['原始','高通过滤']))

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

衍生品 您可以使用
rise=(peaks[top]-peaks[left])/(top-left)
,和
fall=(peaks[top]-peaks[right])/(top-right)
,这不是导数的实际值,而是相关的功能特性


此外,如果您想找到最大de,这取决于信号的类型,尤其是对于该信号,一种有效的方法是找到所有峰值,然后通过由突出范围中点定义的突出阈值过滤峰值

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

将numpy导入为np
将matplotlib.pyplot作为plt导入
从scipy.misc导入心电图
从scipy.signal导入查找峰值,峰值突出
x=心电图()[2000:3500]
#b、 a=黄油(4,0.001,‘高’)
#x=L过滤器(b,a,x)
峰值,u=查找_峰值(x)
日珥,u,u=峰值日珥(x,峰值)
选定=日珥>0.5*(np.min(日珥)+np.max(日珥))
左=峰值[:-1][selected[1:]
右=峰值[1:][所选[:-1]]
顶部=峰值[选定]
plt.图(figsize=(14,4))
平面图(x)
plt.绘图(顶部,x[顶部],“x”)
plt.绘图(左,x[左],“,标记大小=20)
plt.绘图(右,x[右],“,”,markersize=20)
plt.show()

如果要使用“高度阈值”,请删除低于信号频率的频率

来自scipy.signal导入黄油,lfilter
x=心电图()
plt.图(figsize=(14,4))
b、 a=黄油(4,0.01,‘高’)
plt.绘图(x[2000:10000])
x=L过滤器(b,a,x)
plt.绘图(x[2000:10000])
plt.图例(['原始','高通过滤']))

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

衍生品 您可以使用
rise=(peaks[top]-peaks[left])/(top-left)
,和
fall=(peaks[top]-peaks[right])/(top-right)
,这不是导数的实际值,而是相关的功能特性


另外,如果您想找到最大de

谢谢,但我如何计算峰值上升和衰减。或者换句话说,一阶矩、一阶导数或斜率。我正在寻找一个值来给出峰值的升降,这样就可以转换为特征。哇,现在我发现我对这篇文章的编辑是不完整的。这有什么帮助吗?你还对这个感兴趣吗?如何让答案可以接受?谢谢,但是我该如何计算峰值上升和衰减。或者换句话说,一阶矩、一阶导数或斜率。我正在寻找一个值来给出峰值的升降,这样就可以转换为特征。哇,现在我发现我对这篇文章的编辑是不完整的。这对你有帮助吗?你还对这个感兴趣吗?如何让答案被接受?你希望你的答案用什么单位?scipy.misc.心电图数据的单位为mV vs秒,采样率为360 Hz。这意味着每个样本代表(1/360)秒。如果你知道你的样品位置和电压水平之前,在和之后的峰值,你有你需要的一切。