Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


La Teoria dell'Informazione: Canali, Codifica e Decodifica, Dispense di Informatica per la ricerca sociale

Una introduzione alla teoria dell'informazione, spiegando concetti come canali di comunicazione, codifica e decodifica. della importanza del canale nella trasmissione di segnali, della destinazione o destinatario come ricevente del messaggio e della codifica come insieme di regole che definiscono le corrispondenze tra messaggi e contenuti.

Tipologia: Dispense

2019/2020

Caricato il 09/12/2021

clorine234
clorine234 🇮🇹

5 documenti

1 / 25

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
CODIFICA DELL’INFORMAZIONE
COSA È L’INFORMAZIONE
Nonostante il concetto di informazione sia da noi utilizzato quotidianamente senza
dicoltà, fornire una sua definizione non risulta semplice. In termini colloquiali per
informazione si intende un contenuto conoscitivo che viene trasmesso, ricevuto, manipolato
o archiviato. Si vede quindi che gli aspetti coinvolti sono diversi ed è possibile valutarli da
molteplici prospettive. Il concetto quindi non può essere risolto riferendosi ad una singola
entità, ad esempio al contenuto conoscitivo, ma richiede di considerare un complesso
diacronico di elementi: un processo con le sue fasi, le sue trasformazioni e i suoi attori.
Il processo che manipola l’informazione è spesso indicato come processo di
comunicazione in quanto l’informazione viene veicolata attraverso un messaggio che due
attori si scambiano. Chiariamo quindi gli aspetti essenziali del processo di comunicazione.
Per dare ordine alla nostra comprensione ci limiteremo, per ora, al punto di vista della
teoria dell'informazione che studia la comunicazione relativamente agli aspetti di
trasmissione di segnali.
La comunicazione è il processo di trasferimento di un messaggio (informazione codificata),
attraverso un mezzo trasmissivo (canale), da un sistema emittente (sorgente) a un sistema
ricevente (destinazione). Gli elementi che concorrono al processo di comunicazione sono
illustrati nella Figura 1 e presentati di seguito.
Sorgente o mittente: produce il messaggio indirizzato alla destinazione, o destinatario.
Deve ideare e progettare il messaggio in modo che possa essere trasferito attraverso un
canale e recepito alla destinazione.
Sorgente Trasmettitore Ricevitore Destinazione
Segnale fisico
Messaggio
Fig. 1. Il processo di comunicazione
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19

Anteprima parziale del testo

Scarica La Teoria dell'Informazione: Canali, Codifica e Decodifica e più Dispense in PDF di Informatica per la ricerca sociale solo su Docsity!

C O D I F I C A D E L L ’ I N F O R M A Z I O N E

C O S A È L ’ I N F O R M A Z I O N E

Nonostante il concetto di informazione sia da noi utilizzato quotidianamente senza difficoltà, fornire una sua definizione non risulta semplice. In termini colloquiali per informazione si intende un contenuto conoscitivo che viene trasmesso, ricevuto, manipolato o archiviato. Si vede quindi che gli aspetti coinvolti sono diversi ed è possibile valutarli da molteplici prospettive. Il concetto quindi non può essere risolto riferendosi ad una singola entità, ad esempio al contenuto conoscitivo, ma richiede di considerare un complesso diacronico di elementi: un processo con le sue fasi, le sue trasformazioni e i suoi attori. Il processo che manipola l’informazione è spesso indicato come processo di comunicazione in quanto l’informazione viene veicolata attraverso un messaggio che due attori si scambiano. Chiariamo quindi gli aspetti essenziali del processo di comunicazione. Per dare ordine alla nostra comprensione ci limiteremo, per ora, al punto di vista della teoria dell'informazione che studia la comunicazione relativamente agli aspetti di trasmissione di segnali. La comunicazione è il processo di trasferimento di un messaggio (informazione codificata), attraverso un mezzo trasmissivo (canale), da un sistema emittente (sorgente) a un sistema ricevente (destinazione). Gli elementi che concorrono al processo di comunicazione sono illustrati nella Figura 1 e presentati di seguito.

  • Sorgente o mittente: produce il messaggio indirizzato alla destinazione, o destinatario. Deve ideare e progettare il messaggio in modo che possa essere trasferito attraverso un canale e recepito alla destinazione. Sorgente Trasmettitore (^) Ricevitore Destinazione Segnale fisico Messaggio Fig. 1. Il processo di comunicazione
  • Trasmettitore o emittente: trasforma il messaggio dalla forma con cui è generato dalla sorgente a forme adatte a essere trasferite sul canale, ovvero generando segnali, variazioni di grandezze fisiche. Ad esempio, il trasmettitore può trasformare il messaggio in vibrazione sonora che si propaga nell’aria, come nel caso della comunicazione orale, oppure in un’onda elettromagnetica che si propaga nell’etere o per mezzo di un canale dedicato, per esempio i cavi di fibra ottica, come nel caso delle telecomunicazioni.
  • Messaggio : è quanto viene trasferito nel processo di comunicazione. Spesso un messaggio non si ottiene da un singolo segnale ma dalla composizione, o articolazione, di più segnali. Naturalmente è richiesto che i segnali possano essere trasmessi attraverso il canale e possano essere interpretati correttamente dal destinatario. Se il processo di comunicazione è efficace il messaggio veicola informazione.
  • Canale : interagisce con i segnali che vi si propagano, conservandone di norma la forma ma sovente introducendovi delle modifiche (attenuazione, distorsione, interferenza, rumore) che possono in alcuni casi compromettere l’individuazione del messaggio. Rappresenta l’elemento materiale della comunicazione perché è lo strumento che fisicamente propaga il messaggio.
  • Ricevitore o ricevente: trasforma il messaggio dalla forma con cui è trasmesso sul canale a una forma interpretabile dal destinatario. Ad esempio può trasformare le vibrazioni sonore in fonemi, come nel caso della comunicazione orale, oppure un’onda elettromagnetica in segnali elettrici, come nel caso delle telecomunicazioni.
  • Destinazione o destinatario: è il soggetto a cui è rivolta la comunicazione, deve essere in grado di interpretare il messaggio e di associare ad esso un contenuto. Se il processo di comunicazione è efficace il contenuto del messaggio fornisce informazione al destinatario. È stato notato che si può ottenere informazione anche tramite le osservazioni che un soggetto svolge autonomamente. Guardando gli anelli di accrescimento di un tronco otteniamo informazione sull’età dell’albero e sulle condizioni climatiche che hanno condizionato la sua crescita. Non è tuttavia difficile ricondurre questi casi al processo di comunicazione che coinvolge una sorgente e una destinazione in quanto le percezioni dell’osservatore possono essere viste come emittenti di messaggi che lo stesso soggetto dovrà interpretare. Si è detto che quando il processo di comunicazione è efficace il messaggio veicola informazione. Sarebbe più preciso dire che un’informazione viene sempre veicolata in quanto il fallimento o l’assenza di comunicazione forniscono essi stessi informazione. Il più

Questo approccio alla codifica è utilizzato in alcuni contesti, che sfruttano spie e segnaletiche, ma impone diverse limitazioni. Il destinatario deve conoscere tutti i possibili messaggi prima di interpretarli, serve disporre di un segnale per ogni messaggio, il numero di messaggi è finito e non può essere modificato dagli attori della comunicazione. Per superare questo limite è possibile utilizzare un numero ristretto di segnali e riuscire allo stesso tempo a codificare un numero molto elevato di messaggi. Un messaggio può infatti essere ottenuto componendo più segnali. Le regole di composizione possono essere di diversa complessità. Nelle telecomunicazioni la composizione è semplicemente ottenuta attraverso sequenze di segnali ; l’ordine sequenziale è direttamente derivato dagli intervalli temporali che separano la trasmissione dei segnali. Ad esempio, nel codice Morse due tipi di segnale, suono lungo e suono corto, sono organizzati in sequenze per codificare l’alfabeto inglese. Il fatto che il messaggio possa essere articolato componendo un insieme di segnali rappresenta un'importante caratteristica del processo di comunicazione e dei sistemi Prescrive l'obbligo di arrestarsi in ogni caso in corrispondenza della striscia trasversale di arresto ad un incrocio e di dare precedenza. Vieta a tutti i veicoli di entrare in una strada. Preavvisa che la sola direzione consentita al conducente è quella di andare a destra. Fig. 2. Nel codice della strada ogni segnale è messo in corrispondenza con un contenuto. Fig. 3. Nel codice Morse sequenze di linee e punti sono in corrispondenza con le lettere dell’alfabeto.

semiotici in generale. Il segnale rappresenta l’unità minima della comunicazione in quanto la sua forma è stabile (o si vorrebbe restasse stabile sul canale) e questa stabilità è garanzia della sua identificazione. I diversi modi di comporre i segnali, la loro diversa disposizione, possono invece dare luogo a messaggi diversi, fornendo la possibilità di poter variare i messaggi e di poterne generare di nuovi. Il numero di composizioni che si possono ottenere è regolato da alcune formule del calcolo combinatorio che discuteremo più avanti, ma sotto certe condizioni il numero di messaggi è potenzialmente infinito (è limitato unicamente dai limiti fisici del sistema). Possiamo comunque notare che un codice con molti segnali distinti comporta sequenze di composizione più semplici, come nel caso della segnaletica stradale; mentre un codice con pochi segnali comporta sequenze di composizione più lunghe e quindi maggiore sforzo di decodifica, come nel caso del codice Morse. I sistemi di scrittura fonografica (come gli alfabeti latini) cercano un compromesso tra questi due aspetti definendo un numero ristretto di simboli grafici (segnali) per i fonemi che poi sono composti in sequenze non troppo lunghe, per formare le parole. Quando nella comunicazione vengono introdotti processi meccanici diventa invece più conveniente ridurre il numero di segnali, per semplificare il processo di identificazione. Possiamo quindi dire che un codice è dato da un insieme di simboli , detto anche alfabeto , e un insieme di regole di composizione da seguire per creare messaggi, che infatti possono essere anche riferiti come sequenze. I messaggi sono poi messi in corrispondenza con dei contenuti.

P R O P R I E T À D E L L A C O D I F I C A

Il segnale è la variazione, lo stato, di una grandezza fisica del canale, i simboli grafici usati nella scrittura sono in questo senso segnali in quanto modificano lo stato del supporto materiale per rendere i diversi simboli distinguibili. A nessun segnale o simbolo può essere attribuito un contenuto senza conoscere il codice con il quale è stato generato. Questo rende la codifica intrinsecamente ambigua in quanto lo stesso segnale, lo stesso simbolo o lo stesso messaggio, potrebbero appartenere a codifiche differenti. Prendiamo ad esempio il messaggio: 6.000 - 11. Potrebbe essere legittimamente interpretato come una coordinata geografica del golfo di Guinea oppure come il range di punti hype che caratterizzano una divisione del videogioco Fortnite. Il messaggio codificato come 15:40 può essere decodificato come orario ma anche come punteggio tennistico. Naturalmente è anche vero che uno stesso contenuto può essere codificato in modi diversi. L’orario quindici e trenta può essere codificato nel formato a 24

In sintesi, quello che osserviamo è che nelle codifiche digitali è possibile applicare diversi livelli di codifica : la stessa informazione può essere codificata più volte prima di giungere al destinatario. Abbiamo inizialmente detto che il processo di codifica definisce le corrispondenze tra le possibili composizioni di un insieme di segnali e un insieme di messaggi. In realtà nel caso della codifica digitale, il processo può mettere in corrispondenza un insieme di messaggi con un altro insieme di messaggi. Ad esempio, sarà possibile ridurre la qualità di un’immagine salvandone una nuova versione con risoluzione ridotta, codificando un nuovo file a partire dal file iniziale. Un file di testo, codificato attraverso un insieme di byte, può essere compresso, e quindi essere codificato attraverso un insieme ridotto di byte, poi decompresso, per riottiene l’insieme di byte iniziali. Un file criptato sarà invece un file codificato in modo da poter essere decodificato solo attraverso una chiave. Nel 2006 in Italia è stato completato il passaggio delle trasmissioni televisive al digitale terrestre. In Italia è in uso lo standard del consorzio europeo DVB, attualmente lo standard DVB-T, da settembre 2021 il DVB T2. Osservando le caratteristiche delle trasmissioni televisive analogiche e digitali, si può realizzare con chiarezza la differenza tra questi due approcci alla codifica. La televisione analogica offre una riproduzione dell’immagine di minore qualità, tuttavia al degradare della qualità del segnale viene mantenuta la capacità di riproduzione, anche se disturbata da rumore. Nella televisione digitale i disturbi del segnale possono essere corretti attraverso tecniche di interpolazione, tuttavia se il disturbo supera una certa soglia la riproduzione viene del tutto compromessa. La televisione digitale è caratterizzata da un maggior numero di canali, la grandezza fisica del canale non è infatti associata direttamente alla riproduzione audiovisiva ma interpretata come trasmissione di una sequenza numerica che il decoder interpreterà come rappresentazione audiovisiva. La qualità del segnale analogico può essere migliorata attraverso modifiche incrementali degli apparecchi di ricezione. Un vecchio apparecchio può essere meno efficace di uno nuovo ma è comunque in grado di rappresentare il segnale. Al cambiare dello standard di trasmissione del sistema digitale un vecchio decoder risulterà invece del tutto inadatto alla ricezione. La trasmissione digitale è multimediale, include audio video e testo su canali differenti, è quindi possibile aggiungere o togliere i sottotitoli o cambiare la lingua durante la fruizione. La qualità della televisione digitale può essere modulata, esistono canali con livelli di definizione diversa (canali HD). Il segnale della televisione digitale può essere criptato, impedendo la ricezione ai decoder che non dispongono di una chiave di accesso privata (pay per view). TV analogica

P R O G E T T A R E U N C O D I C E

Caratterizzare il processo di comunicazione attraverso le fasi di codifica e decodifica ci mostra che il trasferimento di informazione può essere progettato per incontrare specifici obiettivi. Quando progettiamo un codice possiamo ragionare su come comporre i simboli per produrre messaggi, sul numero di messaggi da codificare, su come i messaggi potranno essere processati. Un messaggio è una composizione di segnali o simboli. Il modo più semplice per realizzare una composizione è attraverso una sequenza. La composizione, ad esempio l’ ordine dei simboli nel messaggio, è significativa perché distingue tra loro i diversi messaggi del codice e definisce quali siano legalmente appartenenti al codice. ➡ (^) Esempio. In italiano, il messaggio LEGO è diverso dal messaggio GELO. I due messaggi sono composti dagli stessi simboli ma sono distinti nell’ordine con il quale questi sono presentati. Altre regole di composizione possono riguardare la definizione di sequenze non ammesse che riducono lo spazio delle possibili composizioni. ➡ (^) Esempio. La sequenza RSN non è ammessa in italiano. Un primo modo per progettare un codice è quindi quello di definire l’alfabeto del codice e le sue regole di composizione. ➡ (^) Esempio. Creiamo il codice LUCE. Per prima cosa TV digitale Fig. 4.Sequenze del codice LUCE.

In generale, un codice di n simboli ( n stati) e messaggi di lunghezza l ( l variabili) ha un numero m di messaggi che possiamo esprimere combinando fra loro gli n simboli l volte. Questo si traduce nella seguente formula matematica: M = NL. ➡ (^) Esempio. Rappresentiamo i mesi dell’anno con un sistema binario. Sappiamo che il numero di simboli è 2 (0 e 1); conosciamo il numero di messaggi da produrre, almeno 12; ricaviamo la lunghezza dei messaggi. Sappiamo quindi che M≥12, N=2, dobbiamo calcolare L. Procediamo per tentativi: 2^3 =8, ma 8 è minore di 12, non è quindi sufficiente; 24 =16, è maggiore di 12 quindi è sufficiente, L=4. Bisogna sempre lavorare con i numeri interi, non si possono frazionare i simboli o la lunghezza dei messaggi, spesso è quindi necessario approssimare per eccesso. La matematica combinatoria ci mostra che il modo per ottenere il maggior numero di raggruppamenti di k elementi da un insieme di n elementi è di prevedere che un raggruppamento sia distinto dagli altri sia per la composizione che per l'ordine degli elementi e che gli elementi possano essere ripetuti. Sotto queste condizioni i raggruppamenti che possiamo ottenere sono nk , la formula è la stessa che abbiamo usato studiando la codifica. Questa strategia di raggruppamento è spesso utilizzata per le regole di composizione dei codici in quanto risponde a un principio di economicità: dato un numero n di simboli si può ottenere il numero massimo di messaggi, ovvero di composizioni degli elementi. Più in generale, per calcolare il numero di raggruppamenti che si possono ottenere bisogna considerare alcune condizioni e si distingue tra disposizioni , permutazioni e combinazioni.

  • Disposizioni: n elementi possono essere organizzati in raggruppamenti di k elementi. con ripetizioni: , senza ripetizioni:.
  • Permutazioni: n elementi possono essere organizzati in raggruppamenti di k elementi, con n=k. con ripetizioni: , senza ripetizioni:.
  • Combinazioni: n elementi possono essere organizzati in raggruppamenti di k elementi ma l’ordine degli elementi non è distintivo, il raggruppamento AB è uguale al raggruppamento BA. con ripetizioni: , senza ripetizioni:.

M I S U R A R E L ’ I N F O R M A Z I O N E

La formula M=NL, che abbiamo visto nei paragrafi precedenti, ci fornisce un primo strumento per misurare l’informazione. Dati i simboli e le regole di composizione di un

D ′ n , k = n

k

Dn , k =

n!

( n − k )!

P ′ n , k = n

k

Pn , k = n!

C ′ n , k =

( n + k − 1 )!

k !( n − k )!

Cn , k =

n!

k !( n − k )!

codice possiamo definire il numero di informazioni diverse, di messaggi, che siamo in grado di comunicare. L’informazione è quindi quantificabile. Questa idea fu per la prima volta introdotta da Claude Shannon nella sua opera A Mathematical Theory of Communication del 1948. Shannon parte dalla considerazione che un’osservazione è informativa se riduce il nostro grado di incertezza. Di conseguenza, quando è massima la probabilità che ci sia nota la situazione che osserviamo allora è nulla la quantità di informazione prodotta dall’osservazione. Al contrario, quando è bassa la probabilità che sia nota la situazione che osserviamo allora è alta la quantità di informazione prodotta dall’osservazione. Possiamo riassumere questa considerazione dicendo che la quantità di informazione di ogni osservazione è inversamente proporzionale alla probabilità che si verifichi il fatto osservato. ➡ Esempio. Supponiamo di giocare alla roulette insieme a un folletto che legge il futuro, il folletto, si sa, è dispettoso e, anche se non sbaglia mai, spesso ci fornisce previsioni poco utili. Una volta ci ha detto che sarebbe uscito un numero compreso fra 0 e 36 , un’altra volta sarebbe uscito un numero pari , solo una volta ci ha detto che sarebbe uscito il numero 6 ma eravamo andati a bere una cosa e non abbiamo fatto in tempo a tornare per fare la nostra puntata. Lasciando perdere il folletto, che intende solo farci arrabbiare, chiediamoci quali di queste previsioni contiene più informazione. Sappiamo che la quantità di informazione di ogni osservazione è inversamente proporzionale alla probabilità che si verifichi il fatto previsto. Tale probabilità è 1 nel primo caso, 1/2 nel secondo e 1/36 nel terzo. La quantità di informazione sarà pari a 0 nel primo caso, siamo infatti sicuri che uscirà un numero compreso tra 0 e 36, il nostro grado di conoscenza non cambia. Nel secondo caso il valore dell’informazione è medio, possiamo scartare il 50% delle opzioni. Nell’ultimo caso il grado di informazione è alto, massimo se le opzioni possibili sono in totale 36, non ci servono altre informazioni per decidere la nostra puntata. Da questa considerazione capiamo anche che la quantità minima di informazione che può essere codificata è la quantità di informazione che si ottiene selezionando una configurazione da un insieme che ne contiene due equiprobabili. Questa quantità è detta bit , un’unità di misura binaria che si esprime attraverso due simboli (0, 1). Quando non sappiamo nulla sullo stato del sistema sappiamo che entrambe le configurazioni possibili avranno probabilità 1/2, quando osserviamo una della due configurazioni possiamo scartare il 50% delle altre. ➡ Esempio. Se prendiamo l’albero binario di Figura 5, leggendo il valore del primo bit, ad esempio 0, possiamo scartare metà dei possibili messaggi, leggendo due bit, ad esempio

C O D I F I C H E S T A N D A R D

Vediamo ora come la codifica binaria è stata utilizzata dagli informatici per codificare le più importanti classi di contenuti. In particolare per codificare i testi , i numeri , le immagini , i contenuti audio e video. Come detto i codici binari utilizzeranno due soli simboli (0, 1), le regole di composizione adottate invece cambiano in relazione alle funzioni di manipolazione del contenuto che si vogliono ottenere. Abbiamo visto che per progettare un codice è necessario realizzare alcune scelte progettuali. Le riproponiamo in relazione ad un esempio: la codifica della classifica del campionato di serie A di rugby.

  1. Individuazione dell’insieme di informazioni da codificare. Per prima cosa sarà necessario scegliere quali informazioni, quali contenuti, codificare. Nel nostro esempio vorremo rappresentare 3 gironi di 10 squadre l’uno e 3 attributi: la posizione in classifica di una squadra, i punti di una squadra e il numero di partite giocate dalla squadra. Dovremo quindi rappresentare 33 messaggi, dato che per la posizione, i punti e il numero di partite giocate utilizzeremo semplicemente una codifica numerica concatenando il valore numerico agli attributi.
  2. Calcolo della lunghezza dei messaggi del codice. In base al numero di simboli a disposizione dovremo calcolare la lunghezza dei messaggi, che in un calcolatore è anche lo spazio di memoria necessario per memorizzare l’informazione. Nel nostro esempio, utilizzando un codice binario, dovremo quindi prevedere messaggi di lunghezza almeno 6, 26 =64, con lunghezze inferiori rappresenteremmo infatti meno di 33 messaggi. Può tuttavia essere più efficace non ragionare sul numero totale di messaggi ma sul numero di messaggi per tipologie di contenuto. Potremmo per esempio riservare le prime 2 posizioni della sequenza per codificare i gironi, in questo modo potremo decodificare il girone guardando semplicemente i primi simboli o decodificare il nome della squadra partendo dai simboli successivi. Per le squadre ci serviranno 5 posizioni, 2^5 =32≥30. Per gli attributi 2 posizioni, 2^2 =4≥3. In totale useremo quindi 9 simboli.
  3. Associazione delle informazioni ai messaggi del codice. Una volta generate le sequenze dobbiamo decidere come assegnarle ai diversi messaggi. Ad esempio, indicando con _ una posizione che può assumere qualsiasi valore, avremo:

00 _ _ _ _ _ _ _ errore di codifica 01 _ _ _ _ _ _ _ Girone 1 10 _ _ _ _ _ _ _ Girone 2 11 _ _ _ _ _ _ _ Girone 3 _ _ 00001 _ _ Squadra 1 _ _ 00010 _ _ Squadra 2 … _ _ _ _ _ _ _ 00 codice non assegnato _ _ _ _ _ _ _ 01 Posizione _ _ _ _ _ _ _ 10 Punti _ _ _ _ _ _ _ 01 Partite Giocate

4. Interpretazione del codice. Una volta definita l’associazione tra i messaggi e i contenuti possiamo usare il codice per trasferire informazione. Ad esempio, attraverso la sequenza 100000110 ci riferiamo al punteggio della Squadra 1 che gioca nel Girone 2. Un codice naturalmente può essere integrato con altri. Ad esempio, nel nostro caso possiamo stabilire che i messaggi del nostro codice sono seguiti da una sequenza numerica che indica il valore dell’attributo che vogliamo rappresentare. Il primo compito della codifica è quello di distinguere i diversi segni che vengono codificati, tuttavia la codifica può esprimere anche relazioni tra i contenuti. Sfruttando le proprietà di ordine, proporzione e composizione degli oggetti matematici possiamo ad esempio esprimere l’ordine tra i gironi attraverso l’ordine delle sequenze binarie assegnate ai gironi. Similmente, nelle codifiche dei testi la posizione nell’ordine alfabetico di un carattere può essere ottenuta direttamente dalla sequenza che lo codifica. Diciamo quindi che una codifica in grado di esprimere relazioni è maggiormente espressiva di una codifica che si limita a mettere in corrispondenza messaggi e contenuti in modo stocastico.

C O D I F I C A D E I T E S T I

Il testo è uno dei formati di dato più utilizzati nei processi di comunicazione. L'obiettivo di questo tipo di codifica è rappresentare i singoli caratteri che compongono un testo. I primi calcolatori furono progettati per lavorare con codifiche dell’alfabeto inglese. Nel 1964 ASCII (che si pronuncia ASKI) rappresentò il primo significativo sforzo di standardizzazione [2]. Questa codifica include 26 lettere minuscole, 26 lettere maiuscole, 10 cifre decimali, 30 caratteri di uso comune (., *, %, etc.), più alcuni caratteri di controllo (spazi, interruzione di riga). In pratica, si stabilì che per gli usi dell’informatica di allora fosse sufficiente codificare 120 caratteri. Sappiamo che per codificare 120 messaggi sono necessari 7 bit, poiché 27 =128≥120.

universale” nasce nel 1987 su iniziativa di Joe Becker di Xerox e Lee Collins e Mark Davis di Apple. Il loro progetto si concretizzò attraverso l’iniziativa del consorzio Unicode che pubblicò una prima versione dello standard nel 1991. Da allora sono stati diffusi aggiornamenti con regolarità. L'ultima versione dello standard, la versione 13.0, è stata rilasciata nel marzo 2020 e comprende 143859 caratteri. Lo Standard Unicode definisce tre codifiche che consentono a uno stesso carattere di essere codificato usando 1, 2 o 4 byte. UTF-8 usa 1 byte per i caratteri più frequenti, mentre per i meno frequenti usa composizioni di 2, 3 o 4 byte. Questo tipo di codifica è adatta quando si lavora con gli alfabeti più diffusi, come l’alfabeto latino, in quanto molti caratteri potranno essere rappresentati con il minimo consumo di memoria. Comporta tuttavia un certo costo computazionale in fase di decodifica in quanto ogni sequenza deve essere valutata in relazione a quelle che la precedono, per definire la corretta composizione dei byte. Si tratta della soluzione più appropriata per le lingue occidentali. UTF-32 usa 4 byte per tutti i caratteri. Implica quindi un maggior consumo di memoria ma minori costi computazionali in fase di decodifica, non si deve infatti decidere come comporre le sequenze. Può essere usato quando non si ritiene di avere problemi di memoria oppure se si fa uso di alfabeti poco frequenti che richiederebbero in ogni caso 4 byte. UTF-16 rappresenta una soluzione intermedia. I caratteri più frequenti sono codificati attraverso coppie di byte, per i caratteri meno frequenti sono utilizzate due coppie. Questa codifica si dimostra appropriata nelle situazioni in cui è utile bilanciare l'uso della memoria con la velocità di accesso ai dati. La Figura 6 propone un confronto tra le diverse codifiche Unicode, prendendo un carattere con alta frequenza di utilizzo e un carattere carattere con frequenza di utilizzo media. Fig. 6. Confronto tra le codifiche

C O D I F I C A D E I N U M E R I

Codificare dati numerici significa tradurre delle quantità in successioni ordinate di simboli. La rappresentazione decimale posizionale con cifre indo-arabiche è la più comunemente utilizzata. Come sappiamo si basa su un alfabeto di 10 simboli 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 organizzati secondo una notazione posizionale. Questo significa che il significato delle cifre è modificato dalla posizione che assumono nel messaggio. ➡ (^) Esempio. La sequenza 16 indica 1 decina e 6 unità; nel numero 163 abbiamo 1 centinaio, 6 decine e 3 unità. In entrambi i casi vengono utilizzate le cifre (simboli) 1 e 6, ma il significato che assumono è determinato dalla loro posizione. Più in generale, possiamo dire che un numero espresso tramite notazione posizionale si legge da destra a sinistra moltiplicando ogni cifra per una potenza crescente della base. Il numero rappresentato da ciascuna cifra, in questo caso, è moltiplicato per una potenza di

  1. Quindi una sequenza di cifre cm, cm-1, … c 1 , c 0 , si decodifica come cm⋅ 10 m, cm-1⋅ 10 m-1, … c 1 ⋅ 101 , c 0 ⋅ 100. ➡ Esempio. 2678 si legge: 2⋅ 103 + 6⋅ 102 + 7⋅ 101 + 8⋅ 100 = 2000 + 600 + 70 + 8 = 2678. È possibile rappresentare i numeri anche usando notazioni non posizionali, è il caso del sistema di numerazione romano nel quale sono utilizzati simboli letterari (I, V, X, L, C, D, M), a ognuno dei quali è attribuito un valore numerico (rispettivamente 1, 5, 10, 50, 100, 500, 1000). Una sequenza di simboli costituisce un numero. Il valore del numero in origine era dato dalla somma dei valori corrispondenti ai vari simboli della sequenza (sistema additivo); dal Medioevo se un simbolo ha un valore minore di quello che lo segue, allora il primo valore deve essere sottratto al secondo. Quindi, a parte il caso della sottrazione, il valore di un simbolo non cambia, come nei casi precedenti, in base alla posizione, ma rimane invariato. Esempio: VII= 5 + 1 + 1 = 7; XXVI= 10 + 10 + 5 + 1= 26. La notazione posizionale è applicabile anche a numeri in basi diverse da dieci. Usiamo ad esempio la base 6. Come simboli potremo usare: 0, 1, 2, 3, 4, 5. Il numero 542 in base 6 si legge: 5⋅ 62 + 4⋅ 61 + 2⋅ 60 = 180 + 24 + 2 = 206. Abbiamo quindi moltiplicato il valore della cifra per una potenza della base. Per trasformare una data quantità da una base a un'altra bisogna applicare il procedimento inverso. Quante volte la base rientra nel numero dato? Dividiamo il numero originario per la base e memorizziamo i resti, fino a non poter più procedere con la divisione. Basterà leggere i resti in senso inverso per ottenere il numero

C O D I F I C A D E L L ’ I M M A G I N E

La codifica delle immagini si basa sulla rappresentazione dell’immagine come un insieme di punti di colore. A questo scopo, l’immagine viene suddivisa per mezzo di una griglia, detta anche bitmap o pixmap, in sotto-porzioni, dette pixel (contrazione di picture element ). I dispositivi di acquisizione come scanner e macchine fotografiche digitali campionano le immagini attribuendo un colore ad ogni pixel della griglia. Il calcolatore riproduce l’immagine mostrando sullo schermo i pixel che la compongono. Il pixel è quindi l’unità minima di una griglia e definisce l’unità di misura della sua qualità. Data una stessa area di superficie, maggiore è il numero di pixel che compongono una griglia minore sarà la dimensione dei pixel e maggiore la qualità dell’immagine. Questo grado di qualità è detto risoluzione in quanto descrive il livello di dettaglio che un’immagine può raggiungere. Ingrandendo un'immagine possiamo notare i pixel di cui è composta come una serie di celle, di quadrati, della griglia. In base al numero di pixel che utilizziamo per costruire l'immagine il numero di ingrandimenti necessari per percepirli sarà maggiore. Similmente, come mostrato in Figura 7, aumentando il numero di pixel migliora la nitidezza di un’immagine. Secondo lo scienziato e fotografo Roger Clark, la risoluzione dell’occhio umano è di 576 megapixel. Si tratta di un numero molto elevato se si pensa che le fotocamere dei più recenti smartphone hanno risoluzioni di alcune decine di megapixel, anche se bisogna sottolineare che le dimensioni del campo visivo dell’occhio superano ampiamente quelle di uno schermo. La qualità di un’immagine è infatti data dal numero di pixel usati a rappresentarla in relazione all’area della sua superficie. Per creare uno schermo con un’immagine veramente nitida per l’occhio servirebbero schermi capaci di colorare 576 megapixel nell’area delle dimensioni del campo visivo. La risoluzione di un’immagine è spesso espressa attraverso il numero di pixel che compongono larghezza e altezza di una griglia. Esempi di risoluzione di schermi sono 1280×1024, pari a circa 1 megapixel, 1920×1080, pari a circa 2 megapixel, 3840×2160, pari a circa 8 megapixel. In realtà bisogna sempre ricordare che considerando unicamente il numero di pixel non è possibile definire la qualità che dipende dalla superficie della griglia. Per questo si usano unità di misura, come ad esempio i PPI, che esprimono la densità dei pixel in un’area, utilizzando il numero di pixel lungo la diagonale della griglia. La carta stampata ha una risoluzione che può variare dai 200 ai 600 PPI, uno schermo di buona qualità dai 150 ai 450 PPI. Ad esempio, l’iPhone 12 mini ha 476 PPI, lo schermo DELP2415Q ha 185 PP1. Un’immagine può essere vista come l’insieme dei pixel di cui è composta. Associando a ogni pixel un bit si potrebbe codificare l’immagine attraverso la sequenza di bit che ricalca la sua griglia. Essendo un bit in grado di codificare 2 stati, associando il pixel a un bit potremmo Fig. 7. Diverse risoluzioni per la stessa immagine.

rappresentare solo immagini in bianco e nero. La Figura 8 mostra la rappresentazione di un triangolo in una griglia 7 ×4. La sequenza binaria 000100000110001111100000000 codifica l’immagine nella griglia facendo corrispondere ad ogni 0 il colore bianco e a ogni 1 il colore nero. La scelta di associare un bit a ogni pixel non è necessariamente la migliore. È infatti possibile progettare codifiche con diversi livelli di efficienza. L’efficienza è tipicamente misurata come lunghezza media di un messaggio. L’immagine della Figura 8 è stata infatti codificata usando ridondanza di informazione ed esistono diversi modi attraverso i quali potremmo codificare la stessa informazione utilizzato meno variabili. ➡ (^) Esempio. Stabiliamo di descrivere l’immagine di Figura 8 indicando punto di inizio e di fine di ogni sequenza di pixel di colore nero, utilizzando una codifica numerica per il numero di colonna, quindi con 3 variabili per rappresentare le 7 colonne, e la sequenza 00 per indicare l’inizio di una nuova riga della griglia. L’immagine può quindi essere rappresentata come: 00 100100 00 011101 00 010110 00. Nella prima colonna il quarto pixel è primo e ultimo pixel nero. Nella seconda colonna il terzo pixel inizia la sequenza nera che termina al quinto pixel. Nella terza colonna il secondo pixel inizia la sequenza che termina al sesto pixel. Abbiamo utilizzato 20 bit in luogo dei 28 usati in precedenza. Il lettore può provare a ideare codifiche ancora più efficienti. È da notare che lo schema di codifica applicato non è l’unico elemento a incidere sull’efficienza. La struttura dell’informazione da codificare incide in modo altrettanto significativo e in generale molto dipende dal come l’informazione si distribuisce all’interno della griglia, se in aree omogenee o sparse. Riprendendo l’esempio precedente, se avessimo avuto sequenze di pixel neri anche nell’ultima riga lo schema di codifica usato nell’esempio avrebbe generato una sequenza di 24 bit. Immagini con sequenze interrotte di pixel di colore Fig. 8. Rappresentazione di un triangolo con una risoluzione 7×4.