Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用MATLAB'寻找有效峰;s findpeaks()_Matlab_Signal Processing - Fatal编程技术网

用MATLAB'寻找有效峰;s findpeaks()

用MATLAB'寻找有效峰;s findpeaks(),matlab,signal-processing,Matlab,Signal Processing,我正在使用MATLAB的findpeaks函数快速识别数据中的峰值: 您会注意到第二个负倾斜部分的峰值,此处放大: 这个峰值是一个已知的测量伪影,我想排除它。我有很多这样的数据,有些有工件,有些没有工件,所以我想用一种自动的方法在遇到它们时排除它们。我需要在FindPeak中调整哪些设置来删除这些伪峰值?我试过“MinpeakProminance”、“Threshold”和“MinPeakWidth”都没有用。尽管从图片上看可能不明显,但该数据有数千个数据点,因此任何点的最近邻都非常相似(查

我正在使用MATLAB的findpeaks函数快速识别数据中的峰值:

您会注意到第二个负倾斜部分的峰值,此处放大:


这个峰值是一个已知的测量伪影,我想排除它。我有很多这样的数据,有些有工件,有些没有工件,所以我想用一种自动的方法在遇到它们时排除它们。我需要在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也很容易抓住这个例子。