Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Сафоненко Практикум по интерфейсам последователной передачи 2012

.pdf
Скачиваний:
3
Добавлен:
12.11.2022
Размер:
4.56 Mб
Скачать

шесть типов перечислены выше), свойство Data.AbsTime содержит время генерации данного события в формате год-месяц-день час:минута:секунда. Рассмотрим пример свойства. Для этого изменим функцию alarm следующим образом:

function alarm (object, event) disp('Alarm!');

object event.Type

event.AbsTime

Дополнительные свойства выведут сообщения о состоянии канала и времени возникновения события.

Напомним, что при описании свойств необходимо учитывать регистр строчных и прописных символов.

Используем событие Timer для нашего примера:

>> com1.timerfcn=@alarm; Alarm!

Serial Port Object : Serial-COM1

Communication Settings

 

 

 

Port:

COM1

 

 

BaudRate:

9600

 

 

Terminator:

'LF'

 

 

Communication State

 

 

 

 

Status:

open

 

 

 

RecordStatus:

off

 

 

Read/Write State

 

 

 

 

TransferStatus:

idle

 

 

 

BytesAvailable:

0

 

 

 

ValuesReceived:

0

 

 

 

ValuesSent:

0

 

 

ans =

 

 

 

 

Timer

 

 

 

ans =

 

 

 

 

2010

1

2

8

0

0

 

 

 

71

Остановим работу события:

>> com1.timerfcn='';

Отчет системы содержит параметры переменной object, в которой содержится основная информация об объекте. Нас информировали о том, что событие произошло с портом COM1:

Serial Port Object : Serial-COM1

Communication Settings

 

Port:

COM1

BaudRate:

9600

Terminator:

'LF'

Communication State

 

Status:

open

RecordStatus:

off

Read/Write State

 

TransferStatus:

idle

BytesAvailable:

0

ValuesReceived:

0

ValuesSent:

0

Затем следует значение свойства Type, в котором фиксируется тип события (произошло событие Timer):

ans =

Timer

В конце приведены значения дата/время генерации события (свойство Data.AbsTime). Событие произошло 2 января 2010 года в

8:00:00 утра: ans =

 

2010

1

2

8

0

0

 

 

 

72

Вышеописанные свойства определены для всех шести событий, но для двух событий Error и PinStatus определены еще дополнительные свойства. Для свойства Error – краткое сообщение, а для PinStatus – тип сигнала, который изменил свое значение, а также значение этого сигнала. Все эти свойства доступны для чтения и хранятся в структуре event.

Обращение event.Data.Message выведет текст сообщения Error об ошибке.

Обращение event.Data.Pin выведет имя сигнала, изменившего свое значение, обращение event.Data.PinValue выведет значение сигнала.

События возникают для каждого сигнала в соответствии с очередностью.

Подробный перечень свойств объектов Serial и Timer приведен в приложении 3.

73

Глава 3. ПРИМЕНЕНИЕ МЕТОДОВ МАССОВОГО ОБСЛУЖИВАНИЯ ДЛЯ ОЦЕНКИ ПОКАЗАТЕЛЕЙ КАЧЕСТВА ИНТЕРФЕЙСА

Построение моделей случайных процессов или величин с наперед заданными характеристиками является мощным инструментом компьютерного исследования сложных систем. Стохастические характеристики могут быть заданы априорно или на основе экспериментальных данных. Качество модели случайного процесса оценивается по критериям соответствия свойств исходного случайного процесса характеристикам модели, экономичности модели с точки зрения затрат машинного времени, гибкости и универсальности варьирования статистических характеристик модели. Большей информативностью, по сравнению с такими статистическими характеристиками, как математическое ожидание и дисперсия, обладает закон распределения вероятности случайной величины X.

Известны два основных метода моделирования случайных процессов: натурное и математическое моделирование. Физические генераторы шумов позволяют получать натурные реализации случайных процессов. Сигналы физических датчиков имеют стохастическую природу, изученную в ходе долголетней практики. Широкое использование физических генераторов сопряжено со сложностью реализации датчиков. Точное повторение реализаций моделируемых процессов оказывается возможным только с помощью перезаписи воздействий во внешнюю память компьютера.

При математическом моделировании случайный процесс получают с помощью детерминированных функций случайных величин. Математическое моделирование позволяет достичь разумного компромисса между точностью воспроизведения заданных вероятностных параметров и сложностью программной реализации алгоритма имитации.

Практически любая задача статистического моделирования содержит в качестве самостоятельного этапа процесс реализации случайных величин с заданными законами распределения. Для реализации случайных величин используют базовые (стандартные) независимые случайные величины с равномерным на отрезке [a,b] распределением и независимые нормально распределенные слу-

74

чайные величины с параметрами математического ожидания m и дисперсии D = σ2. Обычно математическое ожидание m = 0, дисперсия D = σ2 = 1, плотность распределения:

x2 f (x) = 12π e2 .

Программы генерации псевдослучайных величин с указанными законами распределения входят в математическое обеспечение современных компьютеров.

Методы моделирования дискретных случайных величин

В качестве числовых характеристик дискретных случайных величин используют их начальные mk и центральные моменты μk .

Для моделирования дискретных случайных величин применяются методы нелинейного преобразования, суперпозиции, метод Неймана, интервальной аппроксимации.

Программные методы фактически генерируют псевдослучайные числа. Согласно Лемеру, последовательность псевдослучайных чисел можно считать случайной, если «каждый ее член непредсказуем для не посвященного и она удовлетворяет ряду традиционных статистических тестов».

Полученные с помощью программных методов случайные последовательности в идеале должны состоять из:

равномерно распределенных,

статистически независимых,

воспроизводимых,

неповторяющихся чисел.

Моделирование дискретных случайных величин, равномерно распределенных на интервале

Стандартные генераторы случайных чисел

Датчики случайных чисел обычно генерируют последовательность действительных чисел, равномерно распределенных в интервале [0,1]. На первом этапе генерируют последовательность целых

75

случайных чисел X в интервале от нуля до Xmax = 2M1. Значение M равно числу разрядов переменной целого типа, используемой в программе. Действительное число Y, равномерно распределенное в интервале [0,1], получают из преобразования Y = X/Xmax. Заметим, что преобразование Y = 1/X генерирует числа, распределенные в интервале [0,1], но плотность вероятности fY (y) = 1/y не равно-

мерна.

В качестве примера воспроизведем метод Д. фон Неймана, предложенный в 1946 году. Возведем произвольное четырехзначное число в квадрат и, если необходимо, добавим к результату слева нули до восьмизначного числа. Новое случайное четырехзначное число сформируем из четырех цифр, взятых из середины восьмизначного числа. Далее процесс повторяется. Метод обладает свойством чрезмерной генерации малых чисел, поэтому широко не применяется, но открыл перспективу построения рекуррентных генераторов псевдослучайных чисел.

Приведем пример датчика равномерно распределенных в интервале [0,1] случайных чисел. Используем рекуррентное выделение дробной части результата сложного арифметического выражения, содержащего предшествующее число. X i+1= F(V(Xi)), F – оператор

выделения дробной части, V – арифметическое выражение, Xi – значение случайного числа, X i+1– следующее значение случайного

числа. Задание различных начальных значений X0 позволяет формировать различные последовательности случайных чисел. Алгоритм создает циклические последовательности псевдослучайных чисел. Количество случайных чисел в одном периоде может быть от нескольких тысяч до сотен тысяч.

Для отображения равномерно распределенных случайных чисел отрезка [0,1] на отрезок [а, b] используем линейное преобразование Xi+1 = a + (b a)Xi+1. Следует отметить, что такого типа датчики

создают последовательности, повторяемость которых определяется начальным значением числа. Функциональная связь генерируемых чисел не учитывается. По этой причине правильно называть такие числа псевдослучайными.

76

Метод Фибоначчи генерации псевдослучайных чисел

Генератор случайных чисел, использующий метод Фибоначчи, применялся в начале 50-х годов ХХ века. Рекуррентное соотношение Фибоначчи имеет вид:

Xn+1 = (Xn + Xn1)mod(M),

где Xn+1, Xn, Xn1 – целые числа, лежащие между нулем и некоторым большим числом M, который называется модулем; n – порядковый номер числа в последовательности.

Для перевода случайных чисел Xn из интервала (0,М) в случайные числа Yn из интервала (0, 1) следует вычислить дробь:

Yn = Xn /M.

Программный код формирования случайных чисел по методу Фибоначчи:

function U2_1 clear, clc

%%Генерирование выборки 500 псевдослучайных чисел по методу Фибоначчи

x= rand_fib(500,[12345,67890]);

%%Оценкастатистических свойств

%%Вычислениесреднего значения выборки

M = mean(x);

fprintf('Математическое ожидание: %f\n', M);

%%Вычислениедисперсии данной выборки

D = var(x); fprintf('Дисперсия: %f\n', D);

%%Вычислениесреднего квадратического отклонения

S = std(x);

fprintf('среднеe квадратическоe отклонение: %f\n', S);

%%Расчет относительных погрешностейв процентах

%%по математическому ожиданию

m = 0.5;

Dm = abs((M – m)/m)*100; fprintf('Относительная погрешность

по математическому ожиданию: %5.2f%%\n', Dm);

77

%% по дисперсии d = 1/12;

Dd = abs((D – d)/d)*100;

fprintf('Относительная погрешность по дисперсии: %5.2f%%\n', Dd);

%% по среднему квадратическому отклонению s = sqrt(d);

Ds = abs((S – s)/s)*100;

fprintf('Относительная погрешность по среднему квадратическому отклонению: %5.2f%%\n', Ds);

%%Генерирование дополнительной выборки y = rand_fib(500,[123,456]);

%%Построение диаграммы равномерности распределения случайных чисел

plot(x,y,'o', 'markersize', 4);

title('Проверка на равномерность случайных чисел'); str = 'Случайные числа';

xlabel(str)

ylabel(str)

end

function x = rand_fib(N,x)%% функция генерации N чисел

M = 2^30; % модульчисла for n = 2 : N – 1

x(n+1) = mod(x(n) + x(n-1), M); % следующее число end

x = x / M;

end

В результате тестовых испытаний получены следующие результаты:

математическое ожидание: 0.495220;

дисперсия: 0.086969;

среднее квадратическоe отклонение: 0.294905.

Относительная погрешность по математическому ожиданию

0.96 %.

78

Относительная погрешность по дисперсии 4.36 %. Относительная погрешность по среднему квадратическому от-

клонению 2.16 %.

Визуальная иллюстрация равномерности распределения приведена на рис. 10.

Случайныечисла

Проверка на равномерность случайных чисел

1

0.9

 

 

 

 

 

 

 

 

 

 

 

0.8

 

 

 

 

 

 

 

 

 

 

 

0.7

 

 

 

 

 

 

 

 

 

 

 

0.6

 

 

 

 

 

 

 

 

 

 

 

0.5

 

 

 

 

 

 

 

 

 

 

 

0.4

 

 

 

 

 

 

 

 

 

 

 

0.3

 

 

 

 

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

 

 

 

 

 

0.1

 

 

 

 

 

 

 

 

 

 

 

0

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

 

 

 

 

 

Случайные числа

 

 

 

 

Рис. 10. Диаграмма равномерности случайных чисел для метода Фибоначчи

Для построения диаграммы используем два массива псевдослучайных чисел. На координатных осях откладываем значения псевдослучайных чисел, полученных по методу Фибоначчи. Точку образуют числа, имеющие в массивах одинаковые порядковые индексы.

Метод срединных квадратов генерации псевдослучайных чисел

Метод срединных квадратов предложен фон Нейманом и заключается в следующем: выбирается число, меньшее 1, разрядностью 2n. Оно возводится в квадрат. Из полученного результата (разрядность которого должна быть 4n, если нет, то добавляются нули

79

справа от полученного числа) выбираются 2n чисел из середины. Число записывается после десятичной точки. Далее все повторяется.

Для примера выберем 4-разрядное (2n = 4) число a0 = 0.1234. После возведения в квадрат получим число, равное 0.01522756. Из него выбираем четыре срединные цифры, т.е. 5227. Получаем новое случайное (псевдослучайное) число a1 = 0.5227. И так далее.

В литературе имеются ссылки на систематическую погрешность метода, которая проявляется в группировке чисел около середины диапазона.

Линейный конгруэнтный метод генерации псевдослучайных чисел

Алгоритм генерации псевдослучайных чисел по линейному конгруэнтному методу основывается на следующем рекуррентном соотношении:

Rk+1 = (aRk + c)mod(M),

где Rk+1 – новое псевдослучайное число; a – множитель (мультипликативная константа); c – аддитивная константа; mod – операция вычисления остатка от деления двух чисел; M – целочисленная константа. Для n-разрядных целых чисел M = 2n. В самом простом случае принимается, что c = 0. Массив случайных чисел Xi из интервала (0, 1) будет формироваться следующим образом:

Rk= Rk+1+M*Q, Xi+1 = Rk+1 /M.

В стандартной процедуре реализации линейного конгруэнтного метода принимается, что a, c, M – целые положительные числа. Приведем определение конгруэнтности двух чисел X и Y: два числа X и Y конгруэнтны (сравнимы) по модулю числа M, если они дают одинаковые остатки при делении на M. Таким образом, по формуле число Rk+1 будет конгруэнтно по модулю M числу (aRk + c).

При выборе чисел a, c, M придерживаются следующих правил:

c, M – должны быть взаимно простыми числами. Причем число M определяет собой период числовой псевдослучайной последовательности: чем больше M, тем длиннее последовательность псевдослучайных чисел;

a – 1 является наименьшим общим кратным всех простых делителей M.

80

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]