реклама на сайте
подробности

 
 
> Инициализация псевдослучайной последовательности, как это сделать?
ARV
сообщение Mar 11 2011, 05:42
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Отправная точка: миниатюрное устройство, где каждый новый компонент - лишний. устройство формирует ряд "случайных" сигналов, используя rand(). в сущности, алгоритм генерации ПСПЧ не принципиален. но есть большая проблема: два одинаковых устройства, включенные одновременно, генерируют абсолютно одинаковые "случайные" последовательности, что очень плохо. более того, после подачи питания устройство всегда стартует с одного и того же "места", что тоже очень плохо.

есть, конечно, функция srand(), которая могла бы помочь, но для нужного результата эту функцию нужно передать случайное число... круг замкнулся.

вопрос знатокам: посоветуйте, какими простыми и дешевыми средствами реализовать получение хотя бы одного-единственного, но на самом деле случайного числа в программе?

сразу ограничу круг советов: надежда на то, что после включения питания ячейки ОЗУ содержат случайные данные, не срабатывает, в подавляющем большинстве у одного и того же контроллера при более-менее одинаковых условиях содержимое ОЗУ после подачи питания так же более-менее одинаковое, вариации крайне недостаточные для того, чтобы считать их действительно случайными - проверено на некотором количестве atmega32.


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 14)
ataradov
сообщение Mar 11 2011, 06:29
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



У Атмела есть аппнот на эту тему, номер не помню правда.

В качестве источинков случайных событий в частности там предлагались: АЦП с висящим в воздухе выводом, время записи ячейки EEPROM и много чего еще.
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 11 2011, 06:53
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



пока что не нашел такого апноута... с АЦП я пробовал, но что-то не очень хорошо вышло... вроде поначалу показалось есть случайность, а потом она куда-то пропала... правда, я использовал "веру" в то, что младший бит АЦП шумит, и поэтому мерял 8 раз небольшой уровень и младший бит результата задвигал в байт... а вот время записи EEPROM - оно же может зависеть от питания, температуры, частоты встроенного генератора, но для одинаковых условий будет неизменным, как мне кажется... 2 девайса могут получиться с разными последовательностями, но каждое будет всегда стартавать однотипно...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
314
сообщение Mar 11 2011, 07:04
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 17-08-07
Пользователь №: 29 855



Висящий в воздухе вывод АЦП лихо реагирует на влажность платы, можно просто дохнуть на это место платы и показания здорово меняются. Только по-моему это больше проблема, чем решение.
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 11 2011, 07:08
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



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


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Petka
сообщение Mar 11 2011, 07:24
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(ARV @ Mar 11 2011, 08:42) *
есть, конечно, функция srand(), которая могла бы помочь, но для нужного результата эту функцию нужно передать случайное число... круг замкнулся.

вопрос знатокам: посоветуйте, какими простыми и дешевыми средствами реализовать получение хотя бы одного-единственного, но на самом деле случайного числа в программе?

На самом деле "действительно случайное" число не нужно. Нужно всего-лишь навсего при каждом запуске в srand подсовывать ДРУГОЕ число. Получить его достаточно просто. При каждом запуске инкрементируйте какую-нибудь ячейку EEPROM и данным значением инициализируйте srand.
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 11 2011, 07:52
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(Petka @ Mar 11 2011, 10:24) *
На самом деле "действительно случайное" число не нужно. Нужно всего-лишь навсего при каждом запуске в srand подсовывать ДРУГОЕ число. Получить его достаточно просто. При каждом запуске инкрементируйте какую-нибудь ячейку EEPROM и данным значением инициализируйте srand.

да, действительно sm.gif спасибо, что натолкнули на эту мысль, хотя я уже получил аналогичный совет на телесиськах http://530.ru/wwwboards/mcontrol/2979/messages/1182899.shtml

если вдруг кому потребуется действительно случайный генератор чисел, то я нашел целый трактат по этой теме (может, это его посчитали за апноут атмеля?) http://www.avrfreaks.net/index.php?name=PN...pic&t=59417


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Mar 11 2011, 07:55
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (ARV @ Mar 11 2011, 09:53) *
но для одинаковых условий будет неизменным, как мне кажется...
Это кажется, небольшие вариации есть всегда. Но с идиотским новым дизайном на сайте у них теперь ничего невозможно найти.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 11 2011, 08:05
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Согласен с предыдущим оратором.
Хуже того, набор 1 2 3 4 5 6.... тоже является частным случаем случайной последовательности. Которая может быть вполне (если числа действительно случайные).
Посему во многих случаях более полезной будет просто последовательность 1 2 3 4... . Её плюс состоит в том, что числа не повторяются с максимальным интервалом.
И при наличии епром реализуются просто.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 11 2011, 08:07
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(ARV @ Mar 11 2011, 08:42) *
вопрос знатокам: посоветуйте, какими простыми и дешевыми средствами реализовать получение хотя бы одного-единственного, но на самом деле случайного числа в программе?

Уникального серийника нет ? Ну, еще можно воспользоваться тем, что WDT тактируется от RC-генератора, и при основном тактировании от кварца можно измерить время срабатывания WDT и плясать от него. Думаю, достаточно случайное значение, при высокой дискретизации счета.
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 11 2011, 08:20
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(rx3apf @ Mar 11 2011, 11:07) *
Уникального серийника нет ? Ну, еще можно воспользоваться тем, что WDT тактируется от RC-генератора, и при основном тактировании от кварца можно измерить время срабатывания WDT и плясать от него. Думаю, достаточно случайное значение, при высокой дискретизации счета.

да, этот метод рассматривался в числе прочих в вышеупомянутом мною трактате sm.gif спасибо, я считаю, что на данном этапе я свою проблему решил.

P.S. на счет 1,2,3,4,5 и т.д. - я вообще молчу (звездавшоке)


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
domowoj
сообщение Mar 11 2011, 15:27
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Если говорить о псевдослучвайной последовательности, то можно прогрмно реализовать
один из вариантов следующей схемы сдвигового регистра с ОС
http://www.qrz.ru/schemes/contribute/secur...generator1.shtm
Или вот так
http://algolist.manual.ru/maths/generator/

Или вот генератор случ. чисел
http://vx.netlux.org/lib/vsl04.html

Сообщение отредактировал domowoj - Mar 11 2011, 15:30


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 11 2011, 15:56
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(domowoj @ Mar 11 2011, 18:27) *
Если говорить о псевдослучвайной последовательности, то можно прогрмно реализовать
.....
Или вот генератор случ. чисел

Что толку с генератора ПСЕВДОслучайной последовательности, если нет возможности рандомизировать "затравку" ? У всех устройств при равном числе обращений к этому генератору "случайное" число будет строго одинаковым...
Go to the top of the page
 
+Quote Post
domowoj
сообщение Mar 11 2011, 17:19
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Тогда усилить шумы стабилитрона
и оцифровать


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 11 2011, 18:51
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ARV @ Mar 11 2011, 08:42) *
Отправная точка: миниатюрное устройство, где каждый новый компонент - лишний. устройство формирует ряд "случайных" сигналов, используя rand(). в сущности, алгоритм генерации ПСПЧ не принципиален. но есть большая проблема: два одинаковых устройства, включенные одновременно

Интересно как это Вам удается их одновременно включать?
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 17:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01464 секунд с 7
ELECTRONIX ©2004-2016