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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Генератор шума на AVR, Как сделать на ASM
Nanobyte
сообщение Dec 4 2006, 20:14
Сообщение #1


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Здравствуйте, коллеги.
Необходимо генерировать шумовой сигнал на одном из выводов МК. Как я понимаю, используя генератор псевдослучайных чисел, можно получить требуемый результат. Разрядность числа вполне устроит 16 бит. Поиск по форуму даёт реализации только на Си.
Вопрос: как это сделать, используя ассемблер? Может, кто нибудь из Вас уже делал такой ГПСЧ ?
Спасибо.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Dec 4 2006, 20:35
Сообщение #2


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Смотреть надо реализацию для писюков или дизассемблировать.
Как альтернативу могу предложить подвесить на АЦП стабилитрон (по-моему из диодов они самые шумные), получиться уже не псевдо, а по настоящему случайное число.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 4 2006, 20:51
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Nanobyte @ Dec 4 2006, 20:14) *
Поиск по форуму даёт реализации только на Си.

Неужели это такая проблема - переписать кусочек из десятка строк на ассемблере? angry.gif
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Dec 4 2006, 21:00
Сообщение #4


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Цитата(aaarrr @ Dec 4 2006, 21:51) *
Неужели это такая проблема - переписать кусочек из десятка строк на ассемблере? angry.gif

Да как-то не дружу я с Си. Все его чёрточки и тильдочки режут глаз (это, конечно, IMHO smile.gif ). А если серьёзно, то перевод из Си в ASM будет явно неоптимальным путём.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 4 2006, 21:06
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Почему? Восстанавливаем алгоритм -> реализуем на асм. Где ж тут "неоптимальность"? smile.gif
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Dec 4 2006, 21:08
Сообщение #6


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Цитата(aaarrr @ Dec 4 2006, 22:06) *
Почему? Восстанавливаем алгоритм -> реализуем на асм. Где ж тут "неоптимальность"? smile.gif

Ключевое слово "Восстанавливаем".


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
antoker
сообщение Dec 4 2006, 21:11
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 27-11-06
Из: Tromsoe, Norway
Пользователь №: 22 821



Цитата(Nanobyte @ Dec 4 2006, 20:14) *
Здравствуйте, коллеги.
Необходимо генерировать шумовой сигнал на одном из выводов МК. Как я понимаю, используя генератор псевдослучайных чисел, можно получить требуемый результат. Разрядность числа вполне устроит 16 бит. Поиск по форуму даёт реализации только на Си.
Вопрос: как это сделать, используя ассемблер? Может, кто нибудь из Вас уже делал такой ГПСЧ ?
Спасибо.



А какой именно тип шума хотите получить, в смысле PDF какой у него должен быть? И в спектральном плане что надо, белый или нет? Или пофиг? По поводу реализации кода в uC asm подкидываю идею в плане генерации чисел, по методу фон Ньюмана-или-какевотам(самый простой):

1. берете seed, ну например 1111
2. sqrt(1111)
3. убираете две цифры в центре
4. получили random число
5. полученное число опять возводите в степень
6. опять убираете две цифры в центре и т.п.

Проблема с этим алгоритмом - комбинации повторяются довольно часто.

Можно усложнить задачу другим алгоритмом типа Mersenne twister/generalized feedback shift register и т.п, но выбирать тебе.
Go to the top of the page
 
+Quote Post
antoker
сообщение Dec 4 2006, 21:22
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 27-11-06
Из: Tromsoe, Norway
Пользователь №: 22 821



небольшая добавочка к моему предыдущем посту (пока курил, задумался wink.gif )
ньюмановский метод будет немножко сложно накалякать в асм ибо sqr(.) будет
много ресурсов занимать, а вот feedback shiftregister не особо, вот ТУТ довольно толково описано как его реализовать в математическом смысле. Будут проблемы в написании асм, обращайся.
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Dec 4 2006, 21:29
Сообщение #9


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Цитата(antoker @ Dec 4 2006, 22:11) *
А какой именно тип шума хотите получить, в смысле PDF какой у него должен быть? И в спектральном плане что надо, белый или нет? Или пофиг?

Этот генератор будет использоваться для музыкального синтеза, поэтому полоса частот будет ограничена сверху 5 кГц, шум белый.
Я склоняюсь к к варианту генерации шума (числа) методом сдвиговых регистров с обратными связями.
Вариант, который предложил beer_warrior хорош, но требует дополнительных внешних элементов, тогда и AVR будет просто не нужен.
И ещё. Метод генерации ПСЧ очень похож на вычисление CRC, те-же сдвиги и суммирование. Я правильно понимаю ?


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
muravei
сообщение Dec 4 2006, 21:31
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(aaarrr @ Dec 4 2006, 21:06) *
Почему? Восстанавливаем алгоритм

Чего там восстанавливать - берете "Искусство схемотехники" т.2 стр.94 и вперед!
Сдвигающий р-р 16 бит 4, 13 , 15 р-ды на m2 и на вход (в перенос) , ну и в начале, чтобы не ноль.
И весь алгоритм
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 4 2006, 21:42
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Nanobyte @ Dec 4 2006, 21:29) *
И ещё. Метод генерации ПСЧ очень похож на вычисление CRC, те-же сдвиги и суммирование. Я правильно понимаю ?

Правильно.

Цитата(muravei @ Dec 4 2006, 21:31) *
Чего там восстанавливать - берете "Искусство схемотехники" т.2 стр.94 и вперед!
Сдвигающий р-р 16 бит 4, 13 , 15 р-ды на m2 и на вход (в перенос) , ну и в начале, чтобы не ноль.
И весь алгоритм

Тут проблема из C на асм переложить - исходник ищут - а Вы книжки читать предлагаете wink.gif
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Dec 4 2006, 21:48
Сообщение #12


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Цитата(muravei @ Dec 4 2006, 22:31) *
Чего там восстанавливать - берете "Искусство схемотехники" т.2 стр.94 и вперед!
Сдвигающий р-р 16 бит 4, 13 , 15 р-ды на m2 и на вход (в перенос) , ну и в начале, чтобы не ноль.
И весь алгоритм

Так алгоритм как таковой неясностей не имеет. Меня интересовала практическая реалазация на ASM AVR.

Цитата(antoker @ Dec 4 2006, 22:22) *
... а вот feedback shiftregister не особо, вот ТУТ довольно толково описано как его реализовать в математическом смысле. Будут проблемы в написании асм, обращайся.

Спасибо Вам, antoker за толковую ссылку и предложение помощи. Именно на ASM у меня сложностей, надеюсь, не будет. Буду писАть.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
Oldring
сообщение Dec 4 2006, 22:03
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Nanobyte @ Dec 4 2006, 21:29) *
И ещё. Метод генерации ПСЧ очень похож на вычисление CRC, те-же сдвиги и суммирование. Я правильно понимаю ?


Генератор случайных чисел на LFSR - это абсолютно то же самое, нахождение остатка от деления многочленов. Только многочлен желательно выбрать примитивный, чтобы получить ПСП максимальной длины.

И. кстати, что такое "разрядность числа 16 бит на одном из выводов МК"?


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Dec 4 2006, 22:12
Сообщение #14


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Цитата(Oldring @ Dec 4 2006, 23:03) *
И. кстати, что такое "разрядность числа 16 бит на одном из выводов МК"?

Прошу прощения, неясно выразился. Имелось в виду то, что для генерации шума используется 16-разрядное случайное число, побитно выводимое на пин МК при каждом вызове подпрограммы генерации.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
Oldring
сообщение Dec 4 2006, 22:16
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(antoker @ Dec 4 2006, 21:11) *
1. берете seed, ну например 1111
2. sqrt(1111)
3. убираете две цифры в центре
4. получили random число
5. полученное число опять возводите в степень
6. опять убираете две цифры в центре и т.п.


И разрядность числа возрастает бесконечно biggrin.gif
В любом случае, это наверняка очень плохой генератор псевдослучайных чисел, раз Кнут о нем не упоминает laugh.gif

Цитата(Nanobyte @ Dec 4 2006, 22:12) *
Цитата(Oldring @ Dec 4 2006, 23:03) *
И. кстати, что такое "разрядность числа 16 бит на одном из выводов МК"?

Прошу прощения, неясно выразился. Имелось в виду то, что для генерации шума используется 16-разрядное случайное число, побитно выводимое на пин МК при каждом вызове подпрограммы генерации.


Тогда используйте LFSR и не парьтесь. На каждый вызов подпрограммы (получение одного бита) - сдвиг на один бит и с вероятностью 1/2 XOR регистра с константой. Какой требуется минимальный период повторения последовательности?


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 10:59
Рейтинг@Mail.ru


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