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

 
 
> Генератор шума на 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
 
Start new topic
Ответов
antoker
сообщение Dec 4 2006, 21:11
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 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
Oldring
сообщение Dec 4 2006, 22:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Nanobyte
сообщение Dec 4 2006, 22:28
Сообщение #4


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

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



Цитата(Oldring @ Dec 4 2006, 23:16) *
Тогда используйте LFSR и не парьтесь. На каждый вызов подпрограммы (получение одного бита) - сдвиг на один бит и с вероятностью 1/2 XOR регистра с константой. Какой требуется минимальный период повторения последовательности?

1. А что означает "сдвиг на один бит и с вероятностью 1/2 XOR регистра "?
2. Период повторения для 16 бит будет 65535 (или 32767), что для звуковых целей вполне устроит.


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


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Nanobyte @ Dec 4 2006, 22:28) *
2. Период повторения для 16 бит будет 65535 (или 32767), что для звуковых целей вполне устроит.

Нет, не будет (65536 или 32768)
У IAR при старте генератора псевдослучайных чисел с 1 зацикливание происходит примерно
после 2000 значений, при старте с 2 чуть побольше, но тоже не так уж и много.

Если у Вас есть реализация CRC16 на asm, то попробуйте просто подсовывать ей значения в
цикле например так:
1,2,3,4,.....
ну или так:
1,2,3,5,8,13,21,.....
ну или так:
выберите максимальное простое число xxxxx в диапазоне 0-65535
с него и начните подсовывать
xxxxx, 2*xxxxx/65536, 3*xxxxx/65536, ....

Типа, вариантов куча.
Просто нужно протестировать какой длинны последовательность Вы будете полчать
до зацикливания.
Удачи.
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Dec 5 2006, 02:28
Сообщение #6


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

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



Цитата(singlskv @ Dec 5 2006, 03:12) *
Нет, не будет (65536 или 32768)
У IAR при старте генератора псевдослучайных чисел с 1 зацикливание происходит примерно
после 2000 значений, при старте с 2 чуть побольше, но тоже не так уж и много.

Ну почему-же не будет? Кусочек кода, приведённый Oldring, я только что попробовал. Работает вроде-бы нормально (детально не проверял). Самое главное, уяснил принцип, теперь подберу коэффициенты для получения последовательности максимальной длины. Хотя, на слух, меня вполне устраивает шум, сгенерированный приведённым в примере кодом.
Ну, а что касается IAR, то его функции и библиотеки могут быть просто недоработаны, или написаны студентами в качестве курсовой работы (IMHO, конечно). Сталкивался с такими примерами для компонентов Delphi. Отбил весь лоб на поле с граблями, плюнул и написал необходимое сам.


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


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Nanobyte @ Dec 5 2006, 02:28) *
Цитата(singlskv @ Dec 5 2006, 03:12) *
Нет, не будет (65536 или 32768)
У IAR при старте генератора псевдослучайных чисел с 1 зацикливание происходит примерно
после 2000 значений, при старте с 2 чуть побольше, но тоже не так уж и много.

Ну почему-же не будет? Кусочек кода, приведённый Oldring, я только что попробовал. Работает вроде-бы нормально (детально не проверял). Самое главное, уяснил принцип, теперь подберу коэффициенты для получения последовательности максимальной длины. Хотя, на слух, меня вполне устраивает шум, сгенерированный приведённым в примере кодом.
Ну, а что касается IAR, то его функции и библиотеки могут быть просто недоработаны, или написаны студентами в качестве курсовой работы (IMHO, конечно). Сталкивался с такими примерами для компонентов Delphi. Отбил весь лоб на поле с граблями, плюнул и написал необходимое сам.

Попробуйте выяснить какая у Вас получится длинна последовательности 16битнных значений.
ИМХО, в IAR должно получаться не меньше.
А то, что на слух Вас устраивает, так это всего лишь ознаает что Вы изначально завышали свои
требования к случайности сигнала.
Тот код который Вам привел Oldring, это ИМХО, некоторые вариации на темму CRC8 smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Nanobyte   Генератор шума на AVR   Dec 4 2006, 20:14
- - beer_warrior   Смотреть надо реализацию для писюков или дизассемб...   Dec 4 2006, 20:35
- - aaarrr   Цитата(Nanobyte @ Dec 4 2006, 20:14) Поис...   Dec 4 2006, 20:51
|- - Nanobyte   Цитата(aaarrr @ Dec 4 2006, 21:51) Неужел...   Dec 4 2006, 21:00
- - aaarrr   Почему? Восстанавливаем алгоритм -> реализуем н...   Dec 4 2006, 21:06
|- - Nanobyte   Цитата(aaarrr @ Dec 4 2006, 22:06) Почему...   Dec 4 2006, 21:08
|- - muravei   Цитата(aaarrr @ Dec 4 2006, 21:06) Почему...   Dec 4 2006, 21:31
|- - antoker   небольшая добавочка к моему предыдущем посту (пока...   Dec 4 2006, 21:22
||- - Nanobyte   Цитата(muravei @ Dec 4 2006, 22:31) Чего ...   Dec 4 2006, 21:48
|- - Nanobyte   Цитата(antoker @ Dec 4 2006, 22:11) А как...   Dec 4 2006, 21:29
||- - Oldring   Цитата(Nanobyte @ Dec 4 2006, 21:29) И ещ...   Dec 4 2006, 22:03
||- - Nanobyte   Цитата(Oldring @ Dec 4 2006, 23:03) И. кс...   Dec 4 2006, 22:12
|||- - Oldring   Цитата(singlskv @ Dec 5 2006, 02:55) А то...   Dec 5 2006, 11:16
||- - Oldring   Цитата(Nanobyte @ Dec 5 2006, 02:28) Ну п...   Dec 5 2006, 10:00
||- - singlskv   Цитата(Oldring @ Dec 5 2006, 10:00) Если ...   Dec 5 2006, 15:04
|- - antoker   Цитата(Oldring @ Dec 4 2006, 22:16) И раз...   Dec 5 2006, 00:42
- - aaarrr   Цитата(Nanobyte @ Dec 4 2006, 21:29) И ещ...   Dec 4 2006, 21:42
- - Oldring   Это означает, что если значение очередного бита ра...   Dec 4 2006, 22:39
|- - Nanobyte   Цитата(Oldring @ Dec 4 2006, 23:39) Интер...   Dec 4 2006, 22:48
- - Oldring   Цитатаldi r19, #87h lsl r16 sbrc r18, 7 eor r16...   Dec 4 2006, 22:58
|- - Nanobyte   Цитата(Oldring @ Dec 4 2006, 23:58) Как г...   Dec 4 2006, 23:07
- - add   Странно что поиск ничего не дал?! http://ele...   Dec 5 2006, 09:39
|- - Nanobyte   Цитата(add @ Dec 5 2006, 10:39) Странно ч...   Dec 5 2006, 12:25
- - _Bill   Цитата(Nanobyte @ Dec 4 2006, 20:14) Здра...   Dec 5 2006, 10:27
- - Oldring   Цитата(_Bill @ Dec 5 2006, 10:27) Я сдела...   Dec 5 2006, 11:01
- - _Bill   Цитата(Oldring @ Dec 5 2006, 11:01) Цитат...   Dec 5 2006, 11:35
- - Oldring   Цитата(_Bill @ Dec 5 2006, 11:35) Вообще-...   Dec 5 2006, 11:42
- - _Bill   Цитата(Oldring @ Dec 5 2006, 11:42) Цитат...   Dec 5 2006, 12:33
- - Oldring   Цитата(_Bill @ Dec 5 2006, 12:33) И счита...   Dec 5 2006, 12:35
- - _Bill   Цитата(Oldring @ Dec 5 2006, 12:35) Цитат...   Dec 5 2006, 14:14
- - Oldring   Цитата(_Bill @ Dec 5 2006, 14:14) Цитата(...   Dec 5 2006, 18:56
- - singlskv   Цитата(Oldring @ Dec 5 2006, 18:56) Где-т...   Dec 5 2006, 20:54


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 23:52
Рейтинг@Mail.ru


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