Quale metodologia utilizzare per la discriminazione di toni diversi (musicali?)


12

Sto cercando di cercare e capire come affrontare al meglio questo problema. Si trova a cavallo tra l'elaborazione della musica, l'elaborazione delle immagini e l'elaborazione del segnale, e quindi ci sono una miriade di modi per guardarla. Volevo informarmi sui modi migliori per affrontarlo poiché ciò che potrebbe sembrare complesso nel dominio sig-proc puro potrebbe essere semplice (e già risolto) da persone che eseguono l'elaborazione di immagini o musica. Ad ogni modo, il problema è il seguente:inserisci qui la descrizione dell'immagine

Se perdoni il mio disegno a mano del problema, possiamo vedere quanto segue:

Dalla figura sopra, ho 3 diversi "tipi" di segnali. Il primo è un impulso che "aumenta" in frequenza da a , quindi si ripete. Ha una durata dell'impulso specifica e un tempo di ripetizione dell'impulso specifico.f 4f1f4

Il secondo esiste solo in , ma ha una durata dell'impulso più breve e una frequenza di ripetizione dell'impulso più rapida.f1

Infine, il terzo è semplicemente un tono in .f1

Il problema è, in che modo posso affrontare questo problema, in modo tale da poter scrivere un classificatore in grado di discriminare tra segnale-1, segnale-2 e segnale-3. Cioè, se gli dai uno dei segnali, dovrebbe essere in grado di dirti che questo segnale è così e così. Quale miglior classificatore mi darebbe una matrice di confusione diagonale?

Qualche ulteriore contesto e ciò a cui ho pensato finora:

Come ho già detto, questo è a cavallo di numerosi campi. Volevo informarmi su quali metodologie potrebbero già esistere prima di sedermi e andare in guerra con questo. Non voglio reinventare inavvertitamente la ruota. Ecco alcuni pensieri che ho avuto guardando da diversi punti di vista.

Punto di vista dell'elaborazione del segnale: una cosa che ho visto era fare un'analisi cefalica , e quindi probabilmente usare la larghezza di banda di Gabor del ceppo nel discriminare il segnale-3 dall'altro 2, e quindi misurare il picco più alto del ceppo nel segnale discriminante- 1 dal segnale-2. Questa è la mia attuale soluzione di lavoro per l'elaborazione del segnale.

Punto di vista dell'elaborazione delle immagini: qui sto pensando poiché POSSO effettivamente creare immagini di fronte agli spettrogrammi, forse posso sfruttare qualcosa da quel campo? Non ho familiarità con questa parte, ma che ne dici di fare un rilevamento di "linea" usando la Trasformazione di Hough , e poi in qualche modo "contare" le linee (e se invece non fossero linee e macchie?) E andare da lì? Ovviamente in qualsiasi momento nel momento in cui prendo uno spettrogramma tutti gli impulsi che vedi potrebbero essere spostati lungo l'asse del tempo, quindi sarebbe importante? Non sono sicuro...

Punto di vista dell'elaborazione della musica: un sottoinsieme dell'elaborazione del segnale per essere sicuri, ma mi viene in mente che il segnale-1 ha una certa qualità, forse ripetitiva (musicale?) Che le persone nel processo musicale vedono continuamente e hanno già risolto forse strumenti discriminanti? Non sono sicuro, ma il pensiero mi è venuto in mente. Forse questo punto di vista è il modo migliore per osservarlo, prendendo un pezzo del dominio del tempo e prendendo in giro quei tassi di gradimento? Ancora una volta, questo non è il mio campo, ma sospetto fortemente che sia qualcosa che è stato visto prima ... possiamo considerare tutti e 3 i segnali come diversi tipi di strumenti musicali?

Dovrei anche aggiungere che ho una discreta quantità di dati di allenamento, quindi forse usare alcuni di questi metodi potrebbe permettermi di fare qualche estrazione di funzionalità che posso quindi utilizzare con K-Il prossimo vicino , ma questo è solo un pensiero.

Comunque è qui che mi trovo adesso, ogni aiuto è apprezzato.

Grazie!

MODIFICHE BASATE SUI COMMENTI:

  • Sì, , , , sono tutti noti in anticipo. (Qualche varianza, ma molto piccola. Ad esempio, supponiamo di sapere che = 400 Khz, ma potrebbe arrivare a 401.32 Khz. Comunque la distanza da è alta, quindi potrebbe essere a 500 Khz in confronto.) Signal-1 avanzerà SEMPRE su quelle 4 frequenze conosciute. Signal-2 avrà SEMPRE 1 frequenza.f 2 f 3 f 4 f 1 f 2 f 2f1f2f3f4f1f2f2

  • Anche le frequenze di ripetizione degli impulsi e le lunghezze degli impulsi di tutte e tre le classi di segnali sono note in anticipo. (Ancora qualche varianza ma pochissimo). Alcuni avvertimenti, tuttavia, sono sempre noti i tassi di ripetizione degli impulsi e le lunghezze degli impulsi dei segnali 1 e 2, ma sono un intervallo. Fortunatamente, tuttavia, queste gamme non si sovrappongono affatto.

  • L'ingresso è una serie temporale continua che arriva in tempo reale, ma possiamo supporre che i segnali 1, 2 e 3 si escludano a vicenda, in quanto ne esiste solo una in qualsiasi momento. Abbiamo anche molta flessibilità su quanto tempo impieghi a elaborare in qualsiasi momento.

  • I dati possono essere sì rumorosi, e non ci potrebbe essere toni spuri, ecc, al bande non nella nostra nota , , , . Questo è del tutto possibile. Possiamo ipotizzare un SNR medio solo per "iniziare" sul problema.f 2 f 3 f 4f1f2f3f4


Quale sarà il tuo contributo? 1 / Un flusso continuo in cui si desidera separare le occorrenze del segnale 1/2/3 (segmentazione + problema di classificazione) o 2 / singoli campioni con un solo tipo di segnale che è necessario classificare nelle categorie 1/2/3? Descrivi diverse caratteristiche dei segnali: PRT del segnale 1; frequenza di ripetizione del segnale 2; frequenza del segnale 3; valori di f1 / f2 / f3 / f4. Questi parametri sono noti in anticipo o variabili? Infine, nel caso in cui il tuo input presenti diverse occorrenze di quei segnali da segmentare, qual è la durata tipica di un segmento?
Pichenettes,

Un'altra domanda: dai tuoi disegni sembra che tu abbia a che fare con toni puri (senza armoniche e senza rumore). È così o i dati sono molto più sporchi dei tuoi disegni?
Pichenettes,

@pichenettes Grazie, ho aggiunto le informazioni che ti servono in una modifica.
Spacey,

Un seguito sui tuoi progressi e le soluzioni a questa domanda sarebbero apprezzati. L'analisi dipende principalmente dalla variabilità temporale dei suoni studiati. se sono più veloci di una finestra di fft, diciamo che sotto 256 campioni avrai bisogno di spettrogrammi ad alta risoluzione. Più preciso è lo spettrogramma, più è possibile visualizzare piccole informazioni di dettaglio nei suoni. FFT probabilmente va bene, dopo di che la domanda è semplicemente il caso di aggiungere operatori logici per classificare i suoni usando semplici routine di analisi dei pattern. analizzare la durata degli impulsi, la distanza tra loro, la natura cordale dell'insieme, ecc.
comprensibile

è semplice trovare l'armonica principale semplicemente controllando il valore di picco di ogni linea x, e poi si finisce con un grafico per analizzare usando la programmazione dell'analisi della firma del modello, che procede come se si stesse analizzando nella retorica, solo traccia le regole dei migliori differenziatori che usi in modo consapevole nel confrontare e classificare le progressioni numeriche.
comprensibile

Risposte:


7

Passo 1

Calcola la STFT del segnale utilizzando una dimensione dei fotogrammi inferiore alla durata dell'impulso. Presumo che questa dimensione del fotogramma offrirà comunque una discriminazione di frequenza sufficiente tra f1, f2, f3 e f4. è l'indice del frame, è l'indice del bin FFT.S(m,k)mk

Passo 2

Per ogni frame STFT, calcola la frequenza fondamentale dominante usando qualcosa come YIN, insieme a un indicatore di "affidabilità del tono", come la profondità del "dip" DMF calcolato da YIN.

Chiamiamo f0 dominante stimato a telaio e la fiducia campo rilevato al frame .f(m)mv(m)m

Nota che se i tuoi dati non sono così rumorosi, puoi scappare usando l'autocorrelazione come stimatore del tono e il rapporto tra il picco secondario maggiore dell'autocorrelazione e come indicatore di affidabilità del tono. Tuttavia, YIN è economico da implementare.r0

È inoltre possibile calcolare l'energia del segnale totale del frame FFT .e(m)m

Passaggio 3

Considera una finestra scorrevole dei telai STFT. viene scelto per essere maggiore del tempo di ripetizione dell'impulso e da 5 a 10 volte inferiore alla lunghezza tipica di un segmento di segnale (ad esempio se una ricorrenza di un segnale dura circa 10 secondi e la dimensione del frame STFT è di 20 ms, è possibile scegliere ).MMM=50

Estrarre le seguenti funzionalità:

  • σf(k) è la deviazione standard della sequenza(f(m))m[kM,k+M],v(m)>τ
  • ( v ( m ) ) m [ k - M , k + M ]σv(k) è la deviazione standard della sequenza(v(m))m[kM,k+M]
  • ( e ( m ) ) m [ k - M , k + M ]σe(k) è la deviazione standard della sequenza(e(m))m[kM,k+M]

Intuitivamente, misura la stabilità di frequenza della componente di principale del segnale, misura la variabilità di "intonazione" del segnale e la variabilità dell'ampiezza del segnale.σ v σ eσfσvσe

Queste saranno le caratteristiche su cui basare il rilevamento. I segnali di tipo 1 avranno un (pitch variabile) alto e un e (intensità del segnale costante). I segnali di tipo 2 avranno un basso (tono costante) e un alto e (forza variabile). I segnali di tipo 3 avranno un basso (tono costante) e un basso e (forza costante).σ v σ e σ f σ v σ e σ f σ v σ eσfσvσeσfσvσeσfσvσe

Calcola queste 3 funzioni sui tuoi dati di allenamento e addestra un ingenuo classificatore bayesiano (solo un mucchio di distribuzioni gaussiane). A seconda di quanto sono buoni i tuoi dati, potresti persino cavartela con i classificatori e utilizzare soglie definite manualmente sulle funzionalità, anche se non lo consiglio.

Passaggio 4

Per elaborare un flusso di dati in entrata, calcolare STFT, calcolare le caratteristiche e classificare ciascuna finestra dei frame STFT.M

Se i tuoi dati e classificatore sono buoni, vedrai qualcosa del genere:

1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3

Ciò delimita abbastanza bene l'ora di inizio e di fine e il tipo di ciascun segnale.

Se i tuoi dati sono rumorosi, devono esserci frame spuri errati:

1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 3, 2, 2, 1, 1, 1, 3, 1, 1, 1, 3, 3, 3, 2, 3, 3, 3

Se vedi molte schifezze come nel secondo caso, usa un filtro di modalità sui dati su quartieri di 3 o 5 rilevamenti; o utilizzare HMM.

Porta a casa il messaggio

Ciò su cui si desidera basare il rilevamento non è una funzione spettrale, ma statistiche temporali aggregate delle funzioni spettrali su finestre che hanno la stessa scala delle durate del segnale. Questo problema richiede davvero un'elaborazione su due scale temporali: il frame STFT su cui si calcolano le proprietà del segnale molto locali (ampiezza, tonalità dominante, intensità del pitch) e finestre più grandi su cui si sbircia la variabilità temporale di quelle proprietà del segnale.


Nota che potresti anche usare lo stile di riconoscimento vocale se vuoi sfruttare HTK o simili ... Modello acustico: 4 telefoni P1, P2, P3, P4 (tono a f1, tono a f2, tono a f3, tono a f4 ) + 1 simbolo S per il silenzio. 1 o 2 gaussiani per telefono. Modello Word W1 per segnale 1: (P1 S P2 S P3 S P4 S) +. Modello Word W2 per segnale 2: (P1 S) +. Modello Word W3 per segnale 3: (P1) +. Modello di frase: (W1 | W2 | W3) *. L'unica avvertenza è che se si utilizza una casella degli strumenti di riconoscimento vocale, è necessario modificare il front-end di estrazione delle funzionalità poiché gli MFCC sono troppo a bassa risoluzione e agnostici per distinguere f1 / f2 / f3 / f4.
Pichenettes,

@pichenettes Grazie pichenettes, questa è un'ottima risposta. Ho un paio di follow-up: 1) Cos'è lo "YIN" di cui parli e cos'è il "DMF"? Non sono riuscito a trovare nulla su di loro tramite Google. 2) Cos'è esattamente la "sicurezza del tono" come misura? 3) Hai detto che puoi usare l'auto-correlazione per trovare la sicurezza del tono - autocorrelazione di cosa, il frame del dominio del tempo o la STFT del frame? (Probabilmente non lo capisco perché non so cosa intendi dire intonazione). (continua ...)
Spacey,

@pichenettes (contd) 4) Per quanto riguarda le funzionalità che esistono PER FINESTRA solo sì? Quindi stai calcolando tre std per finestra, di (in questo caso) 101 frame? In questo caso, quando arriva il momento di allenarmi, il mio "punto" 3D è stato fatto da 3 std su 101 FRAMES, giusto? 5) Nel tuo passaggio 4, quando hai il numero 1,1,1,2,2 ecc., Ogni numero corrisponde a come hai classificato QUELLA finestra corretta? Il primo '1' era la classificazione della finestra composta da frame da -50 a 50, e il secondo '1' da una finestra composta da frame da -49 a 51, giusto? (La finestra scorre ogni volta di 1 fotogramma) ...
Spacey,

@pichenettes 6) Infine, avrei dovuto menzionare che questo deve essere usato come un 'allarme', in modo che se sono presenti segnale-1 o segnale-2, ottengo un allarme che suona, ma allora nulla dovrebbe spegnersi se non c'è niente lì - Non ci dovrebbe essere una soglia da abbinare prima ancora che inizi a provare a classificare in modo da non ottenere falsi positivi sul nulla? (solo rumore di fondo per esempio). (Sto solo imparando a conoscere il Classificatore Naive Bayes ora, quindi non so se è multi-classe). 7) GRAZIE MOLTO A MODO E GRAZIE IN ANTICIPO! MIGLIAIA E UN FANTASTICO PER TE! :-)
Spacey,

1
1 / YIN è un classico algoritmo di rilevazione del tono per i segnali vocali e musicali. recherche.ircam.fr/equipes/pcm/cheveign/pss/2002_JASA_YIN.pdf . DMF è la "funzione di magnitudo della differenza", la quantità calcolata da algoritmi come YIN per la stima del tono. 2 / Un algoritmo di rilevamento del pitch come YIN fornirà la stima della frequenza fondamentale e un "punteggio di confidenza" che indica la probabilità che il pitch restituito sia la risposta corretta. Sui segnali rumorosi o sui segnali che presentano più altezze, questo sarà basso, su un'onda sinusoidale pura questo sarà molto alto.
Pichenettes,

3

Un approccio alternativo potrebbe essere costituito da quattro rilevatori di eterodina: moltiplicare il segnale di ingresso con un oscillatore locale di 4 frequenze e filtrare il passa basso per le uscite risultanti. Ogni output rappresenta una linea verticale nella tua immagine. Ottieni l'uscita su ciascuna delle 4 frequenze in funzione del tempo. Con il filtro passa-basso puoi comporre quanta deviazione di frequenza vuoi consentire e anche quanto velocemente vuoi che le uscite cambino, cioè quanto siano nitidi i bordi.

Funzionerà bene anche se il segnale è abbastanza rumoroso.


Stavo pensando a questo metodo: prevedi qualche vantaggio di questo metodo (mixaggio e LPF) rispetto a lavorare direttamente sul pass-pand usando lo spettrogramma, ecc.?
Spacey,
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.