Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Генератор случайных чисел
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
MNP
Надо сделать на ПЛИС генератор случайных чисел (например 16-разрядных)
1. Можно ли для этого просто взять выходы 16-р (или более длинного) сдвигового регистра (генератора м-последовательности)?
2. Как затем получить нормальное распределение имея на входе равномерное?
Tanya
Цитата(MNP @ Feb 6 2017, 12:35) *
2. Как затем получить нормальное распределение имея на входе равномерное?

Есть такая предельная теорема - сумма большого числа (фиксированного) случайных чисел с любым распределением - дает гауссово распределение.
MNP
спасибо! нет ли какой нибудь ссылки?
andyp
Цитата(MNP @ Feb 6 2017, 12:35) *
Надо сделать на ПЛИС генератор случайных чисел (например 16-разрядных)
1. Можно ли для этого просто взять выходы 16-р (или более длинного) сдвигового регистра (генератора м-последовательности)?
2. Как затем получить нормальное распределение имея на входе равномерное?


1 - Можно, но генератор выйдет так себе. Почитайте про Mersienne twister
2 - Посмотрите на Box-Muller transform и Ziggurat algorithm

Tanya
Цитата(MNP @ Feb 6 2017, 12:44) *
спасибо! нет ли какой нибудь ссылки?

https://ru.wikipedia.org/wiki/%D0%A6%D0%B5%...%B5%D0%BC%D0%B0
Так и называется - центральная предельная теорема
MNP
Цитата(andyp @ Feb 6 2017, 13:01) *
1 - Можно, но генератор выйдет так себе. Почитайте про Mersienne twister
2 - Посмотрите на Box-Muller transform и Ziggurat algorithm


1.- так себе - это значит - обычная псп, а не более крутая, как например коды Голда?
если да, то это сойдет, т.к. цель - создать шум и замешать его с сигналом; то есть получим поток из (2^n -1) 16-р. чисел с равномерным распределением?
2- спасибо, посмотрю
Огурцов
Код
process
begin
  if ct(22)'event and ct(22) = '1' then
      if rnd(6) = rnd(0) then
        rnd(7 downto 1) <= rnd(6 downto 0);
        rnd(0) <= '1';
      else
        rnd(7 downto 1) <= rnd(6 downto 0);
        rnd(0) <= '0';
    end if;
  end if;
end process;

только регистр делайте не 16, а 15 или 17 бит
MNP
понятно, что 15р и 17р регистры требуют для псп меньше обратных связей , чем 16р.

я только не понял, о чем код: если это про 8р псп , то вроде бы не те обратные связи (должны быть с 4 выходов)?
Александр77
Цитата(MNP @ Feb 6 2017, 12:35) *
Надо сделать на ПЛИС генератор случайных чисел (например 16-разрядных)
1. Можно ли для этого просто взять выходы 16-р (или более длинного) сдвигового регистра (генератора м-последовательности)?
2. Как затем получить нормальное распределение имея на входе равномерное?

А какую "символьную частоту" требуется получить?
Делал на макс10 генератор псевдослучайных чисел используя 16-ть конгруэнтных генераторов с периодом 2^16 каждый на одном умножителе 18*18.
Получил среднее 32768 с эксцессом 2,97 (у НР 3).
Символьная получилась чуть выше 250 тыс. значений в секунду.
Если использовать 16 умножителей - скорость можно поднять до 4..5 миллионов/с.
krux
весьма советую ознакомится, во-первых с XAPP052 (July 7,1996)
https://www.xilinx.com/support/documentatio...tes/xapp052.pdf
там есть прекрасная таблица полиномов для PRBS-генераторов.
Нажмите для просмотра прикрепленного файла
во-вторых, есть прекрасная технология получения случайных промежутков времени, используя время захвата частоты PLL.
т.е. между сбросом PLL и установлением сигнала Locked - время недетерминированное. читай - случайное.
исходя из этого можно заряжать новый цикл длинного PRBS новым числом.

дальше я думаю разжёвывать смысла нет.
zxcv
У Xilinx есть пример как сделать защиту прошивки ПЛИС от копирования при помощи DS2432 (1-wire EEPROM with SHA-1 engine).
В проекте ПЛИС, в том числе, сделан генератор случайных чисел: LFSR работающий от двух генераторов на инверторах с линиями задержки.
За счет того, что частота генераторов "гуляет" от напряжения и температуры случайные числа получаются не псевдослучайными, а случайными...
xapp780 архив
andyp
Цитата(MNP @ Feb 6 2017, 14:12) *
1.- так себе - это значит - обычная псп, а не более крутая, как например коды Голда?
если да, то это сойдет, т.к. цель - создать шум и замешать его с сигналом; то есть получим поток из (2^n -1) 16-р. чисел с равномерным распределением?


Период короткий. Не получите. Если брать весь регистр состояния каждый такт, то биты в соседних числах будут сильно статистически связаны. Поэтому получите только 2^n-1 псевдослучайных бит (Ну т.е. (2^n-1)/16 16-ти битных чисел). На высокой частоте период будет пролетать очень быстро. Для сравнения, период твистера Мерсенна 2^19937−1 32-разрядных чисел.
blackfin
Цитата(MNP @ Feb 6 2017, 12:35) *
Надо сделать на ПЛИС генератор случайных чисел (например 16-разрядных)
1. Можно ли для этого просто взять выходы 16-р (или более длинного) сдвигового регистра (генератора м-последовательности)?
2. Как затем получить нормальное распределение имея на входе равномерное?

Таких тем на форуме уже было полно: Генератор псевдослучайных чисел..

"Ищите и обрящете.." biggrin.gif
TSerg
"Всем новичкам хочется быть первопроходцами" (С)
MNP
Цитата(blackfin @ Feb 6 2017, 21:49) *
Таких тем на форуме уже было полно: Генератор псевдослучайных чисел..


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

Спасибо всем за ответы. Во всяком случае теперь есть отправные точки. Надо переварить.
=SSN=
Цитата(MNP @ Feb 7 2017, 10:41) *
я, само собой, сначала потыркал 'поиском', но этой ссылки, и ничего похожего - не выскочило.

Надо было искать: LFSR.
Огурцов
Цитата(MNP @ Feb 6 2017, 13:32) *
я только не понял, о чем код: если это про 8р псп

догадается, что не 16 ?
blackfin
Как раз по теме ГСЧ.
ViKo
Цитата(blackfin @ Feb 7 2017, 21:35) *
Как раз по теме ГСЧ.

Мое мнение - вранье чистой воды. laughing.gif
blackfin
"Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий". / Козьма Прутков/
ViKo
"Знание некоторых принципов избавляет от знания многих фактов." (с) автора не помню
ViKo
Вот простейший пример. Мультивибратор выдает 0 или 1. По кнопке захватывается его значение (пусть, триггером, для полной картины). Если 0, игрок проиграл, если 1 - выиграл. Мультивибратор чуть-чуть перекошен, 0 у него длится на 2% дольше единицы. И частота этого мультивибратора 10 кГц. sm.gif
Предложите выигрышную стратегию игры с таким примитивнейшим одноруким бандитом.
gerber
Цитата(ViKo @ Feb 8 2017, 11:37) *
Предложите выигрышную стратегию игры с таким примитивнейшим одноруким бандитом.

Удвоение ставки после проигрыша.
ViKo
Цитата(gerber @ Feb 8 2017, 14:08) *
Удвоение ставки после проигрыша.

Неплохо. Но где же выигрыш? rolleyes.gif
Очевидно, нужно увеличить ставку более, чем в 2 раза.
И еще. Выиграл - беги из казино. Если сможешь.
Огурцов
Цитата(ViKo @ Feb 8 2017, 08:37) *
Предложите выигрышную стратегию игры с таким примитивнейшим одноруким бандитом.

не играть
ибо ещё в казино оставите от 3%


Цитата(gerber @ Feb 8 2017, 11:08) *
Удвоение ставки после проигрыша.

а в итоге окажется, что ставили на кон $1024, чтобы выиграть доллар
с учётом потенциальных ошибок, ну очень прибыльно
для казино
gerber
Цитата(ViKo @ Feb 8 2017, 14:20) *
Неплохо. Но где же выигрыш? rolleyes.gif

Первая же выпавшая "единица" окупает все предыдущие проигрыши и приносит прибыль, за счет удвоения ставки.
А поскольку на честном генераторе случайной последовательности "единица" обязательно выпадет за конечное время - то для гарантированного выигрыша нужно иметь всего-навсего конечное количество денег.
Поэтому в реальном казино размер ставки всегда ограничен сверху, чтобы отсечь "удвоителей".
Хотя я знаю человека, который в 90-е годы, когда казино были на каждом шагу, и когда у него оставался в кармане последний "грош" и терять было особенно нечего - он шел ночью в казино, и играя тупо на рулетке на "красное-черное" поднимал какую-то ощутимую сумму денег за ночь, именно удвоением... Но не всегда, естественно.
Цитата(Огурцов @ Feb 8 2017, 16:30) *
а в итоге окажется, что ставили на кон $1024, чтобы выиграть доллар

Ну для такого расклада должно очень не повезти, чтобы подряд 10 раз не угадать при вероятности почти 0,5 ... и тем не менее выиграть доллар!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.