nikellanjilo

Центральная Предельная Теорема

11 сообщений в этой теме

Доброго времени суток, уважаемые форумчане.

Вопрос состоит в следующем - мне нужно по ЦПТ получить нормальное распределение. Я решил сделать сделать это по ЦПТ (возможно как-то еще можно).

Я генерирую рандом, используя сдвиговый регистр с линейной обратной связью, затем суммирую полученные значения. Но вот если посмотреть то, что у меня получается - это далеко не колокол Гауссовский.

Собственно вопрос. У меня есть уже сумма из 12 или n слабозависимых величин, какую мне нужно сделать над ними операцию, чтобы получить свой колокол с нужным матожиданием и дисперсией.

Собственно - матожидание понятно, просто сумма: матожидание+(выражение) , но что мне нужно сделать в выражении чтобы значения укладывались в заданное мною СКО.

Ссылка на ЦПТ в википедии ====>.

https://ru.wikipedia.org/wiki/%D0%A6%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    647

Просто посчитай получающуюся дисперсию. Затем умножь числа на 2 и посчитай снова. И тебе станет ясно на сколько надо умножать, чтобы получить требуемую дисперсию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

То есть если поэтапно.

1. Я считаю сумму всех значений, делю на количество - получаю среднее значение (чтобы потом найти дисперсию),

2. Затем нахожу дисперсию каждой величины

3. Нахожу дисперсию суммарную

4. Проделываю снова все для 2хЗНАЧЕНИЙ

5. Нахожу нужный коэффициент, на который буду домножать, чтобы значения укладывались в СКО

Так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    647

Эм... проще так:

У тебя есть набор случайных чисел, допустим 1000 штук в массиве noise. Выполни в Matlab или Octave функцию mean(noise) - получишь матожиданее, выполни std(noise) получишь СКО (соответственно std(noise)^2 - это дисперсия).

Это чтобы не запутаться в вычислениях.

Затем умножь массив noise на 2 и повтори вычисления матожидания и дисперсии.

P.S. 1000 значений может быть мало, возьми миллион.

Вот пример

octave:8> n=normrnd(1,5,1000000,1);
octave:9> mean(n)
ans = 1.0031
octave:10> std(n)
ans = 5.0054
octave:11> std(n*2)
ans =  10.011

В первой строке создаётся одномерный массив из миллиона элементов с матожиданием 1 и СКО (sigma) 5. Вычисления mean и std довольно точны.

Если умножим числа на 2, то и СКО увеличится в два раза, а дисперсия в 4 раза.

Изменено пользователем Vascom

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
UTSource

Найдите миллионы труднодоступных

электронных компонентов

IMXO    1 357
Я генерирую рандом, используя сдвиговый регистр с линейной обратной связью, затем суммирую полученные значения. Но вот если посмотреть то, что у меня получается - это далеко не колокол Гауссовский.

может это поможет?

http://www.microchip.su/showthread.php?t=4487&page=43

посты 1074-1077

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хорошо если так, когда есть матлаб, но как мне все это использовать в железе? На ПЛИСе

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    647

Ну можно (нужно) промоделировать всё это в симуляторе перед программированием ПЛИС.

Мы же не знаем конкретную твою задачу. Например нужно ли тебе менять матожидание и дисперсию в процессе работы.

Ты начинай делать, показывай свой код, verilog. И в процессе всё станет понятно, поможем где надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

module gauss(
input [7:0] MO,
input [7:0] CKO,
input CLK,
output reg [7:0] GAUS,
output reg [7:0] CH,
output reg [7:0] SUMMER
);
reg [7:0] change = 8'd12;
wire feed = change[7]^change[5]^change[4]^change[3];
reg [7:0] count=8'd0;
reg [7:0] sum = 8'd0;
always @(posedge CLK)
begin
change[0]<=feed;
change[7:1]<=change[6:0];
if (count<12)
begin
 count<=count+1;
 sum<=$signed(sum)+$signed(change);
end
else
begin
 count<=0;
 sum<=0;
 SUMMER<=$signed(sum);
 CH<=$signed(change);
 GAUS<=$signed(MO)+(($signed(sum)*$signed(CKO))/144);	
end

end
endmodule

По-сути:

1. Делаю методом Фебоначи на сдвиговом регистре с линейной обратной связью рандом,

2. По ЦПТ - считаю сумму 12 элементов,

3. Перевожу значения чтобы получилось нормальное распределение

Но получается бячное что-то...

Ты начинай делать, показывай свой код, verilog. И в процессе всё станет понятно, поможем где надо.

Собственно вот так :thank_you2: :thank_you2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Короче... Делал через Бокса-Мюллера, промоделировал модель в Маткаде... потом код скину

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vascom    647

Основная проблема - переполнение регистра sum. Увеличь его разрядность и всё станет лучше.

Я тут переписал твой код чтобы проще и понятнее было.

Сам модуль http://paste.fedorap...215922/15779614

И тестбенч для его запуска http://paste.fedorap...215923/01578031

Получаемое распределение

post-164632-0-81944900-1430158014.png

Конечно не чистый гаусс, но и метод генерации у тебя очень простой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: пансо
      Продам б\у батареи конденсаторов 680\400в  2 батареи по 8шт. стоимость батареи 1000р без стоимости пересыла.
    • Автор: Никита Федотов
      Привет всем! Я буду не многословен и сюда буду выкладывать в основном фото винтовки и видео с различных испытаний. Если на видео я буду чу-чуть ругаться, то не обращайте внимания... Это такие волшебные слова от которых просто все начинает лучше работать =)
       
    • Автор: nikellanjilo

      Доброго времени суток уважаемые форумчане.
      Мой вопрос состоит в следующем - как можно сделать генератор белого гауссовского шума для ПЛИС?
      Без использования MatLab, только силами языка описания аппаратуры Verilog, VHDL.
      Проблема в том, что я генерирую рандом, который имеет равномерное распределение, а вот чтобы из равномерного получить нормальное Гауссово - есть кое-какие проблемы.
      Может вообще есть путь по-проще или как решить ту проблему у которой я сейчас стою... Может есть какие мыслишки? :buba:
    • Автор: Меченый
      Недавно наткнулся на видео, где гаусс-пушка могла стрелять очередями. Схема имела 8 соленоидов с оптопарами. Там только в схеме(как я понял), не было конденсатора, как во всех классических схемах, а энергия подавалась на каждый соленоид прямо из аккумуляторной батареи, состоящей из двух акумов по 3600 мА/ч и 22 В, соединенных последовательно.
      Вот видео:


      Вопросы к профессионалам:
      1) Подскажите пожалуйста, можно ли без ограничивающего сопротивления использовать 4 автомобильных аккумулятора на 12 В, соединенных последовательно(емкость 56 А/ч, пусковой ток 480 А)
      2) Можете, пожалуйста, подкинуть схемку фотодетектора(на фоторезисторах или фототранзисторах), в которой бы пересекание луча открывало мощный транзистор(что бы выдерживал ток из вопроса 2 и напряжение 50 В), при этом транзистор должен потом закрываться, когда свет попадет на датчик снова
      PS: Просьба ногами не пинать, в теоретической части я пока что нуб, и очень нуждаюсь в вашей помощи
  • Сообщения

    • Сейчас начнёт мыть плату, флюс попадёт в кнопки и переменный резистор и тогда уже точно ничего работать не будет. А он попадёт 100%. Отмывать надо было после пайки всего, кроме электромеханических компонентов - переменных резисторов, кнопок, разьемов, КПЕ и т.п. Неудачно выбрана конструкция для первого приемника, и таких навыков пайки, взяли бы лучше кит на выводных деталях для начала.
    • Самодельные щупы из нержавейки. 1. Что необходимо Наконечники от шариковых ручек, обрезки изоляции телефонного кабеля, спицы из нержавейки, "бананы" и розетка от старой военной техники. Оболочка кабеля одеваем на оправку, чтобы придать ровную форму. Заготовки затачиваем так, чтобы они входили на желаемую глубину, военный разъем разбиваем, от него нужны латунные втулки. На заготовках нарезаем резьбу 4-5 ниток, во втулках отверстие и резьба. Прикручиваем и припаиваем. Теперь заготовки нужно вклеить в наконечники. Пистолетом заводим клей внутрь наконечника, заготовки предварительно подогреваем, но не перегреваем. Вот что получилось. Изолента. Затем обмазываем клеем (у меня полимерный, можно БФ и т.д.), одеваем изоляцию. Провода с "бананами" делаем без инструкции. Уточнение, изоляция на 1 - 1,5 мм длиннее заготовки. Это нужно для безопасности. Еще лучше подточить штекер так, чтобы он входил внутрь. О плюсах. Щупы надежные прочные, острые, проходят любое лаковое покрытие, не окисляются. Нет переживаний о том, что провод обломится у основания щупа. При необходимости щуп быстро заменяется на зажим "крокодил". О минусах. Несколько трудоемко, но один раз можно и помучиться.
    • В 3А3-965 (горбатый) стоял селеновый выпрямитель. Серый такой блок с пластинами - радиаторами и находился он в воздухозаборнике для лучшего охлаждения. Тут вопрос не в том, какой генератор стоял в папиной машине ТС-а, а в том, что ТС свято верит, что поголовно во всех автомобилях "механические выпрямители". То есть генератор никогда не разбирал, теории не читал.  Схему зарядки аккумулятора себе в уме не представляет. Зачем диод в магнитоле, не знает. И вот подобные индивидуумы ещё спорят тут о выходной мощности усилителя при питании 14 Вольт. Право, смешно !
    • Вот такой БП сейчас собираю для одного "интересующегося" отрока. (Точнее формирую этакий кит из печатки и набора деталей - паять будет сам по инструкции). Имхо, "для подключения разных потребителей, от светодиода до моторчика." и прочих экспериментов этого за глаза. Цифровой прибор выбран только ради малого размера, хватило бы и стрелочных.  
    • он не бракует. В брак идет большой сердечник. Что поменьше было указано на то что намотано криво. И совет был померить через падение напряжения. Вот и все. Изоляция после каждого слоя это обязательно и 4-5 слоев между первичкой и вторичкой.
    • Как обычно. Ctr+r. Да и по всякому пробовал. Проскакивает на последующие строки.

      Отправлено с моего SM-G925F через Tapatalk