Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在信号中形成峰值之前找到实例?_Python_Matplotlib_Scipy - Fatal编程技术网

Python 如何在信号中形成峰值之前找到实例?

Python 如何在信号中形成峰值之前找到实例?,python,matplotlib,scipy,Python,Matplotlib,Scipy,我正在处理信号数据,并试图在峰值开始形成之前找到实例(或接近实例)。例如: 红星和橙色x当前使用scipy.signal.find_peaks计算,以在两个连续大于50的峰值之前找到第一个最小峰值。我想要的理想位置是有红星和第二个和第三个橙色x的区域 我的问题是,有时在第一个驼峰形成之前没有一个最小值,这会导致像左边第一个橙色x一样的问题 有什么更好的方法或方法可以改进我目前的方法,以便在驼峰形成之前获得该点(粗略箭头位置): 我当前的代码如下所示,它分别针对蓝色和绿色行运行: st

我正在处理信号数据,并试图在峰值开始形成之前找到实例(或接近实例)。例如:

红星和橙色x当前使用scipy.signal.find_peaks计算,以在两个连续大于50的峰值之前找到第一个最小峰值。我想要的理想位置是有红星和第二个和第三个橙色x的区域

我的问题是,有时在第一个驼峰形成之前没有一个最小值,这会导致像左边第一个橙色x一样的问题

有什么更好的方法或方法可以改进我目前的方法,以便在驼峰形成之前获得该点(粗略箭头位置):

我当前的代码如下所示,它分别针对蓝色和绿色行运行:

    step_peak, _ = find_peaks(z, height=60, distance=40)
    step_min, _ = find_peaks(-1*z, height=-60)
    contact = []

    for i in range(len(step_peak)-1):
        if step_peak[i+1] - step_peak[i] < 100:
            for min in reversed(step_min):
                if min < step_peak[i]:
                    contact.append(min)
                    break
step_peak,_=find_peaks(z,高度=60,距离=40)
步进最小值,查找峰值(-1*z,高度=-60)
联系人=[]
对于范围内的i(len(阶跃峰值)-1):
如果阶跃峰值[i+1]-阶跃峰值[i]<100:
对于反转中的最小值(步骤_min):
如果最小值<步进峰值[i]:
contact.append(最小值)
打破
这种方法适用于整个数据集的90%左右,只有少数像我需要解释的第一个橙色x


非常感谢您的帮助。

首先,让我们看看函数
scipy.signal.peak\u widths
。在无法访问您的数据的情况下,我使用了一个示例曲线:

从scipy.signal导入啁啾,查找峰值,峰值宽度
将matplotlib.pyplot作为plt导入
将numpy作为np导入
x=np.linspace(0,6*np.pi,1000)
x=np.sin(x)+0.6*np.sin(2.6*x)
峰值,u=查找_峰值(x)
结果全=峰值宽度(x,峰值,相对高度=1)
结果_全[0]#宽度
平面图(x)
plt.绘图(峰值,x[峰值],“x”)
plt.hlines(*结果完整[1:],color=“C3”)
plt.show()

我们可以解析
峰值宽度的结果
以丢弃其他宽度内的值

peak\u begin=np.array(结果已满)
peak_begin=peak_begin[:,np.argsort(peak_begin[2])]
_,b=峰值形状
宽度\u至\u删除=[]
i=1
而我


我希望我得到了您想要的结果。

首先,让我们看看函数
scipy.signal.peak\u widths
。在无法访问您的数据的情况下,我使用了一个示例曲线:

从scipy.signal导入啁啾,查找峰值,峰值宽度
将matplotlib.pyplot作为plt导入
将numpy作为np导入
x=np.linspace(0,6*np.pi,1000)
x=np.sin(x)+0.6*np.sin(2.6*x)
峰值,u=查找_峰值(x)
结果全=峰值宽度(x,峰值,相对高度=1)
结果_全[0]#宽度
平面图(x)
plt.绘图(峰值,x[峰值],“x”)
plt.hlines(*结果完整[1:],color=“C3”)
plt.show()

我们可以解析
峰值宽度的结果
以丢弃其他宽度内的值

peak\u begin=np.array(结果已满)
peak_begin=peak_begin[:,np.argsort(peak_begin[2])]
_,b=峰值形状
宽度\u至\u删除=[]
i=1
而我


我希望我得到了你想要的。

也许你要找的点是二阶导数最大的地方?也许你要找的点是二阶导数最大的地方?