Approccio di rilevamento dei picchi


24

Quali sono gli algoritmi di rilevamento dei picchi esistenti? Ho dati rumorosi e vorrei implementare il rilevamento di picco per questi dati. I dati sono al contrario, in realtà sto cercando di determinare il fondo.

Ecco un'istantanea dei dati in Excel. Mi piace rilevare entrambi i fondi. Ho pensato di passare i dati attraverso un filtro passa-basso e successivamente di fare una media mobile in cui determino i picchi e all'interno della media mobile faccio un'altra ricerca. Ho zero DSP in background; questo è solo un approccio di buon senso. Vorrei sapere cosa raccomandano gli esperti.

Inserisci qui la descrizione dell'immagine


2
Quali sono i due fondi che vuoi rilevare? Ne vedo solo uno ovvio. Sai che tipo di rumore hai o da dove viene?
Jason R,

Vorrei sapere se si desidera implementarlo su qualsiasi hardware particolare (vincoli di risorse) poiché ciò influirà sulla mia strategia di rilevamento dei picchi.
anasimtiaz,

@JasonR quello viola è ovvio. Tuttavia, il bordo tagliente è anomalo. Idealmente, voglio che sia rasato e che calcoli il punto inferiore. (da qui il filtro LP nel mio approccio) Quello non ovvio sull'azzurro è il punto minimo sul lato destro del picco viola. Il viola non è davvero un problema ma l'azzurro lo è. La trama di Excel non rende giustizia, ma proviene da un ADC a 12 bit in cui 4096 è 2V.
Ktuncer,

@anasimtiaz che ci crediate o no questo funzionerà su un iPhone / Android, quindi immagino che possiamo dire, è come un PC. Nessun vincolo hardware.
Ktuncer

@Ktuncer Ho aggiunto alcune immagini che puoi vedere tu stesso.
Spacey

Risposte:


12

Ktuncer, ci sono molti metodi che puoi usare qui. Un metodo che consiglierei è usare una trasformata discreta di wavelet (DWT) e, in particolare, guardare il Daubechies Wavelet . Sceglierei, diciamo, Daub-14 / Daub-Tetra.

Fondamentalmente quello che devi veramente fare è 'trend' il tuo segnale, e poi da lì, fai una scelta minima o massima. Questo eliminerà i tuoi valori anomali. Una trasformazione wavelet daub-14 / daub-tetra può aiutarti a fare questo, e questo aiuta soprattutto perché non conosci la natura del tuo segnale. (Usando daub-14, puoi rappresentare accuratamente i segnali polinomiali di grado 14/2 = 7, e sembra che non avrai bisogno di più di quello).

Il calcolo di questa trasformazione wavelet essenzialmente "comprime" la tua energia in alcune indicazioni. Tali indicazioni rappresentano pesi su vettori di base. Il resto dei pesi sarà (idealmente) vicino allo zero. Quando hai del rumore nel tuo segnale (come fai tu), quei pesi che normalmente erano zero hanno alcuni pesi ora, ma puoi semplicemente azzerarli e "denodare" il tuo segnale. Una volta completato, puoi quindi eseguire un semplice rilevamento max / min.

Ci sono più dettagli in gioco, puoi inviarmi una e-mail se vuoi discutere su come implementarlo. Ho fatto un lavoro simile su questo prima.

EDIT: Ecco alcune immagini che illustrano Daub-Tetra Denoiser:

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


1
Mi piace questo. Esiste una libreria di riferimento per questo in MATLAB?
Ktuncer

@Ktuncer Mi spari una e-mail.
Spacey,

4

Sono lungi dall'essere un esperto, ma ecco cosa farei:

Sembra che tu abbia un segnale che varia lentamente, sovrapposto a fluttuazioni. I picchi che cerchi sono alcune fluttuazioni più forti, quindi li rileverei usando quello.

  1. X(T)Y(t)

  2. X-YσX-Y

  3. |(X-Y)(t)|>α×σα

Un overshoot o un undershoot possono essere specificamente rilevati rimuovendo il valore assoluto e usando un test adeguato. È quello che stai cercando?


1
Approccio interessante Che cos'è σ? (Dev. Standard?). Inoltre, a parte la matematica, qual è la logica che sta dietro?
Ktuncer,

σ

4σ

@ user4749 Questo ti aiuterà a ottenere i picchi anomali, anche se non sono sicuro che otterrà i picchi complessivi che stai cercando (suppongo che tu stia cercando picchi "ampi"?)
Spacey,

1
@ Ciao Jean-Yves! :-) Stai supponendo che il rumore sia guassiano qui a proposito? (Ecco perché possiamo std soglia). Sono curioso, e se il rumore fosse colorato?
Spacey

4

Il rilevamento di picco ha alcune applicazioni, per segnali 1D o multidimensionali. Ecco alcuni esempi che mostrano quanto possono essere diversi questi segnali e le loro interpretazioni di un picco:

  • I dati 1D del poster originale;

  • Sebbene trasformi di un'immagine, ogni picco corrisponde a una linea nell'immagine originale; inserisci qui la descrizione dell'immagine

  • autocorrelazione di un'immagine, ogni picco corrisponde a una frequenza che rivela uno "schema periodico"; inserisci qui la descrizione dell'immagine

  • correlazione incrociata "generalizzata" di un'immagine e di un modello, ogni picco corrisponde a un'occorrenza del modello nell'immagine (potremmo essere interessati a rilevare solo il picco migliore o più picchi);

inserisci qui la descrizione dell'immagine

  • risultato del filtraggio di un'immagine per gli angoli di Harris, ogni picco corrisponde a un angolo dell'immagine originale.

inserisci qui la descrizione dell'immagine

Queste sono definizioni e tecniche di rilevamento dei picchi che ho incontrato - certamente ce ne sono altri che ho dimenticato o non conosco, e spero che altre risposte li coprano.

Le tecniche di preelaborazione includono levigatura e denoising. La risposta di @ Mohammad riguarda le wavelet, e puoi vederne vari usi nella documentazione del WaveletThreshold di Mathematica (da cui tra l'altro ho anche preso i miei esempi).

Quindi cerchi i massimi. A seconda dell'applicazione, sono necessari solo i massimi globali (ad esempio, la registrazione delle immagini), alcuni massimi locali (ad esempio il rilevamento della linea) o molti massimi locali (rilevamento dei punti chiave): ciò può essere eseguito in modo iterativo, cercando il valore più alto nei dati quindi cancellando una regione attorno al picco selezionato, ecc. fino a quando il valore rimanente più alto è inferiore a una soglia. In alternativa, puoi cercare i massimi locali entro una determinata dimensione del quartiere e mantenere solo quei massimi locali i cui valori sono al di sopra di una soglia - alcuni consigliano di mantenere i massimi locali in base alla loro distanza dal resto dei massimi locali (il più lontano il migliore). L'arsenale presenta anche operazioni morfologiche: i massimi estesi e la trasformazione del cappello a cilindro possono essere entrambi adatti.

Guarda i risultati di tre di queste tecniche su un'immagine filtrata per gli angoli di Harris:

inserisci qui la descrizione dell'immagine

Inoltre, alcune applicazioni tentano di trovare picchi con una risoluzione sub-pixel. L'interpolazione, che può essere specifica per l'applicazione, è utile.

Per quanto ne so, non esiste un proiettile d'argento e i dati diranno quali tecniche funzionano meglio.

Sarà davvero bello avere più risposte, esp. proveniente da altre discipline.


Come hai estratto i dati del corpo della domanda per il tuo utilizzo? Non riesco a trovarlo in una forma pulita.
Léo Léopold Hertz 준영

1
Ho fatto? Ho usato altri esempi. Guardando di nuovo la domanda oggi, non vedo come estrarre in modo pulito i dati dalla domanda.
Matthias Odisio,

-1

Penso che un tipico algoritmo di rilevamento dei picchi sia come questo dove si reftrova peak(bottom).

for i=1,N   {
       if i=1   {  ref=data(i) }
       else { if data(i)<=ref {ref =data(i) }}
}

3
Non ho declassato la tua risposta, ma penso che sia stata considerata fuori tema da coloro che lo hanno fatto. Questo schizzo rileva il minimo assoluto di una sequenza. L'OP è alla ricerca di picchi, in cui è necessario occuparsi di località e rumore.
Matthias Odisio,

Purtroppo non c'è stata alcuna risposta alla generosità della "risposta canonica". A tale proposito, tutte le risposte sono ugualmente "irrilevanti"; Ho assegnato la grazia a questa risposta perché è la più antica.
Matthias Odisio,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.