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

 
 
> Инициализация псевдослучайной последовательности, как это сделать?
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
 
Start new topic
Ответов
ARV
сообщение Mar 19 2011, 18:24
Сообщение #2


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

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



снова у меня проблема sad.gif rand() вместе с srand() не втискиваются в память микроконтроллера. уже несколько дней ищу более-менее адекватную замену - и не могу найти sad.gif

задача очень проста: получить псевдослучайное число в пределах от 1 до 7. все мои попытки сделать генератор ПСПЧ с заданными параметрами дают чрезвычайно короткий цикл - буквально пару десятков чисел, после чего последовательность повторяется sad.gif

я делаю на "регистре сдвига с XOR-обратными связями по простому полиному", после чего маскирую 3 младших бита, и если результат равен 0 - повторяю.

уже сделал открытие, что avr-gcc может с легкостью выбросить volatile register переменные из кода, если моя функция случайного числа объявлена как static... но вот качественной последовательности (мне хватило бы длины цикла хотя бы больше сотни) получить не могу sad.gif то ли полиномы у меня не те, то ли что-то не то в алгоритме...

посодействуйте, пожалуйста...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 19 2011, 21:22
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ARV @ Mar 19 2011, 20:24) *
посодействуйте, пожалуйста...

попробуйте такое, рожал для быстрого шифрования страниц флеш:

Код
#define RND_INITIALIZER (777)

typedef union tagU32xU16
{
    U32 full;
    struct
    {
        U16 low;
        U16 high;
    } words;
} TU32xU16;


U16 cpr_rand16( U16 num)
{
    TU32xU16 t32;
    U16 XorCode = 0xF7B2;

    num += RND_INITIALIZER;

    t32.full = (U32)num * XorCode;
    XorCode ^= t32.words.high;
    t32.full = (U32)t32.words.low * XorCode >> 1;

    return t32.words.low;
}

Input'ом для функции может быть любая последовательность неповторяющихся чисел, например 0, 1, 2, 3 .... 64K.
RND_INITIALIZER задает начальный сдвиг выходной последовательности.

Вот что имеем на выходе для входной последовательности 0, 1, 2, ..255:
Код
rnd initializer 777,  input sequence 0, 1, 2, ... 255:
007d e374 dbb9 6700 5f45 92b4 69c1 1640 ed4d bd14 72e9 40a0 f675 6294 f731 e620
7abd 1cf4 28b9 d140 dd05 1a34 04c1 ce80 b90d 1d7a 623e a76c 1ed8 6406 4522 6918
01bc 25b2 94c6 1c64 5b20 e2be 816a e7d0 47c4 ae2a e92e 2e5c af88 f4b6 cc12 f008
926c b662 69b6 f154 39d0 c16e 565a bcc0 9dbf 93e8 7627 12a8 d3af eb10 ac17 e4f0
84bf bd58 5d27 44d8 484f 2700 2a77 20e0 031f 0308 e547 7808 390f 5a30 1b37 4a50
ea1f 2c78 cc47 7638 662f 3b20 2b17 9660 dac6 255e a7fc f294 d352 fcb2 a088 c9e8
46fe 4f26 1434 1c5c 692a d4fa 4020 abf0 e696 312e bd8c 0824 df22 0882 b618 df78
52ce 5af6 29c4 31ec c2fa 2efc 16a5 1800 ffa9 9bcc 623d 84d0 4b41 83bc 28f5 6cc0
11f9 e6cc 6acd cfd0 53d1 193c 00e5 0c00 f3a9 860c 4c7d 78d0 3f41 6dfc 1335 60c0
05f9 d10c 550d c3d0 48bc 4896 dede 55e0 0ab0 81b2 8912 dedc b4e4 0aae ae66 e2f8
da38 0eca 4eda 6234 7aac 8e06 df8e 5690 1520 8c22 89c2 df8c bf54 151e af16 e3a8
e4a8 193a 4f8a 6488 f3bb a268 319b b780 aa5b ff20 f1fb 5118 22bb 98b8 6a5b 65d0
163b ad70 5ddb f5a8 84db 3d48 cc7b 96a0 897b e800 dadb 3038 01db 8198 533b 44f0
f55b 9650 4918 755c 6ea6 79b2 c854 d360 2e62 8996 6ad0 c604 695e a35a a5cc dfc8
1f7a 383e 5be8 74ac 50b6 4842 8d24 84b0 b3f2 0f26 fa20 5554 eeee 28ea 351c 6f18
a50a c0e4 5581 0f60 a3fd e184 54e9 3000 a365 0704 de11 5f40 364d 3164 e739 89a0
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ARV   Инициализация псевдослучайной последовательности   Mar 11 2011, 05:42
- - Taradov Alexander   У Атмела есть аппнот на эту тему, номер не помню п...   Mar 11 2011, 06:29
- - ARV   пока что не нашел такого апноута... с АЦП я пробов...   Mar 11 2011, 06:53
|- - Taradov Alexander   QUOTE (ARV @ Mar 11 2011, 09:53) но для о...   Mar 11 2011, 07:55
- - 314   Висящий в воздухе вывод АЦП лихо реагирует на влаж...   Mar 11 2011, 07:04
- - ARV   в том-то и дело, что висящий вход лихо на все реаг...   Mar 11 2011, 07:08
- - Petka   Цитата(ARV @ Mar 11 2011, 08:42) есть, ко...   Mar 11 2011, 07:24
|- - ARV   Цитата(Petka @ Mar 11 2011, 10:24) На сам...   Mar 11 2011, 07:52
- - DpInRock   Согласен с предыдущим оратором. Хуже того, набор 1...   Mar 11 2011, 08:05
- - rx3apf   Цитата(ARV @ Mar 11 2011, 08:42) вопрос з...   Mar 11 2011, 08:07
|- - ARV   Цитата(rx3apf @ Mar 11 2011, 11:07) Уника...   Mar 11 2011, 08:20
- - domowoj   Если говорить о псевдослучвайной последовательност...   Mar 11 2011, 15:27
|- - rx3apf   Цитата(domowoj @ Mar 11 2011, 18:27) Если...   Mar 11 2011, 15:56
- - domowoj   Тогда усилить шумы стабилитрона и оцифровать   Mar 11 2011, 17:19
|- - muravei   Цитата(domowoj @ Mar 11 2011, 20:19) Тогд...   Mar 13 2011, 09:53
|- - SKov   Цитата(muravei @ Mar 13 2011, 12:53) А ес...   Mar 13 2011, 09:59
|- - demiurg_spb   Уважайте поиск! :-) В ветке AVR по слову RAND ...   Mar 13 2011, 10:12
- - zombi   Цитата(ARV @ Mar 11 2011, 08:42) Отправна...   Mar 11 2011, 18:51
- - forever_student   Цитата(ARV @ Mar 11 2011, 08:42) ... посо...   Mar 13 2011, 10:51
- - HALFer   дребезг контактов (геркон, реле). обмотку на выход...   Mar 14 2011, 01:06
- - ARV   не смотря на то, что лично для меня тема исчерпана...   Mar 14 2011, 05:56
|- - =AK=   Цитата(ARV @ Mar 14 2011, 16:26) 1. однов...   Mar 14 2011, 06:22
|- - rx3apf   Цитата(ARV @ Mar 14 2011, 08:56) 5. кнопо...   Mar 14 2011, 09:41
|- - demiurg_spb   Цитата(rx3apf @ Mar 14 2011, 12:41) Еще в...   Mar 14 2011, 11:17
|- - rx3apf   Цитата(demiurg_spb @ Mar 14 2011, 14:17) ...   Mar 14 2011, 11:29
|- - forever_student   Цитата(ARV @ Mar 19 2011, 21:24) ...посод...   Mar 19 2011, 21:43
|- - ARV   Цитата(forever_student @ Mar 20 2011, 00...   Mar 20 2011, 09:54
|- - rx3apf   Цитата(ARV @ Mar 20 2011, 12:54) мне нуже...   Mar 20 2011, 12:29
||- - ARV   Цитата(rx3apf @ Mar 20 2011, 15:29) У мен...   Mar 20 2011, 13:38
||- - rx3apf   Цитата(ARV @ Mar 20 2011, 16:38) скажите ...   Mar 20 2011, 14:05
|- - defunct   Цитата(ARV @ Mar 20 2011, 11:54) требующи...   Mar 20 2011, 14:53
- - Warlockwolf   Кодu32 iran; u8 Radom(){ iran=(iran*...   Mar 19 2011, 21:51
- - ARV   всем в очередной раз спасибо. как обычно, в попытк...   Mar 21 2011, 09:07
- - Метценгерштейн   а не лучше ли использовать алгоритм ПСП, например ...   Mar 2 2012, 13:34


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

 


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


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