改善信号峰值分析的技巧。 (峰宽)

时间:2015-03-03 19:06:30

标签: numpy machine-learning computer-vision signal-processing scientific-computing

  • 大家好。我有这种形式的数百个信号 检测到峰值高于某个阈值。

enter image description here

我将峰宽定义为FWHM(半高全宽)。但是,我已经将三次多项式拟合到信号的波谷中,因此我将峰值定义为距离此基线的距离与峰值到峰值的相同指数。

我正在计算峰宽作为信号与最大一半线的交点之间的最大距离。它看起来像这样:

roots = indeces_of_intersections

intersection_lengths=[abs(y - x) for x, y in it.combinations(roots, 2)]

calculated_width = max(intersection_lengths)

我在计算峰宽一致时遇到问题,这是因为有时线与不同峰上的点相交。

enter image description here

限制了定义此相交线的域:

Domain = [在山顶左侧稍微偏右一点]

但所有峰的域限制相同。

我已经考虑过以某种方式对不同的峰值进行域更改,但不确定如何实现。我的代码几乎完全自动化了,我必须保持这种方式。

enter image description here

1 个答案:

答案 0 :(得分:0)

将问题发布到这里帮助我实现了一个简单的解决方案:

more_than_peak=[x for x in it.ifilter(lambda x: x if x>peaks[i] else 0, roots)]
less_than_peak=[x for x in it.ifilter(lambda x: x if x<peaks[i] else 0, roots)]
if len(more_than_peak)>0 or len(less_than_peak)>0:
     width = min(more_than_peak)-max(less_than_peak)

在这里,我找到了峰值指数左右两侧的交点。然后,我在峰的右边找到最小的一个,在左边找到最大的一个(x轴向右增加)。如此简单快速!