|
Генератор шума на 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, 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 регистра с константой. Какой требуется минимальный период повторения последовательности?
--------------------
Пишите в личку.
|
|
|
|
|
Dec 4 2006, 22:28
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 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: производится без предупреждения
|
|
|
|
|
Dec 5 2006, 02:12
|
дятел
    
Группа: Свой
Сообщений: 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, .... Типа, вариантов куча. Просто нужно протестировать какой длинны последовательность Вы будете полчать до зацикливания. Удачи.
|
|
|
|
|
Dec 5 2006, 02:28
|

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

|
Цитата(singlskv @ Dec 5 2006, 03:12)  Нет, не будет (65536 или 32768) У IAR при старте генератора псевдослучайных чисел с 1 зацикливание происходит примерно после 2000 значений, при старте с 2 чуть побольше, но тоже не так уж и много. Ну почему-же не будет? Кусочек кода, приведённый Oldring, я только что попробовал. Работает вроде-бы нормально (детально не проверял). Самое главное, уяснил принцип, теперь подберу коэффициенты для получения последовательности максимальной длины. Хотя, на слух, меня вполне устраивает шум, сгенерированный приведённым в примере кодом. Ну, а что касается IAR, то его функции и библиотеки могут быть просто недоработаны, или написаны студентами в качестве курсовой работы (IMHO, конечно). Сталкивался с такими примерами для компонентов Delphi. Отбил весь лоб на поле с граблями, плюнул и написал необходимое сам.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Dec 5 2006, 02:55
|
дятел
    
Группа: Свой
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|