虚假峰值检测解决方案的矢量化

时间:2016-05-21 21:20:01

标签: matlab signal-processing

假设大小为x的时间信号1xN被假定为正弦曲线。对此进行峰值检测,我希望输出交替为正/负,在“假峰值”的情况下(可能由于信号中的噪声而发生),我想平均序列。

输入为[locs, pks],示例可以是:

locs = [ 10   20  30   38   40   42  50   60   ]; 
 pks = [  2.3 -1.2 0.5 -1.6 -1.4 -1.5 0.3 -0.5 ];

在这种情况下,我希望将汇总数字4到6收集到合并的loc = mean([38 40 42]) = 40pk = mean([-1.6 -1.4 -1.5]) = -1.5。一种工作算法是:

labels = bwlabel(diff(sign(pks)) == 0);
ulabels = 1:max(labels);

for i = 1:length(ulabels)
    idx = find(labels==ulabels(i));
    idx = [idx, idx(end)+1];
    locs(idx(1)) = round(mean(locs(idx)));
    pks(idx(1)) = mean(pks(idx));
    locs(idx(2:end)) = nan;
    pks(idx(2:end)) = nan;
end

locs = locs(~isnan(locs));
pks = pks(~isnan(pks));

但是,由于for循环,如果有许多错误峰值,这将非常慢,并且在我的整个脚本中将运行多次次。我希望加快速度。

因此:我怎样才能解决这个问题?

感谢。

0 个答案:

没有答案