Программирование на языке высокого уровня

 

Федеральное агентство связи

ФГОБУ ВПО «Сибирский государственный университет

телекоммуникаций и информатики»

Уральский технический институт связи и информатики (филиал)











КУРСОВАЯ РАБОТА

по дисциплине

ЯЗЫКИ ПРОГРАММИРОВАНИЯ

.65 «Сети связи и системы коммутации»




Выполнил: Романцев С.А.

Проверил: Кондратьев В.П.


СОДЕРЖАНИЕ


Задание для курсовой работы

.Проект в Delphi

.1Вид и работа программы

.2Код программы

.Проект в Maple

.1 Интегрирование дифференциального уравнения. Сравнение с расчетами, выполненными в Delphi

.2 Спектральная анализ сигнала в Maple

Список используемой литературы


Задание для курсовой работы


Написать программу на языке программирования Паскаль для решения следующей задачи (вариант задания индивидуальный). Результаты расчетов должны выводиться на экран и в файл. Оформление графиков и таблиц выполнять средствами математических пакетов (Maple, MathCad). Демонстрационный вариант программы подготовить в среде визуального программирования Delphi.

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

Напряжение U=U(t) на входе транзистора как функция времени описывается дифференциальным уравнением



с начальными условиями (1), где n - последняя цифра номера зачетной книжки, k - коэффициент усиления (см. ниже), fs(t) - периодический сигнал (рис. 1), m - коэффициент обратной связи.

Указания и пояснения.

1.Дифференциальное уравнение с заданными начальными условиями (задача Коши) решается методом Рунге-Кутта второго порядка с коррекцией (3) на отрезке [0;5] с шагом h=0.01.(в узлах tj =jh, j=0,1,2…). Функция fs(t) в правой части представляет собой регулирующий периодический (период Т) сигнал единичной амплитуды (рис 1, номер варианта n - последняя цифра номера зачетной книжки,). Результаты расчетов-таблица (tj,Uj) и график функции U(t) (на экран и в файл).

2.Значение коэффициента усиления k в правой части дифференциального уравнения есть наименьший положительный корень полинома (2), который вычисляется одним из методов нахождения корней уравнения (метод касательных, метод Вегстейна).

.Построить спектральные характеристики периодического сигнала fs(t), заданного в аналоговой форме и в виде дискретного сигнала. Длительность сигнала равна 1, период T=k.

.Период функции U(t) определить с помощью функции автокорреляции.

Курсовая работа выполняется в ЧЕТЫРЕ этапа.

1.Средствами математического пакета Maple решается задача спектрального анализа аналогового и дискретного периодического сигнала fs(t). Сравниваются спектры амплитуд аналогового и дискретного представлений сигнала. (образец выполнения задания - файл вариант11.mws).

2.Создается проект в визуальной среде Delphi, решающий эту же задачу для дискретного сигнала, а результаты выполнения сравниваются визуально.

.С помощью языка программирования системы Maple решается задача интегрирования дифференциального уравнения (задача Коши) методом (по варианту задания). Окончательные вычисления в программе зависят от результатов расчета программы в Delphi (следующий пункт). Образец выполнения задания - файл RUTTA.mws.

.Создается проект в визуальной среде Delphi, решающий ту же задачу Коши, результаты расчета которой записываются в файл, который используется в предыдущем пункте. Выводятся графики результатов вычислений в Maple и Delphi и сравниваются между собой. Явные несовпадения свидетельствуют об ошибке в программе на Delphi.

Оформление:


vФормат А4.

vТитул

vПостановка задачи

vАлгоритмы решения вспомогательных задач

vБлок-схемы

vРезультаты расчетов, графики

vЛитература

Индивидуальное задание № 14

.Начальные условия: U(0)=0.2

.полином: x^5-7x-10

.коррекция:в средней точке

.метод поиска корня Метод Вегстейна

Сигнал:



1. Проект в Delphi


.1 Вид и работа программы


Рис. 1 - Форма программы


Рис. 2 - Работа программы (построение графика сигнала)

Рис. 3 - Работа программы (Спектр амплитуд)


1.2 Код программы

Romanzew;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, StdCtrls, Buttons;= class(TForm): TBitBtn;: TBitBtn;: TBitBtn;: TBitBtn;: TBitBtn;: TLabel;: TLabel;: TListBox;: TSaveDialog;: TBitBtn;: TBitBtn;: TImage;BitBtn1Click(Sender: TObject);BitBtn2Click(Sender: TObject);BitBtn3Click(Sender: TObject);BitBtn4Click(Sender: TObject);BitBtn5Click(Sender: TObject);BitBtn6Click(Sender: TObject);BitBtn7Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;

{$R *.dfm}=50;=0.2;=5/Npoint;=8;=0.5;=40;=20;

{------------}=0;b=2; epsilon=0.000001;=array[0..Npoint]of real;=array[0..m] of real;:dann;:real;:real;:integer;:string;:text;:dann;,e:koef;f(t:real):real;:=t*t*t*t*t-7*t-10;

{ f:=t*sqr(sqr(t))-8*t-1; };phi(x:real):real;:=x+f(x);;Iter(a,b:real;var x2,y2:real; var flag:Boolean);,x1,y0,y1:real;:=kolit+1;:=a;y0:=phi(x0);:=b;y1:=phi(x1);:=(x1*y0-y1*x0)/((x1-x0)-(y1-y0));

{writeln(a,b,x2);}:=phi(x2);:=(y0-x0)*(y2-x2)>0;;Vegstein(a,b,eps:real; var x:real);,yz:real;:Boolean;(a,b,xz,yz,prizn);prizn then a:=xz else b:=xz;abs(xz-yz)<eps;

{ writeln('корень===',xz); }:=xz;;

{=======================================================}signal(t:real):real;:real;t<0 then z:=0if t<1 then z:=1-sin(Pi*t)z:=0;:=z;;Period(x,T:real):real;:real;:=x-trunc(x/T)*T;:=signal(z);;

{==================================================}graf;:real;:real;:integer;:integer;Form1.ListBox1.Canvas do(10,120);LineTo(600,120);(10,10);LineTo(10,220);(8,15);LineTo(10,10);(12,15);LineTo(10,10);(595,118);LineTo(600,120);(595,122);LineTo(600,120);j := 0 to 500 do:=j/100; {интервал [0..5]}:=Period(x,T);:=trunc(y*100);[j+10,120-k]:=RGB(255,0,0);[j+10,120-k+1]:=RGB(255,0,0);

{ Pixels[j+10,120-k+1]:=clBlue;}(5);;;;

{=======================================================}RHS(x,U:real):real;:=Nzach*(cos((4+Nzach/10)*x+U)+T*Period(x,T)-KOC*U);

{=1};

{=======================================================}difur;j:integer; x,y:real;:real;[0]:=U0; x:=0;j:=1 to npoint do:=RHS(x,U[j-1]);

{U[j]:=U[j-1]+h*y;} {коррекция}:=U[j-1]+h/2*y;[j]:=U[j-1]+h*rhs(x+h/2,yz);:=j*h;;;

{=======================================================}zapis;:integer;(ft,fn);(ft,fn);j:= 0 to Npoint do(ft,j*h:6:2,U[j]:12:4);(ft);;

{=======================================================}Furkoef(m,N:integer;Y:dann;var v,e:koef);,k:integer;,q:real;:real;:real;:=2*Pi/N;k:=0 to m do:=0;q:=0;j:=1 to N do:=j*h;:=p+Y[j]*cos(x*k);:=q+Y[j]*sin(x*k);;[k]:=p*2/N;[k]:=q*2/N;;;Tpol(m:integer;x:real):real;:real;:integer;:=v[0]/2;k:=1 to m do:=z+(v[k]*cos(k*2*Pi/T*x)+e[k]*sin(k*2*Pi/T*x));:=z;;

{===========================================================}spektr(numvar:integer);,R,W,H: integer;: dann;: dann;:integer;,ymax:real;,My:real;,y0: integer;,posy:integer;:string;:real;:real;min_max(N:integer;Y:dann; var min, max:real);: integer;:=Y[0];max:=Y[0];k := 1 to N doY[k]> max then:=Y[k]if Y[k]< min then:=Y[k];

{увеличиваем диапазон}

max:=max+0.1;:=min-0.1;;:=10;:=form1.Image1.clientHeight-20;:=form1.Image1.Width-50;:=form1.Image1.clientheight-50;numvar of 1:k:=0 to m do[k]:=sqrt(sqr(v[k])+sqr(e[k]));_max(m,Y,ymin,ymax);:=W/m;:=H/(ymax-ymin);:=L;:=R-abs(Round(ymin*My));form1.Image1.Canvas do.Width:=1;.Color:=clred;(L,R);lineto(L,R-H);(x0,y0);lineto(x0+W,y0);.Width:=4;.Color:=clgreen;k:=0 to m do:=x0+round(k*Mx);:=y0-round(Y[k]*My);(posx,y0);(posx,posy);;;;;;TForm1.BitBtn1Click(Sender: TObject);(a,b,epsilon,T);

{ writeln('число шагов',kolit:6);}.Visible:=true;1.Caption:='Вычисляем корень полинома';

Label2.Visible:=true;.Caption:='Корень='+floattostr(T);.Visible:=false;.Visible:=true;.Visible:=false;.Visible:=false;.SetFocus;;TForm1.BitBtn2Click(Sender: TObject);.Caption:='Строим график сигнала';;.Visible:=false;.Visible:=true;.Visible:=false;.Visible:=false;.SetFocus;;TForm1.BitBtn3Click(Sender: TObject);.Caption:='Решаем ДифУравнение';.Clear;;.Visible:=false;.Visible:=true;.Visible:=false;.Visible:=false;.SetFocus;;TForm1.BitBtn4Click(Sender: TObject);SaveDialog1. Execute then:=SaveDialog1.Filename;1.Caption:='Запись в файл '+fn;

zapis;.Visible:=false;.Visible:=true;.Visible:=true;.Visible:=false;.SetFocus;;TForm1.BitBtn5Click(Sender: TObject);;;TForm1.BitBtn6Click(Sender: TObject);:integer;,s2,s3:string;j:=0 to N do[j]:=signal(j*Pi/N);[N]:=(Y[0]+Y[N])/2;(m,N,Y,v,e);j:=0 to m do(j:2,s1);(v[j]:10:5,s2);(e[j]:10:5,s3);.Items.Add(s1+s2+s3);.Visible:=false;.Visible:=false;.Visible:=false;.Visible:=true;.SetFocus;;;TForm1.BitBtn7Click(Sender: TObject);.Caption:='График спектра амплитуд';(1);.Visible:=false;.Visible:=false;.Visible:=false;.Visible:=false;.SetFocus;;.


2. Проект в Maple


.1 Интегрирование дифференциального уравнения. Сравнение с расчетами, выполненными в Delphi


> restart; with(plots):with(linalg):

> pol:=x^5-7*x-10:

> T:=fsolve(pol,x=1..3):

> plot(pol,x=0..2.1,color=blue,thickness=2):

> signal:=proc(t) local z;:=piecewise(t<0,0,t<=1,1-sin(Pi*t),0);:

> plot(signal(x),x=-1..3, color=blue,thickness=2,discont=true);


> Period:=proc(x) local z;global T;:=x-floor(x/T)*T; signal(z);end:

> plot(Period(x),x=0..5,color=brown,thickness=3,discont=true):, (in plot) unable to determine the discontinuities

> #константы варианта

> Nzac:=8:Koc:=1:u0:=0.2:Koeff:=T:

> ur:=diff(U(t),t):

> F:=Nzac/10*(cos((4+Nzac/10)*t+U(t))+Koeff*Period(t)-Koc*U(t)):

> RK:=dsolve({ur=F,U(0)=u0},U(t),type=numeric,output=listprocedure):

> fU:=subs(RK,U(t)):

> T0:=5:Nt:=50:h:=T0/Nt:

> h := 1/10:

> Tx:=array(0..Nt):U:=array(0..Nt):U_map:=array(0..Nt):

> for j from 0 to Nt do

> x:=j*h;z:=fU(x);Tx[j]:=x;U[j]:=z;U_map[j]:=z;

> #print(x,z);

> od:

> RisU:=zip((a,b)->[a,b],Tx,U):

> RU:=plot(RisU):

> display(RU):

> #====================================

>

> fn:=`D:\\Romanzew..txt`:

> L:=readdata(fn,2):

> Graf:=plot(L,style=point,symbol=cross,color=blue,symbolsize=18):

> display(Graf,RU);



> L:=readdata(fn,2)::=vectdim(L):

> U_n:=array(1..Nstrok):_n:=array(1..Nstrok):

>

> for j from 1 to Nstrok do_n[j]:=L[j,1];_n[j]:=L[j,2];

#print(j,T_n[j],U_n[j]);:

> u1:=zip((a,b)->[a,b],T_n,U_n):

> RU1:=plot(u1,style=point,symbol=cross,color=black):

> display(RU,RU1);


Сравнение результатов на одинаковых сетках

>

> printf("%s",` № t U_map U_pas разн \n`);k from 0 to Nt do t:=Tx[k]:del:=U_map[k]-U_n[k+1];("% 3.0f % 6.2f % 8.4f % 8.4f % 8.4f \n",k,t,U_map[k],U_n[k+1],del)::;

№ t U_map U_pas разн

0 0.00 0.2000 0.2000 0.0000

0.10 0.3709 0.3666 0.0043

0.20 0.4525 0.4460 0.0065

0.30 0.4532 0.4467 0.0065

0.40 0.3952 0.3901 0.0051

0.50 0.3053 0.3024 0.0029

0.60 0.2100 0.2096 0.0004

0.70 0.1348 0.1367 -0.0019

0.80 0.1033 0.1073 -0.0040

0.90 0.1371 0.1424 -0.0053

1.00 0.2514 0.1819 0.0695

1.10 0.2745 0.2052 0.0693

1.20 0.3214 0.2536 0.0678

1.30 0.3725 0.3082 0.0643

1.40 0.4070 0.3480 0.0590

1.50 0.4108 0.3582 0.0526

1.60 0.3801 0.3343 0.0458

1.70 0.3197 0.2802 0.0395

1.80 0.2388 0.2046 0.0342

1.90 0.1854 0.1879 -0.0025

2.00 0.2057 0.2100 -0.0043

2.10 0.1965 0.2027 -0.0062

2.20 0.1804 0.1885 -0.0081

2.30 0.1766 0.1860 -0.0094

2.40 0.1986 0.2086 -0.0100

2.50 0.2516 0.2610 -0.0094

2.60 0.3302 0.3381 -0.0079

2.70 0.4216 0.4275 -0.0059

2.80 0.5131 0.5172 -0.0041

2.90 0.5597 0.5218 0.0379

3.00 0.4771 0.4443 0.0328

3.10 0.3789 0.3507 0.0282

3.20 0.2759 0.2512 0.0247

3.30 0.1788 0.1569 0.0219

3.40 0.0985 0.0785 0.0200

3.50 0.0449 0.0260 0.0189

3.60 0.0261 0.0075 0.0186

3.70 0.0449 0.0261 0.0188

3.80 0.1662 0.1393 0.0269

3.90 0.3272 0.2998 0.0274

4.00 0.4275 0.4009 0.0266

4.10 0.4603 0.4360 0.0243

4.20 0.4356 0.4148 0.0208

4.30 0.3738 0.3568 0.0170

4.40 0.2983 0.2850 0.0133

4.50 0.2327 0.2225 0.0102

4.60 0.1994 0.1916 0.0078

4.70 0.2194 0.2132 0.0062

4.80 0.2276 0.2187 0.0089

4.90 0.2051 0.1964 0.0087

5.00 0.2197 0.2105 0.0092


.2 Спектральная анализ сигнала в Maple


Ниже приведены команды системы математических вычислений MAPLE

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

Команда restart нужна для очистки памяти системы при повторном запуске программы и при начале следующего сеанса. Две следующие команды подключают пакеты линейной алгебры и графический пакет, соответственно. С помощью команды pp:=(x,y)->[x,y] строится отображение пар координат (координаты точки плоскости) в список. Этот список будет выдаваться на графике в виде множества точек. Сообщения после выполнения команд подключения пакетов (текст синего цвета) не свидетельствуют об ошибке в програме, а предупреждают о переопределении некоторых названий команд. Например, команда trace в обычном режиме задает трассировку вычислений при отладке, а в пакете линейной алгебры она означает вычисление следа матрицы.


>

>

> restart;

> with(linalg):with(plots):

pp:=(x,y)->[x,y];

Задается модельный сигнал (вариант 1), который следует заменить на сигнал своего варианта.

Это финитная функция единичной амплитуды, заданная на единичном отрезке-носителе.

> f:= proc(t) local z ;z:=piecewise(t<0,0,t<=1,1-sin(Pi*t),0); evalf(z);end;

> plot(f(t),t=-1..2,thickness=2,color=brown);



> T:=2*Pi;#период сигнала

> tau:=2;#длительность сигнала

Для полученной периодической функции вычисляем коэффициенты тригонометрического ряда Фурье



Коэффициенты Фурье вычисляются в аналитическом виде процедурой Fourier(T,F),

где параметрами процедуры являются величина периода T и имя процедуры, вычисляющей

значения сигнала на отрезке периодичности. В нашем случае это процедура Period, для

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

Процедура Fourier вычисляет коэффициенты Фурье и передает их как глобальные для процедуры объекты.

Интегрируемая функция имеет один параметр -- переменную интегрерования.

При этом функция должна быть определена на отрезке периодичности,

поэтому следует задать процедуру, в которой не должно быть других параметров:


>

> signal:=proc(x)global tau, T;(x/tau);;

> plot(signal(x),x=0..T,thickness=2,color=blue);


Таким образом, фактическим параметром, соответствующим названию функции при вызове процедуры Fourier должна быть процедура F.


>

> Fourier:=proc(T,f) global a0,A,B;:=2/T*evalf(Int(f(x),x=0..T)):;:=value(2/T*int(f(x)*cos(2*Pi*k*x/T),x=0..T));:=value(2/T*int(f(x)*sin(2*Pi*k*x/T),x=0..T));

end proc:


Вычислими выражения для коэффициентов и выведем их значения:


> Fourier(T,signal):

> a0;evalf(A,4);evalf(B,4);


Значения коэффициентов и можно вычислить подстановкой (процедура subs) натуральных чисел в полученные выражения

Зафиксируем число коэффициентов (степень )тригонометрического полинома

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

Фурье определяются процедурой Fourier


>

> Trig:=proc(t,n) local z;global k,T,a0,A,B;:=a0/2+sum(A*cos(k*2*Pi*t/T)+B*sin(k*2*Pi*t/T),k=1..n);

end:


Построим график триг. полинома пятой степени


> plot(Trig(x,5),x=-T..2*T);

> grafik:=plot(signal(x),x=-0.2..T+0.2,thickness=3,color=blue,discont=true):



Построим совместные графики сигнала и полиномов нескольких степеней


> CL:=brown,red,gold;

> RisTrig:=seq(plot(Trig(t,2*j),t=-0.1..2*T,color=CL[j]),j=1..3):

> display(RisTrig,grafik);;



>

> with(plottools):

Выполним спектральный анализ аналогового сигнала. Затем дискретизируем сигнал и также построим его спектр для сравнения и понимания различий в спектрах дискретного и аналогового сигналов. Присоединим процедуры, решающие эту задачу. Тексты процедур, их назначениВе и смысл параметров описаны в методическом пособии "Язык программирования системы Maple" глава 9.3 --- Кусочные функции. Процедура Fourier_T вычисляет в аналитической форме интегралы, через которые вычисляются коэффициенты ряда Фурье.


>

> Fourier_T:=proc(F,T0,TN,k::evaln) local T;A0,Ak,Bk;:=TN-T0;:=2/T*Int(F(x),x=T0..TN);:=2/T*int(F(x)*cos(k*x*2*Pi/T),x=T0..TN)::=2/T*int(F(x)*sin(k*x*2*Pi/T),x=T0..TN):

end proc:


Процедура Trig_polynom подстановкой номеров k в формулы коэффициентов вычисляет эти коэффициенты и сохраняет во вновь созданных массивах a,b [0..N].Заодно строится график тригонометрического полинома степени N (структура RisTrig, которая является глобальной и может быть выведена оператором display после вызова процедуры)..


>

> Trig_polynom:=proc(N,T,a0,ak,bk,k::evaln) local n,Pol,A0,A,B;a,b,RisTrig;:=array(0..N);b:=array(0..N);:=evalf(a0);a[0]:=A0;b[0]:=0;:=seq(evalf(subs(k=n,ak)),n=1..N);:=seq(evalf(subs(k=n,bk)),n=1..N);n from 1 to N do[n]:=A[n];b[n]:=B[n];do;:=A0/2+sum(A[k]*cos(2*Pi*k*x/T)+B[k]*sin(2*Pi*k*x/T),k=1..N)::=plot(Pol,x=-T/2..3*T/2,color=blue,thickness=2):

RETURN(Pol);proc:


Процедура ARR строит спектр амплитуд линейчатой гистограммой.


>

> ARR:=proc(n::integer,c) local L,H,ma,mi,k::integer,::array(0..n);:=c[0];mi:=c[0];:=line([0,c[0]],[n,c[n]],thickness=2,color=red);k from 1 to n doc[k]>ma then ma:=c[k];end if;c[k]<mi then mi:=c[k];end if;do;:=ma-mi;H=0 then RETURN(L) end;k from 0 to n doabs(c[k])<H/1000 then[k]:=ellipse([k,c[k]],0.2,0.01*H,color=blue);[k]:=plottools[arrow]([k,0],[k,c[k]],0.2,0.2,0,color=black);if;do;(Sim,list);

end:


Процедура Spectr вычисляет модули и аргументы комплексной (синусной) формы тригонометрического полинома.

График спектра фаз --- структура Risphi.


> Spectr:=proc(n,a,b,c,Risphi) local k,R,phi;k from 0 to n do[k]:=evalf(abs(I*a[k]+b[k]))::=evalf(argument(I*a[k]+b[k]));[k]:=[eval(k),eval(phi)];:;:=plot(convert(R,list)):

end:

Определим прямоугольный импульс f(t) единичной длительности (здесь полезно повторить вычисления для своего варианта сигнала, заменив только определение импульса с помощью команды piecewise).

Построим сигнал (F_for_all ) длительности и для него выполним вычисления спектральных характеристик.

Здесь и дальше команды не будут зависеть от варианта сигнала, поскольку название обрабатываемого сигнала теперь у всех одинаково (F_for_all)

Положим величину периода T=2 (для всех вариантов). Аналитические выражения коэффициентов вычисляются в процедуре Fourier_T.


>

> tau:=Pi;# длительность сигнала

> T:=2*Pi;# величина периода

> F_for_all:=proc(t) global tau;f(t/tau);end proc:;


Получим формулы для коэффициентов Фурье, зависящие от номера коэффициента k.


Ris1:=plot(F_for_all(t),t=0..T,color=brown,thickness=2):display(Ris1);



> Fourier_T(F_for_all,0,T,k):

> a0:=evalf(A0);a_k=Ak;b_k=Bk;


Значения величин С[k] в аналитическом виде можно вычислить (для любого натурального k) по формуле:


> > C[k]:=simplify(sqrt(Ak^2+Bk^2)):


Для построения спектра амплитуд зафиксируем число коэффициентов и с помощью процедуры Trig_polynom

вычислим коэффициенты a[k], b[k] тригонометрического полинома степени N, а также построим его график на отрезке, большем

длины периода. Массивы коэффициентов создаются при работе процедуры и являются глобальными, то есть доступными вне процедуры.


> N:=15;

> Trig_polynom(N,T,A0,Ak,Bk,k):

> display(RisTrig,Ris1) :


Амплитудный спектр (коэффициенты С[k]) вычисляется процедурой Spectr, которая как побочный эффект строит графическую структуру, являющуюся графиком спектра фаз. График спектра амплитуд строит процедура ARR.


> Spectr(N,a,b,c,'Risphi1'):;

> display(ARR(N,c));



> RisAMP:=display(ARR(N,c)):

> display(Risphi1);


Дискретизация задачи

Пакет 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, но в силу ортогональности системы тригонометрических функций, тригонометрические полиномы меньшей степени имеют те же самые коэффициенты (первые по порядку из массива коэффициентов).

Построение спектральных характеристик дискретного сигнала в Maple будем выполнять с помощью процедур ДПФ (дискретного преобразования Фурье, методическое пособие "Дискретное преобразование Фурье.pdf").

Присоединим модифицированную процедуру DTF из пособия, а также процедуру Setka и Spectr_DTF, последняя из которых вычисляет модули и аргументы комплексных коэффициентов ДПФ.


>

> DTF:=proc (y,N,Y,n) local k,j,p,h;:=2*Pi/N;

.1: for k from 0 to n do:=0;j from 0 to N-1 do:=p+evalf(y[j]*exp(-I*k*j*h));;[k]:=evalf(p/N);::;

> Setka:=proc(Nt,T,F,Y::array) local h,j,x,R;GrafF;:=T/Nt;j from 0 to Nt do:= evalf(j*h);[j]:= F(x);[j]:=[j,eval(Y[j])];:

.1: R[Nt]:=[j,eval(Y[0])];:=plot(convert(R,list),0..Nt,color=brown,=point,symbol=circle)::

> 6:Spectr_DTF:=proc(n,C,A,phi) local k,R;global Risphi;

.1: for k from 0 to n do[k]:=evalf(abs(C[k])):[k]:=evalf(argument(C[k]));[k]:=[eval(k),eval(phi[k])];:;:=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:=31;`число дискретных отсчетов -1`:

> n:=Nt;# в обычном случае:=60;# для демонстрации свойства симметрии

> C:=array(0..n):phi:=array(0..n):A:=array(0..n):;:=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));



> display(RisAMP);



СПИСОК ЛИТЕРАТУРЫ

maple delphi математический задача

1.Фаронов В.В. DELPHI. Программирование на языке высокого уровня. Учебник для вузов.-СПб.:Питер, 2005, 640с.

4.Кондратьев В.П. Языки программирования. Система Maple.ч. I. Основы работы в системе. Ч. III/. Язык программирования системы. Учебное пособие. Екатеринбург: УрТИСИ ГОУ ВПО «СибГУТИ», 2006.


Федеральное агентство связи ФГОБУ ВПО «Сибирский государственный университет телекоммуникаций и информатики» Уральский технический институт с

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ