我将峰宽定义为FWHM(半高全宽)。但是,我已经将三次多项式拟合到信号的波谷中,因此我将峰值定义为距离此基线的距离与峰值到峰值的相同指数。
我正在计算峰宽作为信号与最大一半线的交点之间的最大距离。它看起来像这样:
roots = indeces_of_intersections
intersection_lengths=[abs(y - x) for x, y in it.combinations(roots, 2)]
calculated_width = max(intersection_lengths)
我在计算峰宽一致时遇到问题,这是因为有时线与不同峰上的点相交。
我限制了定义此相交线的域:
Domain = [在山顶左侧稍微偏右一点]
但所有峰的域限制相同。
我已经考虑过以某种方式对不同的峰值进行域更改,但不确定如何实现。我的代码几乎完全自动化了,我必须保持这种方式。
答案 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轴向右增加)。如此简单快速!