|
Генератор шума на AVR, Как сделать на ASM |
|
|
|
Dec 4 2006, 21:11
|
Участник

Группа: Новичок
Сообщений: 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 и т.п, но выбирать тебе.
|
|
|
|
|
Dec 4 2006, 21:22
|
Участник

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

|
небольшая добавочка к моему предыдущем посту (пока курил, задумался  ) ньюмановский метод будет немножко сложно накалякать в асм ибо sqr(.) будет много ресурсов занимать, а вот feedback shiftregister не особо, вот ТУТ довольно толково описано как его реализовать в математическом смысле. Будут проблемы в написании асм, обращайся.
|
|
|
|
|
Dec 4 2006, 21:29
|

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

|
Цитата(antoker @ Dec 4 2006, 22:11)  А какой именно тип шума хотите получить, в смысле PDF какой у него должен быть? И в спектральном плане что надо, белый или нет? Или пофиг? Этот генератор будет использоваться для музыкального синтеза, поэтому полоса частот будет ограничена сверху 5 кГц, шум белый. Я склоняюсь к к варианту генерации шума (числа) методом сдвиговых регистров с обратными связями. Вариант, который предложил beer_warrior хорош, но требует дополнительных внешних элементов, тогда и AVR будет просто не нужен. И ещё. Метод генерации ПСЧ очень похож на вычисление CRC, те-же сдвиги и суммирование. Я правильно понимаю ?
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Dec 4 2006, 21:48
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 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: производится без предупреждения
|
|
|
|
|
Dec 4 2006, 22:12
|

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

|
Цитата(Oldring @ Dec 4 2006, 23:03)  И. кстати, что такое "разрядность числа 16 бит на одном из выводов МК"? Прошу прощения, неясно выразился. Имелось в виду то, что для генерации шума используется 16-разрядное случайное число, побитно выводимое на пин МК при каждом вызове подпрограммы генерации.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Dec 4 2006, 22:16
|

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

|
Цитата(antoker @ Dec 4 2006, 21:11)  1. берете seed, ну например 1111 2. sqrt(1111) 3. убираете две цифры в центре 4. получили random число 5. полученное число опять возводите в степень 6. опять убираете две цифры в центре и т.п. И разрядность числа возрастает бесконечно В любом случае, это наверняка очень плохой генератор псевдослучайных чисел, раз Кнут о нем не упоминает  Цитата(Nanobyte @ Dec 4 2006, 22:12)  Цитата(Oldring @ Dec 4 2006, 23:03)  И. кстати, что такое "разрядность числа 16 бит на одном из выводов МК"? Прошу прощения, неясно выразился. Имелось в виду то, что для генерации шума используется 16-разрядное случайное число, побитно выводимое на пин МК при каждом вызове подпрограммы генерации. Тогда используйте LFSR и не парьтесь. На каждый вызов подпрограммы (получение одного бита) - сдвиг на один бит и с вероятностью 1/2 XOR регистра с константой. Какой требуется минимальный период повторения последовательности?
--------------------
Пишите в личку.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|