Цифровые сигнальные процессоры Вопросы, связанные с применением цифровых сигнальных процессоров: программирование, отладочные средства, алгоритмы... |
10.07.2010, 15:50
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Быстрый генератор белого шума 8 бит
Посоветуйте пожалуйста быстрый псевдослучайный генератор белого шума, на выходе которого имеется байт (8 бит) при каждом вызове функции генерации.
Желательно чтобы он не выходил за пределы байтовой/двухбайтовой арифметики, так как требуется большая скорость.
Период повторения последовательности не имеет значения, главное чтобы выходной шум был белый, т.е. нормально-распределенный или как это иногда называют - униформный.
__________________
.
В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
|
10.07.2010, 17:09
|
|
Супер-модератор
Регистрация: 08.09.2007
Адрес: Kyiv, Ukraine
Сообщений: 7,967
Сказал спасибо: 429
Сказали Спасибо 3,939 раз(а) в 1,690 сообщении(ях)
|
Re: Быстрый генератор белого шума 8 бит
Уважаемый alexgap, Хоровиц и Хилл "Искусство схемотехники", 2-й том (по 3-му изд.), самый первый раздел из него. Сам делал по нему псевдослучайную "мигалку" для сценического света. На 255 и на 63 шага (вложение). 256-й или 64-й не используются, т.к. комбинация всех нулей ИЛИ всех единиц (зависит от логики) является "запрещенной" и из последовательности элиминируется схемотехнически, т.к. генератор, попав в это состояние, из него уже сам не выходит.
Как Вы, надеюсь, понимаете, 255 шагов - слишком мало для действительно случайного 8-разрядного кода. Поэтому обычно делают генератор бОльшей разрядности, а код снимают с любого удобного выхода сдвигового регистра, ведь для формирования "белого шума" нужен всего один вывод, сигнал с которого подается на широтный модулятор (обычная RC-цепочка).
__________________
Выслушай и противную сторону, даже если она тебе и противна!..
|
|
|
Сказали "Спасибо" Falconist
|
|
|
10.07.2010, 20:19
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Re: Быстрый генератор белого шума 8 бит
Спасибо Falconist, ваша схема заставила вспомнить о регистрах сдвига с линейной обратной связью.
Нашел статью в Википедии, там есть примеры кода для 16 и 32 бит, и есть все распространенные полиномы для разной битности. Используя эту справочную информацию я написал функцию, которая реализует 8-битовый регистр сдвига с линейной обратной связью на основе характеристического полинома x^8 + x^6 + x^5 + x^4 + 1. Вот код на C, может быть кому-нибудь еще пригодится:
Код:
|
static unsigned char GaloisLfsr(unsigned char lfsr)
{
return (lfsr ›› 1) ^ (0 - (lfsr & 1u) & 0xb8u);
} |
Эта функция используется так:
Код:
|
unsigned char lfsr = 1;
lfsr = GaloisLfsr(lfsr);
/* Получили в lfsr первое псевдослучайное число */
lfsr = GaloisLfsr(lfsr);
/* Получили в lfsr второе псевдослучайное число */
...
/* и так далее сколько угодно раз */ |
__________________
.
В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
Сказали "Спасибо" alexgap
|
|
|
10.07.2010, 22:32
|
|
Гражданин KAZUS.RU
Регистрация: 13.07.2005
Сообщений: 602
Сказал спасибо: 14
Сказали Спасибо 40 раз(а) в 19 сообщении(ях)
|
Re: Быстрый генератор белого шума 8 бит
Почитайте в этой ветке:
http://vrtp.ru/index.php?showtopic=5667&st=60
Тут материал про М последовательности:
http://vrtp.ru/index.php?showtopic=9500
При тактовой 9,6 МГц для tiny13 на асме мне удалось получить полосу шума 240кГц при 32 разрядном "регистре сдвига" (правда немного отвлекала задача получения пилообразного напряжения с помощью ШИМ).
ps ZX Spectrum у меня был и есть...
Последний раз редактировалось smg123; 10.07.2010 в 22:56.
|
|
|
|
10.07.2010, 22:57
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Re: Быстрый генератор белого шума 8 бит
Спасибо, уже сделал, работает как надо.
__________________
.
В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:02.
|
|