satunnaislukugenerointi lämpökohinasta
toimisikohan seuraavanlainen ratkaisu:
kytketään aina 2 kpl esim. 2,2 megaohmin vastuksia sarjaan nollan ja positiivisen käyttöjännitteen (esim. 5V) väliin, joten vastusten läpi kulkee 1,14 mikroampeerin virta.
tällaisen vastusparin keskipisteeseen (jossa siis n. 2,5V jännite) kytketään sopiva kondensaattori (sopiva arvo?), jonka toinen pää kytketään operaatiovahvistimen tuloon, eli toisen vastusparin konmdensaattorilla erotettu keskipiste tuloon ja toisen vastaavasti -tuloon.
Nuo kondensaattorit ovat tuossa välttämättömiä siksi, että muussa tapauksessa vastusten toleranssit aiheuttavat sen, että esim. vastusparin B keskipisteen jännite onkin 2,51V ja parin A 2,49V, jolloin B:n keksipisteen jännite olisi aina suurempi kuin A:n, eikä asiassa olisi mitään satunnaisuutta.
Kondensaattorihan päästää vain vaihtovirtaa lävitseen, joten erotuskondensaattorin pitäisi eliminoida tasajännitteen osuus tuosta, jolloin vain vastusten lämpökohinan aiheuttama vaihtojännite pääsee operaatiovahvistimen tuloon.
Jos lämpökohina jonakin hetkenä on molemmissa vastuspareissa samansuuntaista ja -voimakkuista, silloin operaatiovahvistimen ja - tulojen välillä ei ole lainkaan jännitettä, mutta jos eroa on, niin esim miljardikertainen vahvistus aiheuttanee sen, että esim 1 nanovoltinkin ero ja - tulojen välillä tekee voltin eron operaatiovahvistimen lähtöön.
Nyt jos edelläkuvattu systeemi kahdennetaan (yhteensä siis 8 kpl 2,2 MOhm vastusta, 4 erotuskondensaattoria ja dual op.amp), niin silloin on tarjolla 2 eri operaatiovahvistimen (fyysisesti samassa mikripiirissä) lähdöt, joiden välillä on joko n. 2V ero jompaan kumpaan suuntaan tai sitten niiden välillä ei ole eroa. Jos nyt noihin 2 lähtöön kytketään vielä komparaattori, niin silloin pitäisi tarjolla olla binäärinen satunnaissignaali (tuosta kun vielä saisi toisen apusignaalin, joka ilmaisee, milloin jännite-ero on ja milloin ei ole).
Tuo sitten esim. PC:n sarjaporttiin (kun jostain vielä löytäisi emon, jossa ainakin 2 sarjaporttia).
sarjaporrtia varten olisi vielä hyvä saada jotenkin bittivirta pakotettua tämännäköiseksi:
0 ssssssss 1, 0 ssssssss 1, 0 ssssssss 1, ...
eli siis startbitti (0), 8 satunnaista bittiä ja stopbitti (1).
tarvittaessa voisi toki tehdä jonkun elektronisen kooderin, joka syöttää aina 2 peräkkäistä bittiä sarjaporttiin seuraavasti:
00 = ei jännite-eroa, eli ei satunnaisuutta saatavilla.
01 = tätä arvoa ei syötetä PC:lle koskaan, tai sitä voidaan kertoa mahd. havaitusta laiteviasta.
10= satunnaisbitti 0
11= satunnaisbitti 1
nyt siis 8 satunnaisbittiä (s) PC:lle sisältääkin tosiasiassa 4 kpl 2 bitin ryhmää, jotka voivat kuvata 0-4 kpl satunnaisbittejä.
mutta jos noista 4:stä keskimäärin 2 bittiä on satunnaisia, niin yhdellä PC:lle syötetyllä tavulla saadaan 2 bittiä eli 0,25 tavua satunnaisuutta PC:lle.
Kun sarjaportissa saadaan siirrettyä 115200 bps, se vastaa 11520 tavua/s, eli 11520*0,25 = 2880 todellista satunnaistavua sekunnissa.
toimisikohan seuraavanlainen ratkaisu:
kytketään aina 2 kpl esim. 2,2 megaohmin vastuksia sarjaan nollan ja positiivisen käyttöjännitteen (esim. 5V) väliin, joten vastusten läpi kulkee 1,14 mikroampeerin virta.
tällaisen vastusparin keskipisteeseen (jossa siis n. 2,5V jännite) kytketään sopiva kondensaattori (sopiva arvo?), jonka toinen pää kytketään operaatiovahvistimen tuloon, eli toisen vastusparin konmdensaattorilla erotettu keskipiste tuloon ja toisen vastaavasti -tuloon.
Nuo kondensaattorit ovat tuossa välttämättömiä siksi, että muussa tapauksessa vastusten toleranssit aiheuttavat sen, että esim. vastusparin B keskipisteen jännite onkin 2,51V ja parin A 2,49V, jolloin B:n keksipisteen jännite olisi aina suurempi kuin A:n, eikä asiassa olisi mitään satunnaisuutta.
Kondensaattorihan päästää vain vaihtovirtaa lävitseen, joten erotuskondensaattorin pitäisi eliminoida tasajännitteen osuus tuosta, jolloin vain vastusten lämpökohinan aiheuttama vaihtojännite pääsee operaatiovahvistimen tuloon.
Jos lämpökohina jonakin hetkenä on molemmissa vastuspareissa samansuuntaista ja -voimakkuista, silloin operaatiovahvistimen ja - tulojen välillä ei ole lainkaan jännitettä, mutta jos eroa on, niin esim miljardikertainen vahvistus aiheuttanee sen, että esim 1 nanovoltinkin ero ja - tulojen välillä tekee voltin eron operaatiovahvistimen lähtöön.
Nyt jos edelläkuvattu systeemi kahdennetaan (yhteensä siis 8 kpl 2,2 MOhm vastusta, 4 erotuskondensaattoria ja dual op.amp), niin silloin on tarjolla 2 eri operaatiovahvistimen (fyysisesti samassa mikripiirissä) lähdöt, joiden välillä on joko n. 2V ero jompaan kumpaan suuntaan tai sitten niiden välillä ei ole eroa. Jos nyt noihin 2 lähtöön kytketään vielä komparaattori, niin silloin pitäisi tarjolla olla binäärinen satunnaissignaali (tuosta kun vielä saisi toisen apusignaalin, joka ilmaisee, milloin jännite-ero on ja milloin ei ole).
Tuo sitten esim. PC:n sarjaporttiin (kun jostain vielä löytäisi emon, jossa ainakin 2 sarjaporttia).
sarjaporrtia varten olisi vielä hyvä saada jotenkin bittivirta pakotettua tämännäköiseksi:
0 ssssssss 1, 0 ssssssss 1, 0 ssssssss 1, ...
eli siis startbitti (0), 8 satunnaista bittiä ja stopbitti (1).
tarvittaessa voisi toki tehdä jonkun elektronisen kooderin, joka syöttää aina 2 peräkkäistä bittiä sarjaporttiin seuraavasti:
00 = ei jännite-eroa, eli ei satunnaisuutta saatavilla.
01 = tätä arvoa ei syötetä PC:lle koskaan, tai sitä voidaan kertoa mahd. havaitusta laiteviasta.
10= satunnaisbitti 0
11= satunnaisbitti 1
nyt siis 8 satunnaisbittiä (s) PC:lle sisältääkin tosiasiassa 4 kpl 2 bitin ryhmää, jotka voivat kuvata 0-4 kpl satunnaisbittejä.
mutta jos noista 4:stä keskimäärin 2 bittiä on satunnaisia, niin yhdellä PC:lle syötetyllä tavulla saadaan 2 bittiä eli 0,25 tavua satunnaisuutta PC:lle.
Kun sarjaportissa saadaan siirrettyä 115200 bps, se vastaa 11520 tavua/s, eli 11520*0,25 = 2880 todellista satunnaistavua sekunnissa.
Vastaukset 2
Vanhimmat
http://en.wikipedia.org/wiki/Randomness
Mikäettei toimisi. Olis ihan jännä nähdä sovellus ja sitten testauttaa vaikka pari megatavu tuolla tavoin tehtyä satunnaislukua...
Tässä on toinen tavallaan vastaavaan ideaan perustuva sovellus aiheesta... tosin eri mekanismilla...
http://www.fourmilab.ch/hotbits/how.html
Perustuu siihen että radioaktiivisen hajoamisen säteilytuotanto on täysin satunnaista, mitataan vain kolmen hajoamisen välinen aika ja siitä muodostetaan binääriluku. Jos 1. ja 2. hajoamisen välinen aika on suurempi kuin 2. ja 3. niin -> 1 ja jos ei niin -> 0.
Mutta jos tuota samaa voi soveltaa ilman säteilylähdettä tuolla esittelemälläsi tavalla niin sehän on hyvä juttu.... :)