|
Генератор шума на AVR, Как сделать на ASM |
|
|
|
 |
Ответов
|
Dec 5 2006, 10:27
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Nanobyte @ Dec 4 2006, 20:14)  Здравствуйте, коллеги. Необходимо генерировать шумовой сигнал на одном из выводов МК. Как я понимаю, используя генератор псевдослучайных чисел, можно получить требуемый результат. Разрядность числа вполне устроит 16 бит. Поиск по форуму даёт реализации только на Си. Вопрос: как это сделать, используя ассемблер? Может, кто нибудь из Вас уже делал такой ГПСЧ ? Спасибо. Я сделал генератор ПСЧ на 31 бит так: Код name Rand ; ; ; File: rand.s90 ; ; 08-Sep-05 BK Initial edit ; 28-Sep-05 BK Last update ; $fmacros.inc
rseg CODE ; Code segment ; ; ENTRY$ Rand ldi r30, LOW(_rand) ; Point at random number ldi r31, HIGH(_rand) ; tst r16 ; See the seed value breq _1 ; Branch if zero
clr r17 ; Initialize the generator clr r18 ; and return initial value clr r19 ; rjmp _2 ;
_1: ; Calculate new random number ld r16, Z ; Load the previous value into registers ldd r17, Z+1 ; ldd r18, Z+2 ; ldd r19, Z+3 ; eor r16, r19 ; Calculate feedback bit bst r16, 6 ; eor r16, r19 ; lsl r16 ; Shift the number left rol r17 ; rol r18 ; rol r19 ; andi r19, ~(1<<7) ; Clear high (sign) bit bld r16, 0 ; Insert feedback bit in the new value _2: st Z, r16 ; Save the number std Z+1, r17 ; std Z+2, r18 ; std Z+3, r19 ; ret
rseg NEAR_Z ; Data segment _rand: ; Random number ds 4 ;
end
|
|
|
|
|
Dec 5 2006, 11:01
|

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

|
Цитата(_Bill @ Dec 5 2006, 10:27)  Я сделал генератор ПСЧ на 31 бит так: Код eor r16, r19 ; Calculate feedback bit bst r16, 6 ; eor r16, r19 ; Хотите сказать, что полином 0x80000041 примитивный? Кроме того, Вы используете из результата на каждой итерации 1 бит или 31?
--------------------
Пишите в личку.
|
|
|
|
|
Dec 5 2006, 11:35
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Oldring @ Dec 5 2006, 11:01)  Цитата(_Bill @ Dec 5 2006, 10:27)  Я сделал генератор ПСЧ на 31 бит так: Код eor r16, r19 ; Calculate feedback bit bst r16, 6 ; eor r16, r19 ; Хотите сказать, что полином 0x80000041 примитивный? Кроме того, Вы используете из результата на каждой итерации 1 бит или 31? Вообще-то, на каждой итерации я использую все 31 бит. Что касается полинома, то я взял номера отводов из таблицы, приведенной в статье "Генеатор белого шума на сдвигающем регистре с обратной связью" (Электроника, №11, 1976). Там имеется ссылка на: S.Golomb "Shift Register Sequences", 1967. Для 31-разрядного регистра имеется несколько вариантов включения: x30 + x2, x30 + x5, x30 + x6, x30 + x12. Я выбрал варианте x30 + x6, поскольку не требуется дополнительных сдвигов для выравнивания разрядов.
|
|
|
|
|
Dec 5 2006, 12:33
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Oldring @ Dec 5 2006, 11:42)  Цитата(_Bill @ Dec 5 2006, 11:35)  Вообще-то, на каждой итерации я использую все 31 бит.
Тогда это очень предсказуемый генератор. Потому что с вероятностью 1/2 очередное число ровно в 2 раза больше предыдущего. Согласен, надо брать 1 бит. И считать количество 1-бит на некотором разряде за определенное количество циклов, скажем, за 256.
|
|
|
|
|
Dec 5 2006, 14:14
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Oldring @ Dec 5 2006, 12:35)  Цитата(_Bill @ Dec 5 2006, 12:33)  И считать количество 1-бит на некотором разряде за определенное количество циклов, скажем, за 256.
Это зачем? Для получения случайных чисел с равномерным распределением в диапазоне 0 .. 255. Или нет?
|
|
|
|
Сообщений в этой теме
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 Цитата(Nanobyte @ Dec 4 2006, 20:14) Здра... Dec 4 2006, 21:11 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 Цитата(antoker @ Dec 4 2006, 21:11) 1. бе... Dec 4 2006, 22:16  Nanobyte Цитата(Oldring @ Dec 4 2006, 23:16) Тогда... Dec 4 2006, 22:28   singlskv Цитата(Nanobyte @ Dec 4 2006, 22:28) 2. П... Dec 5 2006, 02:12    Nanobyte Цитата(singlskv @ Dec 5 2006, 03:12) Нет,... Dec 5 2006, 02:28     singlskv Цитата(Nanobyte @ Dec 5 2006, 02:28) Цита... Dec 5 2006, 02:55      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       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
|
|
|