
具体取相邻几个点要看你的图像
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%极小值点
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)