我是Python和编程的新手,正在我的样条插值图上工作波峰检测算法。我使用了此链接中给出的代码:https://gist.github.com/endolith/250860。我必须使此算法适用于任何类型的波形,即低振幅、高振幅,基线不对齐等。目标是计算绘图中的波数。但我的峰值检测会计算“无效”的峰值,从而得出错误答案。所谓“无效”峰值是指如果两个凹槽靠得很近位于波峰上,程序将检测到2个峰值,也就是说有2个波浪,实际上只有1个波浪。我尝试更改在链接中给出的峰值检测函数中定义的“delta”参数,但这并没有解决我正在努力达成的一般化目标。请建议任何改进算法或我应该使用的其他方法。欢迎任何形式的帮助。提前致谢。
注:我无法上传错误检测到的波形图像。我希望我的解释足够清楚... 以下是代码。
注:我无法上传错误检测到的波形图像。我希望我的解释足够清楚... 以下是代码。
wave = f1(xnew)/(max(f1(xnew))) ##interpolated wave
maxtab1, mintab1 = peakdet(wave,.005)
maxi = max(maxtab1[:,1])
for i in range(len(maxtab1)):
if maxtab1[i,1] > (.55 * maxi) : ## Thresholding
maxtab.append((maxtab1[i,0],maxtab1[i,1]))
arr_maxtab = np.array(maxtab)
dist = 1500 ## Threshold defined for minimum distance between two notches to be considered as two separate waves
mtdiff = diff(arr_maxtabrr[:,0])
final_maxtab = []
new_arr = []
for i in range(len(mtdiff)):
if mtdiff[i] < dist :
new_arr.append((arr_maxtab[i+1,0],arr_maxtab[i+1,1]))
for i in range(len(arr_maxtab)):
if not arr_maxtab[i,0] in new_arr[:,0]:
final_maxtab.append((arr_maxtab[i,0], arr_maxtab[i,1]))
else:
final_maxtab = maxtab