Решение задачи средствами Maple




Тема: «Спектральный анализ сигналов»

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

· изучить язык программирования (BASIC или ПАСКАЛЬ), типы данных, основные операторы, функции и процедуры, механизм передачи параметров в них;

· изучить основные алгоритмы вычислительной математики: решение уравнений (поиск корня уравнения), численное интегрирование, аппроксимация данных по методу наименьших квадратов, численное решение обыкновенных дифференциальных уравнений, методы гармонического анализа периодических функций;

· освоить приемы работы в визуальных средах программирования (Visual Basic, Delphi),использование объектов, их свойств и событий;

· освоить приемы работы в математических (Maple) и инженерных (MathCAD, MATLAB) пакетах для обработки и визуализации данных и результатов вычислений;

· проделать вычисления демонстрационного варианта программы на языке системы Maple для сигнала своего варианта.

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

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

Задача:

Рассматривается функция F(t), представляющая собой периодический (период 2π) сигнал единичной амплитуды длительности T. Значение величины T есть наименьший положительный корень полинома (таблица 1- по вариантам), который вычисляется любым из известных методов нахождения корней уравнений.

1. Программу, реализующую вычисление корня Т, написать на языке программирования Pascal ABC. Для построенного сигнала вычислить по формулам Бесселя коэффициенты конечной суммы Фурье и записать их в файл.

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

 

Оформление:

v Формат А4.

v Титул

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

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

v Блок-схемы

v Общая структура программы на языке программирования

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

v Литература

 

Таблица 1. Варианты полиномов

№ варианта Полином
  x^5-8*x-1
  x^5-3*x-3
  2*x^4-x^3-8
  x^6-4*x^4-2
  x^6-4*x^4-3
  x^6-3*x^3-2
  x^5-7*x-14
  x^5-x^3-1
  x^5-2*x^3-4
  x^6-3*x^4-5

Решение задачи средствами я.п. Pascal.

 

 

uses CRT;

const

epsilon=0.00000001;

Npoint=31;{число точек дискретизации}

nkoef=50;

h=2*Pi/Npoint;{шаг дискретизации}

type

fourier=array[0..nkoef] of real;

VAR

a,b,ya,yb,x,y:real;

x0,delta,x1:real;

ak,bk:fourier; {коэффициенты}

T:real; {корень полинома }

function f(t:real):real;{полином}

begin

f:=t*t*t*t*t-2*t*t*t-4; {здесь нужна формула своего варианта полинома}

{f:=t*t*t*t*t-t*t*t-1;}

end;

 

function f1(t:real):real;{производная полинома}

begin

f1:=5*t*t*t*t-6*t*t;

end;

 

function signal(x,T:real):real;

var

y:real;

begin

y:=0;

if x<=T then y:=1;

signal:=y;

end;

 

 

procedure Bessel(m,Nt:integer;var A,B:fourier);

var

p,q:real;

k,j:integer;

begin

for k:=0 to m do

begin

p:=0;q:=0;

for j:=0 to Nt-1 do

begin

x:=j*h; {h-- шаг дискретизации}

y:=signal(x,T); {T -глобальная переменная}

p:=p+y*cos(k*x);

q:=q+y*sin(k*x);

end;

A[k]:=2*p/Nt;

B[k]:=2*q/Nt;

writeln(k:4,A[k]:8:4,B[k]:12:4);

end;

 

end;

procedure zapis(m:integer;A,B:fourier);

var

k:integer;

fn:string;

ft:text;

begin

fn:='D:\коэфф.txt';

assign(ft,fn);

rewrite(ft);

for k:=0 to m do

writeln(ft,k:6,A[k]:10:4,B[k]:10:4);

close(ft);

end;

 

{ ===========================================}

begin

clrscr;

{----- локализация корня------}

repeat

writeln('Задайте a,b');

readln(a,b);

ya:=f(a);

yb:=f(b);

writeln(a:6:2,b:5:1,ya:12:8,' ',yb);

until ya*yb<0;

{==========метод касательных=====================}

x0:=b;

delta:=1;

repeat

x1:=x0-f(x0)/f1(x0);

delta:=abs(x0-x1);

x0:=x1;

writeln (x0);

until delta<epsilon;

 

{==============================================}

writeln('корень=',x0,y:18:8);

readln;

T:=x0;

{вычислен корень Т}

{-------- коэффициенты Фурье по формулам Бесселя---- }

Bessel(nkoef,Npoint,ak,bk);

readln;

zapis(nkoef,ak,bk);

 

end.


 

Результаты вычислений

0 0.5806 0.0000

1 0.3474 0.3655

2 -0.0157 0.3099

3 -0.0645 0.0554

4 0.0790 0.0080

5 0.0804 0.1039

6 -0.0124 0.0809

7 0.0082 -0.0057

8 0.0740 0.0152

9 0.0405 0.0649

10 -0.0057 0.0220

11 0.0359 -0.0199

12 0.0656 0.0206

13 0.0191 0.0390

14 0.0046 -0.0123

15 0.0533 -0.0229

16 0.0533 0.0229

17 0.0046 0.0123

18 0.0191 -0.0390

19 0.0656 -0.0206

20 0.0359 0.0199

21 -0.0057 -0.0220

22 0.0405 -0.0649

23 0.0740 -0.0152

24 0.0082 0.0057

25 -0.0124 -0.0809

26 0.0804 -0.1039

27 0.0790 -0.0080

28 -0.0645 -0.0554

29 -0.0157 -0.3099

30 0.3474 -0.3655

31 0.5806 0.0000

32 0.3474 0.3655

33 -0.0157 0.3099

34 -0.0645 0.0554

35 0.0790 0.0080

36 0.0804 0.1039

37 -0.0124 0.0809

38 0.0082 -0.0057

39 0.0740 0.0152

40 0.0405 0.0649

41 -0.0057 0.0220

42 0.0359 -0.0199

43 0.0656 0.0206

44 0.0191 0.0390

45 0.0046 -0.0123

46 0.0533 -0.0229

47 0.0533 0.0229

48 0.0046 0.0123

49 0.0191 -0.0390

50 0.0656 -0.0206


Решение задачи средствами Maple

Программа построения АЧХ для периодической функции, заданной аналитически на периоде

 

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

> N:=51;

> P:=x^5-2*x^3-4; #полином

> T:=fsolve(P,x=0..3);

N - число гармоник

> plot(P,x=T-0.5..T+0.5,thickness=2,color=blue):;

> f:=proc(t) local z;

z:=piecewise(t<0,0,t<T,1,0);end:

> plot(f(x),x=-1..2*Pi,color=blue,thickness=2,discont=true);

>

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

(если функция F(t) допускает вычисление первообразной) по формулам

Интегрирование выполняется по любому отрезку длины периода

>

> a0:=1/Pi*Int(f(t),t=-Pi..Pi):value(%);

>

> ak:=1/Pi*Int(f(t)*cos(k*t),t=-Pi..Pi):value(%);

> bk:=1/Pi*Int(f(t)*sin(k*t),t=-Pi..Pi):;value(%);

> A:=seq(evalf(subs(k=n,ak),5),n=1..N):;

> B:=seq(evalf(subs(k=n,bk),5),n=1..N):;

>

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

степени n.

> Trig:=proc(t,n) local z,k;global a0,A,B;

z:=a0/2+sum(A[k]*cos(k*t)+B[k]*sin(k*t),k=1..n);

end;

>

>

>

>

> plot(Trig(x,10),x=-2*Pi..2*Pi,numpoints=1000);

>

>

>

>

Совместный график

> ris1:=plot(Trig(x,20),x=-2*Pi..2*Pi,numpoints=1000):

> ris2:=plot(f(x),x=-Pi..Pi,thickness=3,color=blue):

> display(ris1,ris2);

> col:=[brown,black,green];

> Ris:=seq(plot(Trig(x,3*n),x=-2*Pi..2*Pi,numpoints=100,color=col[n]),n=1..3):

> display(Ris,ris2);

>

>

График спектра амплитуд

> k:='k';c:=array(0..N);num:=array(0..N);

> c[0]:=evalf(abs(a0),3);

num[0]:=0;

> for k from 1 to N do

c[k]:=evalf(abs(A[k]+I*B[k]),3):

num[k]:=k;

#print(k,num[k],c[k]);

end:;

>

> Risc:=zip((x,y)->[x,y],num,c):

> arr:=array(0..N);

> for i from 0 to N do

arr[i]:=arrow([i,0],[i,c[i]],0.2,0.2,0,color=black);

end:;

> Ar:=convert(arr,list):;

> Rsym:=plot(Risc,style=point,symbol=circle,symbolsize=20,color=blue,title=`спектр амплитуд`):

> display(Ar,Rsym);

Чтение коэффициентов Фурье, вычисленных программой на Паскале

> fn:=`d:\\коэфф.txt`;

> L:=readdata(fn,3):;

> with(linalg):

> Nkoef:=vectdim(L);

> j:='j';

> for j from 1 to Nkoef do

c[j-1]:=evalf(sqrt(L[j,2]^2+L[j,3]^2),4);

#print(j,c[j-1]);

end:

> for i from 0 to Nkoef do

arr[i]:=arrow([i,0],[i,c[i]],0.2,0.2,0,color=blue);

end:;

> Ardiskr:=convert(arr,list):;

> Rlin:=plot(Risc,thickness=2,color=brown,title=`сравнение спектров амплитуд`):

> display(Ardiskr,Rlin,Ar,Rsym);

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>

>



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: