我有一个地震信号y(i):


这里我找到了一个最大值:i = 152.54,y = 222.29并用红色绘制。

我想自动找到所有的最大值。 SGF的最小值和最大值比其他过滤器要好得多。这听起来很适合我使用。

我找到了一个生成SGF系数的Matlab脚本。
并用它找到了导数的4阶SGF系数。
我编写了一个小的Matlab脚本,该脚本< />通过将信号与导数的
四阶SGF系数进行卷积来找到信号的导数,从而找到样本对(i,i + 1),其中导数更改符号
通过线性插值在i和i + 1之间找到导数的零交叉

脚本:脚本我必须测试导数是否从负变为正,才能使函数获得所需的结果,但这使我感到困惑。

下面是使用此函数在我的信号上找到最大值的结果:


结果看起来不错,但我注意到有些找不到axima:
i = 143.13、190.88、256.97。

这是因为它们接近其他最大值吗?

如何控制最接近的两个最大值?

感谢您的任何回答!

评论

你能画出滤波器的输出吗?

#1 楼

虽然我不熟悉这种特定类型的过滤器,但根据您显示的图,我想您的过程找不到的最大值只是与过程中固有的时间分辨率相抵触。任何一种“平滑”都意味着感兴趣的信号在时间上存在一些拖尾现象,因此,如果附近有两个峰,则有可能它们会合并为一个。低阶滤波器可能表现出较少的这种行为,这可能是以您获得的平滑量为代价的。