Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
gas / doc / DISKR.DOC
Скачиваний:
19
Добавлен:
15.06.2014
Размер:
506.88 Кб
Скачать

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.PROCEDURE GF

Назначение

Генерация непрерывной функции.

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

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

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

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

K1=0 - с помощью параметров B1 и B2;

K1<>0 - с помощью датчика нормально распределенных чисел и параметров Ma,Sa,Mp,Sp;

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

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

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

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

W - частота высшей гармоники спектра функции (сигнала);

B1,B2 - параметры для генерации коэффициентов Фурье;

Ma - математическое ожидание амплитуд гармоник ряда Фурье;

Sa - среднее квадратичное отклонение амплитуд гармоник ряда Фурье;

Mp - математическое ожидание фазовых сдвигов гармоник ряда Фурье;

Sp - среднее квадратичное отклонение фазовых сдвигов гармоник ряда Фурье;

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

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

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

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

PROCEDURE GF(K1,K2:word;T,W,B1,B2,Ma,Sa,Mp,Sp:real;var X,Y,G:array of real);

CONST

S1='Результирующая функция.';

S2='Суммируемая гармоника.';

VAR

Gd,Gm:integer;

i,j,Xo,Yo:word;

a,p,wj,dx,dT,dF:real;

BEGIN

if K2<>0 then begin Gd:=0;InitGraph(Gd,Gm,F_bgi) end;

dx:=T/High(X);

X[0]:=0;for i:=1 to High(X) do X[i]:=X[i-1]+dx;

for i:=0 to High(X) do Y[i]:=0;

j:=1;wj:=2*Pi*j/T;

while wj<=W do

begin

if K1=0

then begin a:=B1/j;p:=B2/j end

else begin a:=Gauss(Ma,Sa);p:=Gauss(Mp,Sp) end;

for i:=0 to High(X) do

begin

G[i]:=a*cos(wj*X[i]-p);

Y[i]:=Y[i]+G[i]

end;

if K2<>0 then ShowGra(1,0,X,Y,X,G,S1,S2,'');

inc(j);wj:=2*Pi*j/T

end;

if K2<>0 then CloseGraph

END;

3.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, содержащий значения аргумента функции;

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

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

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

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

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

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

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

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

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

VAR

i,j:word;

k,b,dx:real;

BEGIN

dx:=T/High(X);

X[0]:=Ax[0];

Yo[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];

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

end

END;

4.PROCEDURE FLF

Назначение

"Сглаживание" непрерывной периодической функции.

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

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

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

W - частота среза функции (частота "высшей" гармоники);

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

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

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

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

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

PROCEDURE FLF(W,T:real;var X,Yo,Y:array of real);

VAR

i,j:word;

a0,a,b,wj,dx:real;

BEGIN

dx:=T/High(X);

a0:=0;for i:=0 to High(X) do a0:=a0+Yo[i]*dx;a0:=a0/T;

for i:=0 to High(X) do Y[i]:=a0;

j:=1;wj:=2*Pi*j/T;

while wj<=W do

begin

a:=0;b:=0;

for i:=0 to High(X) do

begin

a:=a+Yo[i]*cos(wj*X[i])*dx;

b:=b+Yo[i]*sin(wj*X[i])*dx

end;

a:=2*a/T;b:=2*b/T;

for i:=0 to High(X) do

Y[i]:=Y[i]+a*cos(wj*X[i])+b*sin(wj*X[i]);

inc(j);wj:=2*Pi*j/T

end

END;

5.PROCEDURE DIS

Назначение

Дискретизация непрерывной функции.

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

Подпрограмма осуществляет равномерную (временную) дискретизацию непрерывной функции путем выбора из массива аргументов и значений этой функции аргументов и значений для решетчатой функции. Для этого вычисляются номера дискретных отсчетов по формуле :

j:=i+(M+1) ,где

j - номер очередного дискретного отсчета;

i - номер предыдущего дискретного отсчета;

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

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

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

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

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

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

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

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

PROCEDURE DIS(M:word;var X,Y,Xdis,Ydis:array of real);

VAR

i,j:word;

BEGIN

j:=0;

for i:=0 to High(Xdis) do

begin

Xdis[i]:=X[j];

Ydis[i]:=Y[j];

j:=j+M+1;if j>High(X) then j:=High(X)

end

END;

6.PROCEDURE IDF

Назначение

Восстановление функции идеальным фильтром низких частот.

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

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

Yif[i] = Yif[i]+Ydis[j]*sin(alfa)/alfa, где alfa:=Wif*(X[i]-Xdis[j]).

При значениях угла alfa меньше порогового:

Yif[i] = Yif[i]+Ydis[j]

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

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

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

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

Wif - "частота среза" идеального фильтра низких частот;

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

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

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

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

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

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

PROCEDURE PROCEDURE IDF(K:word;Wif:real;var Xdis,Ydis,X,Yif,FO:array of real);

VAR

i,j,Xo,Yo:word;

alfa,dT,dF:real;

Gd,Gm:integer;

CONST

S1='Результирующая функция.';

S2='Суммируемая функция отсчета.';

por=1e-10;

BEGIN

if K<>0 then begin Gd:=0;InitGraph(Gd,Gm,F_bgi) end;

for i:=0 to High(X) do Yif[i]:=0;

for j:=0 to High(Xdis) do

begin

for i:=0 to High(X) do

begin

alfa:=Wif*(X[i]-Xdis[j]);

if abs(alfa)<por

then FO[i]:=Ydis[j]

else FO[i]:=Ydis[j]*sin(alfa)/alfa;

Yif[i]:=Yif[i]+FO[i]

end;

if K<>0 then ShowGra(1,0,X,Yif,X,FO,S1,S2,'');

end;

if K<>0 then CloseGraph

END;

7.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;

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

TYPE S_60 =string[60];

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