A cura del prof. Gino Tombolini – Itis ‘Montani’ Fermo TEORIA DELL'INFORMAZIONE Una informazione è un frammento della realtà; noi possiamo conoscere tale realtà attraverso una rappresentazione di essa per mezzo di simboli secondo un codice convenuto, e che giunge a noi in virtù della trasmissione di una certa quantità di questi simboli che chiamiamo messaggio. Un simbolo può essere, ad esempio, una sensazione che rivela la forma, il colore, il suono, una parola, una lettera o altro. Chiamiamo alfabeto l'insieme dei simboli che si applica alla trasmissione di un determinato tipo di messaggio. L'alfabeto ed i simboli sono tutti utili a trasmetterci non tutti i dati della realtà, ma una certa quantità. Ci domandiamo : "Come misurare la quantità di informazione trasmessa da un messaggio ?". La quantità di informazione deve essere indipendente dal tipo di alfabeto e valida per qualsiasi alfabeto. Esempio : Alfabeto I di 16 lettere A....P (A1) Alfabeto II di 4 lettere A B C D (A2) Alfabeto III di 2 lettere A B (A3) Cerchiamo di trascrivere A1 mediante A2; non possiamo avere corrispondenza biunivoca tra lettere di A1 e lettere di A2 ma dobbiamo usare due lettere di A2 per una lettera di A1, ottenendo cosi un codice : A1 --------A B C D E . . . P A2 ----------AA AB AC AD BA .. .. .. DD Ora vi è equivalenza tra i due messaggi trasmessi con A1 adottato mediante A2. Stesso discorso per A2 mediante A3 : A2 --------A B C D o con il codice A3 --------AA AB BA BB A1 A4 --------- ----------A AAAA B AAAB C AABA D AABB E ABAA . .. . .. . .. P BBBB Si deduce che scrivendo un messaggio mediante A1 e poi trascrivendolo mediante A3 (o A2), il messaggio diventa quattro volte (o due volte) più lungo. E' lecito pensare che la quantità di informazione trasmessa da ogni lettera di A1 è quattro volte maggiore (o due volte maggiore) di quella trasmessa da ciascuna lettera di A3 (o A2). Supponiamo che la quantità di informazione dipenda dal numero di simboli dell'alfabeto. Consideriamo unitaria la quantità di informazione trasmessa da un alfabeto di 2 soli simboli; allora : quantità di informazione di A3 quantità di informazione di A2 quantità di informazione di A1 = = = 1 2 4 1 A cura del prof. Gino Tombolini – Itis ‘Montani’ Fermo ora 16, 4, 16 = 24 2 sono i logaritmi in base 2 della 4 = 22 2 = 21 quantità di informazione : Possiamo scrivere : I = log2 n I = Quantità di informazione n = Numero di simboli dell'alfabeto La quantità di informazione per simbolo è rappresentata dal numero di simboli dell'alfabeto binario necessari per trascrivere ciascuna lettera dell'alfabeto utilizzato. E' quindi vero che I dipende dalla numerosità dell'insieme a cui appartiene. L'unità di misura della quantità di informazione è il bit (binary digit). Per un messaggio di N lettere scelte in un alfabeto di n simboli si hanno nN messaggi possibili quindi l'informazione totale vale : I = N * log2 n = log2 (nN) La quantità di informazione equivale a log2 del numero di variazioni possibili. Immaginiamo che i simboli siano tutti equiprobabili con probabilità p = 1/n. Si voglia calcolare la probabilità che una sorgente, prelevando casualmente uno fra n simboli dell'alfabeto, riesca a produrre una particolare configurazione di N simboli (ad es. ABDAACC dove N=7). Tale probabilità equivale al rapporto tra i casi favorevoli (uno solo) ed il numero di casi possibili (nN); tale probabilità vale quindi: p = 1/nN Ricordando la definizione di quantità di suddetto, si può scrivere : informazione (I) per il caso I = log2 (nN) = log2 (1/(1/nN)) = log2 (1/p) = - log2 p Quindi la quantità di informazione è tanto maggiore quanto più p è piccolo, cioè tanto più il messaggio è improbabile. Occorre sottolineare che si può avere anche il caso in cui i simboli non hanno tutti uguale probabilità (pensiamo ad una lingua in cui alcune lettere sono più probabili di altre). In questo caso la quantità di informazione di un messaggio è uguale al prodotto delle probabilità di tutte le lettere che formano il messaggio, probabilità che sono classificate e raggruppate (es. p(A), p(B), ... p(Z)..). La probabilità di N lettere equiprobabili risulta : ptot = pN; se invece esse non sono equiprobabili : N ptot = ∏ p( xi) i =1 quindi la quantità di informazione totale trasportata dal gruppo è pari a : N N Itot = log2 1/ptot = -log ptot = -log2( ∏ p( xi) ) = i =1 - ∑ log i =1 2 p(xi) Esempio : n=5 simboli calcoliamo la p(x1)=1/4, quantità di p(x2)=1/8, p(x3)=1/8, p(x4)=1/4, p(x5)=1/4; informazione di ogni simbolo: I(x1)=log2(1/p(x1)) = log2(4) = 2 bit I(x2) = I(x3) = 3 bit I(x4) = I(x5) = 2 bit 2 A cura del prof. Gino Tombolini – Itis ‘Montani’ Fermo La quantità di x1x2x1x4 è pari componenti: informazione in un messaggio di 4 lettere ad esempio alla somma delle quantità di informazione dei simboli I(messaggio) = I(x1) + I(x2) +I(x1) +I(x4) = 2+3+2+2 = 9 bit. Se invece i simboli fossero tutti equiprobabili (ad esempio con p(x) = 1/5), la quantità di informazione trasportata dallo stesso messaggio sarebbe stata : I(messaggio) = 4 * I(x) =4 * log2(5) = 9,3 bit. Si può notare in questo proveniente da sorgenti diverse porta esempio quantità che lo stesso messaggio di informazione diversa. Un concetto molto importante nella teoria dell'informazione è il concetto di quantità di informazione media trasportata da ogni simbolo; tale quantità è detta ENTROPIA (H). L'entropia è la media ponderata dei contenuti informativi dei vari simboli dell'alfabeto : (formula di Shannon - Wiener) N H = ∑ p(xi) * I(xi) N = i =1 ∑ p(xi) * log2[1/p(xi)] N = - i =1 ∑ p(xi) * log2(p(xi) i =1 L'unità di misura dell'entropia è in bit/simbolo. L'entropia rappresenta la misura della varietà (o dell'indeterminazione) dei messaggi prodotti da una sorgente. Una proprietà dell'entropia è che essa è massima quando i simboli sono tutti equiprobabili; ossia le varie p(xi) sono uguali. E' intuitivo pensare che l'entropia diminuisce se i simboli non sono equiprobabili. Come caso limite possiamo pensare ad esempio ad una moneta truccata per la quale vale : probabilità(Testa) = 1 probabilità(Croce) = 0 H = - p(T) * log2(T) - p(C) * log2(C) = - 0 - 0 = 0 Se invece p(T) = 1/2 p(C) = 1/2 H H = - 1/2 * (-1) - 1/2 * (-1) = 1 Possiamo anche tracciare un grafico che riporta l'andamento dell'entropia rispetto alla probabilità dei simboli; ricordando che p(T) = 1 - p(C), si ottiene la seguente curva : Si vede che H è massimo quando equiprobabili. i simboli sono 1 0,5 P(testa) Possiamo a questo punto trarre le seguenti conclusioni : L'entropia H di una sorgente di n simboli non può mai essere superiore log2n, valore corrispondente ad una sorgente con n simboli equiprobabili. a H <= log2n CODIFICAZIONE DI SORGENTE La codifica consiste nella trascrizione di un messaggio da un linguaggio in un altro. Un codice è una rappresentazione di simboli di una sorgente attraverso delle parole in codice (normalmente nel campo informatico si fa riferimento ad un codice base formato da due cifre binarie). Un codice si dice distinto o non singolare se è sempre possibile distinguere le parole che ne fanno parte, cioè non esistono simboli uguali. Ad esempio : X1 = 1 X2 = 1 X3 = 0 X4 = 00 3 A cura del prof. Gino Tombolini – Itis ‘Montani’ Fermo non è distinto poiché X1 = X2. Un codice distinto è univocamente decifrabile se è sempre possibile identificare una parola inserita in una qualsiasi sequenza di altre parole appartenenti allo stesso codice; in altre parole non avviene mai che una sequenza del codice possa provenire da altre due (o più) sequenze dello stesso codice. Ad esempio il codice (sempre a 4 simboli) : X1 = 1 X2 = 0 X3 = 11 X4 = 00 e distinto ma non univocamente decifrabile, poiché la ricezione di una sequenza qualsiasi di simboli potrebbe corrispondere a più di una sequenza di simboli; ad esempio la sequenza 0011 potrebbe essere interpretata come X4X3 oppure X2X2X1X1 oppure X4X1X1 oppure X2X2X3. Il codice X1 = 1 X2 = 10 X3 = 100 X4 = 1000 e distinto ed univocamente decifrabile in quanto la ricezione di un 1 indica sempre l'inizio di una parola. Per tale ultimo codice, la codifica può però risultare lunga e complessa. Un codice distinto univocamente decifrabile è detto istantaneo se in fase di ricezione è possibile identificare le parole appena dopo l'arrivo della cifra finale. Un codice con tali caratteristiche è quindi il seguente : X1 = 1 X2 = 01 X3 = 001 X4 = 0001 infatti la ricezione di un uno determina la fine della parola che può essere quindi decodificata istantaneamente. Tale codice però non è economicamente ottimale; infatti pensando di codificare con tale tecnica le lettere dell'alfabeto italiano, avremo che l'ultima lettera avrà una lunghezza di 26 bit. Occorre trovare una tecnica più economica di codifica, magari che tenga presente il numero di cifre binarie utilizzate per la codifica dei simboli. Si definisce lunghezza (li) di un simbolo in un codice xi, il numero di cifre binarie di cui esso è composto. Si definisce Lunghezza di un codice (L) la lunghezza media (ponderata) delle sue parole : n L = ∑ p(xi) * li i=1 ed è espresso in bit / parole in codice. Siccome il miglior codice è sicuramente quello con minor numero medio di cifre binarie, cerchiamo di trovare, per una sorgente, un codice istantaneo di lunghezza L minima. Esiste il I* teorema di Shannon che ci aiuta in tale ricerca: Data una sorgente ad n simboli, senza memoria, e con alfabeto di codice binario, è sempre possibile trovare un codice istantaneo tale che la sua lunghezza L soddisfi la condizione H <= L In altre parole i simboli non possono essere rappresentati con un numero di cifre binarie inferiori all'entropia della sorgente stessa, cioè la lunghezza minima del codice è sempre maggiore o al più uguale all'entropia della sorgente. Ad esempio il codice a 4 simboli : X1 = 00 X2 = 01 X3 = 10 X4 = 11 e distinto, univocamente decifrabile, istantaneo (perché ogni due cifre si può decodificare istantaneamente il simbolo ricevuto); considerando ad esempio : p(X1) = 1/2 p(X2) = 1/4 p(X3) = 1/8 p(X4) = 1/8 si ha : L = pi*li = 1/2 * 2 + 1/4 * 2 + 1/8 * 2 + 1/8 * 2 = 2 bit/p.c. H = pi*log21/pi = 1/2 * 1 + 1/4 * 2 + 1/8 * 3 + 1/8 * 3 = = 1,75 bit/simbolo 4 A cura del prof. Gino Tombolini – Itis ‘Montani’ Fermo E' da notare inoltre che solo i codici lunghezza minore dell'entropia di sorgente. non istantanei possono avere Il teorema visto ci dice quale deve essere la lunghezza minima del codice, ma non da indicazioni circa la costruzione del codice stesso. Una delle procedure empiriche più note per ottenere ciò è quella di Huffman. Definiamo prefisso di una parola in codice una qualsiasi delle sequenze binarie ottenute troncando la parola stessa; come conseguenza, all'interno di un codice istantaneo non deve esistere nessuna parola che sia prefisso di un'altra. Immaginiamo di dover associare un codice binario ad un alfabeto di cinque simboli X1, X2, X3, X4, X5. Possiamo provare come segue : 1 - assegniamo X1=1, X2=0, qui ci blocchiamo perché qualsiasi altra sequenza avrebbe come prefisso X1 o X2; 2 - riproviamo: assegniamo X1=1, X2=00, il resto delle parole non deve iniziare ne con 1 ne con 00; quindi X3=010, X4=011, X5=?, non abbiamo più sequenze univoche; 3 - proviamo ancora : X1=1, X2=000, X3=010, X4=001, X5=011; questo è un codice istantaneo; 4 - possiamo anche scrivere : X1=01, X2=11, X3=10, X4=001, X5=000; anche questo codice è istantaneo. Quale sarà il codice migliore ? Occorre conoscere la probabilità di ricorrenza dei simboli della sorgente (non abbiamo in fatti tenuto conto di tale probabilità di occorrenza). Si ha un codice istantaneo ottimale quando H = L. L'algoritmo per ottenere tale codice, tenendo conto anche della probabilità dei simboli, è l'algoritmo di HUFFMAN. Consideriamo un alfabeto di n simboli con probabilità conosciuta : p(1), p(2), ..,p(n); l'algoritmo è descrivibile come segue : Algoritmo di Huffman Ripetere n - 2 volte assegnare la cifra finale (0 o 1) ai simboli con probabilità minore creare un nuovo simbolo con probabilità pari alla somma delle probabilità dei simboli di partenza otteniamo un codice con un simbolo in meno fine for assegnare ai due simboli rimasti i valori 0 e 1 Esempio : p(X1)=1/2 X3 (p=1/8) -- 0 X4 (p=1/8) -- 1 p(X2)=1/4 p(X3)=1/8 X34 (p=1/4) -- 0 X2 (p=1/4) -- 1 restano due soli simboli p(X4)=1/8 X234 (p=1/2) -- 0 X1 (p=1/2) -- 1 Di conseguenza : X1=1 X2=01 X3=000 X4=001 è un codice istantaneo e nessuna parola è prefisso di un'altra. L = pi*li = 1/2*1 + 1/4*2 + 1/8*3 + 1/8*3 = 1,75 b/pc = H 5 A cura del prof. Gino Tombolini – Itis ‘Montani’ Fermo Possono esistere più codici ottimali (basta scambiare 0 con 1) del tutto equivalenti. Il codice che si ottiene è un codice non uniforme cioè le parole hanno diversa lunghezza. Si definisce efficienza di un codice il rapporto tra l’entropia e la lunghezza del codice. Il codice ottimale ha un’efficienza pari a 1 (H=L). µ = H / L CAPACITÀ DI CANALE Se il canale è soggetto a disturbi ed occorre quindi utilizzare una successiva codifica di canale per diminuire l'effetto del rumore. I dati vengono presentati al canale sotto forma di tensioni positive e negative (0=V+, 1=V-) per un tempo prefissato T; la frequenza di cifra vale quindi 1/T. Il ricevitore campiona il canale ogni T secondi, vi riscontra una tensione e la interpreta come 0 o 1 (fase di decodifica del canale). Il rumore z presenta sul canale può aver alterato il valore della cifra trasmessa. La probabilità di errore è la probabilità che venga riconosciuta una cifra diversa da quella trasmessa : (indicando con Vz la tensione introdotta dal rumore) pe = p(0) * p(Vz < V-) + p(1) * p(Vz > V+) cioè la somma delle probabilità : - che la sorgente trasmetta uno zero (tensione positiva) ed il rumore crei una tensione minore della tensione (negativa) usata per codificare un uno, facendo in modo che venga riconosciuta una tensione complessiva negativa, cioè il segnale corrispondente all'uno logico; - che avvenga il perfetto contrario : venga trasmesso un uno (tensione negativa) ed il rumore alteri questa tensione trasformandola in positiva (codifica dell'uno logico). E' ovvio che il caso peggiore è quello in cui Pe vale 1/2, cioè si ha il 50% di probabilità di errore su ogni cifra trasmessa. Si noti che è il caso peggiore in quanto se Pe > 50%, basta invertire il livello del segna ricevuto per avere Pe < 50%. Occorre trovare dei meccanismi che permettano di rilevare e correggere l'errore introdotto da canale. Il controllo di parità (pari o dispari) è una di queste tecniche e consiste nell'aggiungere un bit al flusso di bit da trasmettere, bit di valore tale da rendere pari (o dispari) il numero totale di bit trasmessi. In ricezione si effettua il controllo tramite operazioni di XOR, sul blocco di bit ricevuti e si controlla la rispondenza del bit aggiunto. E' ovvio che il riscontro di un errore non permette di correggere l'errore stesso, ma solo di rilevarlo. Inoltre non è possibile accorgersi dell'errore nel caso di un numero pari di bit errati. Un'altra tecnica che oltre al riscontro permette la correzione del bit errato è la tecnica di controllo di parità longitudinale e trasversale. Esempio : blocco da trasmettere 1 0 1 0 1 0 0 1 controllo di parità per riga 1 0 1 0 (longitudinale) 1 0 0 1 controllo di parità complessivo controllo di parità per colonna (verticale o trasversale) viene trasmesso : 1 0 1 1 0 0 1 0 1 0 1 0 1 0 0 1 In ricezione il blocco verrà rimesso in matrice e controllato. Se si riscontra un errore di un bit sul blocco dati, risultano errati un bit del controllo longitudinale ed un bit del controllo trasversale; ciò permetterebbe di rilevare e correggere il bit errato (anche se normalmente si preferisce 6 A cura del prof. Gino Tombolini – Itis ‘Montani’ Fermo richiedere la ritrasmissione di tutto il blocco). Ovviamente se si ha un errore su più di un bit, la tecnica funziona solo per il rilevamento e no per la correzione. Se risultano errati quattro bit in posizioni particolari, nonostante l'errore il blocco viene accettato come corretto (il controllo fallisce). Sono state studiate e sviluppate altre tecniche più complesse per permettere il rilevamento degli errori, evitando al massimo che il blocco dati protetto da tali meccanismi di controllo possa essere riconosciuto come corretto se presenta dei bit errati per colpa del canale di trasmissione (si veda il caso precedente). La più nota di queste tecniche è conosciuta con il nome di tecnica del polinomio generatore. Essa consiste nell'aggiungere al blocco un gruppo di bit hanno un legame matematico con i bit del blocco che li contengono. In ricezione si verificherà che tale legame matematico sia ancora verificato. Più precisamente, immaginiamo che il blocco da trasmettere sia formato da p bit (ad esempio il blocco abbia p=8 bit e sia 10100010); a tali bit si fanno corrispondere i coefficienti di un polinomio (polinomio del messaggio) di grado p - 1. Otteniamo perciò : P(x) = 1*x7 + 0*x6 + 1*x5 + 0*x4 + 0*x3 + 0*x2 + 1*x1 + 0*x0 cioè P(x) = x7 + x5 + x Scelto un opportuno polinomio G(x) di grado r <= p-1 detto polinomio generatore, fissato normalmente da accordi internazionali e su basi matematiche e statistiche, si effettua la divisione polinomiale modulo 2 tra P(x) e G(x), si calcola il resto R(x) (di grado inferiore a G(x) di una unità) e tale resto viene accodato al polinomio P(x). In ricezione si effettua la divisione polinomiale modulo 2 su tutto il blocco ricevuto ed ovviamente si deve ottenere zero come resto, altrimenti vuol dire che il dato è stato compromesso da errori. Il risultato della divisione non è significativo e quindi viene tralasciato. -----------------------------------In pratica a P(x) Nota sulla divisione modulo 2: | vengono aggiunti r zeri consiste nell'effettuare l'opera- | prima di effettuare la zione di XOR tra un eguale numero | divisione e tali zeri di cifre significative del divi- | saranno poi sostituiti dendo e del divisore. | dall'effettivo resto della Esempio | divisione. | Esempio della tecnica del 1 0 1 1 0 0 1 1 | 1 1 0 1 | polinomio generatore: 1 1 0 1 |-----------| P(x) è il polinomio dato ------| 1 1 0 0 1 | sopra (p=8, grado 7); - 1 1 0 0 | G(x) = x3 + 1 (grado r=3) 1 1 0 1 | P(x) viene trasformato ------| aggiungendo 3 zeri, cioè - - - 1 0 1 1 | operando : 1 1 0 1 | x3*P(x)=x10 + x8 + x4 + x3 ------| A questo punto si effettua - 1 1 0 (resto) | la divisione binario modulo | 2 : -----------------------------------1 0 1 0 0 0 1 1 0 0 0 | 1 0 0 1 1 0 0 1 |---------------------| 1 0 1 1 0 1 0 1 - - 1 1 0 0 1 0 0 1 ------- 1 0 1 1 1 0 0 1 ------- - 1 0 1 0 1 0 0 1 ------- - 1 1 0 0 1 0 0 1 ------- 1 0 1 <--- resto R(x) 7 A cura del prof. Gino Tombolini – Itis ‘Montani’ Fermo Il messaggio risulta : 1 0 1 0 0 0 1 1 1 0 1 Questo polinomio è ora divisibile (modulo 2) per G(x). La tecnica del polinomio generatore (o anche codice ciclico) è la più potente per il rilevamento di errori ed inoltre richiede dei circuiti estremamente semplici per la sua generazione (circuiti XOR). Tre sono i polinomi divenuti standard internazionali : CRC-12 = x12 + x11 + x3 + x + 1 CRC-16 = x16 + x15 + x2 + 1 CRC-CCITT = x16 + x12 + x5 + 1 Esistono anche altre tecniche di controllo di errori ed alcune permettono anche la relativa correzione. La più nota di queste tecniche è la tecnica di Hamming. Tutte fanno uso di un numero aggiuntivo di simboli, cioè per codificare messaggio di k simboli si usano n (n>k) simboli; le rimanenti sequenze di n - k simboli hanno la funzione di risolvere e correggere errori. In tale modo la velocità di trasmissione dei dati scende e al limite si può pensare che per ottenere una correzione efficiente (probabilità di errore pari a zero) occorrerebbe far tendere a zero pure la velocità di trasmissione per l'aggiunta di un notevole numero di bit di controllo. Mostreremo comunque che, anche dovendo trasmettere informazioni su canali disturbati, è possibile ottenere un tasso di errore piccolo a piacere purché non si superi una velocità massima caratteristica, detta CAPACITÀ' DI CANALE. Supponiamo che i nostri dati binari vengano inviati sul canale ad una velocità di 1/T bit/secondo (T=periodo di trasmissione di due bit consecutivi), utilizzando un segnale a due livelli (+1 e -1). Se i simboli da trasmettere sono equiprobabili ( p(0)=p(1)=1/2 ), sappiamo che l'entropia della sorgente assume il valore massimo pari ad 1 bit/simbolo e quindi la velocità di trasmissione dell'informazione in tal caso assume il valore di 1/T bit/sec che risulta quindi essere anche il massimo in quanto per ogni altra probabilità di ricorrenza H è inferiore a 1 e quindi anche la velocità risulta inferiore a 1/T bit/secondo, infatti per ottenere lo stesso contenuto informativo dobbiamo trasmettere più cifre, visto che il contenuto informativo medio per cifra (entropia) è minore. Se usiamo un segnale a quattro livelli (anziché due) vuol dire che ogni livello corrisponderà a due cifre binarie consecutive; in tal caso la velocità massima di trasmissione dell'informazione (per simboli equiprobabili) è di 2/T bit/secondo. In generale, utilizzando un segnale a N livelli per trasmettere dati binari con intervallo di segnalazione (periodo del segnale trasmesso attraverso il canale) pari a T, la velocità massima dell'informazione (o capacità di canale) risulta : C = (log2N)/T bit/sec. Tale velocità massima verrà raggiunta solo se tutti i (livelli) sono equiprobabili ( p= 1/N ). nuovi N simboli 8