Codifica di sorgente
In questa pagina 10
La sorgente emette simboli con certe probabilità; la entropiaL'informazione di un evento di probabilità $P$ è $i=\log_2\frac1P$ bit; l'entropia $H(x)=\sum p\log_2\frac1p$ è l'informazione media e misura l'incertezza: $0\le H\le\log_2M$, massimo se i simboli sono equiprobabili. Per due variabili: $\max{H(x),H(y)}\le H(x,y)\le H(x)+H(y)$, $H(x|y)=H(x,y)-H(y)$ e l'informazione mutua $I(x;y)=H(x)-H(x|y)=H(x)+H(y)-H(x,y)\ge0$ (zero se e solo se indipendenti). Per una sorgente di $F_s$ simboli/s: rate di informazione $F_sH_s$, rate nominale $F_s\log_2M$, efficienza $\eta=\frac{H_s}{\log_2M}$.Informazione, entropia e informazione mutua → dice quanti bit di informazione contengono in media. Se si trasmette ogni simbolo con bit (lunghezza fissa) se ne spendono di più, quando i simboli non sono equiprobabili. La codifica di sorgente (source coding) rappresenta la stessa informazione con meno bit.
1. Lo schema e le grandezze
Esistono due famiglie. La codifica lossy accetta una perdita di informazione (mp3, jpeg, mpeg), la lossless è invertibile (zip, rar): da quello che si trasmette si ricostruisce esattamente la sequenza di partenza. Il corso studia solo la seconda.
Definizione (codice di sorgente). Una sorgente emette parole di simboli (dizionario di ingresso , entropia ). Una mappa associa a ogni parola una parola di codice scritta con un alfabeto di simboli (alfabeto binario: ), e deve essere invertibile (diversamente si perderebbe informazione). è la lunghezza di ; la lunghezza media è cioè il valore attesoIl valore atteso E[X] = Σ x p_X(x) è la media dei valori di X pesata con le loro probabilità (esiste se la serie converge assolutamente); per una funzione g vale E[g(X)] = Σ g(x) p_X(x) senza trovare la legge di g(X), ed E è lineare: E[aX + bY + c] = aE[X] + bE[Y] + c.Valore atteso → della lunghezza, vista come variabile aleatoria che dipende dalla parola emessa; e l'efficienza del codice è (per un codice binario ).
Senza codifica servono bit per parola. L'idea è: parole frequenti parole corte; parole rare parole lunghe, in modo che scenda. Se la sorgente emette simboli/s il bit-rate nominale diventa (confrontalo con il rate di informazione , Informazione, entropia e informazione mutuaL'informazione di un evento di probabilità $P$ è $i=\log_2\frac1P$ bit; l'entropia $H(x)=\sum p\log_2\frac1p$ è l'informazione media e misura l'incertezza: $0\le H\le\log_2M$, massimo se i simboli sono equiprobabili. Per due variabili: $\max{H(x),H(y)}\le H(x,y)\le H(x)+H(y)$, $H(x|y)=H(x,y)-H(y)$ e l'informazione mutua $I(x;y)=H(x)-H(x|y)=H(x)+H(y)-H(x,y)\ge0$ (zero se e solo se indipendenti). Per una sorgente di $F_s$ simboli/s: rate di informazione $F_sH_s$, rate nominale $F_s\log_2M$, efficienza $\eta=\frac{H_s}{\log_2M}$.Informazione, entropia e informazione mutua →).
Esempio. simboli equiprobabili: bit e a lunghezza fissa 3 bit: la codifica non può migliorare (). Se invece le probabilità sono , la lunghezza fissa usa 2 bit e : c'è margine per risparmiare .
2. Decodificabilità e codici a prefisso
Definizione (decodificabile, a prefisso). Un codice è univocamente decodificabile se due sequenze diverse di parole di codice non danno mai la stessa stringa di bit. Una parola è prefisso di se e coincide con i primi simboli di . Un codice è a prefisso se nessuna sua parola è prefisso di un'altra.
Il problema nasce quando le lunghezze sono diverse: una sequenza di bit ricevuta potrebbe essere divisa in più modi in parole di codice.
Esempio. Con la stringa è ambigua ( = ma anche ): il codice non è decodificabile. Con (a prefisso) la stringa si legge in un solo modo.
Proposizione. Un codice a prefisso è decodificabile, e in modo istantaneo. Dimostrazione: si legge la stringa bit per bit; appena i bit letti coincidono con una parola di codice, quella è la parola emessa, perché nessuna parola più lunga può iniziare con essa (se no la prima sarebbe prefisso); si riparte da capo. Non vale il contrario: è decodificabile (dopo uno si guarda il bit successivo) ma è prefisso di .
I codici a prefisso si disegnano con un albero binario: ogni parola è una foglia (un nodo senza figli), il cammino dalla radice la scrive (0 a sinistra, 1 a destra) e nessuna parola sta su un nodo interno.
3. Disuguaglianza di Kraft-McMillan
Teorema (Kraft-McMillan). Sia un codice con alfabeto di simboli e parole di lunghezze .
- Se è decodificabile, allora (equivalentemente ).
- Viceversa, se sono interi con esiste un codice a prefisso con alfabeto e quelle lunghezze.
Esempio. Le lunghezze danno : esiste un codice a prefisso binario (quello dell'esempio sopra con , , ). Le lunghezze (otto parole) danno : nessun codice decodificabile ha queste lunghezze.
Dimostrazione del punto 2 (costruzione). Si ordinano le lunghezze in modo crescente e si assegnano le parole una dopo l'altra, sull'albero, scegliendo ogni volta il primo nodo libero a quella profondità che non sia discendente di una parola già scelta. Una parola di lunghezza "occupa" una frazione di tutte le foglie (a una profondità fissata); la condizione garantisce che le foglie occupate non superino mai quelle disponibili. Quindi il nodo libero esiste sempre.
Dimostrazione del punto 1. Si elevi la somma a una potenza : dove è il numero di sequenze di parole di codice la cui lunghezza totale è . Se il codice è decodificabile, sequenze diverse danno stringhe diverse di simboli, quindi (tanti quante le stringhe possibili). Allora . Se la somma fosse , crescerebbe esponenzialmente in mentre cresce solo linearmente: contraddizione per grande. Quindi .
Osservazioni. (i) Il punto 1 è una condizione necessaria, non sufficiente: ha somma ma è ambiguo ( oppure ). (ii) Il punto 2 dice che non si perde nulla limitandosi ai codici a prefisso: se esiste un codice decodificabile con certe lunghezze, ne esiste uno a prefisso con le stesse. (iii) Kraft serve per escludere codici (somma ) o per costruirli: ad esempio ha somma , quindi non è decodificabile ( potrebbe essere , , ).
4. Teorema di Shannon sulla codifica di sorgente
Teorema (Shannon). Sia un codice con alfabeto di simboli per parole di entropia .
- Se è decodificabile, .
- Esiste un codice a prefisso con . Corollario (): se e solo se tutte le probabilità sono potenze di .
Dimostrazione del punto 1. Per Kraft . Si applica il logaritmo in base (funzione decrescente, quindi inverte la disuguaglianza) e Jensen (log in base è convessa, quindi in questo verso, Segnali, potenza e decibelRichiami che servono in tutto il corso. Unità SI e prefissi (kilo = $10^3$, bit e non byte); decibel $[x]{dB}=10\log{10}x$ per le potenze e $20\log_{10}$ per le ampiezze (prodotti = somme); banda di un segnale (primo zero, a $\alpha$ dB, di energia) e banda pratica; energia, potenza e teorema di Parseval; processi aleatori: media, potenza, autocorrelazione, stazionarietà (WSS), ergodicità, densità spettrale di potenza $\mathcal P_x(f)$ e filtraggio $\mathcal P_y=\lvert G\rvert^2\mathcal P_x$.Segnali, potenza e decibel → §7): (passaggi: e , per il cambio di base e le proprietà dei logaritmi, Esponenziale e logaritmoLa funzione esponenziale a^x (base positiva diversa da 1) e la sua inversa, il logaritmo in base a, con grafici e proprietà.Esponenziale e logaritmo →; la media si porta dentro e fuori dalla somma per la linearità del Valore attesoIl valore atteso E[X] = Σ x p_X(x) è la media dei valori di X pesata con le loro probabilità (esiste se la serie converge assolutamente); per una funzione g vale E[g(X)] = Σ g(x) p_X(x) senza trovare la legge di g(X), ed E è lineare: E[aX + bY + c] = aE[X] + bE[Y] + c.Valore atteso →.)
Vedi anche la stessa teoria nel corso di Ing. Elettronica: Codifica di sorgente - codici a prefisso e teorema di ShannonLa codifica di sorgente riduce il numero di bit mappando le parole della sorgente in parole di lunghezza variabile (più corte per le più probabili), senza perdere informazione. Il codice deve essere decodificabile; i codici a prefisso (nessuna parola è prefisso di un'altra) lo sono. Kraft-McMillan: se il codice è decodificabile $\sum M_y^{-L(b)}\le1$. Teorema di Shannon: $L_y\ge\frac{H(x)}{\log_2M_y}$ e esiste un codice a prefisso con $L_y\le\frac{H(x)}{\log_2M_y}+1$; l'efficienza è $\eta=\frac{H(x)}{L_y\log_2M_y}$.Codifica di sorgente - codici a prefisso e teorema di Shannon → e Codici di Shannon-Fano e di HuffmanIn un codice ottimo le parole più probabili non sono più lunghe di quelle meno probabili e le due parole più lunghe differiscono solo per l'ultimo simbolo. Shannon-Fano costruisce l'albero dall'alto dividendo ripetutamente i simboli in due gruppi di probabilità quasi uguali; Huffman lo costruisce dal basso unendo ogni volta i due simboli meno probabili ed è sempre ottimo tra i codici a prefisso. La lunghezza media $L_y$ è la somma delle probabilità dei nodi uniti, l'efficienza è $\eta=\frac{H}{L_y}$.Codici di Shannon-Fano e di Huffman →.
Dimostrazione del punto 2 (lunghezze di Shannon). Si pone . Allora , cioè , quindi : vale Kraft e per il punto 2 di Kraft-McMillan esiste un codice a prefisso con queste lunghezze. Inoltre e mediando .
Corollario. Con il limite inferiore è raggiunto esattamente quando è intero per ogni , cioè : allora le lunghezze di Shannon sono senza arrotondamento e .
Esempio. Probabilità e codice , , , : e : .
Il teorema dà solo limiti: non dice come trovare il codice migliore. Servono algoritmi.
5. Codifica di Shannon
Definizione (codifica di Shannon). Le lunghezze sono e le parole si assegnano scorrendo l'albero dalle lunghezze più corte alle più lunghe.
Esempio. per . , quindi (Kraft: ). Assegnazione canonica: ; poi tre parole di 3 bit: , , ; poi la parola di 4 bit (si parte da e si aggiunge uno , perché è già usata e è libero). bit, a fronte di bit: .
6. Codifica di Shannon-Fano
Procedura (dall'alto, top-down).
- ordina i simboli per probabilità decrescente;
- dividili in due gruppi (i primi e i restanti) con probabilità totali il più possibile vicine;
- ripeti in ogni gruppo fino ad avere un solo simbolo;
- a ogni ramo associa o (di solito al gruppo di sinistra).
Esempio (stessi simboli). () contro (): differenza (con contro sarebbe ). Poi e () contro (), poi . Parole: , , , , . bit ().
La divisione "quasi uguale" non è sempre unica e l'algoritmo non garantisce l'ottimo; qui comunque è migliore della codifica di Shannon.
7. Codifica di Huffman
Per dire che un codice è ottimo (minima tra i codici decodificabili, cioè, per Kraft, tra quelli a prefisso) servono due proprietà.
Teorema 1. In un codice ottimo, se allora (la parola più probabile non è più lunga). Teorema 2. In un codice ottimo (binario) i due simboli meno probabili hanno parole di lunghezza massima, uguali in tutto tranne l'ultimo bit (sono "fratelli" nell'albero).
Dimostrazione del Teorema 1 (per assurdo). Se fosse con , scambiando le due parole il contributo di e alla lunghezza media passerebbe da a : la differenza è , prodotto di due fattori non negativi cambiato di segno. Quindi non aumenta, e diminuisce se : il codice non sarebbe ottimo. Dimostrazione del Teorema 2. La parola di lunghezza massima ha un "fratello" della stessa lunghezza che differisce solo nell'ultimo bit: se non l'avesse, si potrebbe togliere l'ultimo bit ottenendo ancora un codice a prefisso e una minore, contro l'ipotesi di ottimalità. Per il Teorema 1 le parole più lunghe appartengono ai simboli meno probabili, e tra due parole di uguale lunghezza si possono sempre scambiare i simboli, quindi si può far sì che siano proprio i due meno probabili.
Procedura (dal basso, bottom-up).
- ordina i simboli per probabilità;
- unisci i due meno probabili in un nodo di probabilità la somma;
- ripeti (il nodo nuovo è un simbolo come gli altri) fino alla radice;
- etichetta con e i due rami uscenti da ogni nodo; la parola di un simbolo è la sequenza di etichette dalla radice alla foglia.
Per il Teorema 2 unire i due meno probabili è una scelta ottima, e ripetendo il ragionamento sul problema ridotto si ottiene un codice ottimo.
Esempio. Stessi simboli (). Si uniscono ; poi i due minori sono e : ; poi e : ; infine . Codice: , , , , . bit, : è il minimo possibile con parole intere (meglio di Shannon, , e di Shannon-Fano, ).
Scorciatoia per . è la somma delle probabilità dei nodi interni (le unioni): . Infatti ogni foglia contribuisce con la propria probabilità tante volte quanti nodi attraversa fino alla radice, cioè la sua lunghezza.
Il codice di Huffman non è unico (a parità di probabilità si può scegliere in modi diversi e le etichette 0/1 si scambiano) ma lo è.
Esempio (sette simboli). : bit, quindi per Shannon . Lunghezze di Shannon : (Kraft ). Shannon-Fano : . Huffman: unioni , somma ; (Esercizio - sorgente a sette simboli e codici di Shannon, Shannon-Fano e Huffman).
8. Raggruppare i simboli
Se le probabilità non sono potenze di le parole sono di lunghezza intera e resta sopra . Si può codificare una parola di simboli alla volta: la lunghezza per simbolo è e il margine "" del teorema pesa solo : Il costo è la complessità: il dizionario ha parole.
Esempio. Sorgente senza memoria con : bit. Un simbolo alla volta: Huffman dà lunghezze , (). Per coppie ci sono parole con probabilità (una), (quattro: ) e (quattro): Huffman dà bit/coppia, bit/simbolo, . Per terne bit/simbolo, . Con una sorgente più sbilanciata il guadagno è più evidente: per , e Huffman a un simbolo dà bit (), a coppie (), a terne (), a quaterne ().
9. Codifica aritmetica
La codifica aritmetica (versione di Shannon-Fano-Elias) non assegna una parola a ogni simbolo ma un intervallo di a tutta la sequenza, in modo che la lunghezza del codice per simbolo tenda a senza dover costruire un dizionario enorme.
Procedura. Si divide in sottointervalli di ampiezza uguale alle probabilità dei simboli. Per ogni simbolo letto, l'intervallo corrente si restringe al sottointervallo del simbolo, suddiviso a sua volta con le stesse proporzioni. Alla fine la sequenza è identificata da qualsiasi numero binario nell'intervallo finale (la cui ampiezza è la probabilità ); servono circa bit, cioè l'informazione della sequenza più al massimo 2 bit in totale. Serve un segnale di fine messaggio (STOP).
Esempio. , , : , , . Sequenza :
- : (ampiezza );
- : la prima metà ( dell'ampiezza): ;
- : l'ultimo , da a : ;
- : la prima metà: , ampiezza .
Servono bit: il punto medio troncato a 8 bit è , che sta nell'intervallo (in questo caso bastano anche solo i 3 bit ). In media si resta a bit/simbolo di questa sorgente più qualche bit di coda per l'intera sequenza, senza raggruppamento.
Errori comuni
- Credere che Kraft dimostri la decodificabilità: serve solo per escludere o costruire.
- Dimenticare che Shannon vale per parola: con simboli per parola e è la lunghezza media della parola; per simbolo si divide per .
- Unire i due simboli più probabili in Huffman, o non riordinare i nodi nuovi con quelli rimasti.
- Calcolare senza pesare con le probabilità.
- Pensare che il codice di Huffman sia unico, o che l'efficienza possa superare 1.
- Usare per un codice binario () senza scriverlo nell'efficienza, o dimenticarlo per .
Versione ripasso
Schema e grandezze
- Codifica lossless: la mappa dalle parole della sorgente alle parole di codice deve essere invertibile. Lunghezza media ; efficienza (per codice binario ).
- Idea: parole frequenti corte, parole rare lunghe. Con simboli al secondo il bit-rate è , da confrontare con il rate di informazione (Informazione, entropia e informazione mutuaL'informazione di un evento di probabilità $P$ è $i=\log_2\frac1P$ bit; l'entropia $H(x)=\sum p\log_2\frac1p$ è l'informazione media e misura l'incertezza: $0\le H\le\log_2M$, massimo se i simboli sono equiprobabili. Per due variabili: $\max{H(x),H(y)}\le H(x,y)\le H(x)+H(y)$, $H(x|y)=H(x,y)-H(y)$ e l'informazione mutua $I(x;y)=H(x)-H(x|y)=H(x)+H(y)-H(x,y)\ge0$ (zero se e solo se indipendenti). Per una sorgente di $F_s$ simboli/s: rate di informazione $F_sH_s$, rate nominale $F_s\log_2M$, efficienza $\eta=\frac{H_s}{\log_2M}$.Informazione, entropia e informazione mutua →).
- Esempio: simboli equiprobabili danno bit e lunghezza fissa 3 bit, quindi . Con la lunghezza fissa è 2 bit, : si risparmia il .
Codice a prefisso
- Nessuna parola è prefisso di un'altra. Un codice a prefisso è decodificabile in modo istantaneo; non vale il contrario ( è decodificabile, ma è prefisso di ).
- Esempio: si legge in un solo modo. Con la stringa è ambigua.
Kraft-McMillan
- Codice decodificabile . Viceversa, se esiste un codice a prefisso con quelle lunghezze.
- Costruzione: si assegnano le parole in ordine di lunghezza crescente, scegliendo ogni volta un nodo libero dell'albero binario.
- Esempi: le lunghezze danno (esiste un codice a prefisso). Le lunghezze danno : nessun codice decodificabile.
- La condizione è necessaria ma non sufficiente: ha somma , ma è ambiguo.
Teorema di Shannon
- Codice decodificabile . Dimostrazione: da Kraft, si applica il logaritmo (che inverte la disuguaglianza) e la disuguaglianza di Jensen.
- Esiste un codice a prefisso con .
- Con : se e solo se tutte le probabilità sono potenze di .
- Lunghezze di Shannon: . Soddisfano Kraft perché .
- Il teorema dà solo limiti: non dice come costruire il codice migliore.
Codifica di Shannon
- Esempio : , quindi e Kraft .
- Parole: , , , , . bit contro bit: .
Codifica di Shannon-Fano (dall'alto)
- Si ordinano i simboli per probabilità decrescente, si dividono in due gruppi con probabilità il più possibile vicine, si ripete in ogni gruppo; al ramo di sinistra. Non garantisce l'ottimo.
- Stesso esempio: () contro (), poi contro . Parole , , , , ; bit.
Codifica di Huffman (dal basso)
- Si uniscono i due simboli meno probabili in un nodo con probabilità somma; si ripete trattando il nodo come un simbolo; si etichettano i rami con e .
- Teorema 1: in un codice ottimo la parola più probabile non è più lunga. Teorema 2: in un codice ottimo binario i due simboli meno probabili hanno parole di lunghezza massima, uguali tranne l'ultimo bit. Per questo unire i due meno probabili è una scelta ottima e il codice risultante è ottimo.
- Esempio: ; ; ; . Codice , , , , : bit, .
- Scorciatoia: è la somma delle probabilità dei nodi interni, .
- Il codice non è unico (si possono scambiare le etichette e scegliere tra probabilità uguali), ma sì.
- Sette simboli : bit. Lunghezze di Shannon : . Shannon-Fano: . Huffman: unioni , somma , (Esercizio - sorgente a sette simboli e codici di Shannon, Shannon-Fano e Huffman).
Raggruppare i simboli
- Codificando simboli alla volta: . Il costo è il dizionario di parole.
- Esempio , bit: Huffman a un simbolo dà (); a coppie bit/simbolo (); a terne bit/simbolo ().
- Sorgente più sbilanciata , : un simbolo alla volta bit (); a coppie (); a terne (); a quaterne ().
Codifica aritmetica
- Tutta la sequenza è identificata da un intervallo di . Ogni simbolo restringe l'intervallo al proprio sottointervallo, suddiviso con le stesse proporzioni. Servono circa bit per la sequenza, più un simbolo di fine messaggio (STOP).
- Esempio: , , , sequenza : intervallo finale , ampiezza . Servono bit: sta nell'intervallo.
Errori tipici:
- Credere che Kraft dimostri la decodificabilità: serve solo per escludere o costruire codici.
- Dimenticare che Shannon vale per parola: per simbolo si divide per .
- Unire i due simboli più probabili in Huffman, o non riordinare i nodi nuovi con quelli rimasti.
- Pensare che il codice di Huffman sia unico, o che l'efficienza possa superare .