La funzione "findpeaks" fa parte del toolbox "SignalProcessing", forse non hai questo toolbox.
Ad ogni modo, puoi creare la tua funzione "findpeaks" in questi passi: dato il segnale (vettore) di partenza
[*] calcola la differenza tra due elementi consecutivi del vettore
[*] determina il segno del vettore "differenza" calcolato al punto precedente
[*] calcola la differenza tra i valori di segno
[*] identifica gli indici degli elementi (calcolati al passo precedente) con valore diverso da "0"
A questo punto, hai ottenuto gli indici degli elementi del vettore segnale che corrispondono ad un Massimo o ad un Minimo.
Se il primo di questi è maggiore del secondo, quello sarà un Massimo, in caso contrario sarà un Minimo.
Massimi e Minimi si alternano, quindi basta prendere i valori definiti dagli indici (vedi sopra) con passo 2.
t=0:0.1:30;
x=sin(1.5*t).*cos(0.1*t);
figure
hp(1)=plot(t,x);
% Compute the difference between two consecutive elements
diff_val=[1e-9 diff(x)];
% Get the sign of the difference
sgn_diff_val=sign(diff_val);
% Compute the difference between the signs
sgn_val=diff(sgn_diff_val);
% Find the indices for which the difference between the signs is different from 0
pk_idx=find(sgn_val ~= 0)
% Get the number of the index array
n_pk=length(pk_idx)
% Get the values of the MAX_rel and MIN_rel: they are alternate (max, min, max, ...)
% If the first element is greater that the second, then it is a MAX_rel, otherwise it is a MIN_rel
if(x(pk_idx(1)) > x(pk_idx(2)))
max_rel_idx=pk_idx(1:2:n_pk)
max_rel=x(max_rel_idx)
min_rel_idx=pk_idx(2:2:n_pk)
min_rel=x(min_rel_idx)
else
max_rel_idx=pk_idx(2:2:n_pk)
max_rel=x(pk_idx(max_rel_idx))
min_rel_idx=pk_idx(1:2:n_pk)
min_rel=x(pk_idx(min_rel_idx))
end
hold on
% Plot the results
hp(2)=plot(t(max_rel_idx),max_rel,'o','markersize',9,'markeredgecolor','r')
hp(3)=plot(t(min_rel_idx),min_rel,'s','markersize',9,'markeredgecolor','r')
legend(hp,{'Signal','MAX_-rel','MIN_-rel'})