用MATLAB'寻找有效峰;s findpeaks()
我正在使用MATLAB的findpeaks函数快速识别数据中的峰值: 您会注意到第二个负倾斜部分的峰值,此处放大:用MATLAB'寻找有效峰;s findpeaks(),matlab,signal-processing,Matlab,Signal Processing,我正在使用MATLAB的findpeaks函数快速识别数据中的峰值: 您会注意到第二个负倾斜部分的峰值,此处放大: 这个峰值是一个已知的测量伪影,我想排除它。我有很多这样的数据,有些有工件,有些没有工件,所以我想用一种自动的方法在遇到它们时排除它们。我需要在FindPeak中调整哪些设置来删除这些伪峰值?我试过“MinpeakProminance”、“Threshold”和“MinPeakWidth”都没有用。尽管从图片上看可能不明显,但该数据有数千个数据点,因此任何点的最近邻都非常相似(查
这个峰值是一个已知的测量伪影,我想排除它。我有很多这样的数据,有些有工件,有些没有工件,所以我想用一种自动的方法在遇到它们时排除它们。我需要在FindPeak中调整哪些设置来删除这些伪峰值?我试过“MinpeakProminance”、“Threshold”和“MinPeakWidth”都没有用。尽管从图片上看可能不明显,但该数据有数千个数据点,因此任何点的最近邻都非常相似(查看x轴比例)。首先使用中值滤波器平滑数据:
y=medfilt1(x)
,然后在其上应用查找峰值z=findpeaks(y)
或者,找到峰值:[pks,locs]=findpeaks(data)
,然后检查每个峰值,看看它是否是其附近的绝对最大值:
span = 10;%play with this number
counter = 0
for ii = 1:length(pks)
if pks(ii) == max(data(locs(ii)-span:locs(ii)+span))
counter = counter + 1;
new_pks[counter] = pks[ii];
new_locs[counter] = locs[ii];
end
end
如果您有R2014b或更高版本,请尝试查看。这可以帮助您选择更突出的峰值(它们突出程度的相对度量),而不是按绝对值进行选择。过滤数据,重复。我担心的是,我对峰值位置非常敏感,我甚至不想用过滤器稍微修改它。@Pete:关于
'MinPeakProminence'
或'MinPeakWidth'
有什么不起作用?看起来最小峰值突出度即使是0.1也很容易抓住这个例子。