Скачиваний:
12
Добавлен:
10.05.2015
Размер:
373.25 Кб
Скачать

5. Список процедур комплекса

1. FUNCTION GAUSS

Назначение

Генерация псевдослучайных чисел с нормальным (гауссовым) распределением.

Математическое описание

Функция генерирует вещественное псевдослучайное число с нормальным распределением с математическим ожиданием M и среднеквадратическим отклонением S.

Глобальные переменные

M - математическое ожидание случайной величины;

S - среднее квадратичное отклонение случайной величины.

Текст функции

FUNCTION GAUSS(M,S:real):real;

VAR

a,b,c,d:real;

BEGIN

repeat

a:=2*random-1;

b:=2*random-1;

c:=sqr(a)+sqr(b)

until c<1;

d:=sqrt((-2)*ln(c)/c);

GAUSS:=M+S*a*d

END;

2. FUNCTION MIN

Назначение

Определение минимального значения функции.

Математическое описание

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

Глобальные переменные

Y - одномерный массив, содержащий значения функции.

Текст функции

FUNCTION Min(var Mas:array of real):real;

VAR

i:word;

m:real;

BEGIN

m:=Mas[0];

for i:=1 to High(Mas) do if Mas[i]<m then m:=Mas[i];

Min:=m

END;

3. FUNCTION MAX

Назначение

Определение максимального значения функции.

Математическое описание

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

Глобальные переменные

Y - одномерный массив, содержащий значения функции.

Текст функции

FUNCTION Max(var Mas:array of real):real;

VAR

i:word;

m:real;

BEGIN

m:=Mas[0];

for i:=1 to High(Mas) do if Mas[i]>m then m:=Mas[i];

Min:=m

END;

4.PROCEDURE GKLF

Назначение

Генерация кусочно-линейной функции.

Математическое описание

Процедура генерирует периодическую кусочно-линейную функцию Yo. Для этого по формуле y=k*x+b вычисляется значения линейных участков функции на интервале от Ax[1] до Ax[1]+T с шагом T/(N-1).Для определения коэффициентов k и b линейных участков используются координаты Na точек перегиба

(в массиве Ax) и значения функции в этих точках (в массиве Ay).

Глобальные переменные

T - период функции;

Ax - вещественный одномерный массив длинной Na, содержащий координаты точек перегиба;

Ay - вещественный одномерный массив длинной Na, содержащий значения функции в точках перегиба;

X - вещественный одномерный массив длиной N, содержащий значения аргумента функции;

Y - вещественный одномерный массив длиной N, содержащий значения сгенерированной кусочно-линейной функции.

Локальные переменные

i - номер очередного отсчета;

j - номер очередной точки перегиба кусочно-линейной функции;

k - коэффициент наклона очередного участка кусочно-линейной функции;

b - постоянный коэффициент очередного участка кусочно-линейной функции;

dx - интервал между соседними отсчетами аргумента.

Текст процедуры

PROCEDURE GKLF(T:real;var Ax,Ay,X,Y:array of real);

VAR

i,j:word;

k,b,dx:real;

BEGIN

dx:=T/High(X);

X[0]:=Ax[0];

Y[0]:=Ay[0];

j:=0;

for i:=1 to High(X) do

begin

X[i]:=X[i-1]+dx;

if (j<High(Ax)) and (X[i]>=Ax[j+1]) then inc(j);

if j<High(Ax)

then k:=(Ay[j+1]-Ay[j])/(Ax[j+1]-Ax[j])

else k:=(Ay[0]-Ay[j])/(Ax[0]+T-Ax[j]);

b:=Ay[j]-k*Ax[j];

Y[i]:=k*X[i]+b

end

END;

5.PROCEDURE SAG

Назначение

Определение количества уровней квантования и полушага квантования сообщений по уровню.

Математическое описание

Процедура выполняет операции в зависимости от значения ключа K:

K=0 - полушаг квантования определяется с помощью подпрограммы OERFC, количество уровней квантования определяется делением разности между максимальным и минимальным значениями функции на шаг квантования;

K<>0 - полушаг квантования определяется делением разности между максимальным и минимальным значениями функции на количество уровней квантования.

Глобальные переменные

K - ключ, определяющий способ вычисления полушага квантования;

V1 - предполагаемая вероятность правильной передачи сообщения при "гауссовых" случайных помехах в канале связи;

M - предполагаемое математическое ожидание амплитуды "гауссовой" помехи;

S - предполагаемое среднее квадратичное отклонение амплитуды "гауссовой" помехи;

Ymin - минимальное значение функции;

Ymax - максимальное значение функции;

KU - количество уровней квантования;

Q - полушаг квантования.

Текст процедуры

PROCEDURE SAG(KS:word;V1,M,S,Ymin,Ymax:real;var KU:word;var Q:real);

BEGIN

if K=0

then begin

Q:=OERFC(V1,M,S);

KU:=round((Ymax-Ymin)/(2*Q))

end

else if KU=0 then Q:=0 else Q:=((Ymax-Ymin)/KU)/2

END;

6.PROCEDURE KVN

Назначение

Квантование сообщений по уровню.

Математическое описание

Процедура осуществляет квантование сообщений по уровню. Значение очередного уровня квантования вычисляется как сумма минимального значения функции, полушага квантования и произведения шага квантования на номер уровня. «Верхний" порог данного уровня определяется как сумма значений уровня квантования и полушага квантования (при равномерном квантовании путем соотнесения исходного сигнала с ближайшим значением уровня "нижний" порог данного уровня совпадает с "верхним" порогом ближайшего "снизу" уровня).

Глобальные переменные

KU - количество уровней квантования;

Q - полушага квантования;

Ymin - минимальное значение функции;

Yi - квантуемое значение функции;

NUK - номер уровня квантования;

YK - проквантованное значение функции.

Текст процедуры

PROCEDURE KVN(KU:word;Q,Ymin,Yi:real;var NUK:word;var YK:real);

VAR

k:word;

BEGIN

k:=0;

repeat

YK:=Ymin+Q+2*Q*k;

k:=k+1

until (Yi<=YK+Q) or (k>=KU);

NUK:=k-1

END;

7.PROCEDURE PV

Назначение

Подсчет правильно переданных сообщений.

Математическое описание

Процедура осуществляет подсчет правильно переданных сообщений. Сообщение считается правильно переданным, если его искажение не более величины допустимого изменения сообщения dY. После приема всех сообщений определяется частота их правильной передачи V2.

Глобальные переменные

i - номер очередного сообщения;

N - общее число сообщений;

YK - переданное квантованное сообщение;

YKP - принятое квантованное сообщение;

C - счетчик правильно переданных сообщений;

dY - величина допустимого изменения сообщения;

V2 - частота правильной передачи сообщений (реальная статистическая вероятность).

Текст процедуры

PROCEDURE PV(i,N:word;YK,YPK,dY:real;var C:word;var V2:real);

CONST

dY=1e-5;

BEGIN

if i=1 then C:=0;

if abs(YPK-YK)<=dY then inc(C);

if i=N then V2:=C/i

END;

8.PROCEDURE GRA

Назначение

Графическое отображения графиков функций.

Математическое описание

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

Глобальные переменные

K - ключ, определяющий режим вывода графиков функций:

K=1 - F1 и F2 выводятся как "непрерывные" функции;

K=2 - функции выводятся в виде F1-"непрерывная",F2-"решетчатая";

K=3 - функции выводятся в виде F1-"непрерывная",F2-"квантованная";

K=4 - F1 и F2 выводятся как "решетчатые" функции;

K=5 - функции выводятся в виде F1-"непрерывная",F2-"квантованная";

K=6 - F1 и F2 выводятся как "квантованные" функции;

E - ключ, определяющий необходимость вывода графика разности функций F2-F1

(только в режимах K=1,K=3,K=6):

E=0 - график разности функций F2-F1 не выводится;

E<>0 - график разности функций F2-F1 выводится;

T1 - массив аргументов функции F1;

F1 - массив значений первой функции;

S1 - название первой функции;

T2 - массив аргументов функции F2;

F2 - массив значений второй функции;

S2 - название второй функции;

S3 - название разности функций F2-F1;

Текст процедуры

PROCEDURE GRA(K,E:word;var T1,F1,T2,F2:array of real;S1,S2,S3:S_60);

VAR

Xo,Yo:word;

dT,dF:real;

Gd,Gm:integer;

BEGIN

Gd:=0;InitGraph(Gd,Gm,F_bgi);

ShowGra(K,E,T1,F1,T2,F2,S1,S2,S3);

CloseGraph

END.

Соседние файлы в папке doc_1