Codifica numerica del segnale audio/Capitolo 4
Questo testo è completo. |
◄ | Capitolo 3 | Capitolo 5 | ► |
4
CODIFICA NUMERICA
Per una codifica numerica tramite quantizzazione uniforme, fissati la frequenza di campionamento fc (in funzione della banda del segnale), gli estremi di saturazione V (nota la distribuzione di probabilità delle ampiezze) ed il numero dei livelli (in funzione della dinamica desiderata) del quantizzatore, rimangono fissati il numero dei campioni al secondo generati dalla sorgente ed il numero di bit per campione R con cui essi vengono codificati. Di conseguenza è fissata la velocità fN del flusso numerico prodotto dalla sorgente stessa (fN = fc x R). Ad esempio, nel caso del segnale telefonico, trasmissibile analogicamente con una banda di 4 kHz, usando una frequenza di campionamento di 8 kHz ed una quantizzazione su 12 bit, viene generato un flusso di 8 * 12 = 96 kbit/s: per la trasmissione di questo flusso può essere richiesta una banda superiore ai 40 kHz.
Considerando un segnale audio con banda di 15 kHz quantizzato su 16 bit ed campionato a 32 kHz (es.: DAB), flusso che viene generato è di 512 kbit/s. Nel caso di segnale audio con banda di 20 kHz quantizzato su 16 bit, se si utilizza un campionamento a 44.1 kHz (es.: CD) il flusso generato è di 705 kbit/s, mentre con un campionamento a 48 kHz (es.: DAT) si ha un flusso di 768 kbit/s. Non considerando l’incremento dovuto all'aggiunta di codici per la correzione degli errori di trasmissione, tale flusso si raddoppia nel caso di segnali stereofonici, per cui la velocità di riferimento per un segnale audio digitale a larga banda è di 1.5 Mbit/s. Fig. 4.1 - Riduzione dei livelli del quantizzatore con quantizzazione non uniforme.
È evidente che, trascurando altri aspetti (robustezza agli errori di trasmissione, semplificazione degli apparati, predisposizione all'elaborazione numerica, ecc.), sarebbe auspicabile adottare qualche forma di compressione. Volendo ridurre tale flusso, nelle codifiche di forma d’onda non è possibile ridurre il numero di campioni al secondo (riducendo la frequenza di campionamento tramite decimazione del segnale), per la riduzione della banda utile del segnale che ne conseguirebbe. È necessario, quindi, ridurre il numero di bit per campione riducendo i livelli del quantizzatore.
La riduzione dei livelli del quantizzatore può avvenire o riducendo gli estremi di saturazione del quantizzatore (come descritto a proposito della codifica di forma d’onda con memoria) o adottando, dove possibile, quanti di ampiezza maggiore (quantizzazione non uniforme) (fig. 4.1). Ciò può avvenire secondo due criteri: il primo (quantizzazione ottima) dirada i quanti in corrispondenza dei livelli meno probabili del segnale, in modo che l’errore medio globale ne risenta marginalmente; il secondo (quantizzazione logaritmica) utilizza quanti di ampiezza inferiore per i livelli più bassi del segnale e viceversa per i livelli più alti, tentando di rendere costante il rapporto segnale rumore.
Fissata la soglia di saturazione V, per massimizzare l’efficienza della codifica, nel senso della minimizzazione globale dell’errore di quantizzazione, è necessario determinare opportunamente la caratteristica del quantizzatore f(x) in funzione della distribuzione delle ampiezze del segnale p(x). A tal fine, è necessario determinare la caratteristica che minimizzi il funzionale dell’errore
(4.1) |
Tale caratteristica deve essere trovata nella famiglia di curve f(x) + ε μ(x), ottenute tramite una variazione della f(x) ottima, nel caso di estremi vincolati f(0) = 0; f(V) = V (cioè μ(0) = μ(V) = 0) (fig. 4.2). Per la ricerca del minimo, si calcola l’incremento del funzionale a seguito della variazione della f(x), che, nel caso più generale di F = F[x, f(x), f'(x ], è dato da
(4.2) |
È conveniente approssimare tale incremento tramite un suo sviluppo in serie di Taylor. A questo proposito si consideri che l'incremento (εμ per la f(x) e εμ' per la f’(x)) non interessa la x, per cui la derivata parziale della F relativa alla x si annulla. Lo sviluppo porta alla seguente espressione
(4.3) |
Separando i due termini dell’integrale ed integrando per parti il secondo termine, si ottiene
(4.4) |
Dato che μ(V) = μ(0) = 0, il termine centrale dell’espressione è nullo, per cui
(4.5) |
Nel minimo del funzionale J, l’incremento ΔJ deve annullarsi per ε che tende a zero [Gel63]. Nella nostra espressione è necessario, quindi, che si annulli l’argomento dell’integrale per qualsiasi funzione p(x) e cioè che si annulli il termine tra parentesi quadre. L’espressione che si ricava è l’equazione di Eulero
(4.6) |
Nel nostro caso la F non dipende esplicitamente dalla f(x), per cui l’equazione si semplifica in
(4.7) |
Procedendo al calcolo delle derivate, si ottiene
(4.8) |
Imponendo che si annulli tale derivata si ricava
(4.9) |
e separando le variabili si ottiene infine
(4.10) |
Si riconosce che entrambi i membri dell’equazione sono le derivate dei logaritmi dei denominatori, per cui questa equazione può essere integrata come
(4.11) |
(4.12) |
Imponendo le condizioni a contorno f(0) = 0 e f(V) = V, si trova, infine
(4.13) |
Questa è l’espressione cercata della caratteristica che minimizza l’errore globale di quantizzazione (fig. 4.3) e la quantizzazione ottenuta secondo tale caratteristica non lineare viene definita ottima. Studiandone l’andamento per un fissato valore a dell’esponente (ad esempio per il valore efficace corrispondente ad una potenza media di - 23 dBmO [Bon91]), si osserva che essa è tale da assegnare quanti di ampiezza minore per i livelli inferiori del segnale e viceversa per i livelli superiori. Dato che il contributo maggiore all'errore globale deriva dai livelli inferiori, che sono i più probabili, in tal modo è possibile ridurre globalmente la potenza del rumore rispetto alla quantizzazione uniforme. Inoltre, alla minimizzazione dell’errore globale, si affianca in questo caso un andamento del rapporto segnale rumore vantaggioso per i livelli più bassi. Questo, però, non risulta vero in generale. Infatti, per un segnale sinusoidale, dove i livelli più probabili del segnale sono quelli maggiori, la quantizzazione ottima addenserà i quanti per tali valori delle ampiezze. Rispetto ad una quantizzazione uniforme, il rapporto segnale rumore, quindi, risulterà ulteriormente peggiorato per i livelli più bassi.
Fissata la caratteristica, si può ricavare la potenza del rumore per un segnale con un qualsiasi valore efficace. Sostituendo la f(x) nell'espressione generale della componente granulare, si ottiene
(4.14) |
Tale quantizzazione non uniforme può essere anche interpretata come una quantizzazione uniforme eseguita su una versione compressa del segnale. Le componenti che subiscono l’effetto di saturazione introdotto dalla caratteristica, cioè quelle che contribuiscono ad accrescere la potenza del rumore, sono quelle ad ampiezza maggiore. D contributo principale all'errore deriva, quindi, dalle “code” della distribuzione di probabilità. Se si confronta l’errore con quello ottenuto nel caso di quantizzazione uniforme al variare del valore efficace del segnale, si osserva un notevole guadagno se il valore efficace del segnale coincide con quello adottando per il calcolo della caratteristica. Utilizzando segnali con un valore efficace superiore a quello utilizzato per la il calcolo della caratteristica ottima, però, il rapporto S/N peggiora sensibilmente e tale effetto è particolarmente sentito nel caso di distribuzione esponenziale, la cui densità decresce con e-x. Passando ad una distribuzione gaussiana, infatti, la cui densità decresce con e-x2, si ha un errore pari a
(4.15) |
ed il peggioramento del rapporto S/N si osserva per valori efficaci del segnale più elevati rispetto al caso dell’esponenziale (fig. 4.4).
Anche nella quantizzazione non uniforme è possibile minimizzare l’errore globale ottimizzando contemporaneamente la componente granulare e di sovraccarico. I livelli di quantizzazione, ottenuti numericamente, nel caso di segnali con distribuzione gaussiana sono riportati in tabella 4.1 dove vengono indicati i livelli di decisione x ed il livelli di restituzione y per quantizzatori caratterizzati da differenti valori del numero di bit R [Jay84].
R | Livelli | |||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |||||||||
x | y | x | y | x | y | x | y | x | y | x | y | x | y | x | y | |
1 | 0 | .798 | ||||||||||||||
2 | 0 | .453 | .982 | 1.51 | ||||||||||||
3 | 0 | .245 | .501 | .756 | 1.05 | 1.34 | 1.75 | 2.15 | ||||||||
4 | 0 | .128 | .258 | .388 | .522 | .657 | .800 | .942 | 1.10 | 1.26 | 1.44 | 1.61 | 1.85 | 2.07 | 2.40 | 2.73 |
Tab. 4.1 - Livelli per quantizzazione ottima non uniforme.
Fig. 4.4 - Rapporto S/N per quantizzazione ottima ed uniforme.
Risolto il problema di determinare la caratteristica che minimizza globalmente l'errore di quantizzazione, si vuole ora determinare la caratteristica in grado di rendere sufficientemente costante il rapporto segnale rumore di quantizzazione, al variare dall'ampiezza dei campioni. Con tale criterio, oltre ad ottimizzare il rapporto S/N, non viene richiesta nessuna conoscenza sulla distribuzione delle ampiezze del segnale.
Per ottenere la f(x), è necessario, innanzitutto calcolare l’errore quadratico medio all'interno del generico quanto i-esimo, ottenibile dall'espressione generale dell’errore di quantizzazione ponendo x = xi
(4.16) |
Passando al rapporto segnale-rumore, è necessario imporre che il rapporto tra tale valore e la potenza del segnale s2 = xi2 sia costante, cioè
(4.17) |
Integrando per separazione di variabili, si ottiene
(4.18) |
Il legame tra ingresso ed uscita è, quindi, dato da una legge logaritmica ed il codificatore relativo è indicato come LogPCM. Dato che l’uso di tale caratteristica può essere interpretato in trasmissione come una compressione del segnale ed in ricezione come una sua espansione, la trasformazione del segnale tramite quantizzazione logaritmica è normalmente detta companding (compression-expanding).
Una legge puramente logaritmica non è praticamente realizzabile, dato che questa richiederebbe l’utilizzo di un numero infinito di intervalli per ampiezze prossime allo zero. Esistono due principali approssimazioni di tale logaritmica [CCITT G.711]. Una prima legge (legge m), diffusa nel mercato nordamericano e giapponese, si ottiene imponendo che la caratteristica logaritmica passi per l’origine, tramite una traslazione degli assi. Indicando con x la tensione d’ingresso normalizzata rispetto a quella di saturazione V, il legame tra ingresso ed uscita è dato da
(4.19) |
dove μ = 255, V = 3.17 dBmO ed il un numero di bit utilizzati è pari a 7. Una seconda legge (legge A), diffusa nel mercato europeo, approssima la parte della caratteristica relativa ai livelli inferiori tramite una legge di quantizzazione lineare. In tal caso
(4.20) |
con A = 87.6, V = 3.14 dBm0 ed il un numero di bit utilizzati è pari ad 8.
Analizzando l’andamento del rapporto segnale rumore con tali leggi logaritmiche, è necessario introdurre l’espressione della caratteristica nell'espressione dell’errore granulare
(4.21) |
Il calcolo delle derivate delle leggi p ed A porta, rispettivamente, ai seguenti risultati
(4.22) |
Considerando segnali con distribuzione delle ampiezze esponenziale, l'errore è, quindi, pari a
(4.23) |
(4.24) |
Fig. 4.5 - Rapporto segnale/rumore di quantizzazione per differenti caratteristiche.
Il rapporto segnale rumore ottenibile con tale codifica è mostrato in figura 4.5. Si nota, innanzitutto, un innalzamento della curva relativa alla quantizzazione logaritmica rispetto ad una quantizzazione lineare a parità di numero di bit. Inoltre, tale rapporto migliora linearmente con l’aumento dell’ampiezza del segnale fino a che il livello stesso rimane nell'intorno dello zero, dopo di che la curva si appiattisce a seguito dell’incremento del passo di quantizzazione. Raggiunto poi il livello di saturazione, il rapporto segnale rumore inizia a decrescere. È opportuno chiarire che l’innalzamento della curva della componente granulare che si osserva in figura dopo la fase a rapporto segnale/rumore costante è dovuto al fatto che ormai la quasi totalità della potenza del rumore di quantizzazione è dato dalla componente di saturazione.
Considerando la quantizzazione non uniforme specificata dalla legge A, l'implementazione si basa su una conversione A/D con quantizzazione uniforme su 13 bit ed una successiva compressione numerica su 8 bit. La compressione utilizza un’approssimazione della legge logaritmica ottenuta tramite una spezzata (fig. 4.6). Questa viene fissata suddividendo la dinamica del segnale innanzitutto in due polarità (rappresentata dal bit più significativo del codice compresso). Per ciascuna polarità vengono individuati 8 segmenti, codificati con i tre bit immediatamente meno significativi. Il codice del segmento è ottenibile sottraendo a 7 il numero di zeri iniziali del campione. A ciascun segmento è associato un passo di quantizzazione che raddoppia progressivamente di ampiezza nel passaggio da un segmento all'altro, ad esclusione dei primi due segmenti, come mostrato nella tabella 4.2.
Ingresso | Passo | Codifica | Decodifica | Ampiezza |
0-15 | 1 | 000 | 0-15 | 0.5 -15.5 |
16-31 | 1 | 001 | 16-31 | 16.5-31.5 |
32-63 | 2 | 010 | 32-47 | 33-63 |
64-127 | 4 | 011 | 48-63 | 66 -126 |
128 - 255 | 8 | 100 | 64-79 | 132-252 |
256-511 | 16 | 101 | 80-95 | 264 - 504 |
512-1023 | 32 | 110 | 96-111 | 528- 1008 |
1024 - 2047 | 64 | 111 | 112-127 | 1056-2016 |
Tab. 4.2 - Passi dì quantizzazione per LogPCM.
All'interno di ciascun segmento la codifica è lineare su 16 livelli ed è espressa negli ultimi quattro bit del codice compresso. Per quanto riguarda i primi due segmenti, dato che il quanto ad essi associato è delle stesse dimensioni di quello del quantizzatore uniforme, i 4 bit di codifica si ottengono dai 5 bit meno significativi della codifica lineare, escludendo il LSB. Agli altri segmenti è poi associato un quanto crescente con potenze di 2 man mano che ci si sposta verso valori crescenti dell’ampiezza. Ciò vuol dire che la codifica Fig. 4.1 - Riduzione dei livelli del quantizzatore con quantizzazione non uniforme.
Fig. 4.6 - Approssimazione a tratti della caratteristica non lineare.
all'interno di un segmento è ottenibile utilizzando una finestra di 4 bit nella codifica lineare, in posizioni sempre più spostate verso il bit più significativo all'aumentare del numero di segmento considerato (fig. 4.7), come mostrato in tabella 4.3.
Ingresso lineare | Uscita compressa | ||||||||||||||||||
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | Q3 | Q2 | Q1 | Q0 | X | 0 | 0 | 0 | Q3 | Q2 | Q1 | Q0 | |
0 | 0 | 0 | 0 | 0 | 0 | 1 | Q3 | Q2 | Q1 | Q0 | X | 0 | 0 | 1 | Q3 | Q2 | Q1 | Q0 | |
0 | 0 | 0 | 0 | 0 | 1 | Q3 | Q2 | Q1 | Q0 | X | X | 0 | 1 | 0 | Q3 | Q2 | Q1 | Q0 | |
0 | 0 | 0 | 0 | 1 | Q3 | Q2 | Q1 | Q0 | X | X | X | 0 | 1 | 1 | Q3 | Q2 | Q1 | Q0 | |
0 | 0 | 0 | 1 | Q3 | Q2 | Q1 | Q0 | X | X | X | X | 1 | 0 | 0 | Q3 | Q2 | Q1 | Q0 | |
0 | 0 | 1 | Q3 | Q2 | Q1 | Q0 | X | X | X | X | X | 1 | 0 | 1 | Q3 | Q2 | Q1 | Q0 | |
0 | 1 | Q3 | Q2 | Q1 | Q0 | X | X | X | X | X | X | 1 | 1 | 0 | Q3 | Q2 | Q1 | Q0 | |
1 | Q3 | Q2 | Q1 | Q0 | X | X | X | X | X | X | X | 1 | 1 | 1 | Q3 | Q2 | Q1 | Q0 |
Tab. 4.3 - Legame tra codifica PCM e LogPCM.
Fig. 4.7 - Perdita di bit meno significativi all'aumentare dell’ampiezza del quanto.
La procedura precedentemente esposta può essere interpretata come la trasformazione di un numero intero a 12 bit in una rappresentazione floating-point, nella quale la mantissa è su 5 bit (quantizzazione più segno), mentre l’esponente è su 3 bit (segmento). In codifica, quindi, si utilizzano solamente i 12 MSB della codifica lineare. Il LSB è utilizzato in decodifica (ponendolo pari ad 1) per posizionare il livello di restituzione a metà del quanto. Tale azione è necessaria per ridurre l’influenza del rumore per segnali prossimi allo zero.
In figura 4.8 si riportano le maschere del rapporto segnale/rumore per segnali di prova sinusoidali e con distribuzione gaussiana [1TU-T G.712]. Nel caso di segnale sinusoidale e quindi di ampiezza deterministica, si nota che l’ingresso nella zona lineare e di saturazione è più marcato di quanto avvenga con il segnale a statistica gaussiana.
Data una frequenza di campionamento di 8 kHz, sfruttando codifica LogPCM è possibile esprimere ciascun campione su 8 bit invece dei 12 della quantizzazione uniforme, producendo un flusso numerico di 64 kb/s, contro i 96 kb/s originali. Fig. 4.8 - Maschera del rapporto segnale-rumore per quantizzazione logatitmica.