Генератор равномерно распределенных случайных чисел.
Хотя формирование случайного числа, строго говоря, не описывается функцией, эта операция является полезной для многих приложений. Одним из таких приложений являются высокоскоростные модемы, в которых генератор случайных чисел может использоваться в качестве обучающего сигнала для адаптивного эквалайзера (корректора AЧX). Формирование случайных чисел на компьютере подразумевает, конечно, вычисление функции, аппроксимирующей случайное число. Таких функций предложено множество. Реализация, представленная ниже, основывается на методе линейных конгруэнтных последовательностей согласования, который использует следующее уравнение:
х(n+1) = (a×x(n) +c) mod m, где mod – операция получения остатка от целочисленного деления на m.
Начальное значение х(0) называется ядром (seed) и является важным, так как при правильном выборе а и с, все m значений формируются до того, как выходная последовательность начнёт повторяться. Последовательность случайных чисел, вычисляемая по приведенной выше формуле, имеет равномерное распределение в пределах от 0 до m-1. Конечно, различные seed значения должны быть использованы для получения отличающихся реализаций последовательностей. Выбирая значение модуля m = 232 , можно гарантировать получение очень длинной (без повторений) последовательности и иметь удобный модуль для ADSP-21xx.
Программа для ADSP-21xx для вычисления случайных чисел основана на методе линейного согласования. Значения а и с, которые используются в этой программе, а = 1664525 и с = 32767 были выбраны в соответствии с правилом, данным Кнутом (Knuth). Начальное значение - ядро хранится в регистре SR перед вызовом программы для первого прохода и первое число, получаемое с помощью этой программы, равно значению ядра. Случайные числа возвращаются в регистр AR в то время, как последовательность значений ядра - в регистре SR. Заметим, что хотя только старшие 16 значащих бит 32 разрядного значения х используются как случайные числа в этой программе, любые или все биты могут также использоваться. Однако, младшие значащие биты х(n) являются менее случайными, чем старшие. Таким образом, когда требуется получить случайное число с разрядностью b, всегда используют b старших значащих разрядов.
Подпрограмма требует для вычислений 10N+4 циклов, где N - количество случайных чисел, которое требуется получить. Например, 216 (65535) случайных чисел при тактовой частоте 12,5 Мгц ADSP-2101 вычислит за 52.43 мсек. Вычисление же 232 случайных чисел потребует почти одного часа.
ЭКСПЕРИМЕНТ
В эксперименте предстоит формировать случайную последовательность с частотой дискретизации 8 КГц.
1. Программа EXPMT.ASM будет формировать случайную последовательность, используя подпрограмму RANDOM.ASM. Настройте регистры таймера таким образом, чтобы обеспечить частоту дискретизации 8 кГц.
2. Чтобы получить и рассмотреть последовательность отсчётов шума в имитаторе , следует воспользоваться приёмами, описанными в ЛР6: организовать формирование в памяти массива выходных данных.
3. Чтобы сформировать случайные числа с распределением Гаусса, можно сложить 12 чисел, полученных от генератора случайных чисел с равномерным распределением и вычесть 6. Среднее для генератора с равномерным распределением равно 1/2, так что вычитание 6-и из суммы 12 значений даст в результате среднее точно 0. Так как дисперсия первоначального равномерного распределения равно 1/12, то 12 независимых чисел дают распределение с дисперсией равной точно 1. Программа для формирования случайных чисел с распределением Гаусса не обойдётся без масштабирования.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.