Zoals bij de uitleg over de werking van digitale compressie
duidelijk werd, worden over het algemeen twee verschillende soorten
digitale compressie onderscheiden. De eerste heet lossless data
compressie, waarbij het originele stuk informatie kan worden
gereconstrueerd uit het gecomprimeerde bestand en de tweede, genaamd
lossy datacompressie, waarbij altijd een deel van de originele
informatie verloren gaat. Dat laatste is niet altijd erg. Bij een
hoop digitale bestanden is het namelijk zo dat er een hele hoop
informatie in zit die wij, als mensen, toch nooit zouden kunnen
waarnemen. Neem bijvoorbeeld een digitale foto. Je hebt
bestandsformaten die iedere pixel meer dan vier miljard kleurnuances
kunnen geven. Het menselijk oog zou het verschil tussen vier miljard
en bijvoorbeeld zestien miljoen kleurnuances nooit kunnen waarnemen,
terwijl het ontzettend veel scheelt in het aantal bits dat nodig is
om zo’n plaatje op te slaan. Ook is het voorbeeld van de
uiterst hoge en lage tonen in een muziekbestand, die het menselijk
oor niet kan horen, al genoemd. Zo zijn er nog wel meer voorbeelden
van bestandstypen waarbij het helemaal niet erg is als er een beetje
informatie verloren gaat. Eventueel is er nog een derde type te
onderscheiden: de transformatie. Daarmee wordt een schakeling van
berichten op een andere manier opgeschreven, zodat die makkelijker te
comprimeren valt. Met de transformatie zelf wordt echter geen
compressie gerealiseerd.
Toch zijn er ook bestandstypen, waarbij het niet gewenst is dat er
informatie verloren gaat. Bedenk bijvoorbeeld maar eens wat er zou
gebeuren als bestanden waarin mensen hun wachtwoorden op slaan,
zomaar een cijfertje weg lieten. Meestal wordt door de mens bepaald
of een bestand geschikt is voor lossless of lossy compressie. Het
hangt ook van de situatie af, of er voor lossless of lossy compressie
wordt gekozen. Als je een foto via e-mail wil versturen zal je eerder
voor lossy kiezen, dan wanneer je een foto op je harde schijf wil
opslaan, waar toch nog genoeg ruimte op vrij is.
Hieronder zullen nu eerst een aantal lossless compressietechnieken
besproken worden. Daarmee wordt begonnen, omdat ze het meeste
voorkomen. Soms in hun eentje, soms in combinatie met andere lossless
technieken en soms in combinatie met lossy compressiemethoden. Over
het algemeen zit in lossy compressiemethoden ook altijd een stuk
lossless coderen.
Lossless coderingen:
Huffman codering
David Huffman was de eerste die een optimale manier vond, voor het
coderen van berichten die een bepaalde kans van voorkomen hebben.
Zijn codering wordt veel gebruikt, door verschillende
compressieprogramma’s. Zoals we al eerder gezien hebben berust
lossless compressie op maken van een kleinere code voor berichten die
veel voorkomen. Daarbij werd het probleem aangekaart, dat wanneer je
codes van verschillende lengten neemt, je bij sommige schakelingen de
code op verschillende manieren kan interpreteren. Dat is natuurlijk
niet de bedoeling. Iedere schakeling van verschillende codes moet bij
het ontcijferen een unieke uitkomst hebben. Meneer Huffman heeft dus
een manier van coderen gevonden, die ieder bericht in het stuk
informatie dat je wilt comprimeren, een optimaal korte code geeft die
ook nog uniek te ontcijferen is. Zijn manier van coderen gaat zo: je
zet alle mogelijke berichten met de kans dat ze voorkomen op een
rijtje. Dan verbind je de twee kleinste kansen met twee lijntjes.
Waar de twee lijnen bij elkaar komen zet je de opgetelde kans van die
twee berichten neer. Nu behandel je die opgetelde kans als een
mogelijk bericht en begin je weer bij stap één, totdat
alle kansen gecombineerd zijn en je, als het goed is, aan het begin
het getal één hebt. Nu heb je dus een hele
boomstructuur van vertakkingen en kansen. Dan geef je bij iedere
splitsing de ene lijn een 1 en de andere lijn een 0. Als laatste volg
je voor ieder bericht vanuit de ‘stam’ van de boom de weg
naar het bericht en bij iedere splitsing die je tegen komt noteer je
of je de 1-lijn of de 0-lijn hebt. Zo krijg je voor ieder bericht een
optimale code. Dit wordt nu even voorgedaan met een voorbeeld uit
de vorige pagina.
Daarbij waren de kansen voor 5 berichten zo verdeeld:
z | y | x | w | v |
0,2 | 0,45 | 0,05 | 0,05 | 0,25 |
Dan ga je zo te werk:
stap 1 | stap 2 |
 |
 |
stap 3 | stap 4 |
 |
 |
stap 5 | stap 6 |
 |
 |
LZW codering
Zoals je misschien al gezien had, staat de afkorting LZW voor de
achternamen van de bedenkers: Lempel, Ziv en Welch. Het is een
verbetering op de, door Lempel en Ziv eerder bedachte, LZ-codering.
In tegenstelling tot de Huffman codering heeft de LZW codering geen
van te voren bepaalde kans voor de mogelijke berichten nodig. Het is
een zogenaamde woordenboek-codering. In dat woordenboek worden veel
voorkomende schakelingen van berichten opgeslagen. Het speciale van
deze soort codering, is dat het woordenboek zelf, niet met de
gecodeerde informatie mee gestuurd hoeft te worden, omdat het bij het
decoderen uit het bericht gereconstrueerd word. De LZW codering kan
bijvoorbeeld voor tekst gebruikt worden. Het woordenboek begint dan
met 256 waarden, voor alle mogelijke karakters één. Het
eerste bericht kan gewoon met zo’n woord uit het woordenboek
opgeslagen worden. Maar tegelijkertijd wordt er een nieuw woord aan
het woordenboek toegevoegd dat bestaat uit dat karakter plus het
karakter dat er achter staat. Als voorbeeld kijken we naar de
volgende zin:
ik-denk-dat-ik-dat-ben
Het is een zin van 22 tekens, waarbij de spaties voor de
duidelijkheid vervangen zijn door streepjes. Gecomprimeerd zou de zin
er dan zo uit zien:
(i) (k) (-) (d) (e) (n) [2] (d) (a) (t) (-) [1] [3]
[9] (-) (b) [5]
Daarbij zijn de tekens tussen haakjes de tekens die standaard in
het woordenboek zitten. De tekens tussen de vierkante haakjes
zijn de woorden die aan het woordenboek zijn toegevoegd. Deze
tekenreeks is 17 tekens lang, dus er is een compressie van 100 - (17
* 100 / 21) = 19%. Het woordenboek ziet er zo uit:
[1=ik] [2=k-] [3=-d] [4=de] [5=en] [6=nk] [7=k-d] [8=da] [9=at]
[10=t-] [11=-i] [12=ik-] [13=-da] [14=at-] [15=-b] [16=be]
De behaalde compressie bij deze methode hangt sterk af van de
hoeveelheid herhaling die er in een stuk informatie zit. Het is
natuurlijk logisch dat hoe groter het te comprimeren bestand wordt,
hoe groter de kans dat op herhaling binnen dat bestand is en hoe
groter daarmee de compressie.
Dit voorbeeld had met taal te maken, maar dat is niet de enige soort
informatie die met deze coderingsmethode gecomprimeerd kan worden.
Een ander voorbeeld is digitale foto bestanden. Het bestandsformaat
GIF maakt bijvoorbeeld hoofdzakelijk gebruik van de LZW codering.
Daarbij wordt per horizontale regel pixels naar herhaalde kleuren
gekeken. Als een hele regel alleen maar witte pixels bevat zal dat
dus veel compressie opleveren. Met herhaling in verticaal opzicht zal
geen rekening worden gehouden, dus het kan gebeuren dat het bestand
beter gecomprimeerd wordt als je het een kwartslag draait.
Delta codering en Run-length codering
Deze twee manieren van compressie worden samen beschreven, omdat
ze vaak samen gebruikt worden, hoewel dat niet noodzakelijk is. Als
ze samen gebruikt worden, wordt eerst de delta codering toegepast.
Deze verandert een rij berichten in een rij van de verschillen tussen
die berichten. De rij 4, 6, 8, 7, 9, 11 wordt: 4, 2, 2, -1, 2, 2. Op
zich heb je dan nog geen compressie, maar dat heb je wel als je de
run-length codering er achteraan gebruikt. De run-length codering zet
lange rijen van dezelfde berichten om in de waarde van dat bericht
plus het aantal keer dat het achter elkaar voor komt. Bijvoorbeeld de
berichtenreeks aaaaaaaaaahhhhbeeeeeeeeooooooooooooo zou worden
omgezet in: (10a)(4h)(1b)(8e)(13o), wat duidelijk minder ruimte
inneemt dan de originele reeks. De rede dat de twee coderingen vaak
samen gebruikt worden is het feit dat delta codering (als het
toegepast wordt op de juiste bestanden) vaak lange reeksen van
dezelfde berichten produceert. Vervolgens kunnen die reeksen door de
run-length codering tot korte reeksjes omgezet worden.
Zoals begrijpelijk is, zal de delta codering (al dan niet in
combinatie met run-length codering) veel gebruikt worden in situaties
waarin veel berichten en/of berichtschakelingen voorkomen die veel op
elkaar lijken. Daarbij kan je denken aan een grote alfabetische
woordenlijst, een videofilmpje en in mindere mate aan
geluidsbestanden. In de compressie van videobestanden wordt
onder andere gebruik gemaakt van delta codering, omdat de meeste
filmpjes die voor mensen betekenis en/of waarde hebben bestaan uit
aaneenschakelingen van beelden die niet veel van elkaar verschillen.
Over het algemeen hechten wij juist meer waarde aan video met zo veel
mogelijk beelden per seconde en dus minder verschil tussen de
beelden.
Move-to-front codering
Net als de Delta codering, is de Move-to-front codering, oftewel
haal-naar-voren codering, geen compressiemethode die in zijn eentje
een stuk informatie kan comprimeren. Het is alleen maar een techniek
om een aaneenschakeling van vaak herhalende berichten anders ‘op
te schrijven’. Dit wordt gedaan door de reeks berichten waaruit
de informatie kan bestaan steeds anders op te schrijven en dan het
nummer te noteren van het bericht dat je wilt coderen. Dat laat zich
het makkelijkst illustreren met een voorbeeld. Stel, de pixels in een
plaatje kunnen bestaan uit de volgende kleuren: rood, groen, blauw,
geel, wit, oranje, grijs, paars en roze. De pixels in het plaatje dat
we willen coderen zijn achtereenvolgens: blauw, geel, blauw, geel,
blauw, grijs, grijs, grijs, grijs, wit. We beginnen met alle
mogelijkheden op een rijtje. Iedere kleur heeft een nummer gekregen.
Vervolgens noteren we het nummer van de eerste kleur die we moeten coderen. Dit wordt het eerste nummer van de uiteindelijke code. Vervolgens zetten we die kleur vooraan. Het nummer van blauw is 3.
Blauw komt dat op de eerste plek te staan:
Dan noteren we het nummer van de kleur die na blauw komt: geel = 4. Nu komt geel vooraan te staan:
Vervolgens komt blauw weer: 2. (en weer naar voren halen)
geel heeft nummer 2, geel naar voren
blauw heeft nummer 2, blauw naar voren
grijs heeft nummer 7, grijs naar voren
grijs heeft nummer 1, grijs blijft vooraan
grijs heeft nummer 1, grijs blijft vooraan
grijs heeft nummer 1, grijs blijft vooraan
wit heeft nummer 6, klaar.
De gecodeerde reeks is dus: 3422271116. Zoals je ziet zit daar
redelijk wat herhaling in en is dus met de run-length codering
makkelijker te comprimeren. Het uitpakken is simpel: je neemt de
reeks waarmee je begon en noteert daar de derde kleur van. Dan schuif
je die kleur helemaal naar voren en neem je de vierde kleur. Die
kleur schuif je helemaal naar voren en je neemt de tweede kleur. Zo
ga je door totdat je alle cijfers hebt gehad. Dan heb je de originele
reeks weer.
Aritmetische codering
Aritmetische codering is een vrij ingewikkelde vorm van codering,
waarvan alleen het principe besproken zal worden, omdat het anders te
ingewikkeld wordt. Deze codering zal een serie van berichten vertalen
in een bepaald interval op een getallenlijn met waarden op het
interval: [0,1). Net als met de Huffman codering is
nodig om vooraf de kansen op de verschillende berichten te
bepalen. Hoe preciezer die kans bepaald wordt, hoe beter de codering
werkt. Het verschil met de Huffman codering is dat voor ieder bericht
niet een heel aantal bits nodig is. Als de informativiteit van een
bericht 0,0001 bit is, zal de Aritmetische codering daar ook (bij
benadering) 0,0001 bit voor gebruiken om te coderen. Dat komt omdat
niet ieder bericht een aparte code krijgt, zoals met de Huffman
codering, maar de hele schakeling van berichten in een bepaald
interval wordt vertaald. Dat gaat als volgt: Stel je hebt een stuk
informatie dat uit drie berichten kan bestaan, namelijk x, y en z. De
kans op x is 0,35; de kans op y is 0,25 en de kans op z is 0,4. Op de
getallenlijn ziet dat er zo uit:
Als de informatie uit één bericht had bestaan dan
was de code voor x: [0;0,35), de code voor y: [0,35;0,6) en de code
voor z: [0,6,1) geweest. Hoe dat in bits vertaalt wordt zal in het
belang van de eenvoud achterwegen gelaten worden. Voor een stuk
informatie met meer berichten wordt als het ware ingezoomd op het
interval. Stel er is een stuk informatie met als eerste bericht z,
als tweede bericht y en als derde bericht x. Voor het eerste bericht
is het interval: [0,6;1). Dan wordt er ingezoomd op dat interval en
vervolgens wordt dat interval ook weer opgedeeld in stukken die
evenredig zijn met de kansen. Het interval voor zy is dan:
[0,74;0,84). Dat interval wordt weer opgedeeld in stukken evenredig
met de kansen. Zo krijg je voor zyx het interval: [0,74;0,775). Het
volgende plaatje laat het allemaal wat duidelijker zien:
Bij het decoderen wordt er dus eerst gekeken naar het grootste
interval: Ligt het interval van het gecodeerde stuk ergens tussen de
0,6 en de 1? Zo ja, dan is het eerste bericht een z. Ligt het
interval van het gecodeerde stuk binnen de 0,74 en de 0,84? Zo ja,
dan is het tweede bericht een y. Is het uiteindelijke interval
[0,74;0,775)? Zo ja, dan is het laatste bericht een x. Zo is de
oorspronkelijke code van zyx weer tevoorschijn. Een klein
‘code-interval’ betekent dus dat er heel veel berichten
in gecodeerd zitten en/of dat de berichten die er in zitten een
kleine kans van voorkomen hebben. In ieder geval is de
informativiteit van die code dan erg groot.
Lossy coderingen:
Zoals je aan het begin van deze tekst hebt kunnen lezen, gaat er
bij lossy datacompressie een deel van de originele informatie
verloren. Soms kan ervoor worden gekozen hoeveel informatie er
ongeveer verloren mag gaan, en dus hoe erg het bestand gecomprimeerd
mag worden. Bij veel lossy coderingen is het verlies aan informatie
voor mensen nauwelijks waar te nemen.
Kwantisatie
Vooral bij het werken met digitaal beeld en geluid komt
kwantisatie voor. Er zijn verschillende soorten kwantisatie, maar het
principe is hetzelfde. Het probleem is dat computers alleen met hele
waarden kunnen werken. Bij het opnemen van geluid komt er
bijvoorbeeld een analoge stroom data binnen, die digitaal opgeslagen
moet worden. In het plaatje is dat de rode golfbeweging. Die
golfbeweging heeft op ieder tijdstip een unieke waarde. Een computer
kan daar niet mee overweg. Bij het digitaal opslaan moet die
golfbeweging opgeslagen worden in tijdvakken met een bepaalde waarde.
Die tijdvakken kunnen allemaal slechts een eindig aantal waarden
aannemen. In het voorbeeld zijn dat alle hele getallen tussen –12
en +12.
De mate van compressie wordt bepaald door de breedte van de
tijdvakken en de precisie waarmee de y-waarden vastgelegd kunnen
worden. Hoe kleiner de tijdvakken en hoe meer waarden de y as kan
aannemen hoe preciezer de originele golfbeweging benaderd kan worden
en hoe minder compressie er is.
Fractale compressie
Bij deze vorm van compressie worden
fractals
gebruikt, om zich herhalende patronen binnen een plaatje met minder
bits te beschrijven. Daarbij gaat het dan vooral om foto’s en
landschappen. Simpel gezegd bestaat een fractal uit een plaatje dat
bestaat uit kleinere plaatjes die er hetzelfde uit zien. De
compressie berust op het feit dat een fractal beschreven kan worden
met een vrij simpele formule. Bij het comprimeren word er dus naar
een zo simpel mogelijke formule gezocht waarmee de rest van (een deel
van) een plaatje beschreven kan worden. Het nadeel van deze techniek
is dat het erg lang duurt om de formules te ontdekken en dus ook om
het plaatje te comprimeren. Het decomprimeren gaat wel snel. Een
voorbeeld is een plaatje waar een boom op staat. De boom heeft een
bepaalde structuur, die ook weer terug te vinden is in de takken. Als
je dus een formule vindt om zo’n klein takje te beschrijven en
daarmee dan de hele boom kunt opbouwen heb je dus het plaatje
gecomprimeerd. Dat blijkt in de praktijk alleen niet zo eenvoudig.
Jpeg
De coderingen die nu volgen lijken een beetje op elkaar. Jpeg is
methode om digitale plaatjes op te slaan. Daarbij wordt gebruik
gemaakt van een vrij groot aantal compressiemethoden. Een van de
speciale kenmerken van Jpeg compressie is dat de hoeveelheid verloren
informatie door de gebruiker bepaald kan worden. De compressie
verloopt in een aantal stappen. In de eerste stap worden de
kleurwaarden van iedere pixel anders ‘opgeschreven’,
zodat de groenwaarden veel nauwkeuriger beschreven worden dan de
rood- en blauwwaarden. Het plaatje wordt daar niet groener door,
zoals je zou verwachten. Dit is alleen een stap om het plaatje even
scherp te houden, terwijl de kleuren minder nauwkeurig (en dus met
minder bits) beschreven worden. Het menselijk oog is namelijk, als
het om scherpte gaat, veel gevoeliger voor groen, dan voor andere
kleuren. Dit is dus gewoon een soort van trucje. In de tweede stap
worden de pixels in het plaatje verdeeld in vlakjes van 8 bij 8
pixels. Vervolgens wordt er op ieder vlakje een transformatie
toegepast. Een transformatie is een manier om een aantal waarden op
een andere manier op te schrijven, net als de Move-to-front en de
Delta coderingen. Deze vorm van transformeren heet ‘discrete
cosinus transformatie’. Zoals de naam zegt worden er met deze
manier van transformeren cosinus functies gebruikt om de vlakjes van
8 bij 8 pixels te beschrijven. Vervolgens wordt er een vorm van
kwantisatie toegepast. Dat is het stuk waar de gebruiker invloed
heeft op de hoeveelheid compressie die wordt toegepast. Met behulp
van de discrete cosinus transformatie kunnen eerst stukjes informatie
worden weggelaten die de minste invloed hebben op de kwaliteit van
het plaatje. Denk hierbij weer aan het plaatje van de kwantisatie.
Vervolgens kan er steeds meer
informatie weggelaten worden, totdat er uiteindelijk bijna niks meer
over is van het originele plaatje. De hoeveelheid informatie die
weggelaten wordt hangt dus van de gebruiker af. Scherpe overgangen
van kleur, oftewel contrasten, zijn door de discrete cosinus
transformatie heel gevoelig voor het weglaten van informatie. Vandaar
dat dat de eerste plekken zijn, waar het plaatje merkbaar in
kwaliteit afneemt. Op het plaatje hier onder is dat effect goed te zien: (Het rechter plaatje is gecomprimeerd.)
Bij de volgende stappen van de Jpeg codering worden er vormen van de
Delta codering en de Run-Length codering gebruikt om verschillende
aspecten van de vlakjes te coderen. Aan het eind komt dan nog Huffman
of Aritmetische codering.
Mpeg
Mpeg (afkorting voor Moving Pictures Experts Group) is een formaat
voor het comprimeren van videobeelden. De basis van de Mpeg codering
ligt bij de Jpeg codering. De beelden worden op ongeveer de zelfde
wijze vastgelegd als bij Jpeg. Er is alleen wel een verschil tussen
video- en fotomateriaal. Bij video is er een grote samenhang tussen
de opvolgende plaatjes in het filmpje. Daar maakt Mpeg dankbaar
gebruik van. Het gebruikt namelijk onder anderen een vorm van Delta
codering om de verschillen tussen opeenvolgende plaatjes aan te
geven, in plaats van alle plaatjes in hun geheel. Dat blijkt over het
algemeen een heel effectieve manier van opslaan. Bij het comprimeren
moet er echter wel gezocht worden naar bewegende dingen in het beeld,
zodat die ook effectief opgeslagen kunnen worden. Dat kost nogal wat
rekenkracht. Bij het decomprimeren hoeft dat echter niet. Vandaar dat
het comprimeren bij Mpeg-filmpjes langer duurt dan het decomprimeren.
MP3
MP3 staat voor Mpeg audio layer 3 en is gebaseerd op het
Mpeg-formaat. De grootte van een ongecomprimeerd muziekbestand hangt af van
drie dingen. De lengte, de precisie waarmee de amplitude van de golfbeweging
opgeslagen wordt en frequentie waarmee het geluid of de muziek bij het afspelen
‘ververst’ wordt; de zogenaamde sample-rate. Weer is het plaatje van de
kwantisatie van toepassing:
De breedte van de
tijdvlakjes representeert de sample-rate en de hoeveelheid horizontale lijnen
representeert de precisie waarmee de amplitude kan worden vastgelegd. Mp3 doen
een aantal dingen met geluid, die meestal te maken hebben met de beperkingen
van het menselijk oor. Op de eerste plaats reduceert MP3 de precisie waarmee de
amplitude van de geluidsgolf wordt opgeslagen en soms de sample-rate. Dat valt
namelijk in de meeste gevallen voor ongetrainde oren niet op. Daarnaast kan op
plaatsen waar dat wel merkbaar zou zijn, de precisie van het beschrijven van de
golf groter gehouden worden. Ook slaat MP3 uiterst hoge en uiterst lage tonen,
die het menselijk oor niet kan waarnemen, niet op. Een ander trucje dat MP3
toepast, is het weglaten van informatie vlak nadat er een heel hard geluid is
geweest. Studies hebben bewezen, dat tonen die vlak na een hard geluid komen
nauwelijks geregistreerd worden in de hersenen. Als laatste wordt er een
techniek toegepast die geen ‘misbruik’ van het menselijk oor maakt. Veel
geluidsbestanden worden namelijk aangeboden in stereo. Dat betekent dat er voor
twee luidsprekers een apart geluidssignaal is. In principe zou dat betekenen
dat het bestand twee maal zo groot zou zijn, als het bestand voor een enkele
luidspreker. Er bestaat echter veel samenhang tussen het geluid voor de rechter
luidspreker en het geluid voor de linker luidspreker. Daar maakt MP3 gebruik
van, door het geluidssignaal maar één keer op te slaan als het geluid voor
beide luidsprekers hetzelfde is.
Ook bij het MP3 formaat is het mogelijk om zelf de
hoeveelheid compressie te bepalen. De hoeveelheid compressie van een
geluidsbestand wordt uitgedrukt in de bitrate. De bitrate is het aantal bits
dat er per seconde nodig is om dat bestand op te slaan. Veel gebruikte bitrates
zijn: 64, 128, 192, 256 en 320 kilobits per seconde (kbps). Hoe hoger de
bitrate, hoe hoger de kwaliteit en hoe minder compressie er is. Om inzicht te
geven in de kracht van de MP3 compressie kijken we naar de hoeveelheid muziek
die er op een mp3-speler met 256 megabyte (MB) geheugen kan. Een formaat dat
niet comprimeert, zoals het WAV formaat heeft ongeveer 1411 kilobyte (KB) nodig
voor één seconde (stereo) muziek. Dat wordt zo berekend: 44100 Hz (samplerate)
* 1 seconde (duur van het geluidsbestand) * 2 kanalen (het geluid is in stereo)
* 16 bits (aantal bits dat nodig is om de amplitude van de golfbeweging vast te
leggen) = 1411200 bits. Per minuut heeft het WAV formaat dus 60 seconden
(aantal seconden in één minuut) * 1411200 bits (bitrate van het WAV formaat) / 8
bit (aantal bit in één byte) = 10584000 byte = 10,1 MB nodig om het geluidsbestand
op te slaan. Een MP3 bestand van redelijke kwaliteit heeft daarentegen
slechts 128 kilobits per seconde nodig om een muziekbestand op te slaan. Dat is
128 kbps * 1024 bits (aantal bits in één kilobit) * 60 seconden (aantal
seconden in één minuut) / 8 bits (aantal bits in één byte) = 983040 bytes per
minuut, oftewijl 0,9375 MB per minuut. Op een mp3-speler met 256 MB aan
geheugen kan dus een geluidsfragment dat maximaal ( 256 MB / 10,1 MB per minuut = ) 25,3
minuten duurt, als het niet gecomprimeerd wordt. Met MP3 compressie kan er een
geluidsfragment van maarliefs (256 MB / 0,9375 MB per minuut = ) 273,1 minuten
op. Dat is 10,8 maal zo lang. En in de praktijk blijkt de compressie zelfs nog beter te zijn.