Python 如何强制1d信号具有2个最小值?

Python 如何强制1d信号具有2个最小值?,python,numpy,scipy,signal-processing,smoothing,Python,Numpy,Scipy,Signal Processing,Smoothing,我有一个信号看起来像蓝色的,我想得到红色的,同时知道在范围(0255)内有两个最小值 为了得到红色信号,我已经做了 @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._sm

我有一个信号看起来像蓝色的,我想得到红色的,同时知道在范围
(0255)
内有两个最小值

为了得到红色信号,我已经做了

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

峰值不一定在所示的振幅上,但它们是可分离的,这意味着它们不会以一种寻找极小值没有意义的方式重叠。

使用信号的频率将是一个更好的开始

本文描述了这个想法,并介绍了一个您可以使用的函数

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

在您的评论中,至少有40条: 然后,您需要使用诸如最大池窗口或滚动最大值之类的工具。这就像你的卷积,但不是求和和和除法,而是求最大值

这个想法被展示出来了

有一种方法可以处理图像。文档说明它是用于多维的,因此如果您将关键字
size
设置为maybe
3
,它可能适用于一维数组

还有其他可能更容易的方法

  • 有很好的解决方案
  • 提到pandas的
    rolling
    函数,该函数可与
    max()一起使用

当然,也可以将包络线和滚动最大值结合起来。

这是否回答了您的问题?在上面的招牌上,一个信封将创造一个新的最低40左右。我会得到一个更平滑的图章,但我怎么才能得到我需要的分离呢?