Salta al contenuto
Note per Studenti Esercizio - quantizzatore per densità esponenziale limitata tra -1 e 1, codice di Shannon e Huffman (esame del 23 gennaio 2024, es. 173)

Esercizio - quantizzatore per densità esponenziale limitata tra -1 e 1, codice di Shannon e Huffman (esame del 23 gennaio 2024, es. 173)

Esame
In questa pagina 5

Testo (esame del 23 gennaio 2024, esercizio 173). Una sorgente genera un campione XX ogni 1010 ms con densità di probabilità pX(a)={11,7 e−∣a∣/3,a∈[−1,1],0altrove,p_X(a)=\begin{cases}\dfrac1{1{,}7}\,e^{-|a|/3},&a\in[-1,1],\\0&\text{altrove,}\end{cases} che ha potenza 0,30{,}3. I diversi campioni sono variabili aleatorie indipendenti. Ogni campione viene quantizzato con un quantizzatore uniforme da progettare e la sequenza di bit di ogni campione quantizzato entra in un codificatore di sorgente da progettare.

  1. (2p) Calcolare il valore di saturazione e il numero di livelli di quantizzazione del quantizzatore che fornisce un rapporto segnale-rumore di quantizzazione di almeno 1010 dB con il numero minimo di bit per campione.
  2. (2p) Calcolare la lunghezza media delle parole del codice di sorgente che utilizza la codifica di Shannon.
  3. (2p) Dire se esiste un (altro) codice di sorgente binario che codifica 300300 valori quantizzati e ha lunghezza media delle parole di codice di 300300 bit, motivando la risposta.
  4. (3p) Utilizzando ora un quantizzatore non uniforme al posto di quello uniforme, i valori quantizzati hanno probabilità 0,10{,}1, 0,140{,}14, 0,20{,}2, 0,240{,}24 e 0,320{,}32. Calcolare il numero medio di bit al secondo che escono dal codificatore di sorgente che utilizza la codifica binaria ottima.

Teoria usata: Quantizzazione uniforme - saturazione, errore granulare e SNR di quantizzazioneUn quantizzatore uniforme a L = 2^b livelli e range [−v_sat, v_sat] ha passo Δ = 2v_sat/L. L'errore e = x − x^(q) è di saturazione fuori range (illimitato, da rendere raro con P_sat piccola) e granulare dentro (|e| ≤ Δ/2, uniforme con potenza Δ²/12). L'SNR di quantizzazione Λ_q = E[x²]/E[e²] vale in decibel 20log₁₀(σ_x/v_sat) + 4,77 + 6,02·b: ogni bit in più dà 6 dB. Per b minimo che garantisce una specifica: ⌈(specifica − c)/6,02⌉ con c = 20log₁₀(σ_x/v_sat) + 4,77.Quantizzazione uniforme - saturazione, errore granulare e SNR di quantizzazione →, Codici di Shannon, Huffman ed Elias e codifica aritmeticaIl codice di Shannon(-Fano) assegna alla parola $i$ lunghezza $l_i=\lceil-\log_{M_y}p_i\rceil$, soddisfa Kraft-McMillan e ha $H\le L_y<H+1$; è ottimo solo se le probabilità sono potenze di $\frac1{M_y}$. Il codice ottimo (lunghezza media minima) dà parole più lunghe ai simboli meno probabili e ha almeno due parole di lunghezza massima che differiscono solo nell'ultimo simbolo: lo costruisce la procedura di Huffman, che unisce a ogni passo i due nodi meno probabili. Il codice di Elias prende le prime $l_i=\lceil-\log_2p_i\rceil+1$ cifre del punto medio dell'intervallo di ampiezza $p_i$ in $[0,1)$: è a prefisso ma subottimo ($H+1\le L_y<H+2$), e si adatta alla codifica aritmetica adattativa.Codici di Shannon, Huffman ed Elias e codifica aritmetica →, Entropia - informazione di un evento, disuguaglianza di Jensen e valore massimoL'informazione di un evento di probabilità $P$ è $i=\log_2\frac1P$ bit (zero per l'evento certo, additiva per eventi indipendenti). L'entropia di una variabile aleatoria discreta è l'informazione media, $H(x)=E[i_x(x)]=\sum_aP_x(a)\log_2\frac1{P_x(a)}$; vale $0\le H(x)\le\log_2M$ con $M$ cardinalità dell'alfabeto, e il massimo $\log_2M$ si raggiunge se e solo se i simboli sono equiprobabili (dimostrazione con la disuguaglianza di Jensen, perché il logaritmo è strettamente concavo).Entropia - informazione di un evento, disuguaglianza di Jensen e valore massimo →, Quantizzazione non uniforme, companding e conversione A-DIn un quantizzatore non uniforme gli intervalli I_i hanno larghezze diverse (stretti dove la densità è alta) e la potenza dell'errore è M_e = Σ M_{e_i} P(x ∈ I_i), con M_{e_i} = E[(x − a_qi)² | x ∈ I_i]. Si realizza con il companding (compressore μ(x), quantizzatore uniforme, espansore) o raggruppando gli intervalli di un quantizzatore uniforme fine. Nella conversione A-D con campionamento ogni T_s e b bit per campione, T_b = T_s/b e R_b = b/T_s bit/s. Esempio completo con densità esponenziale a due lati: v_sat, b, bit rate e periodo di simbolo della 16-QAM.Quantizzazione non uniforme, companding e conversione A-D →.

La densità. È una campana a punta (esponenziale a due lati) limitata a [−1,1][-1,1], con valore massimo 11,7=0,588\frac1{1{,}7}=0{,}588 in 00 e e−1/31,7=0,42\frac{e^{-1/3}}{1{,}7}=0{,}42 ai bordi. La costante 1,71{,}7 è un'approssimazione di 2⋅3 (1−e−1/3)=1,69922\cdot3\,(1-e^{-1/3})=1{,}6992 (normalizzazione: ∫−11e−∣a∣/3da=6 (1−e−1/3)\int_{-1}^1e^{-|a|/3}da=6\,(1-e^{-1/3})), quindi l'area vale 1,00051{,}0005; la potenza data, 0,30{,}3, è l'approssimazione di ∫a2pX=0,306\int a^2p_X=0{,}306.

Grafico interattivo: Densità p_X(a) = e^(−|a|/3)/1,7 su [−1, 1]: massimo 0,588 in a = 0, valore 0,42 ai bordi; fuori da [−1, 1] è nulla

(1) Quantizzatore uniforme

Saturazione. I campioni stanno in [−1,1][-1,1] con certezza: vsat=1v_{sat}=1 e Psat=0P_{sat}=0.

Numero di bit. Con potenza MX=0,3M_X=0{,}3 (media nulla per simmetria, quindi σX2=0,3\sigma_X^2=0{,}3) e vsat=1v_{sat}=1: 20log⁡10σXvsat=20log⁡100,3=−5,23 dB,c=−5,23+4,77=−0,46.20\log_{10}\frac{\sigma_X}{v_{sat}}=20\log_{10}\sqrt{0{,}3}=-5{,}23\ \text{dB},\qquad c=-5{,}23+4{,}77=-0{,}46. Si impone c+6,02 b≥10c+6{,}02\,b\ge10, cioè b≥10−4,77+5,236,02=10,466,02=1,74 ⟹ b=2.b\ge\frac{10-4{,}77+5{,}23}{6{,}02}=\frac{10{,}46}{6{,}02}=1{,}74\ \Longrightarrow\ b=2. Con b=1b=1 l'SNR sarebbe −0,46+6,02=5,56-0{,}46+6{,}02=5{,}56 dB (non basta), con b=2b=2 11,5811{,}58 dB. I livelli sono L=22=4L=2^2=4, con passo Δ=2vsatL=0,5\Delta=\frac{2v_{sat}}L=0{,}5, intervalli [−1,−0,5][-1,-0{,}5], [−0,5,0][-0{,}5,0], [0,0,5][0,0{,}5], [0,5,1][0{,}5,1] e livelli ±0,25\pm0{,}25, ±0,75\pm0{,}75.

(2) Codice di Shannon

Probabilità dei livelli. Si integra la densità su ciascun intervallo (per simmetria bastano [0,0,5][0,0{,}5] e [0,5,1][0{,}5,1]): P([0,5,1])=∫0,51e−a/31,7da=31,7(e−1/6−e−1/3)=1,7647 (0,8465−0,7165)=0,229,P\big([0{,}5,1]\big)=\int_{0{,}5}^1\frac{e^{-a/3}}{1{,}7}da=\frac{3}{1{,}7}\Big(e^{-1/6}-e^{-1/3}\Big)=1{,}7647\,(0{,}8465-0{,}7165)=0{,}229, P([0,0,5])=31,7(1−e−1/6)=1,7647⋅0,1535=0,271.P\big([0,0{,}5]\big)=\frac{3}{1{,}7}\Big(1-e^{-1/6}\Big)=1{,}7647\cdot0{,}1535=0{,}271. Si arrotonda a p1=p4=0,23p_1=p_4=0{,}23 (livelli esterni) e p2=p3=0,27p_2=p_3=0{,}27 (livelli interni): somma 2(0,23+0,27)=12(0{,}23+0{,}27)=1.

Lunghezze. ⌈−log⁡2p⌉\lceil-\log_2p\rceil: per 0,230{,}23, −log⁡20,23=2,12⇒3-\log_20{,}23=2{,}12\Rightarrow3 bit; per 0,270{,}27, −log⁡20,27=1,89⇒2-\log_20{,}27=1{,}89\Rightarrow2 bit (Codici di Shannon, Huffman ed Elias e codifica aritmeticaIl codice di Shannon(-Fano) assegna alla parola $i$ lunghezza $l_i=\lceil-\log_{M_y}p_i\rceil$, soddisfa Kraft-McMillan e ha $H\le L_y<H+1$; è ottimo solo se le probabilità sono potenze di $\frac1{M_y}$. Il codice ottimo (lunghezza media minima) dà parole più lunghe ai simboli meno probabili e ha almeno due parole di lunghezza massima che differiscono solo nell'ultimo simbolo: lo costruisce la procedura di Huffman, che unisce a ogni passo i due nodi meno probabili. Il codice di Elias prende le prime $l_i=\lceil-\log_2p_i\rceil+1$ cifre del punto medio dell'intervallo di ampiezza $p_i$ in $[0,1)$: è a prefisso ma subottimo ($H+1\le L_y<H+2$), e si adatta alla codifica aritmetica adattativa.Codici di Shannon, Huffman ed Elias e codifica aritmetica →). Lˉ=2⋅0,23⋅3+2⋅0,27⋅2=1,38+1,08=2,46 bit.\bar L=2\cdot0{,}23\cdot3+2\cdot0{,}27\cdot2=1{,}38+1{,}08=2{,}46\ \text{bit.} Il codice di Shannon spreca: la lunghezza fissa (b=2b=2 bit) è già migliore (2<2,462<2{,}46). Un codice di Huffman su queste probabilità (0,23; 0,27; 0,27; 0,230{,}23;\ 0{,}27;\ 0{,}27;\ 0{,}23) fonderebbe 0,23+0,230{,}23+0{,}23 e 0,27+0,270{,}27+0{,}27 e darebbe lunghezza 22 a tutti i simboli, cioè Lˉ=2\bar L=2 bit, appena sopra l'entropia (1,9951{,}995 bit, punto 3).

(3) Un codice per 300300 valori con lunghezza media 300300 bit?

L'entropia di un campione quantizzato è H=−2⋅0,23log⁡20,23−2⋅0,27log⁡20,27=0,975+1,020=1,995 bit.H=-2\cdot0{,}23\log_20{,}23-2\cdot0{,}27\log_20{,}27=0{,}975+1{,}020=1{,}995\ \text{bit}. I campioni sono indipendenti, quindi 300300 valori hanno entropia 300 H=598,6300\,H=598{,}6 bit (l'entropia di variabili indipendenti è la somma). Per il teorema di Shannon sulla codifica di sorgente ogni codice binario univocamente decodificabile ha lunghezza media non inferiore all'entropia: per 300300 valori almeno 598,6598{,}6 bit. Il codice proposto, con 300300 bit in media, richiederebbe una media di 11 bit per valore, meno dei 1,9951{,}995 bit di informazione che ogni valore contiene. Non esiste. (La soluzione del corso riporta 598,5598{,}5 bit con l'entropia arrotondata a 1,9951{,}995.)

(4) Quantizzatore non uniforme e codice ottimo (Huffman)

Le probabilità sono 0,1; 0,14; 0,2; 0,24; 0,320{,}1;\ 0{,}14;\ 0{,}2;\ 0{,}24;\ 0{,}32 (somma 11). Il codice binario ottimo è quello di Huffman: si uniscono ripetutamente i due meno probabili.

  1. 0,10+0,14=0,240{,}10+0{,}14=0{,}24: restano 0,20; 0,24; 0,24; 0,320{,}20;\ 0{,}24;\ 0{,}24;\ 0{,}32;
  2. 0,20+0,24=0,440{,}20+0{,}24=0{,}44: restano 0,24; 0,32; 0,440{,}24;\ 0{,}32;\ 0{,}44;
  3. 0,24+0,32=0,560{,}24+0{,}32=0{,}56: restano 0,44; 0,560{,}44;\ 0{,}56;
  4. 0,44+0,56=10{,}44+0{,}56=1.

Le parole risultanti (per esempio) sono 011011 (0,10{,}1), 010010 (0,140{,}14), 1111 (0,20{,}2), 1010 (0,240{,}24), 0000 (0,320{,}32): lunghezze 3,3,2,2,23,3,2,2,2. Lunghezza media Lˉ=0,1⋅3+0,14⋅3+0,2⋅2+0,24⋅2+0,32⋅2=0,30+0,42+0,40+0,48+0,64=2,24 bit/campione.\bar L=0{,}1\cdot3+0{,}14\cdot3+0{,}2\cdot2+0{,}24\cdot2+0{,}32\cdot2=0{,}30+0{,}42+0{,}40+0{,}48+0{,}64=2{,}24\ \text{bit/campione}. (Scegliendo diversamente il simbolo da unire a parità di probabilità, per esempio con la 0,240{,}24 originale invece di quella fusa, si ottengono parole diverse ma la stessa lunghezza media 2,242{,}24.) Poiché esce un campione ogni 1010 ms, il numero medio di bit al secondo in uscita dal codificatore è R=2,24 bit10⋅10−3 s=224 bit/s.R=\frac{2{,}24\ \text{bit}}{10\cdot10^{-3}\ \text{s}}=224\ \text{bit/s}. Controllo: l'entropia di queste probabilità è 2,2142{,}214 bit, quindi 2,214≤2,24<3,2142{,}214\le2{,}24<3{,}214 e il minimo teorico sarebbe 221,4221{,}4 bit/s: Huffman è a 1,2%1{,}2\% dal limite.

(Tutti i risultati ricalcolati con Python: b=1,74→2b=1{,}74\to2 con 11,5811{,}58 dB, P=(0,2293; 0,2709)P=(0{,}2293;\,0{,}2709), Lˉ=2,46\bar L=2{,}46, H=1,9953H=1{,}9953, 300H=598,6300H=598{,}6, Huffman 2,242{,}24, H′=2,2139H'=2{,}2139, 224224 bit/s. Coincidono con le soluzioni del corso.)

Errori comuni

  • Usare vsat>1v_{sat}>1: il segnale non esce da [−1,1][-1,1], quindi basta vsat=1v_{sat}=1.
  • Fermarsi a b=1,74b=1{,}74 senza arrotondare per eccesso, o dire b=1b=1 perché "quasi basta".
  • Nel punto 3, confrontare 300300 bit con 300⋅2300\cdot2 (lunghezza fissa) invece che con 300H300H: la risposta si ottiene con il teorema di Shannon.
  • Calcolare i bit al secondo moltiplicando per 1010 ms invece di dividere: 2,240,01=224\frac{2{,}24}{0{,}01}=224 bit/s.
  • Considerare il codice di Shannon ottimo: l'ottimo è Huffman.

Versione ripasso

Testo. pX(a)=11,7e−∣a∣/3p_X(a)=\frac1{1{,}7}e^{-|a|/3} su [−1,1][-1,1], potenza 0,30{,}3, un campione ogni 1010 ms, indipendenti. (1) vsatv_{sat} e livelli per Λq≥10\Lambda_q\ge10 dB con bb minimo. (2) Lunghezza media del codice di Shannon. (3) Esiste un codice per 300300 valori con lunghezza media 300300 bit? (4) Con probabilità 0,1; 0,14; 0,2; 0,24; 0,320{,}1;\,0{,}14;\,0{,}2;\,0{,}24;\,0{,}32: bit/s del codice ottimo.

(Quantizzazione uniforme - saturazione, errore granulare e SNR di quantizzazioneUn quantizzatore uniforme a L = 2^b livelli e range [−v_sat, v_sat] ha passo Δ = 2v_sat/L. L'errore e = x − x^(q) è di saturazione fuori range (illimitato, da rendere raro con P_sat piccola) e granulare dentro (|e| ≤ Δ/2, uniforme con potenza Δ²/12). L'SNR di quantizzazione Λ_q = E[x²]/E[e²] vale in decibel 20log₁₀(σ_x/v_sat) + 4,77 + 6,02·b: ogni bit in più dà 6 dB. Per b minimo che garantisce una specifica: ⌈(specifica − c)/6,02⌉ con c = 20log₁₀(σ_x/v_sat) + 4,77.Quantizzazione uniforme - saturazione, errore granulare e SNR di quantizzazione →, Codici di Shannon, Huffman ed Elias e codifica aritmeticaIl codice di Shannon(-Fano) assegna alla parola $i$ lunghezza $l_i=\lceil-\log_{M_y}p_i\rceil$, soddisfa Kraft-McMillan e ha $H\le L_y<H+1$; è ottimo solo se le probabilità sono potenze di $\frac1{M_y}$. Il codice ottimo (lunghezza media minima) dà parole più lunghe ai simboli meno probabili e ha almeno due parole di lunghezza massima che differiscono solo nell'ultimo simbolo: lo costruisce la procedura di Huffman, che unisce a ogni passo i due nodi meno probabili. Il codice di Elias prende le prime $l_i=\lceil-\log_2p_i\rceil+1$ cifre del punto medio dell'intervallo di ampiezza $p_i$ in $[0,1)$: è a prefisso ma subottimo ($H+1\le L_y<H+2$), e si adatta alla codifica aritmetica adattativa.Codici di Shannon, Huffman ed Elias e codifica aritmetica →)

Teoria collegata