Rotor Опубликовано 25 декабря, 2015 Поделиться Опубликовано 25 декабря, 2015 Приветствую! Задача: создать генератор шума с нормальным распределением. Получил ПСП с помощью 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; 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vascom Опубликовано 25 декабря, 2015 Поделиться Опубликовано 25 декабря, 2015 (изменено) Есть и другой способ - центральная предельная теорема. То есть если сложить много независимых одинаково распределённых случайных величин, то получится нормально распределённая случайная величина. На практике неплохое соответствие нормальному распределению получается при сложении уже 15-20 равномерно распределённых случайных величин. Пример. Создадим 20 равномерно распределённых последовательностей по 10000 чисел: a = unifrnd(-10,10,20,10000); Гистограмма соответствует равномерному распределению: Теперь сложим 20 последовательностей b=zeros(1,10000); for k=1:20 b=b+a(k, ; end И посмотрим гистограмму полученной суммы: Нормальное распределение. Изменено 25 декабря, 2015 пользователем Vascom 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Rotor Опубликовано 25 декабря, 2015 Автор Поделиться Опубликовано 25 декабря, 2015 О не я подумал тоже. Для этого мне нужно минимум 12 таких таких циклов, для получения соответственно 12 псевдослучайных последовательностей и потом загнать все это в сумматор, правильно я понимаю? И у каждой последовательности в сдвиговых регистрах должны быть не повторяющиеся стартовые значения? Это аж минимум 12*32 регистров будет задействованно и куча лут таблиц- всю ПЛИС этим забью, а ведь там еще куча имитирвать сигналов надо будет. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Vascom Опубликовано 25 декабря, 2015 Поделиться Опубликовано 25 декабря, 2015 Зависит от ПЛИС конечно, но 12 32-разрядных регистров - это же копейки. Какую ПЛИС используете? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Rotor Опубликовано 25 декабря, 2015 Автор Поделиться Опубликовано 25 декабря, 2015 Мммм, раз копеки надо делать, предположительно Virtex 6. А как потом проверить- построить АКФ и ПРВ с помощью Моделсима? Завязать его или ise webpack с матлабом? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vascom Опубликовано 25 декабря, 2015 Поделиться Опубликовано 25 декабря, 2015 Ну для Virtex 6 это точно копейки. Можешь промоделировать, вывести в файл и проверить всё в Octave/matlab. По хорошему сперва надо на сишной или матлабовской модели всё проверить, потом уже имплементировать на HDL и смотреть как это будет разводиться и сколько места занимать в FPGA. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Rotor Опубликовано 25 декабря, 2015 Автор Поделиться Опубликовано 25 декабря, 2015 Получается, я генерирую 12 вот таких последовательностей (правильно?): 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'); ---- вот здесь у меня стоит вопрос и сомнения, если например нач значение signal tmp: std_logic_vector(31 downto 0):= (tmp(0) => '0' others=>'1') elsif (clk'event and clk='1') then ------ tmp примет значения others=>'0' раньше чем 2^32-1, я сново присвою ему (tmp(0) => '0' others=>'1')- это вообще не хорошо мне кажется?? for i in 0 to 30 loop ---- Если все значения будут=0, то регистр будет молотить эти нули в пустую и плакала ПСП 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; Что-то не так мне кажется я написал LFSR, И еще вопрос как вывести файл и промоделиовать потом, матлаб есть, но я с ним совершенно не дружу? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vascom Опубликовано 25 декабря, 2015 Поделиться Опубликовано 25 декабря, 2015 А я не дружу с VHDL. Вот если бы Verilog, то посмотрел бы код. Пока только алгоритмически предлагаю. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Rotor Опубликовано 25 декабря, 2015 Автор Поделиться Опубликовано 25 декабря, 2015 Надо как-то выколоть tmp (others=>'0'), я же верно мыслю Как много я назадавал вопросов 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vascom Опубликовано 25 декабря, 2015 Поделиться Опубликовано 25 декабря, 2015 Ну задай разные начальные значения, которые будут генерировать разные м-последовательности. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Rotor Опубликовано 25 декабря, 2015 Автор Поделиться Опубликовано 25 декабря, 2015 Завтра,так и сделаю и буду держать в курсе 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Meteor77 Опубликовано 26 декабря, 2015 Поделиться Опубликовано 26 декабря, 2015 Ну задай разные начальные значения, которые будут генерировать разные м-последовательности. Что бы генераторы не были коррелированы надо иметь разные значения обратной связи, а не начальные значения. Петли ОС у ТС задаются строкой tmp(0) <= tmp(31) xor tmp(21) xor tmp(1) xor tmp(0); Вот в ней надо менять разные индексы кроме "старшего", т.е. того, в направлении которого идет сдвиг 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.