Codifica della voce e dell'audio/Tecniche PCM: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nuova pagina: {{Lezione/30 |titoloPrec = Codifica di sorgente |numPrec = A3 |titoloPrecMediaWiki = A3 |titoloCorr = Tecniche PCM |numCorr = A4 |titoloSucc = Tecniche parametriche |numSucc = A5...
 
Nessun oggetto della modifica
Riga 1:
{{Codifica della voce e dell'audio}}
{{Lezione/30
|titoloPrec = Codifica di sorgente
|numPrec = A3
|titoloPrecMediaWiki = A3
 
|titoloCorr = Tecniche PCM
|numCorr = A4
 
|titoloSucc = Tecniche parametriche
|numSucc = A5
|titoloSuccMediaWiki = A5
}}
Le '''tecniche di quantizzazione {{tooltip|PCM|Pulse Code Modulation}}''' si basano su:
* {{subst<span style="text-decoration:sottolinea|underline;">codifica campione-per-campione}}</span>: lavorano su un campione alla volta, e per ogni campione <math>x[n]</math> in ingresso producono un campione quantizzato <math>\hat x [n]</math> in uscita;
* {{subst<span style="text-decoration:sottolinea|underline;">codifica di forma d'onda}}</span>: 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:
* {{subst<span style="text-decoration:sottolinea|underline;">statiche}}</span>: una volta che l'algoritmo è stato progettato, esso non cambia nel tempo:
** [[#Tecniche PCM senza memoria|{{subst<span style="text-decoration:sottolinea|underline;">senza memoria}}</span>]] (o stateless): ogni campione è quantizzato indipendentemente dagli altri campioni;
** [[#Tecniche PCM differenziali o predittive|{{subst<span style="text-decoration:sottolinea|underline;">differenziali}}</span> o {{subst<span style="text-decoration:sottolinea|underline;">predittive}}</span>]]: la quantizzazione di ogni campione sfrutta anche informazioni dagli altri campioni nel passato e/o nel futuro;
* [[#Tecniche PCM adattative: adaptive PCM (APCM)|{{subst<span style="text-decoration:sottolinea|underline;">adattative}}</span>]]: l'algoritmo si adatta al segnale corrente stimato.
 
;Caratteristiche delle tecniche PCM
<ul>
<li class=pro>{{subst<span style="text-decoration:sottolinea|underline;">robustezza ai segnali di ingresso}}</span>: 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;</li>
<li class=pro>{{subst<span style="text-decoration:sottolinea|underline;">complessità}}</span>: è quasi nulla, al massimo pari a 1 MIPS;</li>
<li class=pro>{{subst<span style="text-decoration:sottolinea|underline;">ritardo}}</span>: è basso;</li>
<li class=contro>{{subst<span style="text-decoration:sottolinea|underline;">bit rate}}</span>: 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).</li>
</ul>
 
Line 55 ⟶ 44:
[[File:Logarithmic quantizer characteristic.svg|thumb|Caratteristica ingresso/uscita di un quantizzatore ottimo per la voce.]]
 
Il quantizzatore uniforme è un [[Codifica della voce e dell'audio/Conversione analogico/digitale#Quantizzatore ottimo|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.
Line 121 ⟶ 110:
 
L'ordine <math>N</math> deve essere scelto dal compromesso tra:
* {{subst<span style="text-decoration:sottolinea|underline;">prestazioni di compressione}}</span>: più l'ordine è alto, più informazioni da campioni passati vengono prese per il campione corrente;
* {{subst<span style="text-decoration:sottolinea|underline;">prestazioni di calcolo}}</span>: all'aumentare dell'ordine aumentano:
** la memoria necessaria per bufferizzare gli <math>N</math> campioni passati;
** la complessità di calcolo.
Line 136 ⟶ 125:
 
===Codifica predittiva: Linear Predictive Coding (LPC)===
Un approccio alternativo alla codifica differenziale è la '''codifica predittiva''', che affronta un {{subst<span style="text-decoration:sottolinea|underline;">problema di predizione}}</span>: data la serie storica dei valori passati, è possibile fare una predizione del campione <math>x[n]</math> a partire dai campioni passati?
 
L'idea delle tecniche predittive è quella di codificare e trasmettere l<nowiki>'</nowiki>'''errore di predizione''' <math>e[n]</math>, cioè la differenza tra il valore effettivo del campione corrente <math>x[n]</math> e il valore predetto <math>\tilde x[n]</math>:
:<math>e[n] = x[n] - \tilde x[n]</math>
<ul>
<li>{{subst<span style="text-decoration:sottolinea|underline;">codifica predittiva di ordine 1}}</span>: la predizione <math>\tilde x[n]</math> del campione corrente è basata solo sull'ultimo campione <math>x[n-1]</math>:
<dl><dd><math>\tilde x[n] = f \left( x[n-1] \right) = \alpha x[n-1]</math></dd></dl>
Se <math>\alpha</math> è il coefficiente di correlazione <math>\rho</math> tra il campione predetto <math>\tilde x[n]</math> e il campione effettivo <math>x[n]</math>, l'errore di predizione <math>e[n]</math> è minimizzato e la codifica è ottima;</li>
<li>{{subst<span style="text-decoration:sottolinea|underline;">codifica predittiva di ordine N}}</span>: la predizione <math>\tilde x[n]</math> del campione corrente è basata sulla combinazione lineare degli ultimi <math>N</math> campioni:
<dl><dd><math>\tilde x[n] = f \left( x [n-1], x[n-2], \ldots , x[n-N] \right) = \sum_{i=1}^N \alpha_i x[n-i]</math></dd></dl>
Se i parametri <math>\alpha_i</math> sono i '''coefficienti di predizione lineare''', l'errore di predizione <math>e[n]</math> è minimizzato e la codifica è ottima.</li>
Line 185 ⟶ 174:
 
;Algoritmo
# {{subst<span style="text-decoration:sottolinea|underline;">stima dello stato del segnale}}</span>: si determina lo '''stato''' del segnale (ad es. rumore o voce) all'interno di una finestra ampia <math>M</math> campioni centrata in <math>n_0</math>;
# {{subst<span style="text-decoration:sottolinea|underline;">scelta dell'algoritmo ottimo}}</span>: si sceglie quale algoritmo di codifica è il più adatto al segnale corrente stimato entro la finestra corrente.<br />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;
# {{subst<span style="text-decoration:sottolinea|underline;">codifica di <math>M</math> campioni}}</span>: si applica l'algoritmo di codifica scelto sulla sequenza di <math>M</math> campioni compresa nella finestra corrente, e i campioni quantizzati sono mandati al ricevitore;
# si ritorna al passo 1 avanzando la finestra alla sequenza di <math>M</math> campioni successivi.
 
Il numero <math>M</math> di campioni su cui viene applicato l'algoritmo di codifica scelto è un compromesso tra:
* {{subst<span style="text-decoration:sottolinea|underline;">prestazioni di compressione dei bit che trasportano informazioni multimediali}}</span>: un adattamento molto frequente permette di seguire fedelmente l'evoluzione del segnale nel tempo e stimare lo stato in modo meno grezzo;
* {{subst<span style="text-decoration:sottolinea|underline;">limitazione dei bit di overhead}}</span>: 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:
Line 202 ⟶ 191:
;Vantaggi/svantaggi
<ul>
<li class=pro>{{subst<span style="text-decoration:sottolinea|underline;">prestazioni di compressione}}</span></li>
<li class=contro>{{subst<span style="text-decoration:sottolinea|underline;">complessità di calcolo}}</span>: occorre stimare lo stato del segnale 50 volte al secondo (per la voce);</li>
<li class=contro>{{subst<span style="text-decoration:sottolinea|underline;">overhead}}</span>: i bit di overhead, essendo inviati insieme ai campioni quantizzati del segnale, pesano sul bit rate complessivo;</li>
<li class=contro>{{subst<span style="text-decoration:sottolinea|underline;">robustezza}}</span>: a volte è difficile stimare lo stato del segnale (ad es. voce con rumore di fondo)</li>
</ul>
{{clear|right}}
Line 216 ⟶ 205:
 
Riducendo del fondo scala quando possibile, si possono ottenere due risultati:
* {{subst<span style="text-decoration:sottolinea|underline;">aumento del rapporto segnale/rumore SNR a parità di bit rate}}</span>: viene ridotta l'ampiezza <math>\Delta</math> del gradino di quantizzazione, e quindi l'errore di quantizzazione <math>e[n]</math>, mantenendo costante il numero <math>N_Q</math> di livelli di quantizzazione;
* {{subst<span style="text-decoration:sottolinea|underline;">riduzione del bit rate a parità di rapporto segnale/rumore SNR}}</span>: viene ridotto il numero <math>N_Q</math> di livelli di quantizzazione, mantenendo costante l'ampiezza <math>\Delta</math> del gradino di quantizzazione.
 
;Algoritmo
# {{subst<span style="text-decoration:sottolinea|underline;">stima dell'energia istantanea}}</span>: si misura l'energia locale istantanea del segnale <math>x[n]</math> all'interno della finestra corrente:
#:<math>\textrm{E} \left[ n_0 \right] = \sum_{i=n_0 - \frac{M}{2}}^{n_0 + \frac{M}{2}} x^2 [i]</math>
# {{subst<span style="text-decoration:sottolinea|underline;">scelta del fondo scala}}</span>: si calcola il fondo scala più adatto per la finestra corrente (ad es. tramite la [[ElaborazioneCodifica edella trasmissionevoce die informazionidell'audio/Conversione multimedialianalogico/A2digitale#Ampiezza della zona operativa|regola euristica del <math>4\sigma</math>]]), e si invia come overhead al ricevitore il fondo scala scelto;
# {{subst<span style="text-decoration:sottolinea|underline;">quantizzazione uniforme}}</span> di <math>M</math> campioni con il fondo scala scelto;
# si ritorna al passo 1.
{{clear|right}}
Line 230 ⟶ 219:
 
Le tecniche ADPCM introducono nelle tecniche DPCM l'adattività ai cambiamenti nel tempo dell'energia del segnale differenziale:
* DPCM: i valori ottimi dei parametri <math>\alpha_i</math> sono calcolati una volta in fase di progetto, in modo da minimizzare {{subst<span style="text-decoration:sottolinea|underline;">globalmente}}</span> l'energia <math>\sigma_d^2</math> del segnale differenziale:
*:<math>d[n] = x [n] - \sum_{i=1}^N \alpha_i x [n-i] , \quad - \infty < n < + \infty</math>
* ADPCM: i valori ottimi dei parametri <math>\alpha_i</math> sono calcolati di volta in volta per la finestra corrente di <math>M</math> campioni, in modo da minimizzare {{subst<span style="text-decoration:sottolinea|underline;">localmente}}</span> l'energia istantanea <math>\textrm{E} \left[ n_0 \right]</math> del segnale differenziale:
*:<math>d[n] = x [n] - \sum_{i=1}^N \alpha_i x [n-i] , \quad n_0 - \frac{M}{2} < n < n_0 + \frac{M}{2}</math>
 
;Algoritmo
# {{subst<span style="text-decoration:sottolinea|underline;">stima dell'energia istantanea}}</span>: si misura l'energia istantanea del segnale differenziale <math>d[n]</math> all'interno della finestra corrente:
#:<math>\textrm{E} \left[ n_0 \right] = \sum_{i=n_0 - \frac{M}{2}}^{n_0 + \frac{M}{2}} d^2 [i]</math>
# {{subst<span style="text-decoration:sottolinea|underline;">calcolo dei valori localmente ottimi dei parametri <math>\alpha_i</math>}}</span>: si risolve il sistema di <math>N</math> derivate parziali (<math>N=10</math> per la voce), e si inviano come overhead al ricevitore i valori ottimi calcolati e quantizzati <math>\hat \alpha_i</math> (il ricevitore dovrà compiere un'operazione di inversione della matrice);
# {{subst<span style="text-decoration:sottolinea|underline;">quantizzazione differenziale}}</span> di ordine N di <math>M</math> campioni con i parametri <math>\alpha_i</math> calcolati, e il segnale differenziale quantizzato <math>\hat d[n]</math> è mandato al ricevitore;
# si ritorna al passo 1.
 
Line 245 ⟶ 234:
;Quantizzatore uniforme
I valori ottimi dei parametri <math>\alpha_i</math> 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 <math>\alpha_i</math>:
# {{subst<span style="text-decoration:sottolinea|underline;">creazione di un database}}</span>: si raccoglie un numero statisticamente significativo di valori del parametro <math>\alpha_i</math> a partire da un campione rappresentativo di segnali vocali;
# {{subst<span style="text-decoration:sottolinea|underline;">caratterizzazione statistica}}</span>: si costruisce la funzione densità di probabilità PDF del parametro <math>\alpha_i</math>, ricavandone le caratteristiche statistiche (per una gaussiana: la media <math>\mu</math> e la varianza <math>\sigma</math>);
# {{subst<span style="text-decoration:sottolinea|underline;">scelta del fondo scala <math>X_m</math>}}</span>, ad esempio tramite la [[ElaborazioneCodifica edella trasmissionevoce die informazionidell'audio/Conversione multimedialianalogico/A2digitale#Ampiezza della zona operativa|regola euristica del <math>4\sigma</math>]];
# {{subst<span style="text-decoration:sottolinea|underline;">scelta del numero <math>N_Q</math> di livelli}}</span>:
#* se è noto a priori il rapporto segnale/rumore SNR desiderato, è facile ricavare il numero di livelli per mezzo della formula:
#*:<math>\text{SNR} = 10 \log_{10}{\frac{\sigma_x^2}{\sigma_e^2}} \; \text{dB}= K + \alpha \frac{X_m}{\sigma_x} + 6N_Q</math>
#* nel caso di segnali multimediali, si usano tanti livelli quanti bastano per ottenere una {{subst<span style="text-decoration:sottolinea|underline;">quantizzazione percettivamente trasparente}}</span>: la voce ricostruita usando il parametro quantizzato <math>\alpha_i</math> è percettivamente indistinguibile dalla voce ricostruita usando il parametro non quantizzato <math>\hat \alpha_i</math>.
 
;Quantizzatore ottimo
Line 269 ⟶ 258:
==Note==
<references />
[[Categoria:Codifica della voce e dell'audio|Tecniche PCM]]