Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить

Реализация генератора шума

Пт дек 25, 2015 09:04:07

Надо написать генератор шума с нормальным распределением. Получил ПСП с помощью LFSR, дальше надо реализовать преобразование Бокса-Мюллера получения из равномерного распределения нормального, но как его сделать не знаю. Надо корень, ln и cos c sin.
Или есть другой способ получения из равномерного распределения нормального?

Что имею пока:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;

entity LFSR_1 is
PORT(
clk: in std_logic;
RND: out std_logic
);

end LFSR_1;

architecture Behavioral of LFSR_1 is
signal tmp: std_logic_vector(31 downto 0):= (others=>'1') ;
begin

process (clk, tmp)
begin
if tmp=0 then tmp <= (others=>'1');
elsif (clk'event and clk='1') then
for i in 0 to 30 loop
tmp(i+1) <= tmp(i);
end loop;
tmp(0) <= tmp(31) xor tmp(21) xor tmp(1) xor tmp(0);
end if;
end process;

RND <= tmp(31);

end Behavioral;

Re: Реализация генератора шума

Пт дек 25, 2015 18:30:24

Насколько помню, для генерации нормального распределения, нужен не один, а два независимых псевдослучайных генератора с одинаковым периодом. И получить иначе чем через логарифм с тригонометрией не получается.

Re: Реализация генератора шума

Пт дек 25, 2015 20:31:54

Meteor писал(а):Насколько помню, для генерации нормального распределения, нужен не один, а два независимых псевдослучайных генератора с одинаковым периодом.
В общем случае, для получения заданной функции распределения достаточно иметь обратную функцию:
Изображение
("Теория вероятности и ее инженерные приложения", Вентцель,Овчаров)
Meteor писал(а):И получить иначе чем через логарифм с тригонометрией не получается.
Ну почему же - таблично, или интерполяцией полиномами тоже можно - зависит от требований задачи и возможностей железа.
Вложения
MatStat.png
(28.38 KiB) Скачиваний: 676

Re: Реализация генератора шума

Сб дек 26, 2015 04:22:05

Meteor писал(а):Насколько помню, для генерации нормального распределения, нужен не один, а два независимых псевдослучайных генератора с одинаковым периодом. И получить иначе чем через логарифм с тригонометрией не получается.

Или 2 последовательности, а потом Бокс-Мюллер- но там логарифм, тригонометрия и корень- что не есть хорошо в VHDL
Или попробую через центральную предельную теорему- сложу min. 12 ПСП

Как выгрузить файл с ise webpack и потом построить ПРВ в матлабе?
Ответить