Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 1: Algoritmische Kompositie

Hogeschool Gent : School of Arts


<Terug naar inhoudstafel kursus> <Volgende paragraaf>  

1010:

GETALSTELSELS

Net zoals dat het geval is voor de klassieke logika, die sedert het begin van deze eeuw en dit lang vooraleer er van komputers sprake was, welhaast alleen nog als formele logika beoefent wordt, kan men stellen dat ook in de muziek, het formeel uitdrukken van muzikale syntax een verworvenheid van de twintigste eeuw is. De klassieke logika vertrok van de 'sluitrede' (het syllogisme), een redeneerschema ontleend aan de klassieke retorika, en was geheel in de 'natuurlijke' taal geformuleerd. Ook de klassieke algoritmen in de muziek (de harmonieleer en het kontrapunt) waren en zijn nog grotendeels geformuleerd in de 'natuurlijke' taal, in het geval van de muziek uiteraard verruimd met de klassieke muzieknotatie. Aan het gebruik van de natuurlijke taal voor de formulering van regelsystemen kleven echter nogal wat bezwaren, vooral omwille van de meerduidigheid van de meeste woorden. Om aan deze meerduidigheid te ontsnappen, wordt dan ook in zowat alle sektoren van het menselijke denken, een 'kunstmatige' taal ingevoerd. Dergelijke taal maakt dan gebruik van eenduidig geformuleerde tekens en symbolen naast een aantal regels die toelaten geldige zinnen ('formules') te formuleren. De wiskunde is hiervan uiteraard het meest bekende voorbeeld. Komputertalen zijn de meest recente emanaties van dit verschijnsel.

Muzikale samenhangen en syntaktische regels kunnen eenduidig in dergelijke synthetische talen worden geformuleerd. Daarom is het nodig daarover een zekere kennis te verwerven.

Om een fundamentele vertrouwdheid te verwerven in struktuur en opzet van dergelijke talen en de machines in verband waarmee ze worden ingezet, is het van belang een inzicht te hebben in de werking van de getalstelsels. Immers de wellicht meest primaire formele struktuur van het denken, is het tellen. De vorm waarin dat tellen gebeurt kan echter zeer verschillend zijn, en is een funktie van de eigenschappen van de teller (mens of machine).

Een getalstelsel in algemene zin is een rekenkundig systeem waarmee uitgaande van een beperkt aantal cijfers ( dit aantal is tevens het grondgetal van het telstelsel ) grote telwaarden in de vorm van getallen kunnen worden voorgesteld. Het doordeweekse getalstelsel van de westeuropese kultuur is het tientallig stelsel , waarin gebruik wordt gemaakt van tien cijfers : 0,1,2,3,4,5,6,7,8,9. Historici verklaren dit door te wijzen op het tellen onder gebruikmaking van de vingers van beide handen. Niet alle kulturen tellen evenwel op deze manier. Andere systemen zijn zowel mogelijk als nuttig . Zo kennen we naast het decimale stelsel ook nog :

- oktaal - hexadecimaal - binair - sextaal of hexaal - ternair- factorieel ...

Om de werking van getalstelsels goed in te zien, is het nuttig eerst even te blijven stilstaan bij de interne werking van het ons allen erg goed vertrouwde decimale stelsel:

a. DECIMAAL STELSEL - analyse

elementen : 10 cijfers ( 0 tot 9 )

Brengen even in herinnering dat getallen samenstellingen zijn van cijfers waarbij deze door de plaats die ze hebben in een getal , een andere betekenis verkrijgen.

memo: 12.897 Dec.=

7 X 10^0 = 7 X 1 = 7

9 X 10^1 = 9 X 10 = 90

8 X 10^2 = 8 X 100 = 800

2 X 10^3 = 2 X 1000 = 2000

1 X 10^4 = 1 X 10000 = 10000

Som= 12897

De waarde van een cijfer in een getal in een willekeurig positioneel getalstelsel met konstant grondtal is dat cijfer vermenigvuldigd met het grondtal van het getalstelsel verheven tot de macht die overeenkomt met de plaats van het cijfer in het getal , waarbij we van rechts naar links , beginnend bij 0 , de volgorde der cijfers tellen.

vb: analyse van het getal 1.008.607:

7 staat op plaats nr. 0 dus G^0

0 op plaats nr. 1 dus G^1

6 op plaats nr. 2 dus G^2

8 op plaats nr. 3 dus G^3

0 op plaats nr. 4 dus G^4

0 op plaats nr. 5 dus G^5

1 op plaats nr. 6 dus G^6

waarbij G wanneer het om een decimaal getal gaat gelijk is aan tien.

b. Hexadecimaal stelsel

Hier zijn er 16 verschillende cijfers nodig :

0 1 2 3 4 5 6 7 8 9 A B C D E F

Deze komen overeen met volgende decimale waarden:

Hex: 0 1 2 3 4 5 6 7 8 9 A B C D E F

Dec: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Het hexadecimale getal E203F9 verkrijgt nu dus volgens de hiervoor gegeven regel volgende betekenis:

E203F9:

9 X 16^0 = 9 eenheden = 9 x 1

F X 16^1 = F zestientallen = 15 x 16

3 X 16^2 = 3 256-tallen = 3 x 256

0 X 16^3 = 0 4096-tallen = 0 x 4096

2 X 16^4 = 2 65536-tallen = 2 x 65536

E X 16^5 = E 1048576-tallen = 14 x 1048576

decimaal equivalent : 14.812.153

Omdat we op grond van het uitzicht van een getal niet steeds kunnen weten binnen welk stelsel we het dienen te interpreteren, worden alle getallen in getalstelsels anders dan het decimale steeds voorafgegaan of gevolgd door een speciale code waaruit het grondtal kan worden afgeleid. Veel voorkomende notatiewijzen zijn:

c. Binair stelsel

Hier zijn er slechts twee cijfers en het grondtal van het stelsel is 2. De bij konventie gebruikte cijfers zijn 0 en 1. Deze kunnen worden gedacht als overeenkomend met de elektrische toestanden UIT of AAN ( 0 Volt of 5 Volt), of met de logische waarden VALS of WAAR.

vb. het binair getal 1001 0111

1 X 2^0 = 1 eenheid = 1

1 X 2^1 = 1 tweetal = 2

1 X 2^2 = 1 viertal = 4

0 X 2^3 = 0 achttal = 0

1 X 2^4 = 1 zestiental = 16

0 X 2^5 = 0 32-tallen = 0

0 X 2^6 = 0 64-tallen = 0

1 X 2^7 = 1 128-tal = 128

decimaal equivalent : = 151

d. GETALSTELSELKONVERSIES

De omzetting van binair naar hexadecimaal is uitermate eenvoudig Om die reden wordt in de digitale techniek steeds het hexadecimaal stelsel gebruikt. Binaire getallen zijn onhandig lang en de kans op vergissingen bij het rekenen ermee is zeer groot. Niettemin werken alle digitale machines uitsluitend binair.

Enkele definities :

een BIT komt overeen met een enkele positie in het binaire stelsel.( een 0 of 1 dus)

een NIBBLE komt overeen met 4 bits. Met een nibble kan men binair van 0 tot 15 tellen. Daarom kan een nibble worden uitgedrukt met slechts een enkel hexadecimaal cijfer.

0000 = 0

0001 = 1

0010 = 2

0011 = 3

0100 = 4

0101 = 5

0110 = 6

0111 = 7

1000 = 8

1001 = 9

1010 = A

1011 = B

1100 = C

1101 = D

1110 = E

1111 = F

Een BYTE komt overeen met 8 bits binair, en dus ook met twee hexadecimale cijfers. De (of het?) byte is de meest gebruikte eenheid waarin hoeveelheden informatie worden uitgedrukt en gemeten.

Een WORD ( woord) komt overeen met 16 bits binair , en dus met 4 hex-cijfers.

Als notatiewijze gebruikt met voor binaire getallen :

e. Oktaal stelsel

Dergelijk systeem werd vooral vroeger, in de begintijd van de mikroprocessoren en daarvoor, vrij veel gebruikt. Hier zijn er 8 cijfers nml.

0 1 2 3 4 5 6 7

Elk oktaal cijfer komt overeen met drie binaire bits.

De notatie ziet eruit als :

f. Dodekafoon- stelsel ?

Eigenlijk zou het mogelijk zijn een 12-tonig stelsel zoals het westerse er een is, binnen een aangepast getalstelsel te behandelen. Het dient dan 12-tallig te zijn om de volledige kromatische toonladder te omvatten. De cijfers zijn:

0 1 2 3 4 5 6 7 8 9 A B

of C Cis D Es E F Fis G Gis A Bes B

Muzikale operaties zoals transpositie en harmonisatie worden op die manier relatief eenvoudige bewerkingen met getallen.

Elke 'dodecade' komt hierbij overeen met een nieuw oktaaf. Wie wat wil stoeien met deze , en andere wiskundige mogelijkheden om muzikale samenhangen uit te drukken wil ik graag attent maken op een boekje dat verscheen bij Dunod in Parijs in 1968 van Pierre BARBAUD onder de titel "La musique discipline scientifique". Het bevat een goede eerste aanzet tot volledige formalisering van de muziektheorie.

Hoewel niet bedacht als een getalstelsel, is de MIDI-kodering van muzikale toonhoogtes iets wat hier zeer dichtbij komt. Het systeem is echter hybried omdat het eigenlijk een decimaal uitgedrukt dodecimaal systeem is. Men begint te nummeren vanaf de laagste DO (=0) en telt tot 127. Telkens een twaalfvoud bereikt is wordt een oktaaf bereikt : 0 , 12, 24, 36, 48, 60, 72... zijn allemaal DO en verschillen alleen naar absolute oktaafligging.

g. Binaire Negatieve getallen

In alle tot hiertoe gegeven voorbeelden, hebben we ons beperkt tot de weergave van positieve gehele getallen in diverse getalstelsels. Negatieve waarden zijn niet zomaar binair of hexadecimaal uit te drukken. Dit blijkt duidelijk uit het simpele feit dat we ook in het decimale stelsel ter aanduidling van een negatief cijfer of getal, een extra teken invoeren, met name '-' het min-teken. Nu is het uitgangspunt van het binaire stelsel precies dat er niet meer dan 2 tekens worden gebruikt. De invoering van een min- teken zou daarvan een overtreding zijn. Om echter toch negatieve getallen en cijfers met behulp van niet meer dan twee tekens uit te drukken heeft men een koderingssysteem bedacht, dat gebruik maakt van (in binair) het MSB (most significant bit), en waarbij dan deze bit-positie wordt gebruikt om het teken van een getal weer te geven. Een 1 verwijst dan naar een negatieve waarde, een nul naar een positieve.

Het zal duidelijk zijn dat dit ons telbereik, gegeven eenzelfde aantal bit- posities, beperkt. Immers, veronderstel dat we over 8 bits beschikken, waarbij we het bit nr.7 gebruiken als teken, dan kunnen we nog slechts tellen van

0 0 0 0 0 0 0 tot en met

1 1 1 1 1 1 1 = 127 decimaal

maar ook negatief van :

1 0 0 0 0 0 0 0 tot 1 1 1 1 1 1 1 1

Nu geschiedt de omkering van het teken niet zomaar eenvoudigweg door voor de binaire code van een positief getal, een 1 te plaatsen, maar via een rekenwijze die met 'TWO's COMPLEMENT' noemt.

De omkering van een positief getal in een negatief getal geschiedt daarbij alsvolgt :

1. neem de binaire code van het positief getal :

vb. 111decimaal = 0 1 1 0 1 1 1 1 binair

2. keer alle bits om : 1 0 0 1 0 0 0 0

3. tel het cijfer 1 erbij op: + 1

4. negatief resultaat 1 0 0 1 0 0 0 1 = - 111 decimaal

Het zo verkregen resultaat noemt men de '2's complement' voorstelling voor het decimaal getal -111.

Een wiskundige eigenschap van deze werkwijze is dat wanneer we dit resultaat als een positief getal zouden interpreteren ( wat in dit geval 145 oplevert ), de som daarvan met het oorspronkelijke positieve getal steeds 256 zal opleveren. ( Dit als algemeen uitgedrukt 2^(aantal bits) ).

Omgekeerd dienen we in 2'complement gecodeerde binaire getallen om te zetten naar decimaal door het toepassen van volgende (omgekeerde) procedure:

1.Schrijf het binaire getal

vb: 1 0 0 1 1 1 1 1 0 1 0 0

2.Trek er 1 van af : - 1

-------------------------

3.tussenresultaat : 1 0 0 1 1 1 1 1 0 0 1 1

4.keer alle bits om :0 1 1 0 0 0 0 0 1 1 0 0

5.Zet om naar decimaal 1024 + 512 + 8 + 4 = 1548

6.Maak negatief = - 1548

Ter controle kan steeds volgende berekening worden uitgevoerd:

Test : 1 0 0 1 1 1 1 1 0 1 0 0 positief gelezen = 2548

0 1 1 0 0 0 0 0 1 1 0 0 positief gelezen = 1548

SOM = 1 0 0 0 0 0 0 0 0 0 0 0 0 test som : 4096

h. Hexadecimale representatie van negatieve getallen

Ook hier wordt de methode van het 'Two's complement' toegepast.

Hexadecimale cijfers die indien we ze binair zouden schrijven, aanvangen met een 1, worden dan gelezen als negatieve getallen. Aangezien elk hexadecimaal cijfer overeenkomt met 4 bits, komt dit erop neer naar alle hexadecimale getallen die beginnen met een cijfer groter dan 7 (= binair 0 1 1 1) negatief moeten worden geinterpreteerd. Dat zijn dus de begincijfers 8 tot en met F ( binair 1 0 0 0 tot 1 1 1 1 ).

De omzetting van een positief getal in een overeenkomstig negatief getal volgt dezelfde calcullus als in het binaire systeem:

1.Schrijf het hexadecimaal getal vb.: &H59AB = 22955

2.Komplementeer alle cijfers t.o.v.15 &HA654

3.Tel 1 op bij dit resultaat +1

4.Negatieve representatie : &HA655 = - 22955

De omzetting van een negatief hexadecimaal getal in een decimale waarde geschiedt ook hier weer omgekeerd :

1.Schrijf het negatief te interpreteren hexadecimaal getal:

vb. &HFF00

2.Trek er 1 van af : -1

3.Resultaat : &HFEFF

4.Komplementeer alle cijfers t.o.v.15 &H0100

5.Zet om naar decimaal : = 256

6.Voeg het negatie teken toe : -256

Ook de testprocedure zoals hiervoor beschreven gaat op :

1.Bereken de decimale positieve waarde van &HFF00 = 65280

2.Tel er de absolute waarde van 6. bij op &H0100 = 256

3.Bereken de som : &H10000 = 65536

Een van de redenen waarom men dit op het eerste gezicht toch wat eigenaardig overkomend systeem heeft uitgedacht, is dat op die manier een aantal fundamentele eigenschappen van getallen behouden konden blijven , niet in de laatste plaats hun deelbaarheidseigenschappen! Immers, zouden we alleen maar alle cijfers omkeren, dan zouden even cijfers er plots oneven gaan uitzien en oneven cijfers even. Een analyse van de overige redenen zou ons op deze plek te ver voeren, omdat het nogal wat te maken heeft met een efficient gebruik van op veelvouden van 8 gebaseerde elektronische hardware en met de struktuur van de logische- en rekenchips zelf.

Opmerking : Wanneer je geen verwarring wilt hebben omtrent de interpretatie van binaire of hexadecimale getallen als positief of 'two's complement' , schrijf dan steeds een 'leading zero' voor elke positief te lezen waarde. Dus positief zijn dan in elk geval : &H0FF4 , &H0100 , &B01110111

Steeds negatief zijn :

&HFF4 , &H900A , &B10011110

Ook moeten in dat geval alle digits geschreven worden, anders kunnen we niet steeds eenduidig uitmaken uit hoeveel bits of bytes het getal is opgebouwd.

i. Verdere getalstelsels...

Ten behoeve van de automatisering werden van het binaire talstelstel nog enkele varianten ontworpen. Zo bijvoorbeeld de GREY-code, een binaire code waarbij bij een overgang van de ene numerieke waarde naar een andere telkens slechts een enkel bit van waarde verandert. Of, de BCD-code, wat eigenlijk een meer direkte vorm is waarmee de decimale getallen binair kunnen worden weergegeven. Verder is er de vroegere EBCDIC kode die gebruikt wordt op vele mainframe komputers, de factoriele gestalstelsels en hun specifieke kompakte kodering. Voor de interne representatie van reele getallen wordt in komputers dan weer IEEC-kodering gebruikkt waarbij een getal wordt opgebouwd uit een mantisse gekombineerd met een exponent, waardoor ook heel grote numerieke waarden -zij het met een beperkte en eindige precizie, kunnen worden weergeven en opgeslagen.

De definities van deze en nog vele andere stelsels en koderingen kunnen weergevonden worden in de meeste goede tekstboeken met betrekking tot digitale elektronika. Voor een eerste inzicht is de kennis ervan niet direkt noodzakelijk.


Filedate: 931101

updated: 2013-10-07
Terug naar inhoudstafel kursus: <Index Kursus> Naar homepage dr.Godfried-Willem RAES Volgende paragraaf