需求:现实数据都是离散的,有时需要离散数据图像的极大值点集和极小值点集,并用它们绘制原函数的上、下包络线。基于此需求,本文给出matlab的简单实现。
极大值的寻找方式:
函数:findpeaks
使用1:findpeaks(x)
使用2:[top, location1] = findpeaks(x);
效果:找到原始数据x的极大"值"们(top)以及对应的索引(location1)!
极小值的寻找方式:
说明:matlab里没有自带直接的找极小值的函数,可用下面这个小技巧
函数:findpeaks
技巧:findpeaks(-x);
使用:[low, location2] = findpeaks(-x);
效果:把原始数据相当于翻转或乘-1,这样原来的极小值就是极大值!翻转不会改变极小值的索引!
真实数据的实例:
clear ; clc;
x = xlsread('shuju.xlsx');
x = x(1001:1001+1023)';
N = length(x);
fs = 100; % 采样频率 = 1/采样间隔
t = (0:N-1)/fs; % 时间刻度
% 一般只要返回的第2个参数: 极值的索引
[top,location1] = findpeaks(x);
[low,location2] = fi