谁能提供一个自动寻峰的算法

谁能提供一个自动寻峰的算法,第1张

根据你的图,可以先相邻的几个点求均值,过滤掉高频的干扰

具体取相邻几个点要看你的图像

f(x) = (f(x-3) + f(x-2) + f(x-1) + f(x) + f(x+1) + f(x+2) + f(x+3))/7

然后再求最大值,当一个点大于相邻左右两点即为极大值

814、寻峰算法

from scipy.signal import find_peaks

import matplotlib.pyplot as plt

import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

x = np.sin(2*np.pi*(2**np.linspace(2,10,1000))*np.arange(1000)/48000) + np.random.normal(0, 1, 1000) * 0.15

peaks, _ = find_peaks(x, distance=20)#寻找峰值find_peaks

peaks2, _ = find_peaks(x, prominence=1)     

# BEST!

peaks3, _ = find_peaks(x, width=20)

peaks4, _ = find_peaks(x, threshold=0.4)   

# Required vertical distance to its direct neighbouring samples, pretty useless

plt.subplot(2, 2, 1)

plt.plot(peaks, x[peaks], "xr")plt.plot(x)plt.legend(['distance'])

plt.subplot(2, 2, 2)

plt.plot(peaks2, x[peaks2], "ob")plt.plot(x)plt.legend(['prominence'])

plt.subplot(2, 2, 3)

plt.plot(peaks3, x[peaks3], "vy")plt.plot(x)plt.legend(['width'])

plt.subplot(2, 2, 4)

plt.plot(peaks4, x[peaks4], "xm")plt.plot(x)plt.legend(['threshold'])

plt.title('寻峰算法',fontsize =20,x=-0.1,y=2.2)

plt.show()

举个例子:

x=0:0.01:10

y=sin(x)+cos(x)

indmax=find(diff(sign(diff(y)))<0)+1%极大值点

indmin=find(diff(sign(diff(y)))>0)+1%极小值点


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8097827.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存