{"id":15,"date":"2007-08-21T17:09:04","date_gmt":"2007-08-21T16:09:04","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=15"},"modified":"2009-09-16T19:01:17","modified_gmt":"2009-09-16T18:01:17","slug":"zufallsgenerator","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=15","title":{"rendered":"Zufallsgenerator"},"content":{"rendered":"<p>Als ich mir eine Video-Vorlesung der <a href=\"http:\/\/timms.uni-tuebingen.de\/Browser\/Browser01.aspx\">Uni Tuebingen<\/a> ansah, kam mir die Idee, mit einem AVR einem Zufallsgenerator zu programmieren. Als Quelle sollte der Analog-Digital Wandler (ADC)dienen, dessen Eingang in der Luft h\u00e4ngt. Es wird also nur das Rauschen des Wandlers und ein paar St\u00f6rsignale digitialisiert. Von dem eingelesen Wert wir nur das erste Bit benutzt, also ob die Zahl grade oder ungerade ist. Nach acht Durchl\u00e4ufen hat man somit eine Zufallszahl mit einem Wertebereich von 0 bis 255.<br \/>\nBeim echten Zufall sollte sich eine Gleichverteilung einstellen. Da es 256 M\u00f6gliche Ereigniszahlen gibt, betr\u00e4gt die Wahrscheinlichkeit f\u00fc eine Zahl 1\/256 = 0.39%.<br \/>\n<a href=\"http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2007\/08\/zufallszahlengleichverteilung1.png\"><img src='http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2007\/08\/zufallszahlengleichverteilung1.thumbnail.png' title='zufallsgleichverteilung1' alt='zufallsgleichverteilung1' \/><\/a><br \/>\nNach dem ersten Testlauf mit 39 Millionen Zufallszahlen, sah die Verteilung doch garnicht mal so schlecht aus. Aber es gibt einige Zahlen, die stark von der erwarteten WK abweichen. Darunter ist z.B. die 2 mit 0.71%, die 32 mit 0.63%, die 128 mit 0.98% und die 192 mit 0.87%. Unter bin\u00e4rer Betrachtungsweise f\u00e4llt sofort auf, dass die Null besonderst oft vertreten ist.<br \/>\n2 = 00000010<br \/>\n32 = 00100000<br \/>\n128 = 10000000<br \/>\n192 = 11000000<br \/>\nNun liegt die Vermutung nahe, dass der ADC mehr geraden Zahlen produziert als ungeraden. Ein einfacher Test best\u00e4tigt es, die Null kommt mit 0.2% h\u00e4ufiger vor als die Eins. Die Ursache hierf\u00fcr kann nur auf Bauteiltolleranzen im ADC zur\u00fcckzuf\u00fchren sein. Als eine Referenzspannung vom 5V genommen wurde, anstatt 2.65V, trat die Eins nun mit 0.2% h\u00e4ufiger auf. Da der Mikrocontroller 6 ADC Kan\u00e4le hat, liegt die Vermutung nun nahe, durch wechseln des ADC Kanals den Fehler zu minimieren.<\/p>\n<p>Gesagt, getan. Hier ist die neue Verteilung.<br \/>\n<a href=\"http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2007\/08\/zufallszahlengleichverteilung2.png\"><img src='http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2007\/08\/zufallszahlengleichverteilung2.thumbnail.png' title='zufalls' alt='zufalls' \/><\/a><\/p>\n<p>Ahja, das ganze l\u00e4uft auf einem ATmega8. Das Programm kann aber auf jeden beliebigen Mikrocontroller portiert werden, solange es mindestens einen ADC gibt.<br \/>\nDie Zufallszahlen werden \u00fcber USART gesendet. Ansonsten gibt es nichts zu sagen, ausser: Macht was ihr wollt damit :)<br \/>\n<a href=\"http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2007\/08\/zufallsgenerator-01.zip\" class=\"attachmentlink\">zufallsgenerator-01.zip<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Als ich mir eine Video-Vorlesung der Uni Tuebingen ansah, kam mir die Idee, mit einem AVR einem Zufallsgenerator zu programmieren. Als Quelle sollte der Analog-Digital Wandler (ADC)dienen, dessen Eingang in der Luft h\u00e4ngt. Es wird also nur das Rauschen des Wandlers und ein paar St\u00f6rsignale digitialisiert. Von dem eingelesen Wert wir nur das erste Bit [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-15","post","type-post","status-publish","format-standard","hentry","category-avr"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/15","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15"}],"version-history":[{"count":0,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/15\/revisions"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}