我是 python 和编程的新手,并且在我的样条插值图上研究波峰检测算法。我使用了此链接上给出的代码:https ://gist.github.com/endolith/250860. 我必须使该算法适用于任何类型的波形,即低幅度和高幅度、基线未对齐等。目标是计算图中的波数。但是我的峰值检测计算出“无效”的峰值,因此给出了错误的答案。“无效”峰值是指如果在波峰处有两个彼此靠近的凹口,则程序检测到 2 个峰值,即 2 个波,而实际上它只有 1 个波。我已经尝试更改链接上给出的峰值检测函数中定义的“delta”参数,但这并不能解决我正在研究的泛化目标。请建议对算法或我应该做的任何其他方法进行任何改进使用。欢迎任何形式的帮助。提前致谢。
PS 我无法上传错误的峰值检测波形图的图像。我希望我的解释足够充分......代码如下
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