Un computer può mostrare una fotografia, riprodurre una canzone, visualizzare un film e conservare una frase scritta in qualsiasi lingua. Eppure, nella memoria e nei collegamenti elettronici, non circolano direttamente montagne, voci, lettere o volti: circolano sequenze di bit. Il passaggio dal mondo che percepiamo alla rappresentazione digitale avviene attraverso regole precise, diverse per ogni tipo di informazione.

La frase “tutto diventa 0 e 1” è corretta, ma da sola spiega molto poco. Il punto interessante è capire come un testo, un colore, un suono o un fotogramma vengano trasformati in numeri e come il computer riesca poi a ricostruirne il significato. In questo viaggio incontriamo tre idee fondamentali: campionamento, quantizzazione e codifica.

Dal mondo reale ai dati digitali

Il mondo fisico è spesso continuo. Un suono cambia nel tempo senza procedere a gradini; la luce può assumere moltissime intensità e sfumature; un movimento non è naturalmente diviso in fotogrammi. Il computer, invece, lavora con valori discreti e finiti. Per memorizzare un fenomeno continuo deve quindi osservarlo in determinati punti, assegnare numeri alle misure e rappresentare quei numeri in binario.

  • Campionamento: si scelgono punti nello spazio o istanti nel tempo.
  • Quantizzazione: ogni misura viene avvicinata a uno dei valori numerici disponibili.
  • Codifica: i valori ottenuti vengono trasformati in byte secondo un formato conosciuto.

Non tutti i dati richiedono gli stessi tre passaggi nello stesso modo. Il testo nasce già come una sequenza di simboli discreti; il suono, invece, parte da un'onda continua che deve essere campionata. Un'immagine digitale divide lo spazio in pixel, mentre un video aggiunge anche la dimensione del tempo.

Schema della rappresentazione digitale di testo, immagini, suono e video attraverso numeri e bit Testo, immagini, suoni e video seguono percorsi diversi, ma alla fine vengono memorizzati come sequenze organizzate di bit.

Il testo: dal tasto premuto al codice Unicode

Quando premiamo un tasto, la tastiera non invia direttamente una lettera completa di significato. Invia un codice legato alla posizione o all'evento del tasto. Il sistema operativo interpreta quel codice usando la disposizione della tastiera selezionata: per esempio italiana, inglese o tedesca. Solo dopo questa interpretazione l'applicazione riceve un carattere.

Per rappresentare i caratteri moderni si usa generalmente Unicode. Unicode assegna a ogni carattere astratto un numero chiamato code point. La lettera maiuscola “G”, per esempio, corrisponde a U+0047, cioè 71 in decimale. Il Consorzio Unicode distingue il carattere astratto dalla sua forma grafica e dai byte usati per memorizzarlo.

Il numero Unicode deve poi essere serializzato in byte. UTF-8 è una delle codifiche più diffuse: usa da uno a quattro byte e mantiene identici i valori dei primi 128 caratteri ASCII. L'RFC 3629 dell'IETF definisce formalmente UTF-8, mentre il modello di codifica Unicode chiarisce la differenza tra caratteri, code point, unità di codice e sequenze di byte.

Questo significa che “un carattere occupa un byte” è vero soltanto in alcuni casi. La “G” occupa un byte in UTF-8; molte lettere accentate ne occupano due; numerosi simboli e alfabeti ne richiedono tre; alcuni caratteri vengono codificati con quattro byte. Inoltre ciò che una persona percepisce come un singolo segno può essere composto da più code point, per esempio una lettera seguita da un accento combinante.

Infografica sul viaggio di un carattere dalla tastiera al sistema operativo, Unicode, UTF-8, memoria RAM e CPU Dal tasto premuto al programma: il carattere viene interpretato, associato a un code point Unicode, codificato in byte e conservato in memoria.

Nota di precisione sulla tavola: nel testo cirillico, il carattere “к” ha il codice Unicode corretto U+043A. La forma “U+043K” visibile in una casella è un piccolo refuso grafico, perché la notazione esadecimale usa soltanto le cifre da 0 a 9 e le lettere da A a F.

Perché lo stesso byte può significare cose diverse

Una sequenza di bit non possiede un significato universale. Il byte 01000001 può essere interpretato come il numero 65, come la lettera “A” in ASCII e UTF-8, come una componente di colore o come parte di un'istruzione. È il contesto a stabilire l'interpretazione: il tipo del dato in memoria, il formato del file, il protocollo di rete o le istruzioni del programma.

Per questo i file contengono spesso intestazioni e metadati. Essi indicano al software quale formato aspettarsi, quali dimensioni usare, quale codifica dei caratteri applicare e come interpretare i byte successivi. Se il contesto è sbagliato, i dati possono apparire corrotti anche se i bit sono arrivati intatti.

Le immagini: una griglia di pixel e canali di colore

Un'immagine raster viene divisa in una griglia di piccoli elementi chiamati pixel. La risoluzione indica quanti pixel sono presenti in larghezza e altezza. Un'immagine di 1920 × 1080 pixel contiene 2.073.600 posizioni, ma questo numero non dice ancora come viene rappresentato il colore di ciascun pixel.

Nel modello RGB, un colore è descritto da tre componenti: rosso, verde e blu. Con 8 bit per canale sono disponibili 256 livelli per ciascuna componente, normalmente numerati da 0 a 255. Un pixel RGB a 24 bit può quindi rappresentare milioni di combinazioni. Un eventuale canale alfa aggiunge l'informazione di trasparenza.

La specifica PNG del W3C descrive immagini in scala di grigi, a colori indicizzati e truecolor, con profondità dei campioni da 1 a 16 bit e canale alfa opzionale. PNG usa una compressione senza perdita: decomprimendo il file si recuperano esattamente i valori originali dei pixel. Altri formati, come JPEG, riducono maggiormente il peso eliminando informazioni considerate meno percepibili, ma introducono una perdita.

Quanto pesa un'immagine non compressa?

Una stima semplice si ottiene moltiplicando larghezza, altezza, numero di canali e bit per canale. Per esempio, un'immagine RGB da 1920 × 1080 pixel con 8 bit per canale richiede circa 6,2 MB senza compressione e senza contare metadati o strutture aggiuntive. La compressione serve proprio a evitare di conservare tutti quei valori nella forma più diretta.

Il suono: misurare un'onda molte volte al secondo

Un microfono trasforma le variazioni della pressione sonora in un segnale elettrico continuo. Un convertitore analogico-digitale misura l'ampiezza del segnale a intervalli regolari. Il numero di misure effettuate ogni secondo è la frequenza di campionamento; il numero di bit disponibili per descrivere ogni misura è la profondità in bit.

Nel formato PCM lineare, i campioni sono memorizzati come numeri. La documentazione della Library of Congress sul Linear PCM ricorda che frequenza di campionamento e profondità in bit sono due caratteristiche centrali dell'audio digitale. Il compact disc, per esempio, usa comunemente 44.100 campioni al secondo, 16 bit per campione e due canali.

Una frequenza più alta permette di descrivere variazioni più rapide; una maggiore profondità offre più livelli numerici e riduce l'errore di quantizzazione. Tuttavia file più dettagliati occupano più spazio. Lo standard Web Audio API del W3C usa buffer PCM organizzati in campioni e canali e definisce esplicitamente la frequenza di campionamento in frame di campioni al secondo.

Anche l'audio può essere compresso. Formati senza perdita conservano tutti i campioni originali; formati con perdita cercano di ridurre molto il peso sfruttando caratteristiche della percezione umana. Il file finale deve comunque contenere abbastanza informazioni perché il decoder ricostruisca una sequenza di campioni da inviare al convertitore digitale-analogico e quindi agli altoparlanti.

Il video: immagini, tempo, audio e compressione

Un video digitale è una sequenza temporale di immagini, accompagnata spesso da una o più tracce audio e da metadati. Ogni immagine è un fotogramma. La frequenza dei fotogrammi indica quante immagini vengono presentate ogni secondo: 24, 25, 30, 50 o 60 sono esempi comuni, ma non gli unici.

Memorizzare ogni fotogramma come immagine completa non compressa richiederebbe quantità enormi di dati. I codec video riducono il peso sfruttando sia la ridondanza dentro il singolo fotogramma sia le somiglianze tra fotogrammi vicini. Un fotogramma chiave può essere decodificato autonomamente; altri fotogrammi descrivono soprattutto ciò che cambia rispetto a immagini precedenti o successive.

La raccomandazione ITU-T H.264 definisce uno dei sistemi di codifica video più diffusi e continua a essere mantenuta. Lo standard WebCodecs del W3C distingue chiaramente tra fotogrammi video e blocchi codificati e definisce anche il concetto di fotogramma chiave. Per il colore e i parametri dell'alta definizione, la raccomandazione ITU-R BT.709 è un riferimento importante.

Codec e contenitore non sono la stessa cosa

Il codec stabilisce come audio o video vengono compressi e decompressi. Il contenitore organizza le diverse tracce, i tempi, i sottotitoli e i metadati in un unico file. Per questo l'estensione del file non basta sempre a indicare il codec usato: uno stesso contenitore può ospitare flussi codificati in modi diversi.

Dove intervengono RAM, CPU e GPU

Quando un file viene aperto, il sistema operativo legge i byte dall'unità di archiviazione e ne porta le parti necessarie in RAM. Il programma interpreta il formato, decomprime i dati e prepara strutture utilizzabili. La CPU coordina le operazioni generali; la GPU accelera molti calcoli grafici e video; dispositivi dedicati convertono i valori digitali in segnali per schermo, cuffie e altoparlanti.

La memoria non conserva “una fotografia” come oggetto indivisibile: conserva byte organizzati secondo regole. Il processore non ascolta una canzone: esegue istruzioni sui numeri che rappresentano i campioni. Il significato emerge dall'intera catena composta da standard, file, programmi e dispositivi di uscita.

Digitalizzare non significa copiare perfettamente la realtà

Ogni rappresentazione è una scelta. Più pixel possono descrivere dettagli spaziali più piccoli; più campioni possono seguire variazioni sonore più rapide; più bit possono offrire livelli più fini. Tuttavia la qualità dipende anche dall'origine del segnale, dai sensori, dagli algoritmi, dalla compressione e dal dispositivo di riproduzione.

Aumentare i numeri non migliora automaticamente un dato scadente. Un'immagine sfocata non diventa nitida soltanto aumentando la risoluzione; una registrazione rumorosa non diventa pulita salvandola a 24 bit; un video fortemente compresso non recupera dettagli che sono già stati eliminati.

Errori comuni da evitare

  • “Un carattere equivale sempre a un byte”: falso con molte codifiche Unicode.
  • “Più megabyte significa sempre più qualità”: il formato e il metodo di compressione contano quanto la dimensione.
  • “Un video è soltanto una serie di JPEG”: i codec moderni sfruttano anche le relazioni temporali tra fotogrammi.
  • “Il computer comprende direttamente immagini e parole”: interpreta byte secondo regole definite.
  • “Digitale significa privo di errori”: campionamento, quantizzazione, compressione e trasmissione possono introdurre limiti o alterazioni.

Domande frequenti

Perché UTF-8 usa un numero variabile di byte?

Per mantenere compatibilità ed efficienza con i caratteri ASCII e, allo stesso tempo, poter rappresentare l'intero repertorio Unicode.

Quanti colori può rappresentare un pixel RGB a 24 bit?

Con 8 bit per ciascuno dei tre canali si ottengono 256 × 256 × 256 combinazioni, cioè 16.777.216 valori possibili.

Che differenza c'è tra frequenza di campionamento e profondità in bit?

La frequenza indica quante misure vengono effettuate ogni secondo; la profondità indica quanti livelli numerici sono disponibili per ciascuna misura.

Perché i video occupano così tanto spazio?

Perché combinano moltissimi pixel, numerosi fotogrammi al secondo, colore, audio e metadati. Senza compressione, il flusso di dati sarebbe enorme.

Fonti ufficiali e approfondimenti