# Codifica numerica del segnale audio/Capitolo 6

../Capitolo 5 ../Capitolo 7 IncludiIntestazione 17 marzo 2021 75% Da definire
Codifica numerica del segnale audio Daniele Sereno/Pietro Valocchi 1996 CC BY-SA 3.0 GFDL Indice:Codifica numerica del segnale audio.djvu //it.wikisource.org/w/index.php?title=Codifica_numerica_del_segnale_audio/Capitolo_6&oldid=- 20210317181908 //it.wikisource.org/w/index.php?title=Codifica_numerica_del_segnale_audio/Capitolo_6&oldid=- 20210317181908
6
6.1 CODIFICA PER MODELLI NEL DOMINIO
Le codifiche di forma d’onda precedentemente discusse si prefiggono di trasmettere al ricevente l’informazione sull’andamento nel tempo del segnale da codificare, al fine di permetterne la ricostruzione. Nella codifica per modelli, detta anche codifica per analisi e sintesi o parametrica, quello che si vuole fare è di mettere in grado il ricevente di generare localmente il segnale in base ad informazioni sulle caratteristiche della sorgente. Essendo la codifica legata al modello prescelto della sorgente stessa, tali codificatori perdono la caratteristica generai purpose dei codificatori di forma d’onda fin qui discussi. Nel caso di segnale vocale sono noti come vocoder (Voice Coder).
Il vantaggio di tale tecnica risulta evidente pensando, ad esempio, alla codifica dell’uscita di un generatore di forme d’onda sinusoidali. In tal caso, invece di trasmettere l’infinita serie dei campioni del segnale, sarebbe sufficiente trasmettere solamente i parametri che identificano il generatore (ampiezza, frequenza e fase iniziale). Con tali informazioni il ricevente sarebbe in grado di ricostruire una replica perfettamente identica all'ingresso del codificatore.
Nel caso della codifica del segnale audio, ovviamente, il problema è di più difficile soluzione, sia per la non stazionarietà che per la complessità della sorgente. Il problema della variazione nel tempo delle caratteristiche del segnale si risolve limitando l’identificazione dei parametri della sorgente ad intervalli temporali entro i quali la stessa può essere approssimata come stazionaria. Trasmessa l’informazione relativa ad un intervallo, l’analisi si ripeterà periodicamente per gli intervalli successivi. [p. 207 Fig. 6.1 - Vocoder di canale e per formanti.
Per l’identificazione della sorgente, invece, si possono seguire strade differenti. Una possibilità è quella di determinare il modulo dello spettro del segnale (ignorando l’informazione relativa alla fase), per poi procedere alla ricostruzione del segnale tramite generatori sinusoidali. Per un fissato intervallo di tempo, l’ampiezza del segnale prodotto da ciascun generatore è determinabile tramite opportuni filtri passabanda (vocoder di canale) (fig. 6.1).
Utilizzando, ad esempio, 16 sottobande con intervalli di 20 ms e codificando la potenza su 8 bit, il flusso numerico generato risulterebbe di 6400 bit/s. Prestazioni migliori dal punto della riduzione del flusso numerico possono essere ottenute codificando la posizione e l’ampiezza delle sole formanti (vocoder per formanti) (fig. 6.1). I vocoder che operano nel dominio della frequenza, pur se caratterizzati da elevati rapporti di compressione,soffrono di una cattiva qualità del segnale generato.
È possibile realizzare una differente codifica per modelli operando l’identificazione della sorgente nel dominio del tempo (fig. 6.2). In tal caso, la sorgente viene identificata in funzione dei coefficienti del suo modello AR e dell’ingresso. Per la rilevazione di tali grandezze possono essere utilizzati gli algoritmi sviluppati a proposito delle codifiche predittive, in quanto è stato mostrato come:
* dalla struttura del predittore è possibile risalire alla struttura del modello AR della sorgente;
* il residuo di predizione fornisce l’eccitazione del filtro. [p. 208 Fig. 6.2 - Codifica per modelli nel dominio del tempo.
L’inconveniente di tale impostazione deriva dal fatto che, anche trascurando il flusso richiesto per la trasmissione dei coefficienti del filtro, per la codifica di forma d’onda dell’eccitazione verrebbe generato un flusso non minore di quello dell’ADPCM.
Una possibile soluzione a questo problema è quella di sottocampionare la sequenza di campioni dell’eccitazione, in considerazione delle caratteristiche spettrali piatte di tale segnale. È questo il caso della tecnica di codifica RELP (Residuai Excited Linear Prediction) [Un75] in cui il segnale di eccitazione residuo è limitato in banda, solitamente a 1 kHz e cioè un quarto della banda effettiva, quindi sottocampionato e quantizzato scalarmente o vettorialmente. Al ricevitore il segnale di eccitazione a banda piena è ricostruito con tecniche di ribaltamento spettrale utilizzando il solo contributo della banda da 0 a 1kHz. Sebbene questa tecnica consenta forti rapporti di compressione, la qualità fornita non è molto buona ed il suo impiego è stato molto limitato.
Una seconda soluzione è quella di adottare un modello anche per la codifica dell’eccitazione. Questa strada ha portato allo sviluppo della tecnica di codifica del vocoder LPC ampiamente utilizzata in passato in quanto, nelle versioni più sofisticate, consente velocità di trasmissione anche di poche centinaia di bit/s. Il limite di tale tecnica rimane nel modello di eccitazione molto semplificato che pone un limite intrinseco alla qualità ottenibile.
Il grosso passo in avanti dal punto di vista della qualità si è ottenuto con le tecniche di codifica di analisi per sintesi (ABS). Tali tecniche superano i problemi del vocoder LPC, in quanto non viene utilizzato un modello specifico per il segnale di eccitazione, e consentono ottima qualità con forti rapporti di compressione, in considerazione di due elementi essenziali: [p. 209
* il segnale di eccitazione è calcolato al trasmettitore utilizzando come criterio la minimizzazione dell’errore del segnale vocale ricostruito, da cui il nome di analisi per sintesi. Questo elemento determina l’esigenza di un decodificatore locale anche nel trasmettitore;
* la minimizzazione dell’errore è realizzata considerando un modello percettivo, seppur semplificato. Tale modello consente di tenere in conto delle trasformazioni operate dall'apparato uditivo.
I codificatori di analisi per sintesi (ABS) si distinguono in tre principali classi e si differenziano essenzialmente per la forma del segnale di eccitazione utilizzato:
* RPE (Regular Pulse Excited). In questo caso il segnale di eccitazione è costituito da un treno di impulsi sottocampionati, di ampiezza e fase opportune, ricavato direttamente dal segnale residuo.
* MPLPC (Multipulse LPC). Il segnale di eccitazione è costituito da un certo numero di impulsi di posizione ed ampiezza opportune.
* CELP (Codebook Excited Linear Prediction). Il segnale di eccitazione è selezionato da una collezione di possibili segnali memorizzati in una tabella.
Nella codifica per modelli, il segnale viene generato in ricezione tramite informazioni sul modello della sorgente e sulla sua eccitazione come
| $X(z)=H(z)V(z)$ | (6.1) |
Come già detto, per quanto riguarda la modellizzazione della sorgente questo avviene tramite un sistema lineare auto regressivo cpn funzione di trasferimento a soli poli del tipo
| $X(z)=H(z)={\frac {G}{1-\sum _{k=1}^{p}\alpha _{k}z^{-k}}}$ | (6.2) |
vocalizzati, dato che per le nasali e le fricative sarebbe necessario una funzione di trasferimento a poli e zeri. L’aumento dell’ordine p del sistema, comunque, permette di raggiungere l’approssimazione voluta. Gli Oj., che sono le incognite dell’identificazione, possono essere ricavati tramite algoritmi predittivi (da cui il nome di Linear Predictive Coding [Mar76]). Dato che con questa codifica si è interessati ai rapporti di compressione più spinti, le tecniche utilizzate sono generalmente a blocchi [Appendice C].
L’LPC si distingue per la tecnica di codifica utilizzata per l’eccitazione v(n) del filtro AR (flg. 6.3). Se si utilizzasse il residuo di predizione, il flusso generato sarebbe non inferiore a quello delle codifiche di forma d’onda. Nel caso di segnale vocale, però, anche per l’eccitazione può essere utilizzata una codifica per modelli. Infatti, classificato il segnale come vocalizzato o non vocalizzato, essa può essere ottenuta nel primo caso a partire da un generatore periodico di impulsi, mentre nel secondo caso da un generatore di rumore.
La codifica dell’eccitazione, quindi, richiede innanzitutto l’identificazione del tipo di generatore da adottare (periodico o meno). Nel caso di suoni vocalizzati, poi, è necessario identificarne anche il periodo. Inoltre, normalmente viene anche esplicitato il guadagno G del filtro, in modo da lavorare su di un’eccitazione normalizzata in ampiezza. Il segnale è, infine,ricostruito come
| $x(n)=\sum _{k=1}^{p}\alpha _{k}x(n-k)+Gv(n)$ | (6.3) |
La selezione tra suoni vocalizzati e non vocalizzati e, per quest’ultimi, l’individuazione della fondamentale è uno degli aspetti più complessi della codifica LPC. Per quanto riguarda l’eccitazione dei suoni vocalizzati, l’individuazione corretta della fondamentale (pitch) del treno di impulsi che funge da eccitazione per il modello è di particolare importanza in quanto, pur se non presente nel segnale d’uscita (filtrato passa banda), tramite le sue armoniche determina le variazioni a grana fine dello spettro, con un notevole impatto sulla qualità percepita.
Una tecnica utilizzabile per risolvere entrambi i problemi di selezione tra suoni vocalizzati e non vocalizzati ed individuazione del pitch è l’utilizzo della funzione di auto-correlazione. Come già più volte accennato, per segnali perfet [p. 211 Fig. 6.3 - Codifica LPC.
temente periodici la funzione d’autocorrelazione riassume periodicamente il suo valore nell'origine. Il segnale può, quindi, essere ritenuto periodico se l’autocorrelazione presenta periodicamente picchi superiori ad una certa soglia (es.: ampiezza pari ad almeno 0.5 R(0)); in tal caso la distanza tra due massimi della funzione di auto-correlazione fornisce anche il periodo N del segnale.
Una stima semplificata della fondamentale può essere ottenuta rinunciando al calcolo dell’autocorrelazione tramite l’Average Magnitude Difference Function (AMDF), definita come
| $D(k)=\sum _{n=1}^{N=1}|x(n)-x(n+k)|;k=0,1,2,...$ | (6.4) |
Dato che a distanza di un periodo i campioni dovrebbero mostrare ampiezze simili, l'AMDF permette di individuare la fondamentale del segnale tramite la posizione dei suoi minimi.
Il vantaggio dell’AMDF risiede nella riduzione della complessità computazionale rispetto al calcolo dell’autocorrelazione, grazie alla riduzione del numero di moltiplicazioni richieste. C’è da dire, però, che gli attuali [p. 212 processori per l’elaborazione dei segnali permettono il calcolo di prodotti con accumulo con le stesse prestazioni con le quali vengono eseguiti operazioni meno complesse, per cui i vantaggi dell'AMDF rispetto all'uso della funzione di autocorrelazione vengono a cadere. Altra grandezza utilizzata per distinguere tra fonemi vocalizzati e non è la misura degli attraversamenti per lo zero (Zero Crossing), definita come
| ${\frac {1}{N}}\sum _{n=1}^{N}{\frac {|sgn[s(n)]-sgn[s(n-1)]|}{2)}}$ | (6.5) |
Per quanto riguarda il guadagno G del sistema, nell'ipotesi di identificazione perfetta dei coefficienti del modello AR, G sarebbe calcolabile come rapporto tra il segnale scelto come eccitazione e la funzione d’errore
| $G={\frac {e(n)}{v(n)}}$ | (6.6) |
A causa degli errori di predizione, tale procedimento non è affidabile ed è preferibile confrontare l’energia dei due segnali come
| $G^{2}={\frac {\sum _{i=1}^{n}e(i)^{2}}{\sum _{i=1}^{n}v(n)^{2}}}$ | (6.7) |
Riepilogando, l’eccitazione del filtro lineare viene modellizzata tramite un selettore tra fonemi vocalizzati e non, più due parametri che identificano il periodo e l’ampiezza dell’eccitazione. Dal punto di vista della compressione, quindi, la codifica LPC permette di ottenere flussi estremamente ridotti (throughput fino ai 2.4 kb/s). La qualità ottenuta, però, non è elevata, data la forte semplificazione delle caratteristiche dell’eccitazione.
Un esempio di CoDec LPC è fornito dallo standard governativo statunitense LPC-10 (figg. 6.4- 6.5). L’ingresso del codificatore sono segmenti [p. 213 di segnale della durata di 22.5 ms. Dato un campionamento ad 8 kHz, ciò si traduce in blocchi di 180 campioni.
Per la generazione dei parametri LPC, viene utilizzato il metodo della covarianza su sottoblocchi di 130 campioni [Appendice C]. Tali sottoblocchi sono allineati all'inizio del periodo del segnale, in modo da poter eseguire un’analisi sincrona con il periodo stesso, con una riduzione dell’errore di codifica. L’ordine del predittore utilizzato è pari al 10° i suoni vocalizzati e del 4° per i non vocalizzati.
La rilevazione del periodo della fondamentale avviene tramite AMDF sul segnale filtrato passa-basso nell'intervallo 51.3-400 Hz. Per la selezione tra suoni vocalizzati e non vocalizzati si sfruttano le informazioni relative a:
* energia nella banda inferiore dello spettro;
* rapporto tra il massimo e minimo dell'AMDF;
* conteggio degli attraversamenti per lo zero.
Le informazioni sul periodo della fondamentale e sulla selezione - tra vocalizzati e non vocalizzati vengono poi corretti tramite tecniche di programmazione lineare.
L’informazione sul guadagno viene, infine, ricavata tramite il calcolo dell’RMS. La codifica avviene secondo la seguente tabella
| Parametro | Vocalizzati | Non vocalizzati | Commenti |
| selezione | 1 | 1 | |
| periodo | 6 | 6 | |
| energia | 5 | 5 | |
| k$_1$ | 5 | 5 | LAR |
| k$_2$ | 5 | 5 | LAR |
| k$_3$ | 5 | 5 | lineare |
| k$_4$ | 5 | 5 | lineare |
| k$_5$ | 4 | | lineare |
| k$_6$ | 4 | | lineare |
| k$_7$ | 4 | | lineare |
| k$_8$ | 4 | | lineare |
| k$_9$ | 3 | | lineare |
| k$_{10}$ | 2 | | lineare |
Tab. 6.1 - Componenti del flusso LPC10.
[p. 214 Sommando un bit di sincronizzazione (alternativamente 1 o 0) e 21 bit per la protezione dagli errori (nelle trame non vocalizzate), si ottiene un totale di 54 bit per blocco, con un flusso di 2400 bit/s.
Fig. 6.4 - Struttura del codificatore LPC-10.
Fig. 6.5 - Struttura del decodificatore LPC-10.
Evitando di utilizzare un modello per il segnale di eccitazione, per un vocoder nel dominio del tempo questo può essere ricavato direttamente dal [p. 215 residuo di predizione. Tale affermazione può essere verificata ricordando la legge di un vocoder LPC
| $x(n)=G\ v(n)+\sum _{k=1}^{p}\alpha _{k}\ x(n-k)$ | (6.8) |
e quella del residuo di predizione a breve termine
| $x(n)=e(n)+\sum _{k=1}^{p}\alpha _{k}\ x(n-k)$ | (6.9) |
Dal punto di vista della struttura del codificatore, utilizzando tale tipo di eccitazione, si passerebbe dal sistema ad anello aperto dell'LPC, ad uno retroazionato, noto come codificatore multi-pulse (fig. 6.6). Le tecniche che derivano da tale impostazione hanno, da un lato, il vantaggio di una qualità migliore e, dall'altro, risultano essere applicabili a sorgenti qualsiasi (cioè non esclusivamente alla voce).
Fig. 6.6 - Codifica Multipulse.
Come al solito, il problema che è necessario affrontare è quello della codifica dell’eccitazione. Una possibile soluzione è quella di ricorrere ad un dizionario (codebook) di possibili frammenti di eccitazione scelti, ad esempio, in maniera casuale. Confrontando il segnale d’errore per ciascun blocco con quelli presenti nel dizionario, è possibile ricavare la sua migliore approssimazione, trasmettendone l’indice (Code-Excited Linear Prediction: CELP). [p. 216 Fig. 6.7 - Decimazione dell’eccitazione per codifica RPE.
Una differente soluzione prevede la decimazione del segnale d’errore (fig. 6.7). Considerando nel blocco dei campioni il sottoinsieme dei “più rappresentativi”, è possibile ridurre il numero di campioni trasmessi, lasciando al filtro AR il compito della loro interpolazione: La scelta ottima dei campioni è un compito estremamente gravoso dal punto di vista computazionale.
Per ridurre il numero delle combinazioni possibili (e quindi sia la complessità che il numero di informazioni da trasmettere) si definisce un passo costante di decimazione “n” detta “griglia” dell’eccitazione. Le sottosequenze possibili in tal modo sono n, ottenute prendendo campioni equispaziati con origine su una delle n possibili scelte (da cui il nome di Regular Pulse Excitation: RPE).
La sottosequenza adottata nella codifica è quella che massimizza la funzione di energia
| $E_{M}=Max_{m}[x_{m}(i)]^{2}$ | (6.10) |
e la sua codifica è data dalla posizione sulla griglia e da una codifica (es.: APCM) della sequenza di campioni.
La codifica audio adottata nello standard del Radio Mobile Digitale Pan-Europeo del Groupe Special Mobil (GSM) dell’European Conference of Post and Telecommunications Administrations (CEPT) (raccomandazione CEPT / GSM 06.10) è un esempio di codifica per modelli RPE. Gli scopi di [p. 217 tale standard sono quelli di ridurre il flusso numerico al di sotto dei 16 kbit/s con un ritardo di codifica inferiore agli 80 ms.
L’algoritmo utilizzato per la codifica è il Regular-Pulse Excitation / Long Term Prediction (RPE-LPT). Il segnale vocale è ottenuto tramite un treno di impulsi interpolato da un filtro tale da ricostruire l’inviluppo dello spettro a breve termine del segnale. L’ingresso è un flusso numerico derivante da un campionamento a 8 kHz con una codifica lineare su 13 bit. Le fasi della codifica sono (fig. 6.8):
* pre-elaborazione (per migliorare la precisione e la stabilità degli algoritmi);
* analisi LPC a breve termine (per la determinazione dell’inviluppo dello spettro del segnale);
* analisi a lungo termine (per la determinazione della struttura a grana fine dello spettro del segnale;
* decimazione RPE (per la codifica dell’eccitazione del modello digitale della sorgente).
Fig. 6.8 - Diagramma del codificatore RPE-LTP.
La pre-elaborazione ha il fine di eliminare le componenti continue presenti nel segnale ed eseguire una pre-enfasi del segnale stesso, al fine di migliorare la stabilità degli algoritmi di filtraggio adattativo ed aumentare la precisione numerica (fig. 6.9). [p. 218 Fig. 6.9 - Modulo dei filtri ci compensazione dell’offset e di preenfasi.
Per l’analisi LPC il flusso numerico è segmentato in gruppi di 160 campioni (20 ms). Il modello della sorgente che si ricava è dell’ottavo ordine. I parametri del modello vengono ottenuti come coefficienti di riflessione di un modello FIR lattice tramite l’algoritmo di Schiir [Appendice C]. La ricorsione viene forzatamente interrotta ad un passo precedente all'ottavo (restituendo di fatto un predittore di ordine inferiore ad 8) qualora si stiano producendo coefficienti maggiori in valore assoluto di 1; ciò è indice che l’algoritmo di stima sta divergendo e l’interruzione è richiesta al fine di garantire la stabilità del predittore.
Per la codifica, gli 8 coefficienti di riflessione ricavati sono poi convertiti in Log Area Ratios (LARs), meno sensibili agli errori di quantizzazione, definiti come
| $r_{i}=log{\frac {1-k_{i}}{1+k_{i}}}$ | (6.11) |
| $r_{i}=log{\frac {A_{i+1}}{A_{i}}}$ | (6.12) |
I LARs sono quantizzati linearmente, ma, a causa della differente dinamica, la loro codifica avviene con un numero variabile di bit (6 per i primi 2 e scalando fino a 3 per gli ultimi due).
Per l’analisi a breve termine, i LARs sono decodificati, riottenendo i coefficienti del modello AR (affetti da rumore di quantizzazione). Vengono, quindi, calcolati 160 campioni della funzione d’errore tra ingresso e segnale stimato. Per evitare transizioni spurie nel passaggio tra due segmenti di segnale, i coefficienti utilizzati per i primi 40 campioni del blocco sono ottenuti interpolando linearmente i nuovi LAR con i precedenti. In particolare, al passo i-esimo per i campioni n-esimi, i coefficienti utilizzati sono ottenuti come
| ${\begin{cases}0.75LAR^{(i-1)}+0.25LAR^{(i)};&n\in [0..12]]\\0.50LAR^{(i-1)}+0.50LAR^{(i)};&n\in [13..26]]\\0.25LAR^{(i-1)}+0.75LAR^{(i)};&n\in [27..39]]\end{cases}}$ | (6.13) |
Il residuo di predizione a breve termine è sottoposto ad analisi a lungo termine (fig. 6.10). Per ogni intervallo di 5 ms (40 campioni) si calcola il periodo N (codificato su 7 bit), tramite il massimo della funzione di autocorrelazione
* $R(\lambda )=\sum _{i=0}^{39}d(k_{j}+i)\ d(k_{j}+i-\lambda )$
| $R(N)=Max[R(\lambda )];\ \lambda =40..120$ | (6.14) |
viene inoltre calcolato il guadagno a lungo termine β (codificato su 2 bit), tramite il rapporto tra ampiezza e valore efficace
| $\beta ={\frac {R(N)}{\sum _{i=0}^{39}d'^{2}(k_{j}+i-N)}}$ | (6.15) |
La predizione ottenuta dall'analisi a lungo termine viene sottratta all'errore ottenuto dall'analisi a breve termine. Il residuo viene filtrato tramite un FIR dell’11° ordine (sempre per sagomare lo spettro dell’errore) ed il risultato sottoposto a codifica RPE. La codifica avviene decimando il residuo a lungo termine per ciascun sottoblocco, scartando 2 campioni su 3 e scegliendo, tra le 4 possibili sequenze di 13 campioni sfasate di un campione ciascuna, quella che massimizza la funzione di energia
| $E_{M}=Max_{m}[x_{m}(i)]^{2}\ m=0,1,2,3$ | (6.16) |
Si fa notare come la prima e l’ultima sequenza risultino coincidenti a meno di uno sfasamento di un campione. Tali campioni sono codificati tramite una quantizzazione adattativa semplificata, ottenuta normalizzando ciascun campione rispetto al massimo della sequenza (codificato su 6 bit) ed esprimendone l’ampiezza tramite una quantizzazione non uniforme su 3 bit.
Riepilogando, per ogni blocco di 160 campioni su 13 bit (2080 bit) vengono prodotte le grandezze riportate in tabella 6.2. [p. 221
| Algoritmo | Parametro | Bit per sotto segmento (40 campioni) | Bit per segmento (160 campioni) |
| pred. breve termine | LAR | | 36 |
| pred. lungo termine | β | 2 | 8 |
| pred. lungo termine | N | 7 | 28 |
| RPE (griglia) | M | 2 | 8 |
| RPE (eccitazione) | X$_{max}$ | 6 | 24 |
| RPE (eccitazione) | X$_m$ | 3*13 | 156 |
| | Totale | 56 | 260 |
Tab. 6.2 - Componenti del flusso GSM.
Il rapporto di compressione che ne deriva è di 8:1. Rispetto al log-PCM il flusso prodotto (50 segmenti al secondo, cioè 13 kbit/s) ha un rapporto di compressione di 5:1.
La tecnica di codifica Multipulse rappresenta la tecnica di Analisi per Sintesi introdotta storicamente per prima in letteratura. La sua formulazione si deve ad Atal e Remde nel 1982 [Ata82]. La tecnica può essere interpretata come uno sviluppo della tecnica APC (Adaptive Predictive Coding) di cui si fornisce nel seguito un breve cenno.
L’algoritmo APC [Ata79] è simile all'algoritmo ADPCM da cui si differenzia per la presenza di un predittore a lungo termine ed un filtro di sagomatura spettrale del rumore di quantizzazione (Noise Shaping). In alcuni casi i coefficienti di predizione a breve termine sono calcolati sul frame corrente, codificati e trasmessi. Di questa tecnica sono state presentate alcune varianti come quella proposta da Itakura [Hon84] in cui si introduce una allocazione dinamica dei bit riservati alla quantizzazione, o quella proposta in [Mak79] in cui il predittore a lungo termine è rimosso. Atal ha poi proposto una ulteriore allo schema introducendo la procedura di Center Clip (CC) del segnale residuo di predizione, giungendo allo schema illustrato in figura 6.11 [Ata80] in cui il blocco NS è responsabile della sagomatura spettrale del rumore di quantizzazione, mentre Ps e Pl rappresentano i predittori a breve e lungo termine rispettivamente. [p. 222 modifica]Fig. 6.11 - Schema del codec APC-NS con Center Clip.
La procedura di Center Clip consiste nel porre a zero tutti i campioni con ampiezza inferiore ad una certa soglia (Th) e quindi corrisponde ad introdurre un blocco con funzione di trasferimento non lineare illustrata in figura 6.12.
Fig. 6.12 - Funzione di trasferimento del blocco Center Clip. [p. 223 Mentre il blocco di sagomatura del rumore di quantizzazione può essere facilmente interpretato come un primo passo per introdurre la funzione di pesatura percettiva, che è un elemento caratteristico degli schemi ABS, il blocco di CC corrisponde a creare un segnale di eccitazione in cui solo alcuni campioni sono non-nulli, che è esattamente il tipo di segnale di eccitazione usato nello schema Multipulse.
Lo schema a blocchi di principio del codec Multipulse è riportato in figura 6.13
Fig. 6.13 - Schema a blocchi di un codec Multipulse.
La struttura è la stessa del codec CELP, con la differenza che la procedura di minimizzazione dell’errore è utilizzata, in questo caso, come criterio per determinare la posizione e la ampiezza di un certo numero di impulsi, anziché determinare la parola ottima del codebook.
Le formule utilizzate per il calcolo dei vari impulsi sono le stesse impiegate per lo schema CELP. La procedura consiste nel calcolare sequenzialmente posizione ed ampiezza degli impulsi, considerando ad ogni iterazione l’effetto degli impulsi calcolati precedentemente. La procedura è quindi meno complessa di quella dello schema CELP, in quanto il numero di calcoli di distorsione risulta pari al numero di impulsi da introdurre, che può essere dell’ordine di 5 impulsi su 40 campioni. Inoltre, questo metodo consente facilmente di tenere in conto degli effetti della quantizzazione, in quanto ad ogni iterazione i nuovi impulsi possono essere quantizzati. Tuttavia, al crescere del numero di impulsi, la procedura diventa meno efficiente e diventa [p. 224 essenziale considerare congiuntamente l’effetto dei diversi impulsi. È intuitivo che una procedura completamente esaustiva risulta analoga a quella impiegata nello schema CELP in cui il vocabolario è di tipo sparso. Una soluzione intermedia in termini di complessità consiste nel riottimizzare le ampiezze dei vari impulsi dopo avere determinato sequenzialmente le loro posizioni.
Anche per lo schema Multipulse, come per l’RPE ed il CELP, l’introduzione di un filtro di predizione a lungo termine comporta un significativo miglioramento delle prestazioni.
A fronte di un discreto successo iniziale, la tecnica Multipulse è stata successivamente soppiantata dalla tecnica CELP che, viceversa, è stata impiegata, come si vedrà, in numerosi standard di codifica.
La tecnica di codifica CELP è sicuramente la tecnica che ha avuto più successo nell'ultimo decennio ed è stata studiata da quasi tutti i laboratori di ricerca sulla codifica della voce del mondo. A riprova del suo successo, diversi standard di codifica della voce sono basati su questo algoritmo. La tabella 6.3 riporta i principali standard di codifica basati appunto sulla tecnica CELP.
| Sigla | Ente | Descrizione |
| G.728 | ITU-T | LD-CELP - Codifica CELP Low-Delay a 16 kbit/s |
| G.729 | ITU-T | CELP a 8 kbit/s |
| G.723 | ITU-T | CELP a 5.27 e 6.3 kbit/s per codifica dell’audio in multimedia |
| IS-54 | ANSI | CELP a 7.95 kbit/s. Full-rate per sistemi cellulari in Nord-America (basati su D-AMPS) |
| IS-96 | ANSI | CELP a velocità variabile 1.2-9.6 kbit/s. Codifica per sistemi cellulari in Nord-America (basati su COMA) |
| US-1 | ANSI/ETSI | CELP a 12.2 kbit/s. Codifica Enhanced Full-Rate per GSM |
| GSM-HR | ETSI | CELP a 5.6 kbit/s. Half-rate per il sistema cellulare GSM |
| FS 1016 | NATO (DoD) | CELP a 4.8 kbit/s |
Tab. 6.3 - Elenco dei principali standard di codifica basati sulla tecnica CELP.
[p. 225 La tecnica è stata introdotta in letteratura nel 1984 come una particolare tecnica di codifica stocastica [Ata84] e come algoritmo di pattern classification [Cop84], Il termine CELP si deve ad una pubblicazione di Atal del 1985 [Sch85]. Dalle prime implementazioni della tecnica con complessità altissime si è pervenuti in alcuni anni a soluzioni sempre più semplificate, fino alle implementazioni attuali con complessità che si aggirano attorno ai 20 MOPS e quindi realizzabili utilizzando un solo DSP.
Lo schema base dell’algoritmo CELP (fig. 6.14) è costituito da una catena di sintesi inserita in un anello di controreazione che è utilizzato per determinare il segnale di eccitazione e(n) più consono a rappresentare il segnale ricostruito &(n). La catena di sintesi costituisce lo schema del ricevitore, una cui copia locale è inserita all'interno del trasmettitore. Per semplicità in questo schema di principio non sono riportati i blocchi relativi al calcolo dei parametri dei filtri ed alla loro quantizzazione, ma essi costituiscono parte integrante del trasmettitore.
Il sistema è costituito da cinque blocchi principali, riportati in figura 6.14, che sono illustrati in dettaglio nel seguito.
Fig. 6.14 - Schema di principio dell’algoritmo CELP.
Il primo blocco è una tabella, o codebook (CBK), contenente una collezione di vettori di lunghezza opportuna, tali da, essere impiegati per [p. 226 Fig. 6.15 - Schema a blocchi del filtro di sintesi a lungo termine.
realizzare il segnale di eccitazione ${\hat {e}}(n)$. La tabella è simile a quelle impiegate per la quantizzazione vettoriale e la procedura di selezione del vettore può essere vista come un processo di quantizzazione vettoriale, in cui il criterio da minimizzare (misura di distorsione) è legato ad un segnale trasformato. La lunghezza dei vettori varia da schema a schema, da un minimo di 4 campioni ad un massimo di 60. La dimensione del vocabolario, una volta fissata la lunghezza dei vettori, determina il contributo alla velocità di trasmissione necessario per la rappresentazione del segnale di eccitazione. Solitamente tale dimensione non supera i 10 bit (1024 parole). Per dimensioni superiori, in genere sono state utilizzate strutture multi-stadio. Relativamente alla generazione di tale tabella, sono state proposte numerose soluzioni e se ne parlerà più in dettaglio in seguito.
Il segnale di eccitazione, estratto dalla tabella, alimenta un filtro lineare di sintesi Plt( z ) che tiene conto della correlazione a lungo termine del segnale vocale. Nella sua realizzazione più semplice, tale filtro ha la struttura riportata in figura 6.15 e quindi funzione di trasferimento data da
| $P_{LT}(z)={\frac {1}{1-\mu \cdot z^{-d}}}$ | (6.17) |
in cui il parametro d tiene conto della periodicità a lungo termine del segnale vocale ed il coefficiente p del grado di correlazione. Il parametro d ha il significato fisico di periodo fondamentale del segnale vocale (pitch) e pertanto il filtro di correlazione a lungo termine è responsabile dell’inclusione nel segnale r(n) dell’informazione legata alla vibrazione delle corde vocali.
Essendo legato al periodo fondamentale, il ritardo d assume valori che sono confinati, nella grande maggioranza dei casi, nell'intervallo tra 20 e 160 campioni. Questi limiti sono relativi, alla frequenza di campionamento di 8 kHz, [p. 227 a frequenze del pitch comprese tra 50 e 400 Hz.I parametri del filtro di sintesi a lungo termine possono essere calcolati in catena aperta sul segnale vocale con i metodi classici [Hes83], oppure possono essere determinati in catena chiusa, come per il segnale di eccitazione, minimizzando anche in questo caso l’errore pesato percettivamente. In ogni caso devono essere quantizzati e trasmessi al ricevitore ad ogni frante o anche più rapidamente, in considerazione del cambiamento delle caratteristiche del segnale. Si vedrà in seguito come anche questo blocco possa essere sostituito da strutture più sofisticate, al fine di consentire una miglior fedeltà di riproduzione della frequenza fondamentale.
Il segnale ${\hat {r}}(n)$ così prodotto prende il nome di segnale residuo ricostruito ed alimenta un secondo filtro lineare di sintesi, responsabile dell’introduzione dell’informazione legata alle formanti e cioè relativa alla correlazione a breve termine. Di tale filtro e dei dettagli relativi al calcolo e trasformazione dei parametri si è già parlato nei capitoli precedenti. In alcuni casi particolari, con lunghezza del vettore molto corta (4 o 5 campioni), i parametri possono essere calcolati sul segnale vocale ricostruito (in backward) e pertanto non devono essere trasmessi in quanto possono essere ricavati anche al ricevitore. È il caso ad esempio del codec ITU-T G.728 (LD-CELP). L’uscita del filtro P$_{LT}$(z) rappresenta il segnale vocale ricostruito ${\hat {X}}(n)$.
Il blocco successivo è costituito dal filtro lineare tempo variante W(z), impiegato per sagomare spettralmente il segnale errore di quantizzazione ε(n). L’idea dell’introduzione di questo blocco trae origine dall’osservazione che a basse velocità di trasmissione, il rapporto segnale su rumore ottenibile è di soli pochi dB. In queste condizioni, un errore di quantizzazione a spettro piatto, quale si otterrebbe senza nessuna sagomatura del segnale errore ε(n), porterebbe alla situazione illustrata in figura 6.16 in cui l’SNR può essere molto alto in corrispondenza della prima formante, ma anche negativo in certe porzioni dello spettro.
L’idea è quindi quella di sagomare spettralmente il segnale £(n), al fine di ottenere un segnale errore del quale minimizzare l’energia nel processo di selezione del vettore di eccitazione. La funzione di trasferimento impiegata nel blocco W(z) è quella originariamente proposta da Atal negli studi sulla tecnica di codifica APC (Adaptive Predictive Coding) [Ata79] e successivamente impiegata nel codificatore Multipulse. Il blocco prende il nome di filtro di pesatura spettrale ed è definito dalla funzione di trasferimento [p. 228
| $W(z)={\frac {A(z)}{A(z/\gamma )}}={\frac {1-\sum _{i=1}^{p}a_{i}z^{-i}}{1-\sum _{i=1}^{p}a_{i}\gamma ^{i}z^{-i}}}$ | (6.18) |
Questa funzione ha lo svantaggio di non tenere sufficientemente in conto i fenomeni di mascheramento spettrale operati dall'apparato uditivo, tuttavia consente una semplice adattatività dei parametri alle caratteristiche del segnale vocale ed ha il grande vantaggio di consentire una significativa semplificazione dello schema di codifica, come sarà chiaro nel seguito.
I coefficienti ai sono quelli dell’analisi lineare a breve termine ed il coefficiente $\gamma \in [0,1]$ ha l’effetto di allargare la banda delle formanti di un fattore $\Delta f=-(f_{s}/\pi )\cdot (ln\gamma )$, senza modificarne la posizione.
Fig. 6.16 - Spettro del segnale vocale e del segnale errore di quantizzazione nel caso di assenza di sagomatura spettrale.
L’effetto di pesatura del segnale errore risulta tanto più pronunciato tanto più y è prossimo a 0, nel qual caso W(z) collassa nella funzione di trasferimento del filtro di analisi LPC. A titolo esemplificativo, la figura 6.17 [p. 229 Fig. 6.17 - Andamento del modulo del filtro di pesatura spettrale per diversi valori del parametro γ.
riporta l’andamento del modulo di W(z) in funzione della frequenza, per diversi valori di y. I valori tipicamente più utilizzati sono tra 0.8 e 0.9.
L’ultimo blocco dell’algoritmo di codifica CELP è costituito dal calcolo dell’energia del segnale errore pesato. Questa è calcolata per ognuno dei vettori di eccitazione raccolti nella tabella, in modo da selezionare quello corrispondente all'energia minima. Ovviamente considerando che nella catena ci sono dei filtri con memoria e con coefficienti tempo varianti, bisognerà opportunamente fissare le condizioni iniziali di ognuno di essi in modo da considerare, nella ricerca, ogni vettore nelle stesse condizioni.
La considerazione alla base della modifica dello schema teorico è che tutte le trasformazioni operate sul vettore eccitazione devono essere fatte, in fase di ricerca del minimo, per ogni vettore del codebook, pertanto ogni riduzione di tali operazioni determina una riduzione di complessità notevole.
La prima operazione consiste nel trasferire il blocco W(z) alla sinistra del sommatore in figura 6.14 e quindi riportandolo sui due rami. A questo punto si osserva che il numeratore della funzione W(z) è uguale alla funzione di trasferimento di P$_{ST}$(z), e pertanto semplificabile. Si giunge quindi allo schema di figura 6.18 in cui il blocco P$_{SW}$(z) ha funzione di trasferimento
| $P_{SW}(z)={\frac {1}{A(z/\gamma )}}={\frac {1}{1-\sum _{i=1}^{p}a_{i}\gamma ^{i}z^{-i}}}$ | (6.19) |
Fig. 6.18 - Semplificazione dello schema CELP.
Sfruttando la sovrapposizione degli effetti, la catena dei due filtri di sintesi può essere sdoppiata in due componenti: una responsabile del contributo delle memorie e con ingresso nullo ed un’altra responsabile del contributo del vettore del codebook, ma senza memorie dei filtri. Questa operazione porta allo schema di figura 6.19. [p. 231 Fig. 6.19 - Schema CELP semplificato con separazione dei contributi dovuti ai filtri di sintesi.
Ricordando ora che la funzione di trasferimento del filtro di sintesi a lungo termine è tale da considerare solo quei campioni con ritardo maggiore di d, ne consegue che, qualora la lunghezza dei vettori del codebook sia minore di d minimo, il blocco P$_{LT}$(z) non fornisce alcun contributo, dato che è senza memorie e quindi ${\hat {r}}_{cbk}(n)={\hat {e}}_{LT}(n)$. Il segnale ${\hat {r}}_{LT}(n)$, uscita del filtro di sintesi a lungo termine e con ingresso nullo, assume il significato di contributo del pitch al segnale di eccitazione e viene spesso identificato come contributo dovuto ad un codebook adattativo. Infine, se si ripete l’operazione di sdoppiamento anche considerando questo segnale ${\hat {r}}_{LT}(n)$, si perviene allo schema finale effettivamente utilizzato in pratica, che è riportato in figura 6.20.
In riferimento allo schema iniziale di figura 6.18, valgono le relazioni
* ${\hat {X}}_{W}(n)={\hat {X}}{W_{0}}(n)+{\hat {X}}{W_{LT}}(n)+{\hat {X}}{W_{cbk}}(n)$
| ${\hat {r}}(n)={\hat {r}}_{LT}(n)+{\hat {r}}_{cbk}(n)$ | (6.20) |
e nel caso in cui d ≥ L$_s$,
| ${\hat {r}}(n)={\hat {e}}(n)+{\hat {r}}_{LT}(n)\Leftrightarrow d\geq L_{s}$ | (6.21) |
con L$_s$ lunghezza del vettore del codebook.
Come già detto questa struttura si presta ad implementazioni di gran lunga più efficienti della struttura base. Infatti in questo caso l’operazione di ricerca della parola del codebook ottima comprende essenzialmente una [p. 232 Fig. 6.20 - Schema CELP semplificato.
operazione di filtraggio senza memoria che può essere sostituita dal prodotto del vettore del codebook per la matrice caratteristica del filtro. Tutte le altre operazioni sono indipendenti dai vettori della tabella e pertanto possono essere effettuate una sola volta per tutti i vettori da analizzare.
Supponendo di calcolare i parametri del codebook adattativo sul segnale vocale (open loop), il calcolo dell’eccitazione ottima consiste nella minimizzazione dell’energia del segnale errore pesato £ w (n) e cioè
| $min_{j}(E(j))=min_{j}\|\epsilon _{W}(j)\|^{2}=min_{j}\sum _{n=1}^{L_{s}}\left(\epsilon _{W}(j,n)\right)^{2}$ | (6.22) |
in cui j rappresenta l’indice della generica parola del codebook ed Ls è la lunghezza del vettore. Questa viene solitamente indicata con il termine di subframe in quanto sottomultiplo della durata del frame che costituisce l’intervallo di tempo sul quale sono calcolati i parametri del filtro di sintesi LPC.
L’energia dell’errore di quantizzazione pesato è calcolata con la relazione
| $E(j)=\sum _{n=1}^{L_{s}}\left(X_{W}(n)-{\hat {X}}_{W_{0}}(n)-{\hat {X}}_{W_{LT}}(n)-{\hat {X}}_{W_{cbk}}(j,n)\right)^{2}$ | (6.23) |
$X_{w_{off}}=X_{W}(n)-{\hat {X}}_{w_{0}}(n)-{\hat {X}}_{w_{LT}}(n)$
* $E=\sum _{n=1}^{L_{s}}\left(X_{W_{off}}(n)-{\hat {X}}_{W_{cbk}}(j,n)\right)^{2}$
| $=\sum _{n=1}^{L_{s}}\left(X_{W_{off}}(n)-g_{cbk}I(n)\right)^{2}$ | (6.24) |
dove I(n) rappresenta il generico vettore del codebook filtrato con il filtro di sintesi a breve termine senza memorie. Derivando rispetto a g$_{cbk}$ e ponendo la derivata uguale a zero, si ottiene la relazione del fattore di scala ottimo per il generico vettore, e cioè
| $g_{cbk}={\frac {\sum _{n=1}^{L_{s}}X_{W_{off}}(n)-I(n)}{\sum _{n=1}^{L_{s}}(I(n))^{2}}}$ | (6.25) |
Sostituendo la relazione del fattore di scala ottimo in quella dell’energia, si ottiene l’espressione dell’energia ottenibile con il fattore di scala ottimo
| $E=\sum _{n=1}^{L_{s}}(X_{W_{off}}(n))^{2}-{\frac {\left(\sum _{n=1}^{L_{s}}X_{W_{off}}(n)-I(n)\right)^{2}}{\sum _{n=1}^{L_{s}}(I(n))^{2}}}$ | (6.26) |
Dato che il primo termine è costante per ogni vettore del codebook, il processo di ricerca del vettore ad energia minima consiste quindi nella massimizzazione del secondo termine. Pertanto il vettore di eccitazione ottimo è quello che massimizza il termine [p. 234
| $max_{j}\left({\frac {\left(\sum _{n=1}^{L_{s}}X_{W_{off}}(n)-I(n)\right)^{2}}{\sum _{n=1}^{L_{s}}(I(n))^{2}}}\right)$ | (6.27) |
Sulla base di questa relazione, sono state poi introdotte in letteratura ulteriori semplificazioni che comprendono, ad esempio, la memorizzazione del denominatore per ogni vettore e soprattutto il confronto tra rapporti, il quale consente di evitare il calcolo esplicito della divisione per ogni vettore.
Resta da osservare che se si vuole tenere in conto degli effetti della quantizzazione del fattore di scala nella ricerca del vettore minimo, non si può utilizzare l’ultima relazione, ma si deve esplicitamente inserire il valore del fattore di scala, con conseguente aumento della complessità di calcolo.
Queste relazioni sono valide per il calcolo del vettore di eccitazione nell'ipotesi i parametri del filtro del pitch siano disponibili e costanti per ogni vettore. Un miglioramento delle prestazioni è ottenibile calcolando anche i parametri di tale filtro con la stessa procedura (closed loop). Il metodo è simile e consiste nella minimizzazione dell’energia del segnale XWoff(n). In questo caso l’incognita sarà il ritardo d e si può vedere facilmente che si ottengono espressioni analoghe.
Seppur questa procedura di minimizzazione sequenziale consenta un miglioramento delle prestazioni, la soluzione ottima consiste ovviamente nella determinazione congiunta dei contributi dei due rami minimizzando l’energia del segnale e w (n). Quest’ultima possibilità può essere ottenuta con la procedura di ortogonalizzazione delle componenti che sarà descritta nel seguito.
A seguito del successo della tecnica CELP, sono state proposte in letteratura numerose varianti, alcune tese a ridurre la complessità di calcolo ed
Nelle prime realizzazioni dello schema CELP, il codebook era costituito da vettori estratti da una sequenza di campioni distribuiti con d.d.p. alla Gauss [Ata84], oppure realizzato impiegando una versione modificata dell 5 algoritmo LBG per la generazione di quantizzatoli vettoriali [Cop84]. La motivazione per l’utilizzo di una sequenza Gaussiana discende dalla considerazione che l’errore residuo derivante dalle predizioni a breve e lungo termine ha una distribuzione statistica di questo tipo.
Successivamente sono stati introdotte strutture di codebook che consentono semplificazioni di calcolo e di capacità di memoria necessaria. È il caso ad esempio di codebook cosiddetti ciclici o overlappati [Lin88] in cui le varie parole differiscono per uno o pochi campioni, oppure codebook sparsi binari o ternari [Dav86] in cui solo alcuni campioni del vettore hanno ampiezza non nulla. Tali codebook sono ottenuti con una procedura di center-clip e ponendo ad ampiezza unitaria, con segno, i campioni non nulli.
Una menzione particolare spetta ai vocabolari definiti a chiavi [Cel89] o a codici algebrici [Ado87] per i quali non è necessaria la memorizzazione esplicita delle parole in quanto possono essere ottenute con shift opportuni di alcuni impulsi base. Inf ine nel codec VSELP (Vector Sum Excited Linear Predictive) [Gei90] il codebook è costituito da vettori ortogonali e linearmente indipendenti.
La tecnica di codifica SEV (Self Excited Vocoder) [Ros86] si differenzia dallo schema CELP in quanto il contributo di eccitazione del codebook in questo caso non esiste. Vale a dire che il segnale di eccitazione è formato utilizzando la sola informazione legata alla correlazione a lungo termine. In questo caso quindi è necessaria una opportuna inizializzazione delle memorie, altrimenti il segnale in uscita sarebbe sempre nullo. La tecnica consente velocità di trasmissione molto basse e possono essere impiegati più di un filtro di sintesi a lungo termine, determinando quindi più contributi che possono essere trattati sequenzialmente o congiuntamente. È evidente che ulteriori predatori oltre al primo, perdono il significato fisico di essere legati alla frequenza di vibrazione delle corde vocali e costituiscono piuttosto un modo alternativo per generare la sequenza di eccitazione. [p. 236 Isolatamente tale tecnica ha avuto scarso successo, mentre acquista significato in tecniche di codifica ad oggetti, in cui si presta ad essere impiegata per quei tratti di segnale fortemente vocalizzati.
L’andamento nel tempo della frequenza fondamentale del parlatore, o barra sonora in termini fonologici, costituisce l’informazione prosodica della comunicazione ed è pertanto responsabile dell’intonazione del messaggio. Tale andamento (pitch contour) è smussato nel tempo e le variazioni del pitch sono graduali e continue, al limite campione per campione. L’ipotesi di considerare tale valore costante per un frame o anche per un singolo subffame è chiaramente una approssimazione.
In particolare tale approssimazione comporta nello schema CELP dei possibili problemi che non consentono di sfruttare pienamente le potenzialità dello schema. Un esempio dei possibili problemi nel considerare il pitch costante è schematizzato in figura 6.21.
Fig. 6.21 - Andamento nel tempo del segnale resìduo (a), la sua versione ricostruita dovuta al contributo LT(b) e Terrore tra i due segnali (c). [p. 237 La figura riporta l’esempio di un possibile frame con valore del periodo di pitch stimato di 35 campioni. In realtà i quattro periodi nel frame hanno valori che vanno da 35 a 38 variando gradualmente. Utilizzando uno schema CELP, il contributo dato del predittore a lungo termine con ritardo d=35 sarà del tipo del segnale illustrato in figura 8b in cui la periodicità è fissata a 35 campioni. In questo caso il segnale errore XWoff(n)sarà del tipo in figura 8c e cioè presenterà una forte ampiezza in corrispondenza del disallineamento dei picchi dovuto alla non perfetta rappresentazione del pitch contour. In queste condizioni, il contributo del codebook sarà impiegato principalmente per sopperire a tale malfunzionamento e non già a recuperare l'errore impredicibile. Sebbene questo esempio sia estremo, in quanto le variazioni del pitch sono solitamente più limitate, lo stesso problema, in forma meno evidente, occorre nel considerare un valore di periodo intero senza tenere in conto valori frazionari mascherati dalla frequenza di campionamento.
Una prima soluzione semplice al problema è quella di considerare predittori a lungo termine con più di un coefficiente [Omo88]. Una soluzione più sofisticata consiste nel considerare valori del pitch frazionari ottenuti con un sovraccampionamento locale dei segnali in questione. La procedura solitamente impiegata in questi casi consiste nell'effettuare una prima stima del valore del pitch intero, mantenendo eventualmente più di un candidato, e quindi affinare la ricerca per valori frazionari nell'intervallo dei valori preselezionati.
La procedura di ortogonalizzazione è impiegata per calcolare i contributi long-term e del codebook, minimizzando l’energia dell’errore pesato £ w (n). Più precisamente la procedura consiste nel modificare opportunamente il contributo del codebook in modo tale che la determinazione sequenziale dei due fattori di scala gckb e gLT sia equivalente alla loro ottimizzazione congiunta.
Nella figura 6.22 è riportato lo schema di figura 6.20 in cui sono stati esplicitati i fattori di scala dei due contributi relativi al codebook adattativo e stocastico. Le uscite dei filtri senza memoria sono date da
* ${\hat {X}}_{W_{LT}}(n)=g_{LT}\cdot Z(n)$
| ${\hat {X}}_{W_{cbk}}(n)=g_{cbk}\cdot W(n)$ | (6.28) |
in cui i segnali z(n) e w(n) rappresentano rispettivamente i contributi, filtrati, dei codebook adattativo e stocastico.
Come si è visto, la procedura di minimizzazione dell’energia dell’errore pesato consiste nella minimizzazione di
* $E=\sum _{n=1}^{L_{s}}\left(X_{d}(n)-g_{LT}\cdot Z(n)-g_{cbk}\cdot W(n)\right)^{2}$
* $E=\sum _{n}\left(X_{d}^{2}(n)-g_{LT}^{2}\cdot Z^{2}(n)-g_{cbk}^{2}\cdot W^{2}(n)+\right)^{2}$
| $-2g_{LT}\sum _{n}X_{d}(n)Z(n)-2g_{cbk}\sum _{n}X_{d}(n)W(n)+g_{cbk}g_{cbk}\sum _{n}W(n)Z(n)$ | (6.29) |
in cui si nota che se $\sum _{n}W(n)Z(n)=0$, e cioè se W(n) e Z(n) sono ortogonali, le derivate parziali rispetto a g ckb e g LT sono indipendenti. La procedura di ortogonalizzazione consiste nel modificare il vettore W(n) affinché sia ortogonale a Z(n). Questo può essere realizzato ponendo:
| $W_{ORT}(n)=W(n)-{\frac {\Psi }{\Gamma }}\cdot Z(n)$ | (6.30) |
| $\Psi =\sum _{n=1}{L_{s}}W(n)Z(n)\ e\ \Lambda =\sum _{n=1}{L_{s}}(Z(n))^{2}$ | (6.31) |
Con questa posizione si verifica facilmente che i coefficienti ottimi possono essere calcolati con le relazioni
* $g_{LT}={\frac {\sum _{n=1}{L_{s}}W_{d}(n)Z(n)}{\sum _{n=1}{L_{s}}(Z(n))^{2}}}$
| $g_{cbk}={\frac {\sum _{n=1}{L_{s}}X_{d}(n)W_{ORT}(n)}{\sum _{n=1}{L_{s}}(W_{ORT}(n))^{2}}}$ | (6.32) |
e l’energia del segnale errore, con i fattori di scala ottimi, vale
| $E_{ott}=\sum _{n=1}{L_{s}}X_{d}^{2}(n)-{\frac {\left(\sum _{n=1}{L_{s}}X_{d}(n)Z(n)\right)^{2}}{\sum _{n=1}{L_{s}}(Z(n))^{2}}}-{\frac {\left(\sum _{n=1}{L_{s}}X_{d}(n)W_{ORT}(n)\right)^{2}}{\sum _{n=1}{L_{s}}(W_{ORT}(n))^{2}}}$ | (6.33) |
La tecnica del post-filtering è stata introdotta originariamente da Jyant come miglioramento della qualità nella codifica ADPCM [Ram85]. Successivamente è stata impiegata in numerosi schemi di codifica CELP ed è stata inserita nella raccomandazione G.728 relativa al codec LD-CELP così pure come nello standard a 8 kbit/s G.729.
Il principio è quello di operare una distorsione del segnale ricostruito tale che comporti una sagomatura del rumore di quantizzazione che lo renda meno [p. 240 percepibile. In qualche misura il concetto è simile a quello alla base dell’introduzione della funzione di mascheramento spettrale, ma in questo caso V operazione non avviene in fase di codifica bensì di decodifica, non ha quindi nessun effetto sulla determinazione dei parametri. Lo schema di impiego è riportato in figura 6.23 in cui ${\hat {X}}(n)$ costituisce l’uscita ricostruita dal decodificatore CELP.
Fig. 6.23 - Schema di impiego del post-fiiter.
L’idea può essere discussa facendo riferimento alla figura 6.24a in cui lo spettro del segnale è costituito da due bande di ampiezza 30 dB e 10 dB rispettivamente, mentre il rumore di quantizzazione è a banda intera con valore di 15 dB. In queste condizioni il segnale nella prima banda è 15 dB sopra il rumore mentre nella seconda è 5 dB sotto.
Ipotizzando ora che la funzione di trasferimento del post-filter abbia la stessa caratteristica dello spettro del segnale vocale, lo spettro in uscita sarà quello riportato in figura 6.24b in cui l’SNR nelle due bande è rimasto invariato, mentre il segnale nella prima banda è ora 45 dB al disopra del rumore e quello della seconda è 5 dB. L’effetto complessivo è quindi quello di una minore percezione del rumore di quantizzazione. L’effetto secondario negativo, tuttavia, è quello di aver anche distorto il rapporto energetico tra le due bande di segnale.
Come funzione di post-filter si utilizza in pratica una funzione molto simile a quella inversa impiegata nel filtro di pesatura spettrale W(z) e cioè del tipo
| $A_{PS}(z)={\frac {A(z/\alpha }{A(z/\gamma }}={\frac {1-\sum _{i=1}{p}a_{i}\alpha ^{i}z^{i}}{1-\sum _{i=1}{p}a_{i}\beta ^{i}z^{i}}}$ | (6.34) |
α = 0.5 e β = 0.8. La funzione di trasferimento con tali valori è riportata in figura 6.25.
Fig. 6.24 - Schematizzazione del processo operato dal post-filter: (a) spettri del segnale e del rumore di quantizzazione all'ingresso del post-filter e (b) all'uscita del post-filter. [p. 242
Lo standard ITU-T G.729 è un codec basato sulla tecnica di codifica CELP. È stato proposto con il nome di CS-ACELP (Conjugate-Structure Algebraic-Code-Excited Linear-Predictive) in considerazione della struttura del codebook impiegata. L’algoritmo di codifica opera a 8 kbit/s con un frame di 10 ms. Il ritardo di codifica è leggermente superiore (15 ms) in quanto l’analisi LPC è realizzata con un look-ahead di 5 ms e cioè per la stima dei parametri spettrali si considerano frame overlappati.
Lo schema del codificatore è riportato in figura 6.26. Il segnale di ingresso è preprocessato con un filtro passa alto con frequenza di taglio di 140 Hz al fine di evitare la presenza di disturbi in bassa frequenza. Sul segnale così filtrato sono calcolati i parametri del filtro di predizione a breve termine o filtro LPC. L’analisi, aggiornata ogni 10 ms (frame), è effettuata con una finestra lunga 30 ms spostata in avanti di 5 ms (look-ahead). Le finestre di analisi risultano quindi sovrapposte nel tempo (overlapped), secondo lo schema illustrato in figura 6.27. [p. 243 Fig. 6.26 - Schema del codificatore CS-ACELP.
La finestra di analisi impiegata smussa i valori dei campioni ai bordi, utilizzando una combinazione di finestra di Hamming e di una funzione coseno. L’analisi LPC, di ordine 10, è effettuata con il metodo dell’autocorrelazione introducendo una espansione delle formanti di 60 Hz ed aggiungendo rumore gaussiano di sottofondo a - 40dB. Entrambe le correzioni servono ad evitare la presenza di risonanze troppo pronunciate. Successivamente i coefficienti del filtro diretto a; sono calcolati con l’algoritmo di Levinson-Durbin e sono trasformati nei coefficienti LSP utilizzando il metodo dei polinomi di Chebyshev prima descritto.
La quantizzazione dei coefficienti LSP è vettoriale predittiva tra set di coefficienti contigui. In pratica lo schema utilizzato per la quantizzazione è simile ad uno schema ADPCM in cui si utilizzano predittori di ordine 4.
I coefficienti a$_i$ ottenuti per trasformazione inversa dai coefficienti ${\hat {\omega }}_{i}$, sono utilizzati direttamente per il secondo subframe, mentre i coefficienti impiegati nel primo subframe sono ottenuti per interpolazione lineare dei coefficienti LSP che, come si è visto precedentemente, costituiscono il dominio più efficace per effettuare tale operazione. [p. 244 Fig. 6.27 - Schema di sovrapposizione delle finestre di analisi LPC.
Relativamente al filtro di pesatura percettiva, bisogna solo osservare che la funzione di trasferimento è del tipo
| $W(z)={\frac {A(z/\gamma _{1})}{A(z/\gamma _{2})}}$ | (6.35) |
in cui i due coefficienti γ$_1$ e γ$_2$ sono resi adattativi, frame per frame, sulla base della pendenza dello spettro del segnale vocale. Inoltre i coefficienti utilizzati sono quelli non quantizzati.
E interessante osservare che il segnale di ingresso pesato percettivamente, oltre a costituire il target per la ricerca nel codebook delle eccitazioni, è anche utilizzato per calcolare una stima del valore del pitch in catena aperta. Tale stima è calcolata massimizzando il coefficiente di autocorrelazione nell’intervallo tra 20 e 143 campioni. Al fine di evitare la scelta di multipli del pitch, la ricerca è effettuata in tre campi separati (tra 20 e 39, 40 e 79, 80 e 143) ed il candidato nell’intervallo più basso è favorito con una opportuna pesatura. Successivamente, il valore effettivo del pitch per ognuno dei due subframe da 5 ms è calcolato con procedura in closed loop nell'intorno della stima calcolata precedentemente. Per i motivi illustrati precedentemente, la ricerca del pitch nella seconda fase è realizzata nel dominio del segnale sovracampionato (con un fattore pari a 3).
Il codebook fìsso, o stocastico, è del tipo “sparse” e cioè contiene solo quattro campioni non nulli sul subframe da 40 campioni. Gli impulsi possono [p. 245 assumere i valori ±1. I fattori di scala del codebook fisso e del codebook adattativo sono combinati in un vettore a due elementi e quantizzati vettorialmente. Più in particolare, il fattore di scala del codebook fisso è ottenuto applicando anche una tecnica predittiva a coefficienti costanti, al fine di minimizzare la dinamica del coefficiente stesso. In pratica quindi si calcola un errore di predizione tra il fattore di scala effettivo g$_c$ e la versione predetta ottenuta considerando le versioni quantizzate dei fattori di scala dei quattro subframe precedenti. La predizione è fatta con un filtro a coefficienti costanti. L’errore di predizione è espresso in termini logaritmici e quindi può essere considerato come un fattore correttivo del fattore di scala predetto:
| $\lambda =g_{c}/g_{c}^{p}$ | (6.36) |
Tale fattore y è combinato in un vettore a due elementi con il fattore di scala del codebook adattativo g a e quantizzato vettorialmente usando un codebook da 128 parole (7 bit).
A titolo riassuntivo l’allocazione dei bit ai vari parametri trasmessi dal codec G.729 è riportata in tabella 6.4.
| Parametro | Subframe 1 | Subframe 2 | Totale per frame |
| LSP | | | 18 |
| Ritardo cbk adattativo | 8 | 5 | 13 |
| CRC sul ritardo | 1 | | 1 |
| Indice del cbk fisso | 13 | 13 | 26 |
| Segni del cbk fisso | 4 | 4 | 8 |
| Fattori di scala | 7 | 7 | 14 |
| Totale | | | 80 |
Tab. 6.4 - Allocazione dei bit per il codec G.729.
Il decoder, come in ogni schema CELP, ha una complessità decisamente inferiore all’encoder ed effettua le operazioni di decodifica dei vari parametri trasmessi, nonché i filtraggi di sintesi sia a lungo che a breve termine. Infine, il segnale sintetizzato viene post-processato con un algoritmo di post-filtering che opera al fine di sagomare la distorsione introdotta. L’algoritmo è [p. 246 particolarmente sofisticato in quanto considera non solo lo spettro a breve termine, ma anche quello a lungo termine, oltre ad un passo di controllo automatico del guadagno.
Nei capitoli precedenti si è parlato diffusamente di diverse tecniche di codifica sempre ipotizzando un segnale di ingresso ed uscita a velocità di trasmissione costante. Per l’ingresso questo significa campionare il segnale vocale ad una certa frequenza, tale da rappresentare la banda di segnale desiderata, e rappresentare ogni campione con un numero di bit-costante (ad esempio 16). Per l’uscita significa rappresentare ogni porzione temporale in questione (un campione oppure un frame) con un numero di bit costanti.
Questa configurazione è infatti di gran lunga la più impiegata in pratica e deriva principalmente dalla constatazione che il canale di trasmissione è spesso un canale con velocità di trasmissione costante.
Tuttavia, a seguito dello studio sempre più approfondito di codificatori vocali parametrici, è emerso in modo sempre più convincente che l’informazione associata al segnale vocale necessita di un flusso trasmissivo che non è costante nel tempo. In altre parole si può affermare che l’informazione necessaria a rappresentare accuratamente il segnale vocale è tempo variante o ancora che l’entropia a breve termine del segnale vocale varia considerevolmente nel tempo. Questa considerazione si spiega in modo semplice considerando una conversazione telefonica in cui un flusso trasmissivo è rappresentativo sia di tratti di voce attiva (talkspurt) sia di tratti di silenzio, quando uno dei due parlatori non parla, ma ascolta. È evidente che l’informazione necessaria a rappresentare con buona qualità il silenzio, o il rumore ambientale, è decisamente minore di quella necessaria a rappresentare il segnale vocale. Un esempio applicativo di questa constatazione si ha nello sviluppo del sistema DTX (Discontinuous Transmission) associato al sistema di comunicazione mobile GSM. In questa applicazione, il trasmettitore radio viene spento durante le pause della comunicazione con conseguente risparmio in termini di interferenza tra canali e di consumo delle batterie dei terminali mobili portatili. In questo caso il flusso informativo associato alle pause è addirittura azzerato.
L’esempio citato si riferisce ad un caso estremo di trasmissione on/off, tuttavia il concetto è estendibile anche allo stesso segnale attivo o talkspurt. Anche [p. 247 per questi tratti, infatti, esistono porzioni del segnale per le quali le caratteristiche, ad esempio di correlazione, sono tali da consentire una modellizzazione efficiente e quindi un risparmio significativo in termini di bit trasmessi. È noto, ad esempio, [Kub93] che i tratti di segnale non vocalizzato possono essere riprodotti con buona fedeltà con una quantità di informazione minima, essenzialmente costituita dal livello e dalle caratteristiche spettrali. Viceversa, attacchi o transizioni tra suoni diversi, richiedono una grande quantità di informazione al fine di mantenere una buona qualità. Ne consegue che la qualità fornita da un codificatore a velocità di trasmissione costante dipende in larga misura dalla sua capacità di rappresentare correttamente quei segmenti che sono “più difficili” da codificare [Pas84].
Sebbene quindi la codifica a velocità variabile appaia una soluzione praticabile per ridurre la velocità di trasmissione media, in considerazione del meccanismo fisico di produzione del segnale vocale, molto spesso il canale fisico di trasmissione è un canale a velocità costante. In questo caso impiegare una codifica a velocità variabile determina un costo aggiuntivo che in qualche misura controbilancia il guadagno intrinseco di codifica. Il costo aggiuntivo è da intendersi nella necessità di impiegare degli opportuni registri tampone i quali, tra l’altro, determinano un aumento del ritardo di comunicazione. Mentre la maggiore complessità può essere bilanciata dalle migliori prestazioni, il ritardo aggiuntivo spesso non è tollerabile. Queste considerazioni sono alla base dello scarso successo ottenuto dalle tecniche di codifica a VR.
Tuttavia esistono applicazioni per le quali non esiste il vincolo di un canale di trasmissione a velocità costante. Una di queste, ad esempio, è store&forward nella quale un messaggio viene registrato e riascoltato in tempi diversi (segreterie telefoniche). Un’altra applicazione di recente interesse è quella delle comunicazioni mobili che utilizzano tecnica di accesso CDMA (Code Division Multiple Access) per la quale la trasmissione di flussi informativi a velocità variabile è particolarmente congegnale. In questi casi infatti la diversa velocità è trattata con diversi “spreading-factor” utilizzati per modulare il segnale numerico. Il vantaggio di operare a velocità variabile con tale tecnica di accesso è immediato, in quanto la riduzione di bit-rate si traduce direttamente in una riduzione dell’interferenza e pertanto in un aumento della capacità. Altre tecniche di accesso come Extended-TDMA [Kay92] e Packet Reservation Multiple Access (PRMA) [Goo90] possono analogamente
Un elemento fondamentale per un codificatore a velocità variabile è costituito dal blocco di classificazione del segnale vocale. Più in generale, lo schema completo di un codificatore a velocità variabile può essere rappresentato dallo schema a blocchi di figura 6.28. Fig. 6.28 - Schema a blocchi di un codificatore di sorgente a velocità variabile.
La struttura comprende un codificatore in grado di funzionare a velocità di trasmissione diverse e due blocchi di classificazione: uno inserito in catena aperta o Open Loop Classifier (OLC) ed uno in catena chiusa o CLC (Closed Loop Classifier). Lo scopo dei due blocchi è diverso. Mentre l’algoritmo inserito in catena aperta analizza il segnale vocale e lo classifica in base al suo contenuto intrinseco, il secondo algoritmo determina localmente la quantità di informazione necessaria al fine di garantire, con la trasmissione, un determinato grado di qualità. A tal fine, il secondo algoritmo utilizza misure oggettive tra il segnale da trasmettere e la sua versione sintetizzata localmente e pertanto considera sia il segnale di ingresso che quello ricostruito. La caratteristica principale di questo tipo di architettura è quella di tendere a fornire un segnale ricostruito di qualità costante con una velocità di trasmissione che viceversa è funzione del contenuto informativo e pertanto variabile.
In linea di principio si possono considerale diverse classificazioni del segnale vocale tese a massimizzare il guadagno di codifica. Una caratteristica comune è comunque quella che la classificazione non può prescindere dalla tecnica di codifica impiegata per ognuna delle classi identificate. In particolare se si fa riferimento al modello canonico di produzione del segnale vocale in cui si individuano tratti [p. 249 vocalizzati e non, una semplice classificazione è quella riportata in figura 6.29 [CeI94].
| segnale | attivo | vocalizzato |
| segnale | attivo | non vocalizzato |
| segnale | inattivo | |
Fig. 6.29 - Classificazione ad anello aperto.
Secondo tale classificazione il segnale vocale è suddiviso in tratti attivi (o talkspurt) e tratti inattivi (quando il parlatore non parla). L’algoritmo impiegato per questa classificazione prende il nome di VAD (Voice Activity Detector) e sarà descritto nel capitolo successivo. I tratti attivi sono poi ulteriormente suddivisi in tratti vocalizzati e tratti non-vocalizzati. Questa classificazione fa riferimento al modello di produzione del segnale vocale descritto precedentemente.
Altre classificazioni più sofisticate sono state proposte in letteratura, come quella proposta da Gersho in [Pas84] in cui il segnale è suddiviso in quattro classi principali: noise, voiced, unvoiced e onset. Onset è considerato il primo frame voiced che segue un frame unvoiced. Inoltre i frame voiced sono ulteriormente sottoclassificati in full-band e low-pass in considerazione del contenuto energetico alle diverse frequenze. Questa classificazione è stata integrata con successo in uno schema di codifica basato sulla tecnica CELP. Una classificazione ancora più diversificata è quella proposta in [Bat95] in cui il segnale vocale attivo è suddiviso nelle seguenti 5 classi: Noise, Onset, Steady-state, Decay, Periodic e Aperiodic.
Infine è interessante osservare come l’approccio di codifica basato su una classificazione possa essere esteso al caso limite in cui un sistema di comunicazione vocale è costituito da un classificatore in grado di riconoscere porzioni elementari del segnale vocale, come i fonemi o i difoni, (riconoscitore fonetico) e da un sintetizzatore che operi su una base di difoni opportuna (vedi fig. 6.30 [Car94]). In questo caso l’informazione da trasmettere è costituita dalla prosodia e dall'informazione dei difoni impiegati e si può stimare attorno ai 300 bit/s. [p. 250 Fig. 6.30 - Schema di codifica realizzato con un riconoscitore ed un sintetizzatore.
Un elemento comune ai vari classificatori presentati precedentemente è costituito dall'algoritmo di discernimento tra voce attiva e inattiva. Tale classificazione, che in linea di principio potrebbe sembrare relativamente semplice, risulta invece complessa quando si considerano condizioni di funzionamento più critiche. In particolare, la classificazione risulta delicata qualora l’indicazione debba essere fornita per lunghezze di frame molto corte (10 o 5 ms). In questi casi infatti, le pause di silenzio tipiche di alcuni fonemi (quali le plosive) possono essere interpretate come porzioni di silenzio. Un altro elemento che rende l’operazione difficile è la presenza di rumore ambientale che oltre ad alterare il livello del segnale vocale, determina anche una variazione delle caratteristiche spettrali del segnale in questione.
Un algoritmo che ha avuto particolare successo è quello impiegato nel sistema DTX del GSM che è stato standardizzato sia per il canale Full-rate [ETSI6.32] che per il canale Half-rate.
Lo schema a blocchi completo dell’algoritmo è riportato in figura 6.31. Le caratteristiche principali di questo schema sono quelle di un sistema progettato “fail-safe” e cioè polarizzato nei casi dubbi a fornire una indicazione di voce attiva piuttosto che silenzio. Inoltre, dovendo essere abbinato allo schema full-rate GSM, l’algoritmo utilizza i parametri calcolati nello schema RPE-LTP, al fine di minimizzare l’aumento di complessità dovuto al sistema DTX. [p. 251 Fig. 6.31 - Schema a blocchi dell’algoritmo di VAD.
La decisione tra voce attiva e rumore di sottofondo è determinata confrontando l’energia del segnale di ingresso, opportunamente filtrato, con il valore di una soglia adattativa. Il VAD decide per voce quando l’energia è superiore a questa soglia.
Il segnale di ingresso è filtrato con un filtro di analisi di ordine 8 (lo stesso ordine impiegato nel codec RPE-LTP) i cui coefficienti sono calcolati a partire dai coefficienti di autocorrelazione del segnale di ingresso mediati su quattro frame consecutivi. Tale operazione di media consente di effettuare un filtraggio teso a ridurre il contenuto di rumore sovrapposto alla voce. Il risultato è quello di una discriminazione voce/rumore più affidabile. Al fine di ridurre al minimo l’aumento di complessità, l’operazione di filtraggio e determinazione dell’energia pvad sono effettuate con la relazione:
| $W(z)=pvad=rvad*acf(0)+2*\sum _{i=1)}^{8}[rvad(i)*acf(i)]$ | (6.37) |
in cui rvad(i) sono i coefficienti autocorrelazione dei coefficienti a(i) calcolati dall'algoritmo di VAD, mentre i valori acf(i) sono le funzioni di autocorrelazione del segnale di ingresso che sono già calcolate dall'algoritmo RPE-LTP. [p. 252 L’operazione di adattamento della soglia di confronto è piuttosto elaborata ed è rappresentata dal diagramma di flusso riportato in figura 6.32.
Senza entrare in dettagli, tale operazione consiste nel modificare il valore della soglia per i tratti che si suppone siano relativi a voce non attiva. Tale evento è stimato dalle seguenti condizioni:
oppure:
Nel primo caso i coefficienti del filtro adattativo non vengono aggiornati mentre nel secondo si. La stazionarietà del segnale è stimata calcolando il rapporto LHR (Likelihood Ratio) [Gra76] tra i coefficienti del filtro corrente e quello mediato sulle ultime quattro trame. Quando la distorsione spettrale LHR è inferiore ad una soglia fissa, il segnale è considerato stazionario. La determinazione della presenza di una componente periodica è agevolato dalla presenza dei valori del pitch calcolati nell'algoritmo RPE-LTP ogni 5 ms. La stima è effettuata considerando le relazioni tra i quattro valori relativi ad un frame da 20 ms.
La stima della presenza di toni di informazione è effettuata valutando il guadagno di predizione (rapporto tra l’energia del segnale e l’energia del segnale residuo). Quando il guadagno di predizione è inferiore ad una certa soglia (13.5 dB), si suppone non siano presenti toni. Tuttavia, in considerazione del fatto che il rumore veicolare può anche avere picchi di risonanza tali da consentire un forte guadagno di predizione, qualora il guadagno sia maggiore, si verifica anche che la frequenza del primo polo sia maggiore di 385 Hz, non esistendo toni di segnalazione a frequenza inferiore.
L’adattamento della soglia consiste nell'incremento o decremento di una quota percentuale secondo le relazioni riportate nel diagramma di flusso di figura 6.32.
Infine, onde evitare che le pause intersillabiche siano esclude dai periodi di attività, oppure che code di segnale vengano tagliate, la decisione di voce attiva viene mantenuta per un periodo pari a 5 trame (100 ras). Tale periodo prende il nome di hangover e viene aggiunto solo nei casi in cui il VAD abbia rivelato voce attiva per almeno 3 trame consecutive. Questo accorgimento [p. 253 Fig. 6.32 - Diagramma di flusso dell'operazione di adattamento della soglia. [p. 254 consente di evitare che disturbi occasionali presenti in tratti di silenzio prolunghino il periodo di attività rivelato erroneamente.
Fig. 6.33 - Schema a blocchi di un codificatore CELP a velocità variabile.
Una particolare implementazione di codifica a velocità variabile è quella che impiega il codificatore CELP come algoritmo di codifica a diverse velocità di trasmissione. Se si fa riferimento alla classificazione semplice riportata in figura 6.29, si nota come l’algoritmo CELP si presti agevolmente ad essere impiegato. Infatti si può osservare come nel caso di segnale non vocalizzato, il contributo relativo alla correlazione a lungo termine possa essere eliminato con conseguente riduzione della velocità di trasmissione. Inoltre, strutturando opportunamente il contributo del codebook fisso come somma di più contributi in parallelo, si può concepire l’architettura di figura 6.33 [Cel94] in cui il secondo contributo di innovation è inserito solo in quei tratti in cui la qualità ottenuta con il singolo contributo non è sufficiente. [p. 255 In questa particolare realizzazione, il codificatore CELP multi-rate è in grado di operare a 8 velocità differenti comprese tra un minimo di 400 bit/s ed un massimo di 16 kbit/s. Uno degli otto modi di funzionamento è inoltre impiegato per segnalare che nessun parametro è trasmesso, consentendo di annullare la velocità di trasmissione. Le velocità relative ad ogni modo di funzionamento ed i parametri trasmessi sono riassunti in tabella 6.5.
| | MODO | MODO | MODO | MODO | MODO | MODO | MODO | MODO |
| Parametri | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| Guadagno | | + | + | | | | | |
| Parametri ST | | | + | + | + | + | + | + |
| Parametri LT | | | | | | + | + | + |
| Innovation A | | | | + | + | | + | + |
| Innovation B | | | | | + | | | + |
| Velocità in kbit/s | 0 | 0.4 | 3.2 | 8.5 | 12.5 | 7.2 | 12 | 16 |
Tab. 6.5 - Parametri trasmessi e velocità per i diversi modi di funzionamento.
Dalla tabella si nota che i primi tre modi non prevedono la trasmissione di parametri di eccitazione essendo infatti dedicati alla rappresentazione del rumore: in particolare il modo 2 per l’aggiornamento del livello, mentre il modo 3 anche per l’aggiornamento delle caratteristiche spettrali. I modi 4 e 5 sono invece impiegati per rappresentare i tratti non vocalizzati, in quanto i parametri del predittore a lungo termine non sono trasmessi. Infine gli ultimi tre modi sono impiegati per i tratti vocalizzati. La presenza di uno solo o due contributi di eccitazione è determinata dall'algoritmo CLC (vedi fig. 6.28) valutando le prestazioni ottenibili.
A titolo esemplificativo, la figura 6.34 riporta un tratto di forma d’onda relativo ad una conversazione e le relative velocità di trasmissione associate, ottenute con lo schema ora descritto. Risulta evidente da questo esempio che la velocità di trasmissione varia in modo considerevole da trama a trama.
La distribuzione statistica della velocità di trasmissione dipende ovviamente dal segnale vocale di ingresso ed in buona misura dal fattore di attività, oltre che dalle condizioni di rumore ambientale. La figura 6.35 riporta l’istogramma degli 8 modi di funzionamento per un insieme di quattro conversazioni e per una durata complessiva di diversi minuti. In particolare la [p. 256 Fig. 6.34 - Andamento della velocità di trasmissione per un tratto di segnale vocale.
figura 6.35a si riferisce ad ambiente di ufficio e quindi con livello basso di rumore, mentre la figura 6.35b è relativa a conversazioni registrate in automobile e quindi con rumore ambientale più alto. È interessante osservare che nel passare da voce clean a voce con rumore, l’effetto è quello di aumentare la percentuale di modi di funzionamento a più alta velocità, sia per i tratti unvoiced che per i tratti voiced. Questo significa aggiungere il secondo contributo di innovation più frequentemente. Viceversa la percentuale di tempo classificato come voce inattiva rimane circa invariata. L’effetto è quello di aumentare la velocità di trasmissione media che passa da circa 6 kbit/s a 7.6 kbit/s. Parimenti, la qualità del segnale riprodotto è mantenuta. La tecnica realizza quindi quanto desiderato, nell'ottica della trasmissione a velocità variabile, e cioè aumenta la velocità per segnali complessi, mantenendo costante la qualità. [p. 257 Fig. 6.35 - Percentuale di modi di trasmissione nella codifica a velocità variabile, a) ambiente di ufficio - b) ambiente automobile.
Nel paragrafo precedente si è parlato del concetto di codifica a velocità variabile come diretta conseguenza delle caratteristiche intrinseche della sorgente. Considerando un sistema di comunicazione completo, tuttavia si possono identificare altri parametri di ingresso che possono determinare l’esigenza di modificare la velocità di trasmissione.
In generale si può immaginare un sistema di trasmissione che comprenda diverse sorgenti di informazioni, non necessariamente solo segnale vocale ma anche segnalazione o segnale video o altri [Ber93], sovrapposte sullo stesso canale di trasmissione (fig. 6.36).
Tale sistema comprende un blocco VRCU (Variable Rate Control Unit) che, in considerazione delle diverse informazioni raccolte, frame per frame, determina la velocità di trasmissione ottima per la specifica sorgente e la quantità di protezione necessaria.
I parametri di ingresso a tale blocco sono i seguenti:
* Sorgente: comprende l’informazione sulla velocità di trasmissione ottima per il frame in questione. È funzione del segnale di ingresso.
* Utente: determina la qualità di comunicazione in considerazione delle esigenze dell’utente (ad esempio banda stretta o banda larga). È un’informazione che tipicamente varia con meno frequenza, potrebbe essere aggiornata per ogni conversazione. [p. 258
* Canale: determina la quantità di ridondanza necessaria a proteggere l’informazione in considerazione delle condizioni di canale. È un parametro che cambia frequentemente nel tempo soprattutto nel caso di canali radio.
* Sistema: comprende le informazioni sul traffico. Nel caso di comunicazioni cellulari tale informazione è variabile nel tempo e dipende dalla posizione del terminale mobile come pure dal traffico in una cella.
Un sistema di codifica che consenta la flessibilità di modificare la velocità di trasmissione non solo in considerazione delle caratteristiche del segnale di ingresso, ma anche in considerazione di parametri esterni, deve avere opportune caratteristiche. In particolare, se si vuole modificare la velocità lungo la catena trasmissiva, il sistema di codifica deve consentire la decodifica del segnale anche quando parte dell’informazione trasmessa non arriva a destinazione (codifica embended).
Fig. 6.36 - Sistema di trasmissione con controllo della velocità.
Nei casi in cui sia importante che la riduzione di velocità di trasmissione sia realizzata in un punto generico della catena trasmissiva, allora il sistema di codifica deve essere un sistema “embedded”. Un codificatore embedded infatti [p. 259 è in grado di produrre un flusso di bit che contiene annidato (embedded) un flusso a velocità inferiore tale da poter essere impiegato al ricevitore per effettuare la sintesi del segnale, seppur con qualità inferiore.
Un esempio di tecnica di codifica embedded è costituito dallo standard ITU-T G.727 [ITU-T G.727] che impiega la tecnica ADPCM con velocità 16,24,32 e 40 kbit/s. In questo caso il segnale errore di predizione è quantizzato con 5 bit/campione, ma solo 2 sono utilizzati localmente al trasmettitore per generare il segnale predetto ed il segnale ricostruito che è usato per calcolare i coefficienti del predittore. Tale accorgimento riduce le prestazioni ottenibili alla velocità massima (in quanto la stima dei parametri impiegati è fatta con un’informazione minore), ma parimenti consente di avere una degradazione della qualità graduale e non drammatica nel ridurre la velocità di trasmissione.
Lo stesso principio è stato applicato in [Dro91] ad uno schema di codifica di tipo CELP in cui i contributi aggiuntivi alla velocità di trasmissione sono costituiti da rami di eccitazione aggiuntivi in parallelo.
Analogamente in [Cel96] si propone uno schema embedded per codifica di segnali audio in cui la velocità di trasmissione è variabile a passi di 2 kbit/s da un minimo di 6 kbit/s ad un massimo di 64 kbit/s. La variazione di velocità di trasmissione è accompagnata da un aumento della banda di segnale audio trasmesso che raggiunge i 20 kHz a 64 kbit/s. L’elemento principale di questa architettura è costituito dalla BMU (Bit Manipulation Unit), la quale consente di operare sul flusso di bit trasmessi in modo tale da ridurre la velocità di trasmissione in considerazione delle esigenze esterne (fig. 6.37).
La struttura del codificatore è tale che il segnale audio in ingresso è codificato da un algoritmo core alla velocità base di 6 kbit/s mentre l’errore di quantizzazione (nel dominio del tempo o della frequenza a seconda dell’algoritmo core usato) viene codificato da stadi di enhancement i quali producono pacchetti di informazione da 2 kbit/s. La velocità complessiva è di 64 kbit/s ed i pacchetti sono organizzati come illustrato in figura 6.37b. La BMU è quindi in grado di ridurre la velocità di trasmissione a passi di 2 kbit/s, tralasciando i pacchetti secondo un ordine di importanza percettiva. In particolare questo comporta che al diminuire della velocità di trasmissione, anche la banda del segnale audio riprodotto diminuisce. [p. 260 Fig. 6.37 - a) Schema di comunicazione con BMU e b) organizzazione dei pacchetti trasmessi.
La tecnica di codifica PWI (Prototype Waveform Interpolation) si presta particolarmente ad essere impiegata per tratti di segnale vocale molto stazionario e cioè tipicamente per tratti di segnale fortemente vocalizzato. Non si presta invece ad essere usata per i tratti non vocalizzati dove non esiste un prototipo di forma d’onda di riferimento. La tecnica è stata impiegata quindi in codificatori multi modo che impiegano tecniche diverse per tratti di segnale diversi ed in particolare per codificatori a velocità variabile.
L’algoritmo PWI genera il segnale di eccitazione del filtro di sintesi LPC interpolando forme d’onda “prototipi” di lunghezza pari al periodo del pitch. Lo strumento base impiegato è costituito spesso dalla DFT pitch sincrona.
È stato più volte ricordato che il segnale residuo di predizione relativo ai tratti vocalizzati presenta una struttura quasi periodica con periodo pari al pitch. È quindi possibile suddividere un determinato frame di segnale vocalizzato in una sequenza di Nr segmenti di lunghezza P, con P periodo del pitch, come indicato in figura 6.38.
È evidente che in generale un frame non conterrà un numero intero di segmenti e pertanto si considerano anche campioni del frame precedente. Con questa operazione si producono Nr vettori di lunghezza P che possono essere [p. 261 Fig. 6.38 - Suddivisione di un frame in sottosegmenti di lunghezza pari al pitch.
ordinati in una matrice R nella quale ogni colonna contiene i campioni di segnale residuo relativo ad un periodo del pitch.
| $R={\begin{bmatrix}r(0,0)&r(0,1)&\cdots &r(0,N_{r}-1)\\r(1,0)&r(1,1)&\cdots &r(l,N_{r}-1)\\\cdots &\cdots &\cdots &\cdots \\r(P-1,0)&r(P-1,1)&\cdots &r(P-1,N_{r}-1)\end{bmatrix}}$ | (6.38) |
Il numero di colonne dipende dal valore del pitch e dalla lunghezza del frame che, qualora il ritardo di trasmissione non sia un vincolo forte, può anche essere molto lunga, in quanto la tecnica è impiegata per tratti molto stazionari, tratti in cui anche i parametri spettrali cambiano poco.
Diverse soluzioni sono state proposte in letteratura su come ricostruire l'informazione a partire da questa matrice [Kle91, Sho93, Tan94, Fes95], Kleijn [Kle91] propone di quantizzare e trasmettere un prototipo di forma d’onda e generare il segnale mancante con tecniche di interpolazione lineare. La soluzione proposta da Shoham [Sho93] con il nome di TFI (Time-Frequency Interpolation) prevede di trasformare con DFT la prima colonna, eventualmente effettuare una sagomatura spettrale, quantizzare e trasmettere i moduli. Il segnale al ricevitore è ricostruito utilizzando una antitrasformata DFT modificata, in cui la fase è ottenuta per interpolazione lineare assumendo lineare la traiettoria di variazione del pitch. La soluzione proposta da Tanaka [Tan94] considera una DFT bidimensionale ottenuta [p. 262 applicando prima una DFT alle colonne della matrice R e poi una DFT alle righe ottenendo la matrice R2. In tale matrice, ogni riga ha il significato di andamento in frequenza di ogni componente di frequenza del periodo di pitch.
| $R_{2}={\begin{bmatrix}r_{2}(0,0)&r_{2}(0,1)&\cdots &r_{2}(0,N_{r}-1)\\r_{2}(1,0)&r_{2}(1,1)&\cdots &r_{2}(l,N_{r}-1)\\\cdots &\cdots &\cdots &\cdots \\r_{2}(P-1,0)&r_{2}(P-1,1)&\cdots &r_{2}(P-1,N_{r}-1)\end{bmatrix}}$ | (6.39) |
Considerando che le fluttuazioni del pitch ad alta frequenza non possono essere conservate con il metodo di interpolazione tipico della PWI, tali fluttuazioni sono annullate ponendo a zero le colonne centrali della matrice R2. La matrice così ottenuta viene poi antitrasformata per righe e la prima colonna costituisce il prototipo che deve essere trasmesso. Tale prototipo è codificato e trasmesso ad una velocità di trasmissione di circa 2 kbit/s. In [Fes95] infine, il vettore prototipo nel dominio della frequenza è quantizzato sfruttando le proprietà delle bande critiche e la caratteristica di quasi linearità della fase.