- •I. О б щ и е п о л о ж е н и я.
- •II. К р а т к а я т е о р и я.
- •III. О п и с а н и е п а к е т а.
- •5. Список процедур комплекса
- •IV. Ц е л ь л а б о р а т о р н о й р а б о т ы.
- •V. Ц е л ь и с с л е д о в а н и я.
- •VI. П о р я д о к в ы п о л н е н и я р а б о т ы.
- •VII. Вопросы для отчета по данной лабораторной работе.
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.