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
设置为maybe3
,它可能适用于一维数组
还有其他可能更容易的方法
- 有很好的解决方案
- 提到pandas的
函数,该函数可与rolling
max()一起使用
当然,也可以将包络线和滚动最大值结合起来。这是否回答了您的问题?在上面的招牌上,一个信封将创造一个新的最低40左右。我会得到一个更平滑的图章,但我怎么才能得到我需要的分离呢?