Codifica della voce e dell'audio/Tecniche PCM
Le tecniche di quantizzazione PCM si basano su:
- codifica campione-per-campione: lavorano su un campione alla volta, e per ogni campione in ingresso producono un campione quantizzato in uscita;
- codifica di forma d'onda: l'obiettivo è produrre una forma d'onda geometricamente simile all'originale → la forma d'onda risultante sarà anche percettivamente simile.
Le tecniche PCM per la codifica della voce in banda telefonica possono essere suddivise in:
- statiche: una volta che l'algoritmo è stato progettato, esso non cambia nel tempo:
- senza memoria (o stateless): ogni campione è quantizzato indipendentemente dagli altri campioni;
- differenziali o predittive: la quantizzazione di ogni campione sfrutta anche informazioni dagli altri campioni nel passato e/o nel futuro;
- adattative: l'algoritmo si adatta al segnale corrente stimato.
- Caratteristiche delle tecniche PCM
- + robustezza ai segnali di ingresso: poiché l'algoritmo non fa assunzioni sul tipo di segnale, esso continua a funzionare dando buone prestazioni se il tipo di segnale fornito in input non è voce;
- + complessità: è quasi nulla, al massimo pari a 1 MIPS;
- + ritardo: è basso;
- − bit rate: le tecniche PCM non riescono a garantire la toll quality con un bit rate al di sotto di 32 kb/s (4 bit/campione) → è un bit rate medio-alto, e può essere troppo alto per specifiche applicazioni (ad es. telefonia satellitare).
Tecniche PCM senza memoria
[modifica | modifica sorgente]Quantizzatore uniforme: PCM lineare
[modifica | modifica sorgente]Il quantizzatore uniforme è caratterizzato da una distribuzione dei livelli uniforme: la zona operativa è suddivisa in gradini di quantizzazione di ampiezza costante .
La potenza dell'errore di quantizzazione , avente una funzione densità di probabilità uniforme, è:
Il rapporto segnale/rumore SNR è lineare nel numero di bit :
→ il rapporto segnale/rumore SNR migliora di 6 dB per ogni bit in più utilizzato.
La codifica PCM lineare è basata su un quantizzatore uniforme a 4096 livelli:
- frequenza di campionamento: (imposta dal teorema di Shannon)
- numero di bit:
- bit rate:
Quantizzatore ottimo: PCM logaritmico (log PCM)
[modifica | modifica sorgente]Il quantizzatore uniforme è un quantizzatore ottimo per segnali distribuiti uniformemente sulla zona operativa, ma i segnali audio naturali hanno una distribuzione di probabilità non uniforme. In particolare, la voce ha una funzione distribuzione di probabilità PDF gaussiana fortemente concentrata intorno al valor medio → a parità di qualità, è possibile risparmiare bit utilizzando un quantizzatore avente una distribuzione dei livelli non uniforme:
- intorno all'intensità media il segnale è più probabile → servono livelli più fitti;
- alle basse e alle alte intensità il segnale è meno probabile → i livelli possono essere più radi.
Poiché l'orecchio umano è sensibile in modo para-logaritmico, il quantizzatore ottimo per la voce ha una distribuzione dei livelli simil-logaritmica:
- intorno all'intensità media, i livelli del quantizzatore uniforme sono mappati a tanti livelli vicini tra loro del quantizzatore ottimo;
- alle basse e alle alte intensità, i livelli del quantizzatore uniforme sono mappati a pochi livelli lontani tra loro del quantizzatore ottimo.
Standard ITU G.711
[modifica | modifica sorgente]Lo standard G.711, sviluppato da ITU, usa una codifica PCM logaritmica (log PCM) basata su un quantizzatore ottimo a 256 livelli:
- numero di bit: i livelli di quantizzazione sono in minor numero ma sono meglio distribuiti secondo le caratteristiche del segnale vocale:
- bit rate: lo standard G.711 raggiunge un bit rate più basso rispetto al PCM lineare pur mantenendone le stesse prestazioni:
- Applicazioni
- il primo standard per la telefonia digitale, chiamato ISDN
Ulteriori evoluzioni
[modifica | modifica sorgente]- telefonia cellulare (GSM, 3G...): il bit rate arriva a 13 kb/s, anche se con la tecnologia di oggi si potrebbe arrivare a circa 6 kb/s;
- applicazioni militari (es. telefoni criptati) e civili (es. telefoni satellitari): il bit rate scende addirittura a 1 kb/s, ma la voce, seppur intelligibile, non è tanto naturale.
Tecniche PCM differenziali o predittive
[modifica | modifica sorgente]Le tecniche PCM senza memoria sono adatte per la codifica del rumore bianco: ogni bit vale 0 o 1 con probabilità 50% → dato un qualunque campione, nessun campione nel passato o nel futuro può fornire informazioni sul campione corrente, perché i campioni sono tutti completamente scorrelati tra loro. Nei segnali audio naturali invece esistono molte correlazioni tra un campione e l'altro, che possono essere sfruttate per comprimere di più.
Quantizzatore differenziale: PCM differenziale (DPCM)
[modifica | modifica sorgente]L'idea delle tecniche differenziali è quella di codificare e trasmettere non il campione del segnale originario, con tutta la sua ampia dinamica possibile di valori, ma solo la differenza, detta segnale differenziale, tra ogni campione e uno o più dei suoi campioni precedenti.
Se i campioni sono sufficientemente in media correlati tra loro, il segnale differenziale ha una dinamica molto inferiore e una distribuzione gaussiana più stretta () rispetto al segnale originario → servono meno livelli di quantizzazione per raggiungere le stesse prestazioni.
Quantizzatore differenziale del 1º ordine
[modifica | modifica sorgente]La differenza codificata e trasmessa è calcolata tra il campione corrente e il campione precedente :
Il coefficiente di correlazione dice quanto due campioni consecutivi sono correlati tra loro:[1]
- se il campione è uguale al campione precedente , la correlazione è pari a 1:
- se il campione è completamente differente rispetto al campione precedente , la correlazione è pari a 0.
Il coefficiente di correlazione è il valore ottimo che minimizza l'energia del segnale differenza :
Dato il segnale differenziale:
si vuole trovare il valore ottimo che ne minimizza l'energia:
Il quantizzatore differenziale funziona molto bene con la voce telefonica grazie al fatto che statisticamente è un segnale fortemente correlato:
- Processo di codifica e decodifica
- il codificatore calcola il segnale differenziale tra il campione corrente e il campione precedente :
- il codificatore invia al decodificatore la versione quantizzata del segnale differenziale;
- il decodificatore riceve il segnale differenziale quantizzato e ricostruisce il campione corrente :
Quantizzatore differenziale di ordine N
[modifica | modifica sorgente]La differenza è calcolata tra il campione corrente e la combinazione lineare degli campioni precedenti:
L'ordine deve essere scelto dal compromesso tra:
- prestazioni di compressione: più l'ordine è alto, più informazioni da campioni passati vengono prese per il campione corrente;
- prestazioni di calcolo: all'aumentare dell'ordine aumentano:
- la memoria necessaria per bufferizzare gli campioni passati;
- la complessità di calcolo.
Per la voce telefonica, la correlazione di breve termine (= relativa ai campioni adiacenti) è concentrata in media entro 8÷12 campioni → per la codifica della voce in banda telefonica è sufficiente il quantizzatore differenziale di ordine 10: il campione corrente viene codificato prendendo informazioni fino a 10 campioni (equivalenti a 1,2 ms) nel passato.
I valori ottimi dei parametri possono essere calcolati risolvendo un sistema di derivate parziali in modo analogo al caso del 1º ordine:
Codifica predittiva: Linear Predictive Coding (LPC)
[modifica | modifica sorgente]Un approccio alternativo alla codifica differenziale è la codifica predittiva, che affronta un problema di predizione: data la serie storica dei valori passati, è possibile fare una predizione del campione a partire dai campioni passati?
L'idea delle tecniche predittive è quella di codificare e trasmettere l'errore di predizione , cioè la differenza tra il valore effettivo del campione corrente e il valore predetto :
- codifica predittiva di ordine 1: la predizione del campione corrente è basata solo sull'ultimo campione :
- codifica predittiva di ordine N: la predizione del campione corrente è basata sulla combinazione lineare degli ultimi campioni:
- Processo di codifica e decodifica
La codifica predittiva funziona grazie al fatto che, dato che il decodificatore ha a disposizione una serie storica simile a quella a disposizione del codificatore, le predizioni svolte da entrambi indipendentemente l'uno dall'altro saranno simili:
- il codificatore calcola il valore predetto del campione corrente a partire dagli ultimi campioni:
- ordine 1:
- ordine N:
- il codificatore calcola l'errore di predizione confrontando il valore predetto con il valore effettivo :
- ordine 1:
- ordine N:
- il codificatore invia al decodificatore la versione quantizzata dell'errore di predizione;
- anche il decodificatore calcola il valore predetto per il campione corrente a partire dagli ultimi campioni ricostruiti:
- ordine 1:
- ordine N:
- il decodificatore riceve l'errore di predizione quantizzato e ricostruisce il campione corrente :
- ordine 1:
- ordine N:
Tecniche PCM adattative: adaptive PCM (APCM)
[modifica | modifica sorgente]Le tecniche PCM statiche sono progettate in base alle caratteristiche statistiche di lungo termine del segnale (valor medio , varianza , funzione PDF...) → sono adatte per segnali stazionari le cui caratteristiche non dipendono dal tempo. I segnali audio naturali tuttavia sono fortemente non stazionari.
L'idea delle tecniche adattative è quella di usare un algoritmo in grado di adattarsi al segnale corrente stimato nel tempo, con l'obiettivo di risparmiare bit quando il segnale è meno complesso da codificare.
- Algoritmo
- stima dello stato del segnale: si determina lo stato del segnale (ad es. rumore o voce) all'interno di una finestra ampia campioni centrata in ;
- scelta dell'algoritmo ottimo: si sceglie quale algoritmo di codifica è il più adatto al segnale corrente stimato entro la finestra corrente.
L'algoritmo di codifica scelto deve essere mandato direttamente al ricevitore, cosicché il ricevitore sappia in che modo è stato codificato il segnale. I bit necessari per comunicare queste informazioni al ricevitore sono detti bit di overhead perché sono inviati insieme ai campioni quantizzati del segnale e quindi pesano sul bit rate complessivo; - codifica di campioni: si applica l'algoritmo di codifica scelto sulla sequenza di campioni compresa nella finestra corrente, e i campioni quantizzati sono mandati al ricevitore;
- si ritorna al passo 1 avanzando la finestra alla sequenza di campioni successivi.
Il numero di campioni su cui viene applicato l'algoritmo di codifica scelto è un compromesso tra:
- prestazioni di compressione dei bit che trasportano informazioni multimediali: un adattamento molto frequente permette di seguire fedelmente l'evoluzione del segnale nel tempo e stimare lo stato in modo meno grezzo;
- limitazione dei bit di overhead: occorre contenere il bit rate complessivo evitando di inviare troppi bit di overhead.
Siccome il segnale vocale varia approssimativamente da 50 a 100 volte al secondo, è sufficiente aggiornare la scelta dell'algoritmo ottimo:
- ogni 20 ms:
- ogni campioni:
- Vantaggi/svantaggi
- + prestazioni di compressione
- − complessità di calcolo: occorre stimare lo stato del segnale 50 volte al secondo (per la voce);
- − overhead: i bit di overhead, essendo inviati insieme ai campioni quantizzati del segnale, pesano sul bit rate complessivo;
- − robustezza: a volte è difficile stimare lo stato del segnale (ad es. voce con rumore di fondo)
Energy-tracking APCM
[modifica | modifica sorgente]La codifica energy-tracking APCM è basata su un quantizzatore uniforme con fondo scala variabile nel tempo al fine di adattarsi ai cambiamenti nel tempo dell'energia del segnale:
- il fondo scala si riduce quando il segnale ha meno energia;
- il fondo scala si allarga quando il segnale ha più energia.
Riducendo del fondo scala quando possibile, si possono ottenere due risultati:
- aumento del rapporto segnale/rumore SNR a parità di bit rate: viene ridotta l'ampiezza del gradino di quantizzazione, e quindi l'errore di quantizzazione , mantenendo costante il numero di livelli di quantizzazione;
- riduzione del bit rate a parità di rapporto segnale/rumore SNR: viene ridotto il numero di livelli di quantizzazione, mantenendo costante l'ampiezza del gradino di quantizzazione.
- Algoritmo
- stima dell'energia istantanea: si misura l'energia locale istantanea del segnale all'interno della finestra corrente:
- scelta del fondo scala: si calcola il fondo scala più adatto per la finestra corrente (ad es. tramite la regola euristica del ), e si invia come overhead al ricevitore il fondo scala scelto;
- quantizzazione uniforme di campioni con il fondo scala scelto;
- si ritorna al passo 1.
Tecniche ADPCM
[modifica | modifica sorgente]Le tecniche ADPCM introducono nelle tecniche DPCM l'adattività ai cambiamenti nel tempo dell'energia del segnale differenziale:
- DPCM: i valori ottimi dei parametri sono calcolati una volta in fase di progetto, in modo da minimizzare globalmente l'energia del segnale differenziale:
- ADPCM: i valori ottimi dei parametri sono calcolati di volta in volta per la finestra corrente di campioni, in modo da minimizzare localmente l'energia istantanea del segnale differenziale:
- Algoritmo
- stima dell'energia istantanea: si misura l'energia istantanea del segnale differenziale all'interno della finestra corrente:
- calcolo dei valori localmente ottimi dei parametri : si risolve il sistema di derivate parziali ( per la voce), e si inviano come overhead al ricevitore i valori ottimi calcolati e quantizzati (il ricevitore dovrà compiere un'operazione di inversione della matrice);
- quantizzazione differenziale di ordine N di campioni con i parametri calcolati, e il segnale differenziale quantizzato è mandato al ricevitore;
- si ritorna al passo 1.
Quantizzazione dei parametri
[modifica | modifica sorgente]- Quantizzatore uniforme
I valori ottimi dei parametri calcolati per la finestra di trasmissione corrente sono numeri reali → oltre ai campioni del segnale stesso, occorre quantizzare anche questi valori per poterli mandare al ricevitore in modo digitale → occorre progettare un quantizzatore uniforme per ognuno dei 10 parametri :
- creazione di un database: si raccoglie un numero statisticamente significativo di valori del parametro a partire da un campione rappresentativo di segnali vocali;
- caratterizzazione statistica: si costruisce la funzione densità di probabilità PDF del parametro , ricavandone le caratteristiche statistiche (per una gaussiana: la media e la varianza );
- scelta del fondo scala , ad esempio tramite la regola euristica del ;
- scelta del numero di livelli:
- se è noto a priori il rapporto segnale/rumore SNR desiderato, è facile ricavare il numero di livelli per mezzo della formula:
- nel caso di segnali multimediali, si usano tanti livelli quanti bastano per ottenere una quantizzazione percettivamente trasparente: la voce ricostruita usando il parametro quantizzato è percettivamente indistinguibile dalla voce ricostruita usando il parametro non quantizzato .
- se è noto a priori il rapporto segnale/rumore SNR desiderato, è facile ricavare il numero di livelli per mezzo della formula:
- Quantizzatore ottimo
La distribuzione di probabilità di ognuno dei parametri però è fortemente concentrata intorno al valor medio → occorre progettare un quantizzatore ottimo, con distribuzione di livelli non uniforme, per ognuno di questi parametri.
Una volta progettato il quantizzatore ottimo, esso è in grado di quantizzare ogni parametro su 3÷4 bit → i 10 parametri quantizzati richiedono complessivamente circa 40 bit (sarebbe richiesto circa il doppio dei bit con il quantizzatore uniforme) → essendo inviati 50 volte al secondo (ogni 20 ms), generano un overhead di 2000 b/s: le prestazioni di compressione devono apportare un miglioramento tale da giustificare questo notevole overhead.
Standard ITU G.726
[modifica | modifica sorgente]Lo standard ITU G.726, grazie a una codifica molto complessa che è derivata dalla tecnica ADPCM, riesce a dimezzare il bit rate del precedente standard, l'ITU G.711, mantenendo la stessa qualità (toll quality):
al prezzo di una complessità molto alta pari a 1 MIPS.
- Applicazioni
- cordless
- ambito spaziale
Note
[modifica | modifica sorgente]- ↑ è la funzione di valore atteso della variabile casuale .