python寻找局部峰值
首先请看下图,对于如图所示的一维信号,我们如何得到它的局部峰值,如果用人眼,能很好地判断,但是对于计算机,这个信号存在一个非线性趋势,就比较困难了。
python中scipy模块的signal有一个寻峰函数argrelextrema。我们使用语句:
signal.argrelextrema(data, np.greater)
可视化如图:
plt.plot(np.arange(len(data)), data)
print(data[signal.argrelextrema(data, np.greater)])
print(signal.argrelextrema(data, np.greater))
plt.plot(signal.argrelextrema(data, np.greater)[0], data[signal.argrelextrema(data, np.greater)], 'o')
plt.plot(signal.argrelextrema(-data, np.greater)[0], data[signal.argrelextrema(-data, np.greater)], '+')
# plt.plot(peakutils.index(-x),x