• Non ci sono risultati.

Il segmento di speech che è andato perso può essere di lunghezza superiore a quella del segnale contenuto in un pacchetto e perciò può essere necessaria la ricostruzione di un certo numero di pacchetti persi consecutivamente al first lost packet. Questa situazione è segnalata dalla variabile Erasure Consecutive Count settata a un numero maggiore o uguale a 1.

La tecnica di ripetere un singolo pitch period per la ricostruzione di un pacchetto funziona bene per perdite di breve durata e, per come è stato implementato l'algoritmo, viene usata per il first lost packet. Per perdite di durata maggiore questa introduce dei suoni innaturali che portano a un peggioramento della qualità audio percepita dall'utente. La cosa è maggiormente evidente nel caso in cui le perdite sono concentrate in una regione unvoiced o in una in cui c'è una transizione tra voiced e

5 Algoritmi di Packet Loss Concealment

unvoiced. Questo problema è ridotto in maniera significativa incrementando il numero di pitch period usati per la ricostruzione dei pacchetti persi consecutivamente al first loss packet.

Supponiamo di trovarci nella condizione in cui il Current Loss Indicator è settato a true e l'Erasure Consecutive Count è settato a un numero maggiore o uguale a 1. Stiamo perciò supponendo che il pacchetto che sarebbe dovuto essere mandato in play all'istante attuale è andato perso così come quello precedente. Quest'ultimo è stato ricostruito ed è stato già riprodotto (fatta eccezione per gli ultimi 3.75 ms che sono stati memorizzati nell'history buffer ma non sono ancora stati spediti all'applicazione).

Il valore di Erasure Consecutive Count viene incrementato di 1. Il blocco Pitch Detector viene saltato. Il First Ovelap-and-Add Unit provvede ad aggiornare il pitch buffer in base al valore di Erasure Consecutive Count e lo passa al Synthtic Signal Generator che ricostruirà il pacchetto perso che avrebbe dovuto essere mandato in play all'istante attuale. Il synthetic signal creato, come dettagliatamente spiegato nei paragrafi successivi, sarà poi passato al blocco Second Overlap-and-

Add Unit e ad Attenuation per poi essere spedito sulla porta di output e memorizzato alla fine

dell'history buffer.

5.4.4.1 First overlap-and-add unit (consecutive packet losses)

Effettua un'operazione di overlap-and-addiction sul segnale memorizzato nel pitch buffer. Come spiegato in precedenza lavora in maniera diversa in base al valore della variabile Erasure Consecutive Count. Andiamo quindi a distinguere i vari casi:

➢ Erasure Consecutive Count = 1 :

Si effettua un aggiornamento del pitch buffer. Questo aggiornamento consiste nell'andare a modificarne gli ultimi ¼ wavelength campioni. La cosa è realizzata prima moltiplicando gli

¼ wavelength campioni del pitch buffer considerati a partire dagli ultimi 2.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. L'operazione è rappresentata in figura 5.4. Questo aggiornamento potrà essere utile, come sarà più chiaro in seguito, al momento della ricostruzione del pacchetto perso dipendentemente dalla sua lunghezza e dall'indirizzo contenuto in pitch offset.

5 Algoritmi di Packet Loss Concealment

Figura 5.4: Operazione di Overlap-and-Addiction per Erasure Consecutive Count=1

Erasure Consecutive Count = 2 :

Anche in questo caso si effettua un aggiornamento del pitch buffer e lo si fa in maniera simile al caso precedente. La differenza è che in questo caso il numero di pitch period usati dal successivo blocco Synthetic Signal Generator è 3 e perciò cambieranno i campioni su cui si va ad effettuare l'operazione di overlap-and- addiction. Quest'ultima è realizzata prima moltiplicando gli ¼ wavelength campioni del pitch buffer considerati a partire dagli ultimi

3.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. L'operazione è rappresentata in figura 5.5. Questo aggiornamento potrà essere utile, come sarà più chiaro in seguito, al momento della ricostruzione del pacchetto perso dipendentemente dalla sua lunghezza e dall'indirizzo contenuto in pitch offset.

5 Algoritmi di Packet Loss Concealment

Figura 5.5: Operazione di Overlap-and-Addiction per Erasure Consecutive Count=2

➢ Erasure Consecutive Count > 2 :

In questi casi non si effettua alcun aggiornamento del pitch buffer. Il blocco First Overlap-and- Add viene saltato.

5.4.4.2 Synthetic signal generator (consecutive packet losses)

Genera il segnale che sarà mandato in play in sostituzione al pacchetto che è andato perso (che possiamo supporre di lunghezza T ms). Anche questo blocco lavora in maniera diversa in base al valore della variabile Erasure Consecutive Count. Andiamo quindi a distinguere i vari casi:

Erasure Consecutive Count = 1 :

Il numero di pitch period usati in questo caso è 2 e perciò si andranno a considerare gli ultimi 2 pitch period del pitch buffer. Inizialmente si copiano ¼ wavelength campioni dal pitch buffer partendo dalla posizione indicata in pitch offset e si memorizzano nel temporary buffer. Questo sarà usato dal successivo blocco Second Overlap-and-Add Unit a cui viene passato il segnale ricostruito. Successivamente si decrementa di 1 pitch period l'indirizzo del puntatore contenuto in pitch offset e si costruisce il synthetic signal. Questo è composto copiando i campioni dal pitch buffer partendo dall'indirizzo indicato in pitch offset. Una volta arrivati alla fine del pitch buffer se il numero di campioni considerati non è ancora sufficiente

5 Algoritmi di Packet Loss Concealment

a creare i T ms di segnale del pacchetto perso allora si riparte a copiare campioni da 2 pitch period dalla fine del pitch buffer ripetendo questi due pitch period fino ad arrivare ad un segnale di T ms. L'aggiornamento del pitch buffer realizzato in precedenza permette una transizione non brusca tra le copie di questi segmenti di segnale. Il procedimento è raffigurato nella seguente figura:

Figura 5.6: Generazione del synthetic signal per Erasure Consecutive Count = 1

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.

➢ Erasure Consecutive Count = 2 :

Il numero di pitch period usati in questo caso è 3 e perciò si andranno a considerare gli ultimi 3 pitch period del pitch buffer. Inizialmente, come nel caso precedente, si copiano

¼ wavelength campioni dal pitch buffer partendo dalla posizione indicata in pitch offset e si memorizzano nel temporary buffer. Questo sarà usato dal successivo blocco Second Overlap-and-Add Unit a cui viene passato il segnale ricostruito. Successivamente si decrementa di un certo numero di pitch period l'indirizzo del puntatore contenuto in pitch offset in modo da farlo puntare a un campione facente parte del primo dei tre pitch period

5 Algoritmi di Packet Loss Concealment

considerati. Il synthetic signal è composto copiando i campioni dal pitch buffer partendo dall'indirizzo indicato in pitch offset. Una volta arrivati alla fine del pitch buffer se il numero di campioni considerati non è ancora sufficiente a creare i T ms di segnale del pacchetto perso allora si riparte a copiare campioni da 3 pitch period dalla fine del pitch buffer ripetendo questi tre pitch period fino ad arrivare ad un segnale di T ms. L'aggiornamento del pitch buffer realizzato in precedenza permette una transizione non brusca tra le copie di questi segmenti di segnale. Il procedimento è raffigurato nella figura numero 5.7:

Figura 5.7: Generazione del synthetic signal per Erasure Consecutive Count = 2

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.

➢ Erasure Consecutive Count = 3,4 o 5 :

In questi casi non si memorizzano ¼ wavelength campioni di segnale nel temporary buffer perché il blocco successivo Second Overlap-and-Add Unit sarà saltato. Non si incrementa inoltre il numero di pitch period (che resterà quindi fissato a 3) ma ci si limita a creare il synthetic signal copiando campioni dal pitch buffer a partire dall'indirizzo memorizzato in pitch offset come spiegato nel caso precedente di Erasure Consecutive Count uguale a 2.

5 Algoritmi di Packet Loss Concealment

In questi casi si costruisce il synthetic signal con tanti campioni settati a zero quanti ne sono necessari a costruire un pacchetto di T ms. il blocco successivo Second Overlap-and-Add Unit viene saltato.

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. Visto come è stato realizzato il synthetic signal i pitch period non saranno riprodotti nell'ordine con cui formavano il segmento di speech contenuto nello speech buffer. Nonostante questo il segnale risultante sarà percepito dall'utente come naturale. L'intero pacchetto ricostruito è memorizzato poi alla fine dell'history buffer che perciò conterrà 3.75 ms di segnale non ancora mandati in play.

5.4.4.3 Second overlap-and-add unit

Viene utilizzato solo nel caso in cui Erasure Consecutive Count vale 1o 2. Realizza un'operazione di overlap-and-addiction prima moltiplicando gli ¼ wavelength campioni iniziali del synthetic signal per una rampa ascendente e gli ¼ wavelength campioni del temporary 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 all'inizio del synthetic signal. Questo permette una transizione naturale tra la parte di segnale ricostruita al passo precedente e quella generata all'istante attuale.

5.4.4.4 Attenuation

Maggiore è la lunghezza del segmento di speech perso e più diventa difficile ricostruirlo correttamente. Inevitabilmente il synthetic signal divergerà quindi sempre di più dal segnale originale al crescere del numero di pacchetti consecutivamente persi. Questo causa l'introduzione di suoni di lunghezza innaturale che porteranno ad una diminuzione della qualità audio percepita dall'utente anche se il segnale generato può sembrare naturale se ascoltato isolatamente. Per risolvere questo problema è stata introdotta una funzione che si preoccupa di attenuare il segnale ricostruito prima di riprodurlo nel caso in cui Erasure Consecutive Count sia maggiore o uguale a 1.

Dopo i primi T ms corrispondenti alla ricostruzione del first loss packet, il synthetic signal è moltiplicato per una rampa con pendenza negativa che ne riduce l'ampiezza del 20% ogni T ms (con T ms lunghezza del pacchetto perso).

5 Algoritmi di Packet Loss Concealment

Documenti correlati