我有一个看起来像蓝色的信号,我想获得红色的信号,同时又知道在(0, 255)
范围内恰好有2个最小值。
为了获得红色信号,我已经完成
@staticmethod
def _smooth_curve(curve, kernel_size=5):
kernel = np.ones((kernel_size,)) / kernel_size
smooth = np.convolve(curve, kernel, mode='same')
return smooth
sig= self._smooth_curve(sig, 20)
sig= self._smooth_curve(sig, 14)
sig= self._smooth_curve(sig, 10)
sig= self._smooth_curve(sig, 6)
这远非健壮。
我想确保获得2个最小值,并且它们出现在3个峰之间。
峰值不一定处于所示的幅度,但是它们是可分离的,这意味着它们不会以发现最小值没有意义的方式重叠。
使用信号的envelope将是一个更好的开始。
该想法已被描述为here,可以使用的功能为scipy.signal.hilbert()。
您可能必须对信封应用过滤器,但是它应该更健壮。
关于您的评论,最少40条左右:然后,您需要使用诸如最大池窗口或最大滚动值之类的东西。就像您的卷积一样,但是它不是求和和除法而是最大。
该想法显示为here。
有scipy.ndimage.filters.maximum_filter适用于图像。文档指出它适用于多维,因此,如果将关键字size
设置为也许是3
,则它可能适用于一维数组。
还有其他可能更容易的可能性
rolling
函数,可以与max()
一起使用