• Non ci sono risultati.

La ricostruzione di un segmento di speech che è non è arrivato correttamente può necessitare dipendentemente dalla sua lunghezza della ricostruzione di uno o più pacchetti. La maggior parte delle operazioni in questo algoritmo sono effettuate per la generazione del primo pacchetto del segmento di speech andato perso; saranno perciò le operazioni necessarie a questa ricostruzione che andranno a determinare, per la maggior parte, la complessità computazionale dell'algoritmo.

Procediamo quindi nella spiegazione supponendo di trovarci nella condizione in cui il Current Loss Indicator è settato a true e l'Erasure Consecutive Count è settato a 0. Stiamo perciò supponendo che il pacchetto che dovrebbe essere mandato in play all'istante attuale è andato perso mentre è correttamente arrivato il precedente ed è già stato riprodotto (fatta eccezione per gli ultimi 3.75 ms che sono stati memorizzati nell'history buffer ma non sono ancora stati spediti all'applicazione incaricata di riprodurli).

Inizialmente l'intero contenuto dell'history buffer è copiato nel pitch buffer con cui, per motivi legati all'implementazione, sarà più facile lavorare e la variabile Erasure Consecutive Count è settata a 1. Il contenuto del pitch buffer sarà usato per la ricostruzione dell'intero segmento di segnale perso. Come è spiegato dettagliatamente in seguito il segnale memorizzato in questo buffer è passato al blocco Pitch Detection e al Synthetic Signal Generator. Il primo si occuperà di fare una stima del pitch period, il secondo realizzerà la ricostruzione. I blocchi First Overlap-and-Add Unit e

Attenuation vengono saltati. Gli ultimi 0.25 pitch period campioni dell'history buffer sono copiati anche nel last quarter buffer per poter essere usati nel caso in cui il segnale perso sia di lunghezza superiore alla lunghezza di un pacchetto.

5 Algoritmi di Packet Loss Concealment

5.4.3.1 Pitch detector

Il pitch period è stimato andando a determinare il picco della funzione di cross-correlazione normalizzata calcolata tra segmenti di speech contenuti nell'history buffer. Il tutto è realizzato in due fasi distinte in modo da rendere l'operazione meno complessa da un punto di vista computazionale.

Nella prima fase si effettua il calcolo del massimo della cross-correlazione normalizzata tra una finestra contenente gli ultimi 160 campioni di speech dell'history buffer e una della stessa dimensione traslata indietro da 5 ms (40 campioni) a 15 ms (120 campioni) a passi di 250 microsecondi (2 campioni). Questo corrisponde ad effettuare una ricerca del pitch in un range tra i 66Hz e i 200Hz. Si considerano cioè inizialmente il segmento 1 ed il segmento 2 della figura seguente (formati entrambi da 160 campioni), si moltiplicano campione per campione e si sommano; si effettua poi la stessa operazione tra il segmento 1 ed il segmento 3, tra il segmento 1 e il 4 e così via fino ad arrivare all'ultimo segmento (quello contenuto nella finestra temporale traslata di 120 campioni rispetto a quella contenente gli ultimi 160 campioni di speech dell'history buffer). Si normalizzano i valori ottenuti (rispetto all'energia dei vari segmenti considerati ad ogni passo) e si memorizza il valore della traslazione per cui si ottiene il risultato massimo.

Figura 5.2: Prima fase di stima del pitch period

5 Algoritmi di Packet Loss Concealment

della traslazione per cui si è ottenuto il picco della funzione di cross-correlazione spostando la finestra a passi di 125 microsecondi. La complessità computazionale dell'algoritmo può essere diminuita eliminando questa seconda fase ma questo comporterà una leggera degradazione della qualità audio che sarà possibile ottenere.

Definiamo wavelength il valore che ottengo come stima del pitch period.

5.4.3.2 First overlap and add unit (first lost packet)

Prima che il blocco Syntethic Signal Generator ricostruisca il first loss packet viene realizzata un'operazione di overlap-and-addiction con due obiettivi. Il primo è assicurare una transizione non brusca tra la parte di segnale precedentemente riprodotta e il segnale che sarà ricostruito; il secondo è garantire che sia naturale la transizione tra più copie del pitch period. Questo, come sarà più chiaro in seguito, sarà utile nel caso in cui la lunghezza del pitch period stimata sia inferiore alla lunghezza di un pacchetto.

L'operazione è realizzata prima moltiplicando gli ¼ wavelength campioni dell'history buffer considerati a partire dagli ultimi 1.25 pitch period per una rampa ascendente e gli ¼ wavelength campioni del last quarter buffer per una rampa discendente e poi sommandoli. La pendenza delle rette

è di ± 1

1/ 4 wavelength . Il risultato sostituisce gli 0.25 pitch period campioni alla fine del pitch buffer e dell'history buffer, i cui ultimi 3.75 ms devono ancora essere riprodotti.

5.4.3.3 Synthetic signal generator (first lost packet)

Genera il segnale che sarà mandato in play in sostituzione al first loss packet (che possiamo supporre di lunghezza T ms). La ricostruzione è effettuata copiando l'ultimo pitch period contenuto nel pitch buffer più volte fino ad arrivare ad avere un segnale di T ms. Il procedimento è raffigurato nella seguente figura:

5 Algoritmi di Packet Loss Concealment

Figura 5.3: Generazione del synthetic signal dal segnale contenuto nel pitch buffer

La posizione del puntatore all'ultimo elemento del pitch buffer che è stato copiato è salvata nella variabile pitch offset e sarà usata per le operazioni spiegate in seguito.

I primi T −3.75 ms del synthetic signal sono riprodotti all'istante attuale subito dopo i 3.75 ms di segnale memorizzati alla fine dell'history buffer. L'intero pacchetto ricostruito è memorizzato poi alla fine dell'history buffer che perciò conterrà 3.75 ms di segnale non ancora mandati in play. Questi come è stato mostrato sono utilizzati nel processo di ricostruzione del first loss packet per rendere naturale la transizione tra la parte di segnale già riprodotta e quello ricostruita in sostituzione al pacchetto perso.

Documenti correlati