如何使一维信号具有2个最小值?

问题描述 投票:0回答:1

我有一个看起来像蓝色的信号,我想获得红色的信号,同时又知道在(0, 255)范围内恰好有2个最小值。

enter image description here

为了获得红色信号,我已经完成

@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个峰之间。

峰值不一定处于所示的幅度,但是它们是可分离的,这意味着它们不会以发现最小值没有意义的方式重叠。

python numpy scipy signal-processing smoothing
1个回答
0
投票

使用信号的envelope将是一个更好的开始。

该想法已被描述为here,可以使用的功能为scipy.signal.hilbert()

您可能必须对信封应用过滤器,但是它应该更健壮。

关于您的评论,最少40条左右:然后,您需要使用诸如最大池窗口或最大滚动值之类的东西。就像您的卷积一样,但是它不是求和和除法而是最大。

该想法显示为here

scipy.ndimage.filters.maximum_filter适用于图像。文档指出它适用于多维,因此,如果将关键字size设置为也许是3,则它可能适用于一维数组。

还有其他可能更容易的可能性

© www.soinside.com 2019 - 2024. All rights reserved.