lunedì 30 novembre 2009

analisi dei suoni nello speech recognition

Un segnale acustico, è dato dal movimento repentino delle corde vocali che provocano delle brusche variazioni della pressione dell’aria circostante a frequenze che vanno dai 20Hz ai 4000Hz (varia da individuo ad individuo). Tale segnale, se captato da un microfono, provoca la variazione nel tempo dell’ampiezza di un segnale elettrico. Talesegnale elettrico, che varia nel tempo, dà luogo al segnale nel dominio del tempo. Nel caso del parlato, una prima operazione da effettuare, è quella del filtraggio con un filtro passa banda o passa basso, al fine di elidere i suoni ambientali che non fanno parte dello spettro del parlato umano.
Nella disciplina dell’analisi dei suoni, il segnale, viene suddiviso in frame, ovvero porzioni di forma d’onda nel tempo. Assumendo che il segnale vari lentamente nel tempo, si può dire che, la scelta di un’opportuno frame di dimensione piccola, può comportare la possibilità di prelevare una unità di informazione, ovvero un’unità di suono. Nel parlato, tale valore è pari a 10ms, ovvero entro 10 ms, un essere umano può al massimo pronunciare un unico suono. Ciò significa che, per poter analizzare i suoni, ci interessa prelevare delle unità di informazione, ciascuna contenuta entro 10ms.
All’interno di un frame, si effettua un campionamento; infatti, è vero che, dentro un frame vi è un’unità di informazione, per cui basterebbe entro 10 ms prelevare un ampiezza, tanto il suono è uguale entro 10 ms, ma non ci si limita a ciò, si prende un vettore di parametri calcolati opportunamente sulla base del segnale contenuto entro il frame. Per potere ottenere il frame, si prende una forma d’onda quadrata di durata 10ms e si sposta nel tempo tale finestra (window). La window però non si sceglie quasi mai quadrata, ma smussata, in maniera tale da pesare maggiormente le caratteristiche della forma d’onda vicino al centro del frame, infatti si utilizza spesso la cosiddetta finestra di hamming, che ha la forma di una “piovra”.


La ragione per cui si scelgono window smussate, è perché con le forme quadrate, appena il filtro viene spostato, se si registrano parametri quali la somma dell’energia (come somma dei quadrati
dell’ampiezza di ogni campione).


Nel dominio del tempo, i parametri menzionati (spesso di fa riferimento ad un vettore), possono essere rappresentati matematicamente nella forma di Q(n), con T [] che è una
trasformazione anche non lineare pesata dalla finestra w(n). Tale finestra può
essere la finestra di hamming (si parla anche di filtro FIR a risposta finita), che ci permette di ridurre il frame rate risparmiando i calcoli, oppure un filtro IIR (a risposta infinita):


Una cosa importante, per quanto concerne il riconoscimento del parlato, è la cosidetta Short-Time Average Energy, ovvero:


O meglio la short-time average magnitude, questo perché, la prima, ha il difetto di essere sensibile a grandi variazioni del segnale, essendo i campioni elevati al quadrato. Ricordo che s(i) trattasi dell’ampiezza del segnale nel punto i interno al frame che contiene N campioni. L’energia è importante nelle applicazioni vocali, in quanto l’energia varia molto come ampiezza nel tempo nel caso di suoni vocalizzati e non, come pure tra fonemi diversi; per cui viene permessa la segmentazione del parlato nei sistemi automatici di riconoscimento vocale, aiutando a determinare l’inizio e la fine delle parole isolate (ad esempio nel gms, se riesco a fare questo, allora evito di trasmettere le pause). Per avere informazioni sul contenuto spettrale della voce, si utilizza la trasformata di Fourier; però il alcuni casi, è sufficiente il ZCR (Zero Crossing Rate) per avere informazioni sul contenuto spettrale con richieste computazionali molto basse. Rappresenta il numero di volte per le quali il segnale passa per lo zero (o cambia segno) tra due campioni successivi. E’ possibile ricavare per segnali a banda stretta, la frequenza fondamentale F0 in questo modo:
Fs è la frequenza di campionamento del segnale e ZCR è espressa in zero crossing per campione. E’ possibile ottenere un valore di energia. Infatti, matematicamente, la ZCR equivale alla Q(n), per cui se sostituisco al posto del vettore T e scalo w(n) di un fattore 1/N, ottengo la seguente formula:
La ZCR ci aiuta a determinare segnali vocalizzati o meno. Infatti il modello vocale suggerisce che, al di sotto dei 3khz è concentrata l’energia della componente vocalizzata, mentre a frequenze più elevate abbiamo l’energia delle componenti non vocalizzate (unvoiced speed). Abbinando un analisi ZCR con la short-time average Energy, riesco ad individuare con precisione inizio e fine delle parole.Un’altra caratteristica del suono, è la short time autocorrelation, che è pari all’antitrasformata di Fourier della densità spettrale di energia. In un certo senso l’autocorrelazione a misurare la somiglianza tra un segnale ed il suo traslato (la formulaprecedente si riferisce ad un segnale discreto). Conserva le armoniche del segnale, l’ampiezza delle formanti e la loro frequenza. E’ inoltre caratterizzato da alcune caratteristiche importanti:

  • È una funzione pari;

  • Per k=0 otteniamo il massimo;
  • Per k=0 corrisponde l’energia del segnale o alla potenza media se i segnali
    sono deterministici.

  • Riesco a stimare la periodicità del segnale perché anche l’autocorrelazione è
    periodica con periodicità del segnale( cioè
    f(k)=f(k+P)).
La short time autocorrelation
È ottenuta filtrando il segnale con delle finestre temporali. Perché è importante quest’ultima?Perché trova applicazione nell’estrazione dei pitch e nella discriminazione tra suono vocalizzato e non. Un’ulteriore alternativa a quest’ultima è la short time average magnitude difference function;Prendendo w(n) rettangolare di durata N, avrò:


Perché andare a ricercare la frequenza fondamentale? La frequenza fondamentale viene detta anche pitch e rappresenta per quanto concerne l’ambito del vocale, la frequenza fondamentale della vibrazione delle corde vocali. Posso utilizzare la short-time autocorrelation function per risalire a tale frequenza:Con Fs che è la frequenza di campionamento, kM è il campione m-simo a cui si rileva il primo massimo dopo quello per K=0. Quest’operazione viene effettuata dal cosiddetto stimatore di pitch che in genere attua 3 fasi:


  1. filtraggio e semplificazione del segnale con la riduzione dei dati;

  2. estrazione del periodo;

  3. correzione di eventuali errori.

Inviluppo spettrale

L’inviluppo spettrale è molto importante nell’analisi del parlato. Infatti le zone della frequenza in cui si concentra l’energia si trovano in corrispondenza con le principali risonanze del tratto vocale. Queste risonanze sono molto importanti per riconoscere le vocali e le frequenze in cui si concentra l’energia vengono dette formanti. In genere gli strumenti musicali sono distinti da rispettivi inviluppi spettrali. Come si fa l’inviluppo? Si prende lo spettro in ampiezza e si selezionano i massimi. Tali massimi vengono congiunti con delle linee rette (attenzione, i massimi relativi della funzione!!) oppure sisuddivide l’asse delle frequenza in intervalli, ed in corrispondenza di essi(ascisse) si individuano le ampiezze e talune si collegano con dei segmenti. Come ottenere questi punti sulle ascisse? Ad esempio usando un banco di filtri passabanda equispaziati (banda costante) o distribuiti logaritmicamente sull’asse delle frequenze (filtri a Q costante).A livello computazionale, questi filtri possono essere implementati con la FFT, calcolando dapprima lo spettro in modulo, poi sommando i contributi di ciascun bin frequenziale pesato dallarisposta in frequenza dell’r-esimo filtro. Nel caso di passabanda rettangolari, si può calcolare l’energia Er(j) per il canale r-esimo del j-esimo frame con:Dove con Br si indicano le componenti spettrali appartenenti al filtro r-esimo ed N la dimensione della FFT. Quando parliamo di spettrogramma, in realtà stiamo trattando una rappresentazione in tre dimensioni. Se noi, di un segnale nel tempo facciamo la FFT, per ogni frame, allora possiamo creare una rappresentazione in cui, nelle ascisse porremo il tempo, nelle ordinate le frequenze. Preso un tempo ti nelle ascisse, e tracciando una riga verticale, su tale riga, potremo individuare varie zone di colore più o meno scuro. Se una parte è scura, significa che avrò molta energia per la frequenza che trovo nell’ordinata. In sostanza lo spettrogramma è una registrazione dell’andamento dell’energia dei vari frame, visualizzata per frequenza. Ovvero mi dice che, ad esempio, nel frame che incapsula il tempo ti, l’energia è molto più concentrata per una frequenza che non per l’altra. Proprio perché è riferita ai frames, si noti come lo spettrogramma ha un’andamento a striscie verticali. Avere più energia per una data frequenza, significa che nei momenti in cui il parlato aveva quella data frequenza, l’ampiezza del suono era molto alta. Per cui, nel parlato, diventa molto importante parametrizzare l’inviluppo spettrale. Al momento, il sistema migliore è un metodo non lineare cosiddetto cepstrum e la sua variante mel-cepstrum. Tutte queste tecniche di analisi dei frames, hanno lo scopo di ricavare per ogni frame un vettore di caratteristiche. Ogni caratteristica del vettore, viene pesata in maniera diversa. Lo stato dell’arte per il trattamento di tale vettore, è l’MFCC(Mel Scale Cepstral Coefficient). Mel è una scala derivata da studi di psicoacustica che hanno sancito il fatto che lo studio del parlato può essere effettuato studiando lo spettro dopo averlo filtrato con una serie di filtri triangolari parzialmente sovrapposti che iniziano da una data frequenza e terminano ad una frequenza massima. La frequenza minima per il parlato è di 100Hz. Mel dice che l’uomo è sensibile non alla frequenza, ma al logaritmo della frequenza. Il filtro di Mel è applicato allo spettro di ogni frame. Una frequenza massima di 5000 Hz potrebbe aiutare ad eliminare gran parte del rumore. La frequenza massima dovrebbe essere inferiore, in ogni caso, alla frequenza di Nyquist (pari a metà della frequenza di campionamento).

Ciò che stà alla base, è che la sorgente x(n) passa attraverso un filtro descritto dalla risposta all’impulso h(n)

Lo spettro del segnale y(n) è pari ad ,ovvero il prodotto di due spettri, dove k è l’indice per le frequenze discrete. Poiché è difficile separare gli spettri di entrambi, allora il cepstrum usa gli algoritmi:Se pensiamo a log |Y(k)| come ad un segnale nel tempo (anche se è in frequenza), è possibile distinguere due parti del segnale:

  1. La parte a variazione veloce;

  2. la parte a variazione lenta.
Queste due parti è possibile estrarle attraverso un filtro passa alto ed uno passa basso applicati ad log|Y(k)|. Un altro metodo, consiste nel separare le due componenti usando la trasformata inversa di Fourier:Questa trasformata inversa, mi fornisce verso l’origine l’inviluppo spettrale, mentre in punti distanti compare l’eccitazione. In particolare nei punti in cui log |Y(k)| mostra la periodicità, allora la DTF mostrerà una riga. L’ascissa di DFT si chiama quefrency invece di frequency e ceps-trum stà a spec-trum. LA separazione quindi ha come effetto quello di separare l’inviluppo spettrale dall’eccitazione o sorgente. Tale separazione è quindi ottenuta moltiplicando il cepstrum per una finestra passa-basso nel dominio del cepstrum. Quindi questo filtro passa basso serve per potere separare. Abbiamo che nc è una soglia opportuna. Scegliere questa soglia è importante. Per sceglierla bisogna ragionare sulle formanti. Per un uomo, la formante più bassa è pari a 270hz. Per una donna invece 310hz. Le oscillazioni dello spettro che corrispondono all’inviluppo non devono quindi avere componenti sopra la quefrency qp=3.7ms=1/270 Hz. Per suoni periodici bisogna scegliere nc < np, con np periodo in campioni.
Per una frequenza di campionamento di 44khz, risulta np=44.1 x 3.7=163 campioni. Come soglia verrà però scelto un valore leggermente inferiore. In generale, le formanti, ovvero le frequenze

che corrispondono ai massimi dell’inviluppo spettrale sono molto utili in
quanto servono a differenziare le varie vocali. Poiché l’inviluppo spettrale ha
in ordinata l’energia, le formanti sono le frequenze sulle quali si concentra
la maggiore energia.