4.2
Quantizzazione e codifica binaria↓
Affrontiamo ora questo aspetto strettamente collegato a quello del
campionamento, e dovuto al fatto che i valori dei campioni
x(nTc)
sono grandezze
a precisione infinita: per renderli idonei ad
essere memorizzati o trasmessi in forma di sequenze numeriche, devono
essere prima
quantizzati dal dispositivo
Q(⋅), e
poi espressi (o
codificati) mediante un numero finito di
M bit.
Prima di effettuare il processo
di restituzione
analogica, occorre quindi ripristinare il valore relativo ad ogni
singolo campione (a partire dalla sua codifica binaria) per mezzo del
generatore
di livelli
mostrato in fig.
4.12↓,
e quindi generare un nuovo segnale
x○q(t) con cui alimentare il filtro di
restituzione.
Prima di proseguire facciamo notare due aspetti,
entrambi legati al fatto che
xq
≠ x. Il primo, evidenziato fin dal §
1.2↑, rimarca che all’aumentare di
M,
aumenta la corrispondente velocità binaria
fb
= fc⋅M bit/sec, mentre si
riduce allo stesso tempo l’entità della
distorsione prodotta dal
quantizzatore: scrivendo infatti
xq
= x + εq viene reso evidente
come ai campioni originari sia ora sovrapposto un segnale di errore. Il
secondo è che tale errore può contenere componenti frequenziali
assenti
dal segnale di origine, a causa della natura
non lineare (§
7.3↓) del processo di quantizzazione.
4.2.1
Quantizzazione uniforme↓
Approfondiamo ora l’analisi del dispositivo di quantizzazione,
che suddivide l’intervallo dei valori che può assumere l’ingresso
x, indicato come
dinamica Δx, in un numero
L
finito di valori (o
livelli), individuando così
L
− 1 intervalli, che possono essere tutti di uguale ampiezza
Δq = (Δx)/(L − 1) come in figura
(quantizzazione
uniforme), oppure di ampiezza differente (vedi
§
4.2.2↓).
Per ogni coppia di livelli è quindi individuata una
soglia di
decisione posta ad un valore intermedio tra quello dei livelli
contigui, in modo da associare a tutti i valori di ingresso
x
compresi tra due soglie (ovvero che ricadono nel
k
− esimo intervallo
Ik),
il valore
xkq = Q(x) corrispondente al valore del livello
che si trova nel mezzo delle soglie,
realizzando così una corrispondenza
tra valori di ingresso
x e di
uscita
xq = Q(x)
a scaletta,
come mostrato a lato, dove è anche rappresentato il risultato della
quantizzazione di una variabile aleatoria
continua con densità di probabilità
uniforme, che si trasforma in una v.a.
discreta.
Per proseguire con l’analisi della distorsione,
poniamoci nella situazione fino ad ora descritta, ovvero di adottare un
numero di livelli L = 2M
pari ed equispaziati, a cui aggiungiamo l’ipotesi di stare quantizzando
un processo stazionario ergodico con d.d.p. uniforme a media
nulla, ovvero pari a pX(x) = (1)/(Δx)rectΔx(x).
4.2.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 = xq
− x.
La fig.
4.15↑,
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, descritto da una d.d.p. uniforme
p(ε) = (1)/(Δq)rectΔq(ε)
in cui come anticipato
Δq = (Δx)/(L − 1), e che sia anche
statisticamente
indipendente da
x(t).
In queste ipotesi, la potenza
Px
è pari alla varianza della v.a.
x,
e risulta (vedi §
5.2.3↓)
Px
= σ2x
= (Δ2x)/(12)
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ϵ
= (Δ2q)/(12) = (1)/(12)⎛⎝(Δx)/(L − 1)⎞⎠2
Siamo dunque in grado di valutare l’
SNR
di quantizzazione come
SNRq = (Px)/(Pϵ) = (Δ2x)/(12)12⎛⎝(L
− 1)/(Δx)⎞⎠2
= (L − 1)2≅L2
in cui evidentemente l’ultima approssimazione ha validità nel caso in
cui
L≫1. Il risultato mostra che
l’
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 se il segnale in
ingresso
x ha una dinamica
minore
di quanto previsto: in tal caso
σ2x
si riduce, mentre
σ2ϵ
= (1)/(12)⎛⎝(Δx)/(L − 1)⎞⎠2
non cambia, e dunque
SNRq
peggiora, come se avessimo ridotto i livelli. Ma la tecnica illustrata
di seguito, è capace di mantenere un
SNRq
elevato anche con bassi livelli di segnale.
4.2.2
Quantizzazione logaritmica↓
e ↓codifica PCM
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
(8.25↑)
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 = (Δx)/(L − 1), 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 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↓.
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.16↑
mostra un esempio di tale realizzazione (per i soli valori positivi),
evidenziando come il risultato possa essere approssimato individuando (a
partire dall’origine) regioni di valori di ingresso con una ampiezza che
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.16↑
esemplifica il processo di conversione pcm
legge A, in cui a partire dalla quantizzazione uniforme a 12
bit, se ne ottengono gli 8 bit della codifica pcm,
ripartiti in un bit di segno (s), tre 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 codice pcm che seguono quello di segno. Delle
restanti cifre della codifica uniforma, 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 265 posizioni, di 12 bit ciascuna.
Nella figura a fianco viene mostrato 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.
12↓ 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.