使用findpeaks访问峰的宽度(信号包)

时间:2018-02-27 14:24:57

标签: octave

我正在使用位于信号包中的findpeaks function,我正在努力获得检测到的峰值的宽度。

从文档中可以看出:

  

“根”   抛物线拟合到每个返回峰值的横坐标值(以指数单位)与“基线”值相交。峰的宽度由diff(根)计算。

     

此函数接受以下列表中给出的属性 - 值对...

我从findpeaks获得了结构,这是我的输出:

ans =

  scalar structure containing the fields:

    parabol =

      scalar structure containing the fields:

        x =

           91
           95
    pp =

      -3.1387e+004  5.8853e+006  -1.6238e+008


height =   1.1352e+008
baseline =   6.6495e+007
roots =

   132.461    55.050

所以我相信roots对象为我提供了峰值的宽度,但是如何将这些数据输出到另一个变量?

1 个答案:

答案 0 :(得分:1)

据我了解文档,您必须使用3个输出参数调用findpeaks

[pks,loc,extra] = findpeaks(...)

第一个峰的横坐标值(以索引单位表示)在变量extra.roots(1,:)中,因此宽度为:

width = extra.roots(1,1) - extra.roots(1,2)

以下是一个例子:

t = 2*pi*linspace(0,1,1024)';
y = sin(3.14*t) + 0.5*cos(6.09*t) + 0.1*sin(10.11*t+1/6) + 0.1*sin(15.3*t+1/3);
figure,plot(data1)
hold on
plot(extra.roots(1,:),[0,0],'r','linewidth',10)

该示例将第一个峰的宽度显示为x轴上的红色条带。

如果你想知道变量t单位的宽度,你应该像这样缩放它:

width = (extra.roots(1,1) - extra.roots(1,2)) * (t(2)-t(1))

我希望这会有所帮助。