2. WEERGAVE VAN GEGEVENS
2.1. Binaire getallen Zoals we reeds in het vorige hoofdstuk aanhaalden werken computers zoals binaire apparaten, i.e. hun output kan in twee mogelijke toestanden bestaan. We definieerden een computer als een apparaat dat data ontvangt, opslaat en informatie verwerkt. In dit hoofdstuk zullen we de manier waarop de gegevens in de computer worden weergegeven wat van naderbij bekijken. We zullen ons hier vooral toespitsen op de weergave van getallen. In het binaire talstelsel worden alle waarden voorgesteld gebruik makend van twee binaire getallen 0 en 1. Om meer dan twee mogelijke toestanden tegelijkertijd te kunnen weergeven moeten logischerwijze een reeks enkelvoudige binaire apparaten gegroepeerd worden. In de meeste gevallen worden deze groepen van binaire outputs geïnterpreteerd als voorstelling van getallen en worden ze bijgevolg binaire getallen genoemd. Alle individuele getallen of "digits" van deze getallen worden binaire digits of bits genoemd. Binaire getallen worden op een gelijkaardige manier als de klassiek gekende decimale getallen gebruikt. We weten inderdaad dat het getal 294 wil zeggen {2 honderdtallen + 9 tientallen + 4 eenheden}, waar elk van deze getallen een hogere macht van 10 vertegenwoordigt dan zijn rechterbuur :
2 × 102 + 9 ×101 + 4 × 100 = 294 Het enige verschil bij binaire getallen is dat elke opeenvolgende plaats aan de linkerkant een macht van twee voorstelt en dat de enig mogelijke getallen 0 en 1 zijn. Het binaire getal 11011 betekent dus in het decimale stelsel : Computervaardigheden
39
2. Weergave van gegevens
1× 2 4 + 1× 2 3 + 0 × 22 + 1× 21 + 1× 20 = 16
+8
+0
+2
+1
= 27 Er is natuurlijk wel af en toe verwarring mogelijk, bv. tussen het binaire getal 10 en het decimale getal 10. Wanneer een mogelijke ambiguïteit zou kunnen optreden kan men achter het binaire getal de basis van het talstelsel in subscript vermelden. Op die manier kan men schrijven dat 102=210 en 110112 = 2710. De omgekeerde conversie, van decimaal naar binair, is iets minder evident, maar toch nog vrij eenvoudig. Het volgende algoritme beschrijft de omzetting van een positief decimaal getal naar een binair getal : 1. Ga van start met B leeg 2. Zo lang D niet nul is herhaal de volgende sequentie : a. als D even is, voeg 0 aan de linker kant van B bij b. als D oneven is, voeg 1 aan de linker kant van B bij c. Deel D door twee, rond naar beneden af en ga terug naar 2a Als voorbeeld bekijken we in Figuur 2.1. de omzetting van de decimale getallen 19 en 116 naar binaire getallen : Omzetten van 19 naar binair : 19 is oneven
→
B=
1,
D=9
9 is oneven
→
B=
11,
D=4
4 is even
→
B=
011,
D=2
2 is even
→
B=
0011,
D=1
1 is oneven
→
B=
10011,
D=0
Computervaardigheden
40
2. Weergave van gegevens
Omzetten van 116 naar binair : 116 is even
→
B=
0,
D = 58
58 is even
→
B=
00,
D = 29
29 is oneven
→
B=
100,
D = 14
14 is even
→
B=
0100,
D=7
7 is oneven
→
B=
10100,
D=3
3 is oneven
→
B=
110100,
D=1
1 is oneven
→
B=
1110100,
D=0
Figuur 2.1. Omzetting van decimaal naar binair.
2.2. Voorstellen van gehele getallen Vermits alle computers informatie behandelen als bits (0 of 1) kunnen gehele getallen ("integers") gemakkelijk binair opgeslagen worden. Bij de opslag van een geheel getal in een computer, kan het binaire equivalent ervan worden opgeslagen als een bitpatroon. Zo kan het gehele getal 19 worden opgeslagen als het bitpatroon 10011, terwijl 116 kan worden opgeslagen als 1110100. Het kan voor een computer echter moeilijk zijn om te bepalen waar de ene waarde in het geheugen eindigt en waar de andere waarde begint, vermits binaire getallen een verschillend aantal bits kunnen bevatten.
Dit probleem wordt door de meeste
computers en programma's opgelost door gehele getallen steeds door eenzelfde aantal bits weer te geven (gewoonlijk gaat het hier om 32 bits) ; aan de linkerkant van elk binair getal worden 0-en bijgeplaats totdat de ganse sequentie 32 bits lang is. De computer zal dus het getal 19 voorstellen als : 00000000000000000000000000010011 Vermits elk geheel getal 32 bits lang is, kunnen er in total 232 = 4.294.967.296 verschillende bitpatronen voorgesteld worden. Men verdeelt nu, bij conventie, deze patronen gelijk over positieve en negatieve gehele getallen. Programma's die dus 32 bits gehele getallen gebruiken kunnen dus 232/2 = 231 = 2.147.483.648 niet-negatieve Computervaardigheden
41
2. Weergave van gegevens
getallen (met inbegrip van 0) en 232/2 = 231 = 2.147.483.648 negatieve getallen opslaan. De overeenkomst tussen gehele getallen en bitpatronen wordt samengevat in Figuur 2.2. Wanneer je Figuur 2.2. bekijkt, is het je waarschijnlijk opgevallen dat bitpatronen die met een 1 beginnen overeenkomen met negatieve waarden, terwijl deze die met de 0 bit beginnen overeenkomen met niet-negatieve getallen. De eerste bit in elk bitpatroon fungeert dus als de zogenaamde tekenbit voor het getal. Zo begint het bitpatroon van 3 met een 0 (de tekenbit) en eindigt het met de 31-bit weergave van 3 : 0000000000000000000000000000011. Analoog komt het bitpatroon van het decimale getal 100 overeen met een 0, gevolgd door de 31-bits voorstelling van het getal 100, nl. 0000000000000000000000001100100. Als men op deze manier negatieve getallen zou gaan willen coderen, dan kon men allereerst een 1 schrijven, gevolgd door de 31-bits voorstelling van de absolute waarde van het negatieve getal. Bitpatroon 10000000000000000000000000000000 10000000000000000000000000000001 10000000000000000000000000000010 . . . 11111111111111111111111111111101 11111111111111111111111111111110 11111111111111111111111111111111 00000000000000000000000000000000 00000000000000000000000000000001 00000000000000000000000000000010 00000000000000000000000000000011 . . . 01111111111111111111111111111101 01111111111111111111111111111110 01111111111111111111111111111111
Decimale waarde (−2 = −2.147.483.648) 31 (−2 −1 = −2.147.483.647) 31 (−2 −1 = −2.147.483.646) 31
(−3) (−2) (−1) ( 0) ( 1) ( 2) ( 3)
(231−3 (231−2 (231−1
= = =
2.147.483.645) 2.147.483.646) 2.147.483.647)
Figuur 2.2. Voorstelling van gehele getallen als bitpatronen. Nu blijkt dat deze voorstellingswijze voor decimale getallen een aantal belangrijke nadelen heeft. Allereerst zou een systeem met dergelijke voorstellingswijze het patroon Computervaardigheden
42
2. Weergave van gegevens
10000000000000000000000000000000 als een negatieve nul identificeren. Vermits in het decimale stelsel slechts één nul voorkomt, die daarenboven niet negatief of positief is, is het voorkomen van twee voorstellingen voor nul onnodig en verwarrend. Tevens blijkt dat de optelling van twee binaire getallen, waar we verder in dit hoofdstuk even dieper op ingaan, onnodig gecompliceerd wordt. Om deze moeilijkheden te vermijden zullen computers op exact de tegengestelde manier bitpatronen gaan toekennen aan de negatieve getallen. Dit betekent inderdaad dat het negatieve gehele getal dat het grootste is in absolute waarde (−231) overeen zal komen met het kleinste bitpatroon (10000000000000000000000000000000), terwijl het negatieve decimale getal met de kleinste absolute waarde (−1) overeenkomt met het grootste bitpatroon (11111111111111111111111111111111). Naast het voorkomen van een negatieve nul, blijkt deze notatie, ook de two's complement representatie of de twee-complement notatie genoemd, de binaire optelling een stuk gemakkelijker te maken. Het optellen van binaire getallen is in principe niet verschillend van het optellen van decimale getallen. In het decimale talstelsel worden, bij de optelling van twee getallen, de cijfers in de overeenkomstige kolommen opgeteld vertrekkend van rechts. Wanneer de som een getal geeft bestaande uit twee cijfers (een getal ≥ 10), dan wordt de 1 overgedragen naar de volgende kolom (wanneer het getal tussen 10 en 19 ligt). Op een gelijkaardige manier worden bij de optelling van binaire getallen de overeenkomstige bits opgeteld vertrekkend aan de rechterkant. Als de som van twee bits een 2-bits getal oplevert (een getal ≥ 102), dan wordt de 1 overgedragen naar de volgende kolom. Als voorbeeld bekijken we de optelling van twee binaire getallen in Figuur 2.3.
1 1
1 1
1 0 1 12 +
12 1 1 0 02
1 1 0 02 +
1 0 12
1 0 0 0 12 Figuur 2.3. Voorbeelden van binaire optelling.
Computervaardigheden
43
2. Weergave van gegevens
2.3. Voorstellen van reële getallen Het opslaan van gehele getallen in de computer kan op een vrij intuïtieve basis begrepen worden. Ook reële getallen (t.t.z. niet-gehele getallen) kunnen binair opgeslagen worden, maar de overeenkomst is veel minder direct. Een reëel getal kan op twee manieren weergegeven worden : de decimale en de wetenschappelijke notatie. Je kan inderdaad het getal 1234.56 ook weergeven als 1.23456E3 (of 1.23456 × 103). Als reële getallen in de wetenschappelijke notatie geschreven worden, dan wordt de voorstelling genormaliseerd zodat slechts één bit voorkomt aan de linkerkant van de komma. Een aantal voorbeelden van de omzetting van de decimale naar de wetenschappelijke notatie van reële getallen zijn : 1234.56
1.23456 × 103
−50.0
−5.0 × 101
0.00099
9.9 × 10−4
Elk reëel getal kan op een unieke manier geïdentificeerd worden door de twee bestanddelen van deze genormaliseerde vorm : het fractionele gedeelte (t.t.z. de getallen die rond de komma staan) en de exponent (t.t.z. de macht van 10). Vermits de komma steeds voorkomt tussen het eerste en het tweede getal van het fractioneel deel, is het mogelijk hem niet in beschouwing te nemen bij de weergave van het getal. Men kan op deze manier elk onderdeel van een reëel getal in de wetenschappelijke notatie behandelen als een geheel getal.
Zo kan het voorgaande voorbeeld 1234.56,
genormaliseerd tot 1.23456 × 103 , voorgesteld worden door de gehele getallen (123456, 3). Analoog kan −50.0, genormaliseerd tot −5.0 × 101 in de wetenschappelijke notatie, worden voorgesteld door (− 5,1) en kan 0.00099, genormaliseerd tot in de wetenschappelijke notatie tot 9.9 × 10−4, worden voorgesteld als (99, −4). Reële getallen die in dit formaat worden opgeslagen noemt men "floating-point" getallen (in het Nederlands spreekt men van zwevende komma getallen). Deze benaming komt van het feit dat het normalisatieproces de komma laat drijven totdat er één getal aan de linkerkant ervan overblijft. In 1985 werd door het "Institute of Electrical and Electronics Engineers" (IEEE) een standaard weergave voor de opslag van "floating-point" getallen vooropgesteld dat sindsdien door praktisch alle computer- en software constructeurs wordt gevolgd. Computervaardigheden
44
2. Weergave van gegevens
Volgens deze IEEE standaard kan een "floating-point" getal worden voorgesteld door ofwel 32 bits (4 bytes) of 64 bits (8 bytes). De 32-bits voorstelling, ook "single precision" (enkele precisie) genoemd, gebruikt 24 bits om het fractionele gedeelte op te slaan (met inbegrip van de teken-bit) en 8 bits voor de exponent. Dit geeft aanleiding tot een reeks van mogelijke waarden die gaan van ongeveer −1.75494351 × 10−38 tot 3.402823466 × 1038. Bij de 64-bits voorstelling daarentegen, ook "double precision" (dubbele precisie) genoemd, worden 53 bits voorzien voor het fractionele gedeelte (m.i.v. de teken-bit) en 11 bits voor de exponent, zodaning dat een veel groter aantal mogelijke waarden kunnen weergegeven worden (van ongeveer -2.2250738585072014 × 10−308 tot 1.7976931348623158 × 10308). De IEEE voorstelling van "floating point" getallen wordt nog eens schematisch weergegeven in Figuur 2. 4. Meer details over de IEEE enkele en dubbele precisie weergave is buiten het bereik van dit opleidingsonderdeel. Het is echter belangrijk van in te zien dat een reëel getal uiteindelijk wordt weergegeven door twee gehele getallen (een fractioneel gedeelte en een exponent) die gecombineerd worden tot een karakteristiek binair patroon. We merken tevens op dat sommige bitpatronen worden voorbehouden voor "speciale waarden", bv. NaN, wat staat voor "Not-a-Number". In Matlab, het programma waarin we zullen programmeren, is dit het resultaat van onbepaalde wiskundige operaties, zoals 0/0, ∞/∞, 0×∞, ∞-∞, enzovoort.
Tekenbit
Exponent (8 bits)
Fractioneel gedeelte (23 bits)
Tekenbit
Exponent (11 bits)
Fractioneel gedeelte (52 bits)
Figuur 2.4. IEEE weergave van "floating-point" getallen.
Computervaardigheden
45
2. Weergave van gegevens
Vermits er echter een oneindig aantal reële waarden zijn maar slechts een eindig aantal 32- of 64-bitpatronen, is het niet verwonderlijk dat computers niet alle reële getallen kunnen voorstellen, zelfs niet diegene die in het gebied van de enkele en dubbele precisie liggen. Wanneer het resultaat van een berekening een reëel getal oplevert dat niet exact kan worden weergegeven, dan zal de computer de waarde afronden naar het patroon dat het dichtste tegen die waarde ligt. Voor een enkele precisie "floating-point" getal wil dit zeggen dat een precisie van ongeveer 7 cijfers na de komma kan gehaald worden. Dit wil zeggen dat de computer elk getal dat meer dan 7 beduidende cijfers bevat zal afronden. Gebruik makend van dubbele precisie kunnen 16 cijfers na de komma gehaald worden. Wanneer het resultaat van een wiskundige operatie resulteert in een getal dat te groot is om weergegeven te worden in onze representatie, dan spreekt men van een "overflow". Merk op dat een "overflow" zowel kan optreden langs de positieve kant (t.t.z. het getal is te groot om weer te geven) als langs de negatieve kant (het getal is te klein om het weer te geven). Men spreekt hier dan respectievelijk van een positieve en van een negatieve "overflow". Wanneer het getal (of de absolute waarde) van het getal te klein is om weer te geven spreekt men van een "underflow" ; ook hier kan men het onderscheid maken tussen een positieve en een negatieve "underflow". In de meeste programmeertalen zal een onderscheid gemaakt worden tussen gehele getallen en reële getallen, door gehele getallen voor te stellen als 32-bits patronen en reële getallen d.m.v. het "floating-point" format. Matlab gebruikt echter één enkele representatie, nl. de IEEE dubble precisie "floating-point" weergave. Gehele getallen worden weergegeven als zogenaamde "floating integers", d.w.z. dat ze essentiëel worden opgeslagen in hun "floating-point" voorstelling. Een belangrijk gegeven in het rekenen met computers is te weten hoe klein het verschil kan zijn tussen twee getallen dat de computer kan herkennen. Deze grootheid noemt men de "machine eps" (waar eps de afkorting is voor het Griekse epsilon). Deze maat voor de nauwkeurigheid van de machine wordt bepaald door het kleinste "floatingpoint" getal te zoeken dat, wanneer opgeteld bij "floating-point" 1.000, een resultaat geeft verschillend van 1.000. Getallen die kleiner zijn dan de machine eps zijn effectief nul in de computer. In Matlab bedraagt deze machine eps 2.2 × 10−16.
Computervaardigheden
46
2. Weergave van gegevens
2.4. Voorstellen van karakters In tegenstelling tot gehele en reële getallen is er geen voor de hand liggende of natuurlijke overeenkomst tussen karakters en binaire getallen. Het is daarom dat arbitraire systemen zijn opgesteld om karakters voor te stellen als bitpatronen. De standaard code om karakters voor te stellen is de ASCII (American Standard Code for Information Interchange) code, waarbij elk karakter overeenkomt met een specifiek 8bits patroon. De ASCII codes voor de meest gebruikelijke karakters zie je afgebeeld in Figuur 2.5. Merk op dat de drie karakter-subgroepen, cijfers, kleine en hoofdletters elk worden voorgesteld door opeenvolgende binaire getallen.
Aan de cijfers worden de
binaire getallen met decimale waarden vanaf 48 tot en met 57 toegekend, de hoofdletters gaan van 65 tot 90 en de kleine letters van 97 tot en met 122. Deze rangschikking is belangrijk, omdat het in een Matlab programma (en ook in andere programmeertalen) de mogelijkheid geeft om twee karakterwaarden met elkaar te vergelijken. Zo zal in Matlab de sequentie van uitdrukkingen : c1 = 'a' c2 = 'b' c1 < c2 de logische vector 1 opleveren, waarbij "1" staat voor het feit dat de uitdrukking op de derde lijn waar is. Dit komt omdat Matlab de ASCII codes voor c1 en c2 met elkaar vergeleken heeft. Vermits een string een opeenvolging van karakters is, kan men deze voorstellen door een sequentie van bytes, waarbij elke byte overeenkomt met de ASCII code voor het specifieke karakter.
Zo zal het woord "genoom" worden voorgesteld door het
bitpatroon weergegeven in Figuur 2.6, waarbij de eerste byte (8 bits) overeenkomt met de ASCII code voor "g", de tweede met de ASCII code voor "e", enz. Het is daarom dat in Matlab, wanneer strings met elkaar vergeleken worden, deze vergelijking karakter per karakter gebeurt. Inderdaad, wanneer je de volgende uitdrukkingen in Matlab invoert : s1 = 'ann' s2 = 'ban' s1 < s2
Computervaardigheden
47
2. Weergave van gegevens
dan zou je de volgende logische vector moeten krijgen 1
0
0
omdat de ASCII codes van de twee ingevoerde strings element per element vergeleken worden (de twee strings moeten echter wel dezelfde lengte hebben). Ondanks het feit dat 8-bits ASCII codes voldoende zijn om Nederlandse tekst voor te stellen, zijn ze veel te klein om bepaalde andere alfabetten voor te stellen. De Chinese taal bv. bevat duizenden karakters en het is dus onmogelijk om deze allemaal van elkaar te onderscheiden wanneer men gebruik maakt van slechts één byte geheugen. De steeds toenemende internationalisering zorgt er daarom voor dat ASCII stilaan vervangen wordt door Unicode, een 16-bits code systeem dat de meeste karaktersets uit vreemde talen kan ondersteunen. Om deze overgang van ASCII naar Unicode te vereenvoudigen hebben de ontwikkelaars ervoor gezorgd dat Unicode terugwaarts compatibel is met ASCII. Dit wil zeggen dat de Unicode voor een "traditioneel" karakter gelijk is aan de ASCII code ervan, voorafgegaan door 8 nullen. Zo zal 'f' in ASCII overeenkomen met 01100110 en met 0000000001100110 in Unicode.
2.5. Voorstellen van andere vormen van gegevens en data Tot dusver hebben we besproken hoe de basis datatypen, zoals gehele en reële getallen, karakters en strings, in de computer worden opgeslagen als patronen van binaire getallen. Bij het opslaan en manipuleren van waarden van deze gegevens, zullen programma's de voorstellingswijzen die we reeds hebben behandeld gebruiken, tesamen met een aantal specifieke variaties. Zo zal een tekstverwerkingsprogramma bv. tekst opslaan gebruik makend van ASCII code's, maar zal het ook speciale karakter symbolen invoegen om bepaalde opmaak informatie aan te duiden.
Computervaardigheden
48
2. Weergave van gegevens
ASCII karakter codes Code
Karakter
Code
Karakter
Code
Karakter
00100000 00100001 00100010 00100011 00100100 00100101 00100110 00100111 00101000 00101001 00101010 00101011 00101100 00101101 00101110 00101111 00110000 00110001 00110010 00110011 00110100 00110101 00110110 00110111 00111000 00111001 00111010 00111011 00111100 00111101 00111110 00111111
spatie ! " # $ % & ‘ ( ) * + ´ − . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
01000000 01000001 01000010 01000011 01000100 01000101 01000110 01000111 01001000 01001001 01001010 01001011 01001100 01001101 01001110 01001111 01010000 01010001 01010010 01010011 01010100 01010101 01010110 01010111 01011000 01011001 01011010 01011011 01011100 01011101 01011110 01011111
@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^
01100000 01100001 01100010 01100011 01100100 01100101 01100110 01100111 01101000 01101001 01101010 01101011 01101100 01101101 01101110 01101111 01110000 01110001 01110010 01110011 01110100 01110101 01110110 01110111 01111000 01111001 01111010 01111011 01111100 01111101 01111110 01111111
’ a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ delete
Figuur 2.5. De ASCII code voor karakters.
011001110110010101101110011011110110111101101101 "g"
"e"
"n"
"o"
"o"
"m" "
Figuur 2.6. Voorstelling van een string als een sequentie van ASCII codes.
Computervaardigheden
49
2. Weergave van gegevens
Computers zijn echter in staat om veel meer dan alleen maar getallen en karakters weer te geven. Om echter complexe data op een efficiënte manier te kunnen manipuleren en opslaan moeten computers beschikken over bijkomende technieken en algoritmen. Sommige van deze algoritmen laten toe data naar binaire getallen om te zetten, terwijl andere gebruikt worden om de data samen te drukken, waardoor de binaire weergave wordt ingekort. We zullen in de volgende paragrafen de meest courante methoden voor het opslaan van geluid en beelden in de computer aan bod laten komen.
2.5.1. Geluiden Vooraleer we dieper ingaan op de voorstelling van geluiden in de computer dienen we eerst stil te staan bij het verschil tussen digitaal en analoog. Data kan elektronisch op twee manieren voorgesteld worden, nl. als analoge of als digitale signalen. Analoge signalen stellen de data voor op een manier die analoog is aan de werkelijkheid ; hiermee bedoelen we dat signalen kunnen variëren over een oneindige reeks van waarden. Digitale signalen daarentegen gebruiken slechts een discreet (eindig) aantal waarden. Zo zijn radiosignalen bv. inherent analoog, vermits hun frequenties gemeten worden op een continue schaal. AM radiostations zenden uit op frequenties gaande van 535 tot 1700 kilohertz, terwijl FM stations op frequenties van 88 tot 108 megahertz uitzenden.
Bij oudere radiotoestellen werd de frequentie voorgesteld als een
welbepaalde positie op een draaiknop. De gebruiker stemde dan de radio af door aan de knop de draaien ; de positie van de knop liet echter toe om elke waarde in een continuum te gaan specifiëren. De meeste moderne radiotoestellen daarentegen stellen frequenties voor als discrete waarden, die worden afgebeeld als getallen op een klein scherm. Zo kunnen gebruikers van digitale radio's gewoonlijk FM frequenties kiezen tot op 0.1 megahertz, zoals bv. 106.7 en 106.8, terwijl ze AM frequenties kunnen kiezen tot op 10 kilohertz, zoals 1480 en 1490. Frequenties die tussen deze discrete waarden liggen kunnen dus niet weergegeven worden op de radio en kunnen dus niet gekozen worden. Er zijn echter verschillende andere types van gegevens die, net zoals radiofrequenties, zowel op een analoge als een digitale manier kunnen voorgesteld worden, afhankelijk van het gebruikte toestel en de technologie die erbij betrokken is. Een analoge
Computervaardigheden
50
2. Weergave van gegevens
thermometer bv. bevat een kolom met een vloeistof, zoals alcohol of kwik, en geeft verschillende temperaturen aan naarmate de hoogte van de kolom verandert. Een digitale thermometer daarentegen geeft de temperatuur weer als een discreet getal, gewoonlijk tot op 0.1 °C. Een ander voorbeeld is een klok. Bij een analoge klok bewegen de wijzers zich over een genummerde plaat, en duidt de positie van de wijzers op de schijf de tijd aan. Een digitale klok daarentegen geeft de tijd als een reeks van discrete getallen waarbij uur, minuten en soms ook seconden worden weergegeven. Van belang bij de keuze tussen analoge en digitale weergave is het aspect variabiliteit versus reproduceerbaarheid. Vermits analoge systemen gaan over een continue schaal van waarden, kan men een veel groter aantal unieke signalen weergeven. Zo laat bv. de knop aan een radio toe om de exacte frequentie te vinden voor de best mogelijke ontvangst van een bepaald radiostation. Het kan echter wel moeilijk zijn om later deze meest optimale positie te reproduceren. Wanneer je naar een ander station overschakelt en je zou na verloop van tijd opnieuw naar het oorspronkelijke station willen overschakelen dan dien je opnieuw de radio af te stellen zodanig dat de ontvangst optimaal is. Met een digitale radio ontvanger daarentegen zou het kunnen dat je de optimale radiofrequentie (bv. 106.899) moet afronden naar de dichtstbij gelegen weer te geven frequentie (106.9).
Je kan de digitale instelling 106.9 megahertz echter
gemakkelijk onthouden en eenvoudig opnieuw instellen. Men kan in het algemeen stellen dat analoge weergave voldoende is voor de opslag van data die een hoge graad van variatie bezit maar die niet exact moet weergegeven worden. Bij een analoge radio dien je niet telkens exact de frequentie van het radiostation in te geven, je kan naar een zender luisteren zonder telkens de meest optimale frequentie te gaan zoeken. Op dezelfde manier zijn digitale thermometers en klokken vaak voldoende, vermits het slechts zelden voorkomt dat een persoon de exacte temperatuur en tijd dient te weten ; het is vaak voldoende om een ruwe schatting te maken door naar de thermometer of de klok te kijken.
Onder welbepaalde
omstandigheden echter kunnen deze nadelen van analoge weergave echter voor problemen zorgen ; zo kan het zijn dat een wetenschapper bij een experiment exact de temperatuur moet kunnen weergeven. Bij de opslag van gegevens in een computer is reproduceerbaarheid natuurlijk van zeer groot belang. De verandering van één enkele bit in een bestand kan de betekenis van de
Computervaardigheden
51
2. Weergave van gegevens
data op een drastische manier veranderen. Het is daarom dat computers digitaal werken en dat ze data op een digitale manier bewaren en manipuleren. Geluiden zijn echter inherent analoge signalen. Elk geluid produceert een drukgolf met een unieke amplitude (hoogte of uitwijking, meestal gemeten in pascal (Pa)) en frequentie. In Figuur 2.7 zie voorbeelden van een aantal golfpatronen, gegenereerd door een stemvork, een viool, een fluit en een gong. Als deze geluidsgolven het oor bereiken, zullen ze het trommelvlies laten trillen ; deze trilling wordt dan door de hersenen geïnterpreteerd als geluid.
stemvork viool
fluit
gong
Figuur 2.7. Golfpatronen overeenkomend met een stemvork, viool, fluit en gong. Telefoons gaan deze golfpaketten vertalen in elektrische signalen met wisselende sterkte, die daarna over een draad verstuurd worden en aan het andere eind opnieuw in geluid worden omgezet. Platenspelers reproduceren geluiden door het interpreteren van golven, opgeslagen als groeven van variërende diepte en breedte op het oppervlak van een plaat. Cassette-spelers werken op een gelijkaardige manier ; golven worden vertaald in signalen van wisselende sterkte en dan bewaard als gemagnetiseerde plaatsen op een band. In de meeste gevallen zal het feit dat analoge signalen die op een band opgeslagen zijn niet exact kunnen weergegeven worden geen groot bezwaar vormen. De reden hiervoor is dat het menselijk oor in de meeste gevallen bepaalde inconsistenties en fouten in de
Computervaardigheden
52
2. Weergave van gegevens
geluidsweergave niet zal opmerken. Wanneer een bepaalde opname een aantal keren gedupliceerd wordt dan kunnen kleine fouten zich beginnen opstapelen, wat na verloop van tijd een duidelijk merkbaar verlies van kwaliteit met zich zal meebrengen. Digitale opnames daarentegen kunnen exact gereproduceerd worden, zodat een CD herhaaldelijk kan gecopiëerd worden zonder verlies van kwaliteit. Alvorens een geluid digitaal kan opgeslagen worden moet de analoge golf in een sequentie van discrete waarden omgezet worden. Dit noemt men digitale sampling, waarbij de amplitude van de golf op regelmatige intervallen gemeten wordt, waarna de sequentie van deze discrete set van meetwaarden opgeslagen wordt. Je kan dit proces geïllustreerd zien in Figuur 2.8.
200 dPa
100 dPa
0 dPa −100 dPa −200 dPa
Figuur 2.8. Digitalisatie van een analoge geluidsgolf. De amplitude van de golf, hier gemeten in decipascals boven of onder normale luchtdruk, wordt opgenomen als een gehele waarde. Om geluiden nauwkeurig te kunnen reproduceren moeten zeer regelmatig metingen gedaan worden. Om geluid van CD kwaliteit te verkrijgen zijn er minimum 44.100 metingen per seconde nodig. Het gevolg hiervan is dat zelfs korte opnames reeds grote hoeveelheden ruimte voor stockage nodig hebben. Er zijn daarom verschillende technieken ontwikkeld om de groote van digitale geluidsbestanden te verminderen. Een voorbeeld hiervan is het zogenaamde MP3 format, waardoor de grootte van geluidsbestanden met een factor 10 of meer kan gereduceerd worden.
Computervaardigheden
53
2. Weergave van gegevens
2.5.2. Beelden Net zoals bij geluiden zijn er ook een hele reeks formats en compressie technieken voorhanden voor de opslag van beelden. De eenvoudigste manier om beelden op een computer weer te geven is als bitmap. Een bitmap verdeelt een figuur in een grid van punten, die pixels worden genoemd (een samentrekking van "picture elements"), waarna elke pixel in een bitpatroon wordt omgezet. In het geval van een zwart-wit figuur kan elke pixel als één enkele bit weergegeven worden, zoals je kan zien in Figuur 2.9, die toont hoe een eenvoudig zwart-wit figuurtje kan onderverdeeld worden in 64 pixels, die worden opgeslagen als 64 bits. Er dient hierbij echter opgemerkt te worden dat het in dit voorbeeld om een vrij ruwe verdeling gaat, wat resulteert in sommige pixels die deels zwart en deels wit zijn. Wanneer dit gebeurt krijgt de pixel meestal de bit-waarde toegewezen van de hoofdkleur ; in dit voorbeeld zal het dus zo zijn dat een roostertje dat hoofdzakelijk zwart is wordt voorgesteld als een 0.
11111111 11011011 11111111 10111110 10111110 10111101 11000001 11111111
Figuur 2.9. Creatie van een bitmap uit een zwart-wit figuurtje. De term resolutie verwijst naar de scherpte of de duidelijkheid van een afbeelding. Omdat elke pixel een bepaalde kleurwaarde toegewezen krijgt, zullen bitmaps die in kleinere pixels onderverdeeld zijn een hogere resolutie hebben. Het is echter zo dat elke bijkomende pixel de benodigde opslagruimte met één bit verhoogt. Het maken van een bitmap van een kleurplaatje vereist meer dan één bit om elke pixel voor te stellen. In de meeste gevallen wordt elke pixel in een 24-bits code vertaald, de zogenaamde RGB waarde van de pixel. Deze term is afkomstig van het feit dat de kleur van de pixel wordt ontleed in verschillende intensiteiten van rood, groen en blauw. Elk van deze drie componenten krijgt 8 bits toegewezen, zodat intensiteiten van 0 tot 255 kunnen weergegeven worden (hierbij zal 0 overeenkomen met een complete afwezigheid van de desbetreffende kleur en 255 met maximale intensiteit). In Figuur 2.10 zie je de RGB waarden voor een aantal typische HTML kleuren weergegeven. Computervaardigheden
54
2. Weergave van gegevens
Typische HTML kleuren Kleur
(R,G,B)
Kleur
(R,G,B)
Kleur
(R,G,B)
rood
(255,0,0)
groen
(0,128,0)
blauw
(0,0,255)
donkerrood
(139,0,0)
donkergroen
(0,100,0)
donkerblauw
(0,0,139)
crimson
(220,20,60)
olijf
roze
(255,192,203)
lichtgroen
violet
(238,130,238)
bruin
oranje
(255,165,0)
wit
(128,128,0) (144,238,144) (165,42,42) (255,255,255)
lichtblauw purper grijs zwart
(173,216,230) (128,0,128) (128,128,128) (0,0,0)
Figuur 2.10. Typische HTMP kleuren en hun (R,G,B) voorstelling. Merk op dat bv. de verschillende roodschakeringen worden gecreëerd door de intensiteit van de rode component aan te passen. Andere kleuren, zoals bv. crimson en roze, vereisen het mengen van de drie componenten. Vermits er voor elke kleur 256 mogelijke intensiteiten zijn, kunner er dus 2563 = 16.777.216 verschillende kleurencombinaties voorgesteld worden. In het Microsoft Windows besturingssysteem ben je ongetwijfeld reeds bitmaps tegengekomen.
Bitmaps worden hier frequent gebruikt om iconen en
achtergrondfiguren voor te stellen, en krijgen hierbij de extensie BMP. Ondanks het feit dat bitmaps eenvoudig te beschrijven en te begrijpen zijn, vereisen ze veel geheugen wanneer complexe beelden dienen opgeslagen te worden. Twee andere populaire formats voor de opslag van beelden zijn GIF (Graphics Interchange Format) en JPEG (Joint Photographic Experts Group). Deze starten beiden vanaf een bitmap weergave en gebruiken dan verschillende methoden om het beeld compacter te maken. Deze compressie houdt in dat algoritmes worden toegepast waardoor het bitpatroon van het beeld wordt verkort. Bij het GIF formaat worden technieken gebruikt waardoor zich herhalende patronen aanwezig in het beeld efficiënt worden opgeslagen. Neem bv. het zwart-wit beeldje uit Figuur 2.9 ; dit beeldje bevat drie lijnen die volledig zijn opgebouwd uit witte pixels. Wanneer het GIF format gebruikt wordt, zal dit patroon slechts éénmaal opgeslagen worden, waarbij er dan een speciaal merkteken wordt ingebracht op de plaats waar elk patroon begint. Door het opslaan van patronen die frequent voorkomenk kan de grootte van de uiteindelijke weergave van het beeld sterk gereduceerd worden.
Computervaardigheden
55
2. Weergave van gegevens
Het GIF format is een verliesloos formaat, aangezien er tijdens de compressie geen informatie verloren gaat.
Dit betekent dat het oorsponkelijke beeld exact kan
gerecupereerd worden. JPEG daarentegen gebruikt echter compressietechnieken die niet volledig omkeerbaar zijn. Zo zal bij het JPEG formaat bv. van verschillende pixels die in de buurt van elkaar liggen de gemiddelde waarde van hun kleur opgeslagen worden. Bij een kleurenfoto zijn kleurenveranderingen vaak geleidelijk en kan de JPEG aanpak gebruikt worden om de grootte van het beeld te reduceren zonder de kwaliteit van het beeld veel te verlagen. In de praktijk zal men het GIF format typisch gebruiken voor beelden met lijnen en, meer in het algemeen, discrete grenzen, omdat in dat geval precisie noodzakelijk is. Het JPEG format daarentegen zal vaak gebruikt worden voor foto's, waar tot op zekere hoogte precisie kan opgeofferd worden voor een betere compressie te verkrijgen. Tenslotte vestigen we de aandacht op een vrij evidente vraag nl. hoe een computer weet van een bepaald gegeven dat is opgeslagen over welke soort data het gaat. Zo kan het bij het bitpatroon 01100110 gaan om het gehele getal 97, het karakter "a", de exponent van een bepaald reëel getal of zelfs een onderdeel van een beeld. Het antwoord op deze vraag is eigenlijk eenvoudig : zonder de aanwezigheid van enige context kan de computer dit onderscheid niet maken. Wanneer een programma een gegeven in het geheugen opslaat, dan is het de verantwoordelijkheid van dat programma om te onthouden over welke gegevens een welbepaalde reeks van bitpatronen voorstelt.
Computervaardigheden
56