4.3 Quantizzazione e codifica binaria
Al di là degli aspetti tecnologici, dal punto di vista dei segnali il processo di quantizzazione e conversione
d/a va studiato in relazione all’effetto che la scelta del numero
M di bit/campione produce sulla
qualità del segnale ricostruito. Maggiore è
M, e più elevata risulta la velocità binaria
fb = fc ⋅ M bit/sec, a cui corrisponde un maggior impegno di risorse trasmissive o di memoria. Ma riducendo il valore di
M aumenta l’entità dell’errore di quantizzazione
εq = x − xq, di cui aumenta la potenza, e dunque peggiora il
rapporto segnale rumore, come ora andiamo a studiare. Notiamo inoltre che essendo la quantizzazione un processo
non lineare (§
8.3) la densità spettrale di
εq presenta anche frequenze
assenti nel segnale originario, rendendo
bianco il processo di errore (§
7.2.4).
Ai fini della discussione che segue separiamo la funzione svolta da un dispositivo come il quantizzatore a rampa di fig.
4.16 nei due blocchi concettuali disegnati a fianco, in cui i valori dei campioni prima vengono
quantizzati dal dispositivo
xq = Q(x), e successivamente espressi (o
codificati) mediante una sequenza di
M bit
d = c(xq). Il tipo di codifica
c(xq) realizzato dal quantizzatore a rampa prende il nome di...
4.3.1 Quantizzazione uniforme
In questo caso l’intervallo dei valori che l’ingresso
x può assumere, indicato come
dinamica Δx = xmax − xmin, viene suddiviso in
L = 2M intervalli
Ik di eguale ampiezza
Δq = ΔxL, separati da
L − 1 soglie di decisione, come riportato in figura per
M = 3 bit.
Dato che L è pari, la curva di quantizzazione xq = Q(x) che associa il valore xq(k) a tutti gli x che ricadono in uno stesso intervallo Ik risulta a scaletta come in figura, e fornisce valori quantizzati
xq = Δq ⋅ ⎛⎝⌊xΔq⌋ + 12 ⎞⎠
che rispetto alla linea rossa (che esprime la retta xq = x), sono esatti solo a metà dell’intervallo, mentre all’interno dello stesso l’errore εq = x − xq si mantiene compreso tra − Δq⁄2 e Δq⁄2. Dato poi che con M bit si possono descrivere le L = 2M configurazioni binarie corrispondondenti a numeri compresi da 0 a 2M − 1, sulla destra è riportata la corrispondenza dei codici d = c(xq) che è possibile assegnare ai livelli quantizzati.
Per proseguire con l’analisi della distorsione, aggiungiamo ora l’ipotesi che il campione x da quantizzare sia stato prelevato da un membro di processo stazionario ergodico con d.d.p. uniforme a media nulla, ovvero pari a pX(x) = 1Δx rectΔx(x).
4.3.1.1 SNR di quantizzazione
La distorsione in cui si incorre a seguito del processo di quantizzazione è tanto minore quanto maggiore risulta il valore del
rapporto segnale-rumore SNRq = Px⁄Pϵ, ovvero il rapporto tra la potenza del segnale da quantizzare
Px, e quella
Pε dell’errore
εq = x − xq. La fig.
4.20 mostra un possibile andamento temporale per
x(t), assieme alla sua versione quantizzata
x○q(t), ed al corrispondente errore
εq(t), per il quale si fa l’ulteriore ipotesi che anch’esso sia un processo ergodico a media nulla, anch’esso descritto da una d.d.p. uniforme
p(ε) = 1Δq rect∆q(ε) ma con dinamica
Δq = Δx⁄L, e che
sia anche
statisticamente indipendente da
x(t).
In queste ipotesi, la potenza
Px è pari alla varianza della v.a.
x, e risulta
Px = σ2x = Δ2x12
mentre per quanto riguarda la potenza del segnale di errore
εq(t) il risultato è lo stesso, ma espresso nei termini di
Δq, ovvero
Pϵ = σ2ϵ = Δ2q12 = 112⎛⎝ΔxL⎞⎠2
Siamo dunque in grado di valutare l’
SNR di quantizzazione come
SNRq = PxPϵ = Δ2x1212⎛⎝LΔx⎞⎠2 = L2
e dunque
SNRq cresce in modo
quadratico con l’aumentare dei livelli, ovvero se
L raddoppia
SNRq quadruplica. Ricorrendo alla notazione in decibel per l’SNR, otteniamo il risultato
SNRq(L)|dB = 10log10L2 = 20log10L e, ricordando che
L = 2M, si ottiene
dato che
log102 ≃ 0.3. Pertanto è possibile concludere che
La qualità del quantizzatore uniforme espressa da SNRq[dB] aumenta linearmente con il numero M di bit/campione, con un incremento di 6 dB per ogni bit utilizzato in più.
Consideriamo ora cosa accade qualora il segnale in ingresso x abbia una dinamica minore a quanto previsto: in tal caso σ2x si riduce, mentre σ2ϵ = 112 (ΔxL )2 non cambia, e dunque SNRq peggiora, come se avessimo ridotto il numero di livelli. Viceversa, la tecnica illustrata di seguito è in grado di mantenere un SNRq accettabile anche con bassi livelli di segnale.
4.3.2 Quantizzazione non uniforme
La tecnica di cui al titolo nasce sia come risposta al problema appena evidenziato, ossia il peggioramento di
SNRq in presenza di bassi segnali, sia in considerazione del fatto che in realtà il processo
x non ha distribuzione di ampiezza uniforme come fino ad ora ipotizzato, rendendo il risultato
(10.72) di ridotta utilità pratica. Ma svolgiamo prima una breve digressione su come, conoscendo con esattezza la
pX(x) del processo da quantizzare, si possa giungere al miglior risultato.
Minimizzazione dell’errore di quantizzazione
Si può mostrare che per una
pX(x) generica il quantizzatore
ottimo (che rende massimo
SNRq)
non suddivide la dinamica
Δx in
L − 1 intervalli di
uguale estensione
Δq = ΔxL, ma l’estensione
Δq(k) varia ed è diversa per ogni intervallo
Ik con
k = 1, 2, ⋯L, adottando in particolare intervalli di estensione
ridotta nelle regioni in cui i valori
x sono
più probabili, ovvero più frequenti, e dunque per il quali la
pX(x) è
più grande. In tal modo ai valori
x più probabili corrisponde un errore di quantizzazione
σ2q(k) = Δ2q(k)⁄12 ridotto; viceversa, le regioni corrispondenti a valori di
x più rari adottano intervalli di estensione
Δq(k) più grande, e conseguentemente un
σ2q(k) maggiore. Il risultato è quello di variare il contributo alla
Pϵ complessiva, riducendolo per i valori più frequenti, ed aumentandolo per quelli meno: infatti,
Pϵ può essere valutata anche come un
valore atteso, pesando i contributi
σ2q(k) con le rispettive probabilità
Pϵ = Ek{σ2q(k)} =L⎲⎳k = 1pkσ2q(k)
in cui
pk = ∫IkpX(x)dx è la probabilità che
x ∈ Ik. Il modo ottimo di disporre le soglie
(θk − 1, θk) che delimitano
Ik in modo da rendere minima
Pϵ, è noto come algoritmo di
Lloyd-Max , ed il risultato che si ottiene è legato alla teoria esposta al §
9.5.
Nella quantizzazione del segnale vocale, anche se è arbitrario identificare con esattezza una
pX(x), si verifica strumentalmente che quest’ultima è addensata nelle regioni con valori più piccoli. Per questo motivo la legge di quantizzazione che si è adottata per ottenere gli 8 bit a campione utilizzati nel
pcm segue un andamento logaritmico, e dimezza progressivamente la pendenza della caratteristica di ingresso-uscita del quantizzatore all’aumentare dei valori in ingresso.
La fig.
4.21 mostra un esempio di tale realizzazione (per i soli valori positivi), in cui l’andamento logaritmico viene approssimato individuando (a partire dall’origine)
regioni di valori della
x la cui ampiezza di volta in volta raddoppia, e suddividendo ogni regione in un uguale numero di intervalli equispaziati. La caratteristica non lineare è realizzabile per via completamente numerica: per prima cosa si realizza un campionamento uniforme con
M = 12 bit a campione, a cui corrispondono
L = 212 = 4096 livelli. Per ogni campione, il numero di bit pari a zero nella parte più significativa degli
M individua la
regione dei valori di ingresso, mentre i bit rimanenti sono
shiftati a destra, per mantenere costante il numero di
intervalli per regione, ottenendo in definitiva una rappresentazione in
virgola mobile del valore del campione.
Esempio La tabella a destra di fig.
4.21 esemplifica il processo di conversione
pcm legge A, in cui a partire dalla quantizzazione uniforme a 12 bit (colonna di sinistra) si ottengono gli 8 bit della codifica
pcm (colonna di destra), ripartiti in un bit di segno
(s), tre bit di esponente, e quattro di mantissa (wxyz). Il bit più significativo dei 12 rappresenta il segno, e resta inalterato. Il numero di zeri più significativi dei 12 individua in quale delle 8 regioni cade il valore di ingresso, e tale regione è codificata mediante i 3 bit del codice pcm che seguono quello del segno. Delle restanti cifre della codifica uniforme, se ne conservano solo le 4 più significative. Ad esempio, il valore 100000001010 diviene 1-000-1010 (come risulta dalla prima riga della tabella), mentre 000110011010 diventa 0-101-1001, come riporta la sesta riga.
I risultati del
mapping illustrato possono essere inseriti in una
rom come coppie di
ingresso-uscita, utilizzando dunque 4096 posizioni di memoria da 8 bit ciascuna; al contrario presso il
dac di restituzione, sono sufficienti 256 posizioni, di 12 bit ciascuna.
Nella figura che segue si mostra l’andamento di
SNRq al variare della potenza di segnale rispetto al massimo possibile, nei due casi del quantizzatore uniforme, oppure con compressione logaritmica. Come si può notare, l’effetto della quantizzazione logaritmica penalizza l’
SNR per i segnali a piena dinamica, ma peggiora molto più lentamente al diminuire della stessa. Al cap.
10 l’argomento della codifica di sorgente audio viene ripreso, e debitamente approfondito.
Le prossime sezioni non tengono più conto delle questioni relative alla quantizzazione dei campioni, anche se nella realizzazione di dispositivi reali può rivestire interesse di progetto.