Come posso rilevare fischietti, pop e altri suoni in ingresso audio dal vivo?


9

Ho letto molte domande su SO, e francamente, ognuna di esse non sta descrivendo alcun modo particolare per farlo. Alcuni dicono "fai FFT" e alcuni dicono "zero crossing" ecc. Ma sono arrivato solo a capire che l'ingresso audio digitale è costituito da una serie di ampiezze per una particolare frequenza e bene .. Non so davvero molto oltre a ciò.

Ora conosco il teorema di Nyquist, la frequenza, l'ampiezza, le serie di Fourier ecc., E questo è di 2-3 anni fa quando l'ho fatto nel mio programma universitario in qualche semestre. Ma allora non ci era stato insegnato molto l'uso reale di Fourier nel mondo reale, e non mi preoccupavo di approfondire l'argomento oltre l'apprendimento quanto bastava per passare l'argomento. Ma ora dovrò usare tutta quella roba.

Ecco un'istantanea dei suoni che sto cercando di rilevare:

grafico unico di snap a dito e accensione / spegnimento della luce

Chiaramente i suoni hanno grafici unici. Voglio solo capire come estrarre le loro particolari caratteristiche uniche per le loro uniche linee appuntite nel grafico. Mi piace quale ampiezza, frequenza, ecc. E per quanto tempo - anche se questo è banale immagino.

Voglio un semplice elenco di istruzioni passo per passo, non vago: posso cercare su Google la terminologia che non capirò.

Come forse questo? -

  1. Ottieni dati audio in ingresso

  2. Tracciato spectogramma

  3. Ottieni il grafico dello spectogramma per il suono che desideri rilevare in un ambiente silenzioso

  4. Studia quel grafico - disegna le caratteristiche uniche di quel suono

  5. Esegui un qualche tipo di funzione in grado di rilevare quelle particolari caratteristiche nel feed audio dal vivo, usando le caratteristiche del suono trovato in (4)

  6. Se viene trovata una corrispondenza, bene - il lavoro è fatto.

  7. Lucida l'algoritmo per eliminare i falsi negativi.

UNBXZ

Stavo pensando di far registrare all'utente il suono che vogliono memorizzare come gesto in un ambiente tranquillo. E l'utente avrebbe emesso il suono solo tra il riempimento del tempo di silenzio ; 3 secondi all'inizio e alla fine della registrazione.

Ad esempio, durante i primi 3 secondi, il mio sistema stabilirà che l'ingresso corrente è il normale suono di sottofondo silenzioso. E poi un improvviso cambiamento nel grafico sarebbe l'inizio dell'audio in ingresso. E quando questo si interrompe, la registrazione andrebbe avanti per altri 3 secondi, trascinando il tempo di quiete . Questo sarebbe fatto manualmente dall'utente. Quindi memorizzerebbe automaticamente le caratteristiche della sola parte durante la quale è durato l'improvviso cambiamento nel grafico, a metà tra i tempi di riempimento.

E quindi le caratteristiche di quella parte verrebbero salvate come dati di gesto di quel suono, che sarebbero stati usati per rilevare quel particolare suono nel feed audio dal vivo in seguito.

Il problema è che sto pensando tutto questo in un inglese semplice. Ho bisogno di pensare in matematica e fisica, per essere in grado di implementarlo in modo efficiente nel mio codice. Sono così dannatamente all'oscuro di cosa scrivere e dove scriverlo nel mio codice - anche con così tante librerie e domande su SO a mia disposizione.

E scusa se è stato lungo.


1
Per curiosità, quello spettrogramma è fatto su un telefono o tablet? in tal caso, puoi dire il nome dell'app. Sembra davvero bello. Per quanto riguarda la tua domanda, penso che la tua domanda sia simile all'argomento / compito di fare il riconoscimento di parole isolate. Probabilmente puoi ottenere molte idee e ispirazioni da Google. La parte difficile non è riconoscere i gesti in un numero limitato relativamente limitato di gesti, la parte difficile è filtrare le cose che non sono gesti.
niaren,

Questa è l'app: play.google.com/store/apps/… E grazie per i tuoi punti di vista. Ma voglio che tu mi dica come rilevare non parole, ma suoni (almeno per ora), come fischi, pop, applausi, ecc. Sto lavorando in Python.
bad_keypoints

1
Purtroppo questo genere di cose è ancora un'area di ricerca. Non sono a conoscenza di nessuno che risolva questo problema specifico.
Bjorn Roche,

Risposte:


2

Mentre sono d'accordo con uno dei commenti che l'uso delle tecniche di riconoscimento vocale potrebbe essere un buon inizio, questi suoni sono diversi e non sono a conoscenza di nessuno che abbia fatto ricerche per categorizzarli (il documento citato da Nathan sembra solo distinguere il discorso e rumore), quindi a meno che qualcuno non presenti qualcosa per contraddirlo, dovrai inventare la tua tecnica, e questo richiederà molto apprendimento e molto lavoro. Il meglio che posso fare è iniziare.

Prima di tutto, non aspettarti che nessuno sia in grado di produrre una formula magica. Non c'è equazione per passare dal suono a ciò che è il suono. Gli esseri umani e i computer devono imparare incorporando i dati per formulare ipotesi su cosa siano i suoni. Il motivo per cui le persone dicono nelle loro risposte "usa FFT" o "usa zero crossing" è perché questi sono alcuni dei blocchi base DSP usati nel riconoscimento vocale e negli algoritmi correlati. Ma la FFT e la velocità di attraversamento zero sono di solito solo i primi passi nella creazione di una serie di parametri che descrivono il suono. Questi parametri vengono quindi analizzati statisticamente (non attraverso alcune funzioni magiche) per determinare a quale categoria appartengono molto probabilmente. Nota che ho detto "molto probabilmente": anche il miglior riconoscimento vocale (e il cervello umano!

Quindi, alcuni parametri che potresti cercare includono:

  • tasso di attraversamento zero
  • centroide di frequenza
  • inviluppo (questo è in realtà un insieme di parametri, tra cui, ad esempio, il tempo di attacco)
  • inviluppo spettrale
  • equilibrio armonico pari / dispari
  • voiciness
  • passo fondamentale

Una volta che hai una serie di parametri che ritieni possano permetterti di distinguere i tuoi suoni, dovrai usare un metodo statistico per classificarli. Il modello nascosto di Markov è spesso usato nei discorsi. Puoi anche esaminare la regressione logistica, K-significa, e sono sicuro che ci sono altre scelte, ma penso che HMM sia provato e vero.


La tua risposta è buona, ma fondamentalmente sto chiedendo una sorta di corrispondenza dei suoni dell'utente con i suoni emessi in seguito per l'utilizzo del mio software. Tipo, cose di somiglianza. Supponiamo che un utente produca diversi tipi di suoni A, B e C. E le caratteristiche di questi suoni sono memorizzate rispettivamente come C_A, C_B e C_C.
bad_keypoints

La tecnica è sempre la stessa: 1. capire quali parametri si stanno per misurare, 2. misurarli, 3. usare le statistiche per imparare cosa rende ogni suono diverso, 4. usare quei dati per classificare.
Bjorn Roche,

quindi è fondamentalmente quello che pensavo. ma immagino che dovrò vedere quali parametri dalla buona lunga lista che hai fornito dovrei contrassegnare con suoni distintivi.
bad_keypoints

1
Ad essere sincero, sono molto pessimista nel poter distinguere cose come uno scatto con le dita e un interruttore della luce in una varietà di ambienti senza molti dati di esempio e forse più parametri di quelli che ho dato, ma spero di sbagliarmi. Si prega di riferire sui risultati anche se ci vuole un po 'di tempo.
Bjorn Roche,

Inoltre, alcune persone nella mailing list di music-dsp ( music.columbia.edu/cmc/music-dsp ) potrebbero avere altri suggerimenti.
Bjorn Roche,

0

Ho usato questo articolo sull'indicizzazione basata sull'entropia quando stavo cercando di ignorare questo tipo di suoni nelle telefonate, usato per il riconoscimento vocale del computer, se i suoni che stai provando a catturare sono parole, l'entropia potrebbe funzionare davvero bene, per la musica potrebbe non essere utile.


0

Penso che i consigli di Bjorn siano molto buoni, ma voglio fornire alcune informazioni aggiuntive. Dalla tua descrizione, sembra un problema di identificazione del timbro. C'è qualche ricerca in questo campo in contesti di musica per computer (identificare diversi strumenti è una cosa utile da fare e dire la differenza tra uno scatto e un applauso è a causa del timbro del suono). William Brentha svolto alcune ricerche in questo settore (cerca timbreID nella sua pagina) e creato alcuni software da utilizzare in Pure Data. In ciascuna delle situazioni che stai cercando eventi specifici, quindi fare una segmentazione automatica in base al rilevamento dell'insorgenza sarebbe una buona idea. Dato che stai già eseguendo una STFT, determinare un insorgenza non richiederebbe troppo lavoro aggiuntivo (guarda il rilevamento dell'insorgenza del flusso spettrale).

Formazione

  • Determinare le funzioni appropriate (ad es. Frequenza di attraversamento zero, centroide spettrale, MFCC)
  • Rileva un inizio
  • Calcola queste funzioni sull'audio in ingresso (le tue registrazioni dei gesti)
  • Conservare un database di calcoli delle funzioni. Dovrai determinare se si tratta di una situazione di allenamento supervisionata o non supervisionata. Ad esempio, gli utenti specificano in anticipo che uno snap è "suono 1" e un applauso è "suono 2" o il sistema tenta di raggrupparli dopo l'allenamento.

Classificazione

  • Rileva un inizio in tempo reale e calcola le caratteristiche dell'audio in arrivo
  • Utilizzare una metrica di distanza (distanza euclidea o un'altra distanza Lp) per eseguire la classificazione del vicino più vicino o K-più vicino per determinare il suono "più vicino" dal database

Questo documento sull'identificazione del timbro percussivo potrebbe essere di qualche utilità. Descrive le definizioni di potenziali funzionalità da calcolare sul suono in ingresso e sul metodo di classificazione dell'autore. Funzionerà abbastanza bene per i suoni percussivi, ma potrebbe non funzionare altrettanto bene per qualcosa come il parlato (più sillabe), in tal caso un metodo HMM sarebbe più adatto. Allo stesso modo, la precisione del rilevamento dell'esordio varia in base al tipo di suono che stai cercando.

Se sei particolarmente preoccupato per gli scatti rispetto agli interruttori della luce, dedica un po 'di tempo a capire quali caratteristiche potrebbero discriminare accuratamente tra i due suoni.


Rileverei l'insorgenza rilevando cambiamenti improvvisi nei dati audio in entrata. Dovrebbe funzionare. Sto rilevando l'inizio e la fine dei gesti da memorizzare.
bad_keypoints il

Sì, dovrebbe funzionare principalmente. L'unica ragione per cui ho suggerito Flusso Spettrale, è perché prenderai comunque una STFT. Se ti aspetti un ambiente abbastanza tranquillo, una soglia di ampiezza di base dovrebbe funzionare abbastanza bene.
greatscott,
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.