Riconoscimento dei dati raggruppati in forme


9

Sto lavorando a un progetto in Python per rilevare e classificare alcune canzoni di uccelli e mi sono trovato in una posizione in cui ho bisogno di convertire un file wave in dati di frequenza rispetto al tempo. Questo non è stato un grosso problema, ma per essere in grado di classificare le diverse sillabe in gruppi, devo scrivere qualcosa che rilevi quando i dati si raggruppano in una certa forma. Per darti un'idea dell'aspetto dei dati, ecco un'immagine di come appaiono i dati quando vengono stampati:

inserisci qui la descrizione dell'immagine

Ho bisogno di un modo per ottenere ogni singola sillaba (ogni forma con una separazione su entrambi i lati) e salvarli in una variabile o nei loro file in modo da poter eseguire la correlazione di Pearson tra loro usando SciPy.

Inoltre, preferisco Python, ma sono aperto alla programmazione in altre lingue se hai un altro modo per farlo.

Grazie!


Non ho una completa familiarità con ciò che sto per suggerire, ma sembra che la Trasformazione Wavelet continua con una wavelet che contenga le proprietà delle tue sillabe sia qualcosa che vale la pena dare un'occhiata.
Heltonbiker,

Hai bisogno di trovare una forma o stai cercando di classificare gli uccelli? In tal caso l'utilizzo del suono di Hidden Markov Model?
Mikhail,

Risposte:


2

Due domande:

1 / Near 8s, possiamo osservare un pitch stabile per circa 100ms, quindi un improvviso aumento che scende fino a 8.5s. Tutta questa sequenza (da 8s a 8.5s) costituisce una singola entità o consideri le due fasi (stabile quindi decrescente) come due entità?

2 / Vuoi lavorare con o senza supervisione. Conosci in anticipo gli "schemi" da cercare?

  • Se vuoi lavorare senza supervisione (supponiamo che tu abbia raccolto registrazioni e miri ad estrarre una "rappresentazione strutturata" da essa), il tuo problema è simile, in un primo momento, al rilevamento delle attività vocali. Basta usare l'intensità del segnale, forse in combinazione con una metrica "intonazione" (ad esempio il rapporto del massimo dell'autocorrelazione nella gamma della coppia, 1kHz - 5kHz qui) per rilevare segmenti in cui è attivo un tono acuto forte. Filtro mediano la sequenza risultante per uniformarla, quindi soglia per ottenere i diversi segmenti. Una volta suddiviso il segnale in segmenti, puoi fare cose interessanti con loro. Ad esempio, è possibile estrarre per ciascuno di essi una traiettoria del pitch (una sequenza con il picco di frequenza più forte per ciascun frame FFT o qualcosa di più robusto estratto con un vero stimatore del pitch), utilizzare DTW per calcolare una matrice di distanze a coppie tra ciascun blocco e utilizzare un algoritmo di clustering (k-medie, cluster agglomerativo) per identificare gruppi di schemi di passo simili (i segmenti 8: 8.5 e 10: 10.5). È probabile che un approccio senza supervisione sovrascriva in eccesso - ad esempio 7.6: 8.5 e 9.6: 10.5 saranno riconosciuti come la ripetizione dei due stessi blocchi, mentre per te potrebbero essere fondamentalmente un singolo modello, ma potresti usare qualcosa comeSequitur per avere un livello di struttura superiore.

  • Se hai un dizionario predefinito di "pattern" con cui vuoi etichettare il tuo segnale, faresti meglio a seguire il tipo di approccio usato per il riconoscimento vocale, con l'unica grande differenza che il riconoscimento vocale non tiene conto del tono, mentre nel tuo il case case è l'unica informazione da considerare! Un sistema di riconoscimento vocale affronta le attività di segmentazione e riconoscimento in un'unica operazione di decodifica FST.

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.