Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Генератор на случайни числа
http://mcu-bg.com/mcu_site/viewtopic.php?f=22&t=11128
Страница 1 от 6

Автор:  relsys [ Пет Фев 22, 2013 12:15 pm ]
Заглавие:  Генератор на случайни числа

Предполагам, повечето от вас знаят въпросната методика, но със сигурност има и такива дето не я знаят:

Към вход на АЦП модул се свързва само една свободно висяща жица, която се прекарва около доволно шумни места по платката. След отчитане на стойността се взема само най-младшия бит, необходимия брой пъти (в сучая 16 пъти за попълване на 16 битова променлива, или иначе казано - получаваме число от 0..65535).

При мен върху PIC18 резултатите са повече от задоволителни.

Код:
unsigned int Get_Random_Time(unsigned int max_time)
{
  char x;
  unsigned int adc_result, adc_current;
 
  adc_current = 0;
  adc_result = 0;
  for (x = 16; x != 0; x--)
    {
      adc_current = ADC_Read(0);
      adc_current &= 0x0001;
      adc_result = adc_result | (adc_current << (x-1));
    }
  return adc_result % max_time;
}

Автор:  MYXATA [ Пет Фев 22, 2013 12:24 pm ]
Заглавие:  Re: Генератор на случайни числа

Ами твойта методика е доста случайна и хаотична ;)
"Резултати повече от задоволителни" се казва когато данните си ги изследвал поне по 5 независими критерия( Кнут, и др.Добс който цитира Кнут, и др.) и по всичките е минал допустимия праг.

Приложи статистика и направи някой друг тест да видиш колко ти е случаен генератора :!: бих заложил няколко бири,че да кажем "0" преобладават или '1' в зависимост как четеш от АЦП-то и къде си боднал точно жицата..

Автор:  MYXATA [ Пет Фев 22, 2013 12:37 pm ]
Заглавие:  Re: Генератор на случайни числа

от евтините и не много добри варианти има два подхода:
1. Цифров
много има но малко са добри, най вече се ползва за "избелване" аналогово цифровите. разни шифтрегистри с обратни връзки, или пък някой криптиращ алгоритъм в cipher feedback mode
2.Аналогово-и после скагаш цифров
2.1.Взимаш ценер при напрежение при което почва да стабилизира и и му мериш шума който генерира(през усилвател и тогава в ацп-то) ама зависи с каква честота семплираш. това пък зависи от спектъра на шума дето идва от диода.
2.2.взимаш МАХ232 мисля беше(слагаш и напомващите кондензатори) и оставяш интерфейсните входове да висят, тогава получаваш що годе случайна поредица на ттл изхода - ама е с доста ниска скорост на генериране.
2.3. ако имаш някой изотоп по ръка или крак :) и гайгеров брояч,може да взимаш времето между детекване на частици - то е доста случайно:)

Автор:  sparkybg [ Пет Фев 22, 2013 12:45 pm ]
Заглавие:  Re: Генератор на случайни числа

Ако искаш да е истинско, не е лесна работа това. Че и интел се фукаха преди няколко месеца по научните списания че вградили такъв в процесор, и че отговарял на разни супер изисквания.

И все пак за да е нещо - потърси из интернет "white noise generator". Например това: http://electronicdesign.com/test-amp-me ... -generator

Автор:  bateAz [ Пет Фев 22, 2013 12:48 pm ]
Заглавие:  Re: Генератор на случайни числа

Топлинният шум е случаен до съвършенство. Друг е въпросът как ще го премериш и как ще тълкуваш после резултатите. Аз съм правил с квантован бял шум и после с него seed на шифт регистър. Правил съм анализ на разпределението на 16-битови числа и ми "хареса". На фурие също изглеждаше равномерен.
Важното е да квантуваш с честота, много пъти по-ниска от макс честота в спектъра на шума.

Автор:  relsys [ Пет Фев 22, 2013 1:00 pm ]
Заглавие:  Re: Генератор на случайни числа

Нямам време за изследвания аз :)
Целите за които ми трябва - генериране на едно време 0..5000 ms, максимум 1-2 пъти на ден.
Като казах задоволителни - имах предвид, че се държи много по адекватно от RND(1) в Правец и RAND() в С++.

Автор:  Н'бабане Гт'муан'га [ Пет Фев 22, 2013 1:17 pm ]
Заглавие:  Re: Генератор на случайни числа

точно преди няколко дни попаднах на един интересен материал в тая връзка: http://imotp.sourceforge.net/noise.pdf

Автор:  relsys [ Пет Фев 22, 2013 2:00 pm ]
Заглавие:  Re: Генератор на случайни числа

Ето я моята постановка:

Прикачени файлове:
RDG.jpg
RDG.jpg [ 161.31 KiB | Прегледано 8873 пъти ]

Автор:  ДедоБоре [ Пет Фев 22, 2013 2:14 pm ]
Заглавие:  Re: Генератор на случайни числа

я сложи няколко хиляди числа тука, да видим какво си изгенерирал :-k

добрите шумови диоди имат изключително широк спектър, десетки гигахерци. ценера на практика е добър, щото надали някой ще тръгне да семплира с десетки мегахерци. въпроса е как да отстраниш систематичните добавки - честота на семплиране, околни кварцове, дори мрежови смущения.

все пак ценера си остава много надежден метод, много по-добър от гола жица по платката. просто, защото платката не е с достатъчно ниска ентропия.
номера със жицата минава, ако мериш статично електричество в атмосферата (гръмотевици примерно). но това е за много висш пилотаж.

Автор:  ike [ Пет Фев 22, 2013 2:17 pm ]
Заглавие:  Re: Генератор на случайни числа

Знам, че много хора дадоха акъл в тази тема, но и аз не можах да се въздържа.
Цитат:
John von Neumann invented a simple algorithm to fix simple bias and reduce correlation. It considers bits two at a time, taking one of three actions: when two successive bits are equal, they are discarded; a sequence of 1,0 becomes a 1; and a sequence of 0,1 becomes a zero. It thus represents a falling edge with a 1, and a rising edge with a 0. This eliminates simple bias, and is easy to implement as a computer program or in digital logic.

http://en.wikipedia.org/wiki/Hardware_r ... _whitening
Алгоритъма забива, ако поради някаква причина ти се прецака входящия шум.
Иначе има много софтуерни генератори, които генерират много добре псевдо случайни числа, а има и такива, които генерират даже и криптографски псевдо случайни числа(идеален рандом генератор може цял ден да ти бълва числото 0 което не е добре при криптографията) - само единственият им недостатък е, че трябва да ги осемениш с истинско рандом число, а и са големи за микроконтролер.

Автор:  MYXATA [ Пет Фев 22, 2013 4:43 pm ]
Заглавие:  Re: Генератор на случайни числа

ike написа:
.....(идеален рандом генератор може цял ден да ти бълва числото 0 .............................
................ само единственият им недостатък е, че трябва да ги осемениш с истинско рандом число, а и са големи за микроконтролер.


Ике ,
Ти направо разцепи мрака със метлата дет се вика :)
1. Идеалния рандом генератор може да дава нула на изхода цял ден, само ако е изключен от захранването :!: - само в някой доста абстрактен математичен модел може се докаже такава вероятност.
2.Осеменяването като приложна наука извън аграрните комплекси(познати ни като ТКЗС), не се прилага много-много ;) било то с истински рандом или не съвсем число.
Ако е добър криптоалгоритъма - би трябвало да ти дава еднакво добра псевдослучайна последователност на изхода независимо дали входното чесло е случайно или не :!:

Автор:  relsys [ Пет Фев 22, 2013 5:18 pm ]
Заглавие:  Re: Генератор на случайни числа

ДедоБоре написа:
я сложи няколко хиляди числа тука, да видим какво си изгенерирал :-k


Ей го на....

Прикачени файлове:
random_digit_65535_log.txt [35.63 KiB]
449 пъти
random_digit_5000_log.txt [36.49 KiB]
429 пъти

Автор:  MYXATA [ Пет Фев 22, 2013 5:29 pm ]
Заглавие:  Re: Генератор на случайни числа

Ако не ти се пише собствен софт за анализ може да си го друпнеш оттук:
http://www.stat.fsu.edu/pub/diehard/

Вярвам че си направил добър генератор - това просто ще ти даде увереност, че наистина е така ;)

Автор:  ike [ Пет Фев 22, 2013 5:35 pm ]
Заглавие:  Re: Генератор на случайни числа

MYXATA написа:
това просто ще ти даде увереност, че наистина е така ;)

При 20*С и заредени батерии.

Автор:  tgi [ Пет Фев 22, 2013 5:59 pm ]
Заглавие:  Re: Генератор на случайни числа

Добре де, какви средства какви щуротии, толкова трудно ли е да събере достатъчно голям брой
измервания и сумата да види дали се отклонява от средното с повече от един корен от сумата.
Ако не, генераторът му е случаен.
Това с жицата посред платката не ми харесва особено, тя събира сигнали, не шум - и има
шанс да напипа нещо кратно на клока на АЦП-то примерно.
Възможно подобрение би било тоя вход на ADC-то да е вързан към изхода на някой
opamp който да е вързан за усилване 100 примерно със 100-ина кила в обратната
връзка и без никакви жици наникъде, добре филтрирано захранване (най-добре активно,
с един транзистор/резистор/кондензатор). Колкото по-малко от платката влиза в тоя
усилвател толкова повече на изхода му ще му е само неговият шум, който няма много
какъв да е за тия цели освен бял.
Само си разсъждавам де, не съм го правил/мерил. Но знам прекрасно как изглежда
шум, нали изпод него анализаторите ми вадят полезен сигнал от детекторите, което
е всичко но не и тривиална задача :D .

Страница 1 от 6 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/