Appunti‎ > ‎Formati audio‎ > ‎

Compressione

Le compressioni sono sistemi per ridurre la dimensione di un file mediante l'applicazione di vari tipi di algoritmi e/o codifiche.
Si distinguono due tipi di compressione: lossless (senza perdita) in cui il file viene compresso senza eliminare nessuna informazione e la sua decompressione permette, quindi, di riavere esattamente l'originale e lossy (con perdita) in cui la compressione elimina parti considerate ridondanti o ininfluenti e la decompressione non riporta all'originale.
Chiaramente, il primo sistema preserva l'integrità dell'originale, ma comprime in un rapporto più basso, mentre il secondo comporta una perdita di qualità ma comprime molto di più, proporzionalmente al livello di perdita che si è disposti ad accettare. Vediamo qualche esempio.


Compressione lossless

Le compressioni lossless si basano sulla riduzione della ridondanza tipica delle produzioni umane.  Per esempio, in un libro dedicato alla musica sperimentale, la locuzione "musica sperimentale", lunga 19 caratteri, sarà ripetuta molte volte. A questo punto, basta sostituirla con un simbolo che normalmente non si trova in un testo, come per es. '#1#', per ridurre un termine di 19 caratteri a uno di 3, risparmiando 16 caratteri per ogni occorrenza. In realtà bisogna dire "per ogni occorenza oltre la prima", perchè, per poter poi decomprimere il testo, bisogna costruire anche un indice delle sostituzioni in cui, in questo caso, sarà scritto #1#="musica sperimentale".
Ovviamente, nel libro, anche molte altre parole o insiemi di esse saranno ripetute più volte, e ognuno di essi potrà essere sostituito da un simbolo come #2#, #3#, ... , #n#, dove n è un numero progressivo, ottenendo alla fine un risparmio notevole.
Un sistema analogo è utilizzato dall'algoritmo di Lempel-Ziv (LZ) i cui derivati sono alla base di molti dei moderni programmi di compressione lossless, compreso il notissimo ZIP.
In realtà l'antenato di molti codificatori lossless è la cosiddetta Codifica di Huffman. Si tratta di un sistema di eliminazione della ridondanza sviluppato nel 1952 dal ricercatore omonimo, allora studente al MIT. Il suo algoritmo risolve il problema di codificare una serie di stringhe (stringa = un qualsiasi insieme di caratteri) nel modo più compatto possibile, tenendo conto anche della frequenza con cui le stringhe si presentano: a quella più frequente viene assegnato il simbolo più breve in modo da massimizzare la compressione. Qui trovate un buon esempio che approfondisce le problematiche legate alla Codifica di Huffman.

Un altro tipo di compressione lossless, basato sempre sulla riduzione della ridondanza, è il cosiddetto Run Length Encoding (RLE) che funziona in modo molto semplice. Supponiamo di avere la seguente stringa di 20 caratteri

ABBBBBBBBBCDEEEEFGGG
Applicando la RLE, diventa

A*9BCD*4EF*3G
per un totale di 13 caratteri, con un risparmio del 35%.
In pratica, al posto dei caratteri ripetuti è stato inserito un codice formato dal carattere e dal numero delle ripetizioni. L'asterisco serve a indicare che quello che segue è il numero delle ripetizioni e non fa parte della stringa (naturalmente questo è il principio base; i particolari della codifica possono variare). Chiaramente questo sistema non è produttivo con i testi, ma lo è nel caso delle immagini in cui lunghe striscie di pixel con lo stesso colore sono abbastanza frequenti.


Compressione lossy

La compressione lossy si basa sull'eliminazione di quelle componenti dell'informazione ritenute più o meno ininfluenti in base al livello di compressione richiesto. A bassi livelli di compressione verranno eliminati solo i particolari realmente ininfluenti, mentre a livelli più alti cambieranno anche particolari sensibili. Un esempio non audio è la codifica delle immagini JPEG che elimina le sfumature dando a gruppi di pixel vicini lo stesso colore se la loro differenza è inferiore a un valore proporzionale al livello di compressione. In questa pagina potete osservare l'effetto di riduzione delle dimensioni e la corrispondente perdita di qualità a livelli di compressione via via crescenti.