Digitale techniek: bemonstering en reconstructie
Beste,
Deze post wil graag gebruiken om de basisprincipes van de digitale techniek toe te lichten. Ik hoop door eenvoudige voorbeelden te geven de lezer een
goede introductie te verschaffen in deze tak van sport.
De bemonstering
Laten we beginnen bij de bemonstering. Dit is in feite niets meer of minder dan het opschrijven van de functiewaarde van een signaal op een bepaald
tijdstip. Dit tijdstip wordt bepaald door de oscillatorklok. Als ingangssignaal kiezen we voor een signaal dat gesampled moet worden een cosinus met
een frequentie van 1. Als klokfrequentie waarmee het gesampled moet worden kiezen we 3. Dit betekent dat het ingangssignaal 3 keer bemonsterd wordt.
Dit ziet er als volgt uit:

Afbeelding 1.
Dus om de 120 graden wordt er "gekeken" naar de functiewaarde van het ingangssignaal (=rood) en dat wordt opgeschreven. In dit geval is dus de reeks
getallen die na bemonstering ergens opgeschreven is:
1, -0.5 en -0.5. (correspondeert met de groene balletjes)
Merk op dat ik er van uitga dat het signaal er altijd is geweest en ook altijd zal zijn. De reeks zet zich dan voort, dwz na de eerste 1, -0.5, -0.5
komt gewoon weer dezelfde reeks 1, -0.5 en -0.5. Enzovoort. Ook voor deze reeks komt weer diezelfde reeks.
Het bemonsteringstheorema

We zien een sommatie van een oneindige reeks. Elk element van die reeks bestaat uit een product van twee termen. De eerste term, f[n], is een
weegfactor en dit komt overeen met de waarde die bij de groene bolletjes hoort (zie afbeelding 1). De tweede term is de Sinc-functie en de waarde
daarvan hangt af van de tijd. Is de tijd een veelvoud van de bemonsteringsperiodetijd, wordt deze term precies 1 (met een beetje wiskunde is dat
eenvoudig te zien door t nadert naar nT). Ofwel, op de bemonsteringstijdstippen geeft elk element van de sommatie zijn weegfactor f[n]. Het groene
bolletje dus. Hiermee is aangetoond dat op de bemonsteringstijdstippen het ingangssignaal exact is gereconstrueerd, ongeacht de lengte van de
reeks met bemonsteringsgetallen. Aangenomen dat de klok stabiel genoeg is.
In de tekst boven de sommatie staat er zoveel als: "het te reconstrueren signaal mag in frequentie niet hoger zijn dan de helft van de
bemonsteringsfrequentie". Maar dan in een wat deftiger taal. Het is dus van belang dat het ingangssignaal eerst goed gefilterd wordt voordat er
bemonsterd wordt.
Een artikel met achtergrond info is hier te vinden: Sampling Theorem
De reconstructie of interpolatie
Dit is natuurlijk het belangrijkste. We gaan weer uit van de situatie als in afbeelding 1. Maar dan met de vraag of de functiewaarde van het
ingangssignaal ook gevonden (gereconstrueerd) kan worden bij een willekeurige tijd. Tussen de oorspronkelijke groene bolletjes dus, want op de
oorspronkelijke groene bolletjes lukt het zeker.
De situatie is dan als in afbeelding 2:

Afbeelding 2. Gevraagd wordt de functiewaarde bij de vraagtekens, op 40 graden. (antwoord: cos(40) = 0.766044...)
De oplossing blijkt verrassend simpel en volgt direct uit het bemonsteringstheorema. Het enige wat we hoeven te doen is het signaal te resamplen. Of
up te samplen zoals sommigen het noemen. Soms wordt er ook oversamplen tegen gezegd. Ik houd het op resamplen.
40 graden is 1/9 deel van 360. We hadden al een samplefrequentie van 3 en dit gaat dan naar 3*3 = 9. In de digitale techniek worden dan nullen
toegevoegd tussen de reeds bekende bemonsteringswaarden in. De reeks wordt dan 1, 0, 0, -0.5, 0, 0, -0.5, 0, 0. En dit herhaalt zich dan. De nieuw
toegevoegde nullen zullen in bovengenoemde sommatie geen betekenis hebben omdat ze als weegfactor f[n] fungeren. Dat komt ook heel goed uit, we willen
geen informatie toevoegen of weghalen wat er eerst nog niet was. In afbeelding 2 beschouwen we voor het gemak alleen de eerste toegevoegde nul.
Na interpolatie, dwz na het laten uitwerken van de bemonsteringssommatie, krijg je voor de afzonderlijke bijdragen van n (waarbij de reeks van n uit
afbeelding 1 is gebruikt):
* n = -2 (weegfactor = -0.5): -0.059071
* n = -1 (weegfactor = -0.5): 0.103374
* n = 0 (weegfactor = 1): 0.826993
* n = 1 (weegfactor = -0.5): -0.206748
* n = 2 (weegfactor = -0.5): 0.0826993
Als we dit allemaal bij elkaar optellen, komen we op 0.7472473. Dat is al aardig dicht in de buurt van de waarde die het moet zijn, nl. 0.766044. Door
meer termen in de sommatie mee te nemen, wordt het steeds nauwkeuriger en nauwkeuriger. Hoeveel termen we moeten meenemen, is uit te rekenen en in de
praktijk zijn hier standaard bouwblokken voorhanden.
In de praktijk zijn nog wel wat meer stappen noodzakelijk, maar de kern is dit. Ieder willekeurig tijdstip kan dus worden gereconstrueerd als we
genoeg voorgeschiedenis en nageschiedenis meenemen. Het feitelijke reconstructieproces verloopt iets anders, maar dit is het digitale equivalent.
Belangrijk om te onthouden is dat er geen informatie verloren is gegaan: we hebben de functiewaarde op het willekeurige tijdstip gereconstrueerd aan
de hand van de waarden die we al wisten.
Groet,
Jacco
|