Schakelingen: pseudo random noise generator

(gepubliceerd op 30-08-2017)

Een Pseudo Random Noise Generator is een vrij onbekende schakeling, die nuttige toepassingen heeft. Met een zeer laagfrequente PNRG kunt u bijvoorbeeld de intensiteit van gekleurde lampen schijnbaar willekeurig variëren.


Wat is een Pseudo Random Noise Generator?


Willekeurig verlopende signalen opwekken
Een PRNG is een schakeling die een zo willekeurig mogelijk verlopende uitgangsspanning opwekt. Nu is de elektronica, net zoals alle technieken, zeer dogmatisch. Er bestaan ijzersterke natuurwetten, waaraan de gehele elektronentechniek voldoet en waar niet mee valt te spotten. Dat u elektronisch iets volstrekt willekeurig of met andere woorden iets wetteloos zou kunnen genereren, is niet in te zien. De enige methode om willekeurige spanningen op te wekken is elektronische schakelingen te laten reageren op uitwendige invloeden, zoals het weer of kosmische straling. Het zal duidelijk zijn dat elektronische schakelingen, reagerend op uitwendige invloeden, duur en uitgebreid zijn. Bovendien zouden de opgewekte spanningen veel te langzaam variëren. Gelukkig biedt de digitale techniek een weliswaar onvolmaakt, maar goed bruikbaar vervangingsmiddel: de 'Pseudo Random Noise Generator', afgekort tot PRNG.

Het hart van een PRNG
Het hart van deze schakeling wordt gevormd door een schuifregister. Een schuifregister is opgebouwd uit een aantal in serie geschakelde flip-flop's. In de onderstaande figuur wordt zo'n schuifregister in zijn eenvoudigste vorm voorgesteld. Een ingangssignaal wordt via de Serial Input SI aangeboden aan de eerste flip-flop. De uitgang van iedere flip-flop is doorverbonden met de ingang van de volgende. Alle bistabiele elementen worden gestuurd door een clock-puls.

PRNG_Pseudo_Random_Noise_Generator_01 (© 2017 Jos Verstraten)
Het blokschema van een PRNG. (© 2017 Jos Verstraten)
De werking van het schuifregister
In onderstaande figuur wordt de werking van de schakeling verklaard. Een flip-flop neemt de informatie van de voorgaande schakeling over bij de positieve flank van het clock-signaal. Op tijdstip t1 zijn alle FF-uitgangen nul, evenals de Serial Input SI. De toestand van het schuifregister blijft dus ongewijzigd. Bij de tweede clock-puls is SI 'H'. De uitgang van de eerste FF wordt dus, op commando van de Clock, eveneens 'H'. Deze hoge informatie loopt op het ritme van de Clock door de hele schakeling. Na vijf clock-pulsen keert de schakeling terug in de ruststand.

PRNG_Pseudo_Random_Noise_Generator_02 (© 2017 Jos Verstraten)
De werking van het schuifregister grafisch verklaard.
(© 2017 Jos Verstraten)
Het rechtstreeks teruggekoppeld schuifregister
De volgende stap op weg naar een PRNG is het rechtstreeks teruggekoppelde schuifregister. Deze schakeling is in onderstaande figuur getekend, met het pulsendiagram er naast geplakt. Het zal duidelijk zijn dat door de terugkoppeling van de uitgang van de laatste FF naar de Serial Input, een eenmaal in de schakeling geïntroduceerde puls blijft rondlopen. Aan de uitgangen van het shift-register ontstaat een pulstrein. De herhalingsfrequentie is afhankelijk van het aantal gebruikte FF's. Besluit is dat een rechtstreekse terugkoppeling een periodiek optredende puls aan de uitgangen tot gevolg heeft.

PRNG_Pseudo_Random_Noise_Generator_03 (© 2017 Jos Verstraten)
Door een rechtstreekse terugkoppeling van de uitgang naar de SI kan het schuifregister het zonder
uitwendige stuurpuls stellen. (© 2017 Jos Verstraten)
Even een tussendoortje
Aan de schakeling zoals wij die nu ontworpen hebben, kunt u nog weinig willekeur ontdekken. Daarvoor hebben wij een vrij onbekende poort nodig, die exclusive-OR of EXOR heet. Zoals u wellicht weet is de uitgang van een EXOR 'L' als de ingangen hetzelfde logische niveau hebben. In onderstaande figuur ziet u het symbool en de waarheidstabel van een dergelijke poort.

PRNG_Pseudo_Random_Noise_Generator_04 (© 2017 Jos Verstraten)
Symbool en waarheidstabel van een EXOR. (© 2017 Jos Verstraten)
Vervanging van de rechtstreekse terugkoppeling door een exclusive-OR
In deze stap vormen wij het schuifregister om tot een échte digitale PRNG. Het basisschema en de grafische werking is getekend in onderstaande figuur. De ingangen van de exclusive-OR poort wordt aangesloten aan de uitgangen van de twee laatste flip-flop's. De uitgang van de poort stuurt de Serial Input. Stel dat vóór tijdstip t1 alle uitgangen van de FF's 'L' zijn en dat de SI 'H' is. Later zal blijken dat deze situatie zich niet kan voordoen, het beredeneren van de schakeling wordt evenwel vereenvoudigd door deze starttoestand aan te nemen. Op t = t1 wordt FF1 'H'. De volgende clock-puls maakt FF1 weer 'L' en FF2 'H'. Bij t = t3 wordt FF1 = FF2 = 'L' en FF3 = 'H'.

Share

Op dit ogenblik nemen de ingangen van de poort een tegengesteld logisch niveau aan, zodat de uitgang van de poort en dus eveneens de Serial Input 'H' wordt. Bij de volgende clock-puls wordt de uitgang van de eerste flip-flop dus weer 'H'. Bovendien blijft de SI 'H', de poort heeft immers nog steeds twee verschillende niveaus op haar ingangen. Aan de hand van de grafieken kunt u besluiten dat niet alleen de cycluslengte veel groter wordt (15 clock-pulsen), maar dat eveneens aan de uitgangen van de flip-flop's een opeenvolging van korte en lange impulsen ontstaat. Bovendien is de tijdsduur tussen de impulsen niet constant. Er is een minimale vorm van willekeur ingevoerd.

PRNG_Pseudo_Random_Noise_Generator_05 (© 2017 Jos Verstraten)
De EXOR in de terugkoppeling maakt van het schuifregister een PRNG. (© 2017 Jos Verstraten)
Spectaculaire groei van de cycluslengte
Natuurlijk zijn wij met deze schakeling nog ver verwijderd van een als willekeurig te betitelen spanning. Als rechtgeaarde hobbyist voelt u echter aan dat, als u het aantal flip-flop's in de keten laat toenemen, zowel de cycluslengte als de verscheidenheid aan pulsen zal toenemen. In de onderstaande tabel is een overzicht gegeven van de cycluslengten bij een bepaald aantal gebruikte flip-flop's. Tevens is aangegeven aan welke FF-uitgangen de ingangen van de poort moeten worden aangesloten. U kunt uit deze tabel besluiten dat de cycluslengte zeer explosief toeneemt. Neemt u bijvoorbeeld vijftien flip-flop's in de keten op en gebruikt u een clock met een frequentie van 1 Hz, dan duurt het exact berekend 9 uur, 6 minuten en 7 seconden vooraleer de schakeling één periode doorlopen heeft! Gedurende deze periodetijd kan aan een uitgang de meest vreemde pulsopvolging ontstaan. Een puls met een breedte van enige seconden kan na korte tijd opgevolgd worden door een puls die minuten duurt. Nadien kan de uitgang weer enige minuten 'L' blijven, om dan weer een kort salvo van smalle pulsen op te wekken, enz.

RNG_Pseudo_Random_Noise_Generator_06 (© 2017 Jos Verstraten)
Als er meer flip-flop's in de keten worden opgenomen neemt de cycluslengte zeer snel toe.
(© 2017 Jos Verstraten)
Van digitaal naar analoog
Wij hebben u een kleine PRNG gemaakt, maar die schakeling werkt uiteraard digitaal. Voor het genereren van ruis of het aansturen van lampen hebben wij echter een snel of langzaam variërende analoge spanning nodig. De laatste fase in de opbouw van een 'willekeurige' spanning wordt verklaard aan de hand van onderstaande figuur. Het basisschema van de PRNG is uitgebreid met een resistieve menger. De uitgangen van de eerste, derde en vierde flip-flop worden door drie gelijke weerstanden R1, R2 en R3 gemengd over de somweerstand R4.
De werking is zeer eenvoudig. Als alle uitgangen 'L' zijn, is de spanning over R4 uiteraard nul. Wordt bijvoorbeeld FF1 'H', dan vloeit er door de kring R1 - R4 een bepaalde stroom I1. Over R4 ontstaat een spanning V. Als twee van de drie uitgangen 'H' worden, dan vloeit er door de somweerstand een stroom I2 = 2 x I1. De spanning over R4 wordt bijgevolg 2 x V. Als alle uitgangen 'H' zijn, wordt de uitgangsspanning 3 x V.

RNG_Pseudo_Random_Noise_Generator_07 (© 2017 Jos Verstraten)
Vier weerstanden vormen de digitale uitgangen van het schuifregister om in analoge spanningen.
(© 2017 Jos Verstraten)
Een laagdoorlaat filter vlakt de scherpe randjes af
Wat er gebeurt als u over weerstand R4 een condensator schakelt ziet u in onderstaande figuur. De scherpe sprongen in de uitgangsspanning worden afgerond en er ontstaat over R4 een grillige analoge spanning. Uiteraard zal deze spanning grilliger worden, als het aantal flip-flop's toeneemt en als meer en verspreider gelegen uitgangen worden gemengd.

RNG_Pseudo_Random_Noise_Generator_08 (© 2017 Jos Verstraten)
Een condensator over de somweerstand werkt als laagdoorlaat filter.
(© 2017 Jos Verstraten)
Wat als alle uitgangen 'L' worden?
Een gebrek van de schakeling moet nog worden verholpen. Als namelijk de inhoud van het totale register door bijvoorbeeld een stoorpuls 'L' wordt, zal het duidelijk zijn dat de schakeling er het bijltje bij neerlegt. De exclusive-or krijgt dan steeds 'L' pulsen aan beide ingangen, de uitgang blijft bijgevolg eveneens constant 'L', zodat geen signaal wordt teruggekoppeld naar de Serial Input. Om dit mankement te verhelpen, moet een 'L'-detector worden ingebouwd. Als deze schakeling een volledig leeg register constateert, wordt een preset-schakeling geactiveerd waardoor opnieuw een puls in het register wordt ingelezen.

Een voorbeeld uit de praktijk


Een PRNG voor het aansturen van drie lampengroepen
De opdracht was een schakeling te verzinnen, waarmee drie gekleurde lampengroepen een aantal objecten moesten aanlichten en dit in een langzaam variërend kleurenpalet. In het laboratorium werd een PRNG opgebouwd met vijftien flip-flop's. Er werden drie analoge uitgangen gemaakt door telkens vijf verschillende flip-flop uitgangen te mengen. Het schuifregister is opgebouwd uit drie IC's van het type SN7496 die een preset-functie hebben en elk vijf flip-flop's bevatten. Dat betekent dat de cyclusduur 32.767 clock-perioden bedraagt. Bij een klok-frequentie van 1 Hz doorloopt de schakeling dus één cyclus per negen uur en tien minuten! De exclusive-or poort wordt op de bekend veronderstelde manier samengesteld uit de vier NAND-poorten van IC8. De vijftien uitgangen sturen drie mengversterkers met op-amp's, die de waarde van de uitgangsspanningen op de juiste waarde brengen voor het sturen van de 10 V standaard theaterdimmers die de drie lampengroepen aansturen. Een laagfrequent generator (2 Hz tot 0,5 Hz) stuurt de clock van het register.

RNG_Pseudo_Random_Noise_Generator_09 (© 2017 Jos Verstraten)
Een PRNG voor het sturen van drie gekleurde lampengroepen. (© 2017 Jos Verstraten)
De 'L'-detector wordt gevormd door een diodematrix D3 tot en met D17, die de digitale spanningen op de uitgangen van alle flip-flop's mengt en aanbiedt aan een inverter IC4a. Als deze schakeling een volledig leeg register constateert, wordt een puls naar de preset-ingangen van de flip-flop's gestuurd en wordt weer één puls in het register ingelezen. Tegelijkertijd wordt gedurende 250 ms een monostabiele puls opgewekt (IC9), die de clock-generator IC4b stuurt. Hierdoor gaat deze even een hoogfrequente pulstrein naar het register sturen. De pseudo random noise generator gaat daardoor gedurende 250 ms zeer snel een gedeelte van de cyclus doorlopen. Hierdoor wordt vermeden dat de schakeling na iedere stoorimpuls zijn programma opnieuw van het begin af moet opbouwen.


De uitgangsspanningen
Wij hebben de drie analoge uitgangsspanningen van de schakeling weergegeven op ouderwetse X/t-recorders die de resultaten door middel van een pen op een strook papier weergeven, met dank aan Vego-lab. In onderstaande figuur ziet u de resultaten. Het lijkt alsof de uitgangsspanningen heel snel variëren, maar als u bedenkt dat deze stroken papier het resultaat zijn van acht uur meten, kunt u de resultaten in het juiste perspectief zien. U ziet dat de uitgangsspanningen inderdaad op het oog volledig willekeurig variëren, ondanks het feit dat u ondertussen weet dat dit niet het geval is. Heel mooi blijkt ook dat de spanningen vaak binnen een paar minuten van minimaal naar maximaal variëren, hetgeen het kleurenspel uiteraard ten goede komt.

RNG_Pseudo_Random_Noise_Generator_10 (© 2017 Jos Verstraten)
De drie uitgangsspanningen van de schakeling, gedurende acht uur geregistreerd. (© 2017 Jos Verstraten)



(Banggood sponsor advertentie)
Goedkope Compatibele Arduino Uno