Часть 3
Дискретизация задачи
Пакет MAPLE выполняет вычисления в аналитической форме, если не указано дополнительно требование: получить результат в числовом виде, например команда fsolve. Для получения результатов, совпадающих с вычислениями, выполненными программным путем (среда Turbo Delphi), перейдем к дискретному варианту решения задачи, то есть к вычислениям на конечном множестве точек отрезка [0, T]. Определим массив Y для сеточных значений функции F_for_all(t), соответственно. Определим также массивы a,b для размещения значений коэффициентов тригонометрического полинома, аппроксимирующего функцию f(t) на отрезке длины периода T > .
Параметр Nt, задающий число дискретных отсчетов (0 .. Nt) следует по изменять и выбрать каких-нибудь 2-3 варианта. Этот параметр определяет качество аппроксимации сигнала на периоде.
Число коэффициентов тригонометрического полинома выбирается как максимально возможное и равное n = Nt/2. Массивы коэффициентов Фурье определяются по максимальному значению n, но в силу ортогональности системы тригонометрических функций, тригонометрические полиномы меньшей степени имеют те же самые коэффициенты.
Присоединим модифицированную процедуру DTF из пособия, а также процедуру Setka и Spectr_DTF, последняя из которых вычисляет модули и аргументы комплексных коэффициентов ДПФ.
> DTF:=proc (y,N,Y,n) local k,j,p,h;
h:=2*Pi/N;
2.1: for k from 0 to n do
p:=0;
for j from 0 to N-1 do
p:=p+evalf(y[j]*exp(-I*k*j*h));
end;
Y[k]:=evalf(p/N);
end:
end:;
> Setka:=proc(Nt,T,F,Y::array) local h,j,x,R;
global GrafF;
h:=T/Nt;
for j from 0 to Nt do
x:= evalf(j*h);
Y[j]:= F(x);
R[j]:=[j,eval(Y[j])];
end:
5.1: R[Nt]:=[j,eval(Y[0])];
GrafF:=plot(convert(R,list),0..Nt,color=brown,
style=point,symbol=circle):
end:
> 6:Spectr_DTF:=proc(n,C,A,phi) local k,R;global Risphi;
6.1: for k from 0 to n do
A[k]:=evalf(abs(C[k])):
phi[k]:=evalf(argument(C[k]));
R[k]:=[eval(k),eval(phi[k])];
end:;
Risphi:=plot(convert(R,list),thickness=2,color=blue,style=point,symbol=box):
end:
Зададим число точек дискретизации N= Nt+1, число коэффициентов n в массивах ДПФ (N- параметр процедур ДПФ и он равен числу дискретных отсчетов сигнала, которые нумеруются индексами 0..N-1).
Для демонстрации свойства симметрии коэффициентов n будем задавать большим Nt. В случае вещественного сигнала (не имеющего мнимой составляющей) в силу свойства симметрии спектральных характеристик (четная - для АЧХ, нечетная - для ФЧХ) полагают n=Nt/2, если требуется только построение их графиков, а не восстановление сигнала обратным дискретным преобразованием Фурье.
Параметры задачи
> Nt:=35;`число дискретных отсчетов -1`:
> n:=Nt;# в обычном случае
n:=57;# для демонстрации свойства симметрии
> C:=array(0..n):phi:=array(0..n):A:=array(0..n):;
Y:=array(0..Nt):
> Setka(Nt,T,F_for_all,Y);
> DTF(Y,Nt+1,C,n):
> Spectr_DTF(n,C,A,phi):;
> display(ARR(n,A));
Таким образом, АЧХ и ФЧХ являются периодическими дискретными последовательностями с периодом N=32 = Nt+1.
АЧХ обладает четной симметрией относительно середины N/2=16, а ФЧХ - нечетной симметрией.
Сравним графики спектров амплитуд аналогового и дискретного сигналов.
> display(RisAMP);
Заключение
В процессе выполнения данной курсовой работы я ознакомилась с языками программирования, как Turbo Delphi, MAPLE.
Написала программы на языках программирования для решения заданного полинома. Сравнила и оценила погрешность выполненных расчетов.
Библиография
1.Кондратьев В.П. Языки программирования. Система Maple.ч. I. Основы работы в системе. Ч. III/. Язык программирования системы. Учебное пособие. Екатеринбург: УрТИСИ ГОУ ВПО «СибГУТИ», 2006.
2.Мудров А.Е. Численные методы для ПЭВМ на языках БЕЙСИК, ФОРТРАН, ПАСКАЛЬ. – Томск. 1991.
3.Немнюгин С. Turbo Pascal. Программирование на языке высокого уровня. Учебник для вузов. 2-е изд.—СПб.:Питер, 2005, 544с.
4.Фаронов В.В. DELPHI. Программирование на языке высокого уровня. Учебник для вузов.—СПб.:Питер, 2005, 640с.
