Massimi e minimi

di il
8 risposte

Massimi e minimi

Salve avrei un problema che non mi fa andare avanti con la tesi , ho il seguente grafico in cui ho selezionato dei picchi massimi (cerchietti rossi) che mi serviva individuare.Ho bisogno di trovare solo i minimi subito prima e subito dopo ciascun picco rosso, ma riesco a trovare solo i minimi di tutto il grafico.Ho allegato il grafico della mia funzione e i comandi che ho usato per trovare i picchi e i minimi .vi prego aiutatemi



[pks,locs] = findpeaks(y,'MinPeakHeight',60)
[pksmin,locsmin]=findpeaks(-y,'MinPeakHeight',-10)
Allegati:
29740_a6e529b102f75362bdb33bd56efe1599.png
29740_a6e529b102f75362bdb33bd56efe1599.png

8 Risposte

  • Re: Massimi e minimi

    Non è chiaro cosa intendi con " i minimi subito prima e subito dopo ciascun picco rosso".

    Nell'immagine i minimi sembrano essere tutti uguali a 0.

    Ci sono poi i tratti di curva in rosso.
    Come li hai plottati?
    Hanno un significato particolare?

    Con "i minimi subito prima e subito dopo ciascun picco rosso" intendi forse le coordinate dei punti di inizio e fine dei tratti in rosso?
  • Re: Massimi e minimi

    Salve ,allora il codice che dovevo implementare riguarda il plottare la velocità angolare dì soggetti durante il cammino , il segnale che vede in figura in blu è tutta la velocità angolare ( che è stata prima filtrata e poi presa in valore assoluto) , mentre i segmenti rossi sono i tratti di curva in cui la velocità del soggetto superava una certa soglia e proprio per quella soglia il soggetto svolta.Quindi i picchi rossi (cerchi rossi) indicano il picco della svolta del soggetto , quello che mi serve identificare sono i punti di inizio e fine svolta , in questo senso parlo di minimo prima e dopo il picco rosso. Per essere più chiara gli asterischi neri che vede in figura sono tutti i minimi trovati con la funzione findpeaks(-signal) , io vorrei trovare solo l'sterisco nero subito prima e subito dopo ogni punto rosso di picco.Le scrivo il codice , e grazie mille per la risposta .Spero di essere stata chiara



    load ('92S1B_20190926_094607.mat','tronco')
    angularvel_x=tronco(:,4)*180/pi;
    accell_x=tronco(:,1);
    n=length(angularvel_x);
    t=[0:n-1]'/128;
    %grafico velocità angolare intorno asse del tronco
    figure (1)
    plot (t,angularvel_x,'b')
    title('Velocità angolare attorno asse x')

    %filtro velocità angolare con filtro di Butterwoth
    fs=1;
    fc=128;
    Wn=(fs/fc);
    [b,a]=butter(5,Wn,'low');
    segnale_filtrato=filtfilt(b,a,angularvel_x);
    y=abs(segnale_filtrato);

    figure(3)
    plot(t,y);
    title ('Segnale filtrato')


    soglia=60;
    %cosi ho trovato i segmenti rossi
    y_svolta=y*NaN;
    t_svolta=find(y >soglia);
    y_svolta(t_svolta)=y(t_svolta);

    %identifico i picchi delle svolte (pallino rosso), in cui locs sono gli indici relativi ai
    %picchi e pks i valori dei picchi
    [pks,locs] = findpeaks(y,'MinPeakHeight',60);
    %identifico i punti di minimo con locsmin indice e pksmin valore
    [pksmin,locsmin]=findpeaks(-y);
    figure(4)
    plot(t,y,'b')
    hold on
    plot(t,y_svolta,'r',t(locs),(pks),'ro',t(locsmin),(-pksmin),'k*')
    title('Identificazione svolte')
  • Re: Massimi e minimi

    Mi scuso per un errore di scrittura parlo dei cerchietti neri che si vedono in figura non asterischi .
  • Re: Massimi e minimi

    La funzione findpeaks ritorna, per ogni picco, il valore del picco e l'indice della sua posizione nel vettore di input.

    Dato un massimo che abbia, ad esempio, indice 5, potresti usare gli indici ritornati dalla chiamata alla funzione per determinare i massimi ed i minimi in questo modo:
    [*] minimo che precede il massimo: cercare nel vettore degli indici dei minimi, il più grande indice minore dell'indice del massimo
    [*] minimo che segue il massimo: cercare nel vettore degli indici dei minimi, il più piccolo indice maggiore dell'indice del massimo

    Con riferimento al tuo codice:
    
    Mx=locs(4);
    plot(x(Mx),y1(Mx),'d')
    
    tmp_1=find(locsmin < Mx)
    tmp_2=find(locsmin > Mx)
    
    plot(x(locsm(tmp_1(end))),y1(locsmin(tmp_1(end))),'s')
    plot(x(locsm(tmp_2(1))),y1(locsmin(tmp_2(1))),'s')
    
  • Re: Massimi e minimi

    La funzione findpeaks ritorna, per ogni picco, il valore del picco e l'indice della sua posizione nel vettore di input.

    Dato un massimo che abbia, ad esempio, indice 4, potresti usare gli indici ritornati dalla chiamata alla funzione per determinare i massimi ed i minimi in questo modo:
    [*] minimo che precede il massimo: cercare nel vettore degli indici dei minimi, il più grande indice minore dell'indice del massimo
    [*] minimo che segue il massimo: cercare nel vettore degli indici dei minimi, il più piccolo indice maggiore dell'indice del massimo

    Con riferimento al tuo codice:
    
    Mx=locs(4);
    plot(x(Mx),y1(Mx),'d')
    
    tmp_1=find(locsmin < Mx)
    tmp_2=find(locsmin > Mx)
    
    plot(x(locsm(tmp_1(end))),y1(locsmin(tmp_1(end))),'s')
    plot(x(locsm(tmp_2(1))),y1(locsmin(tmp_2(1))),'s')
    
  • Re: Massimi e minimi

    LA RINGRAZIO INFINITAMENTE
  • Re: Massimi e minimi

    Ma se posso farle un altra domanda , se io volessi salvare questi valori trovati, compresi di indice in un vettore da poter poi usare per fare dei tagli al segnale , uso semplicemente il comando save e metto le variabili ?
  • Re: Massimi e minimi

    Sì, è la cosa migliore da fare.
    Successivamente puoi usare la funzione "load" per caricarli.
Devi accedere o registrarti per scrivere nel forum
8 risposte