Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ООП / 1 / 1 / 1

.pdf
Скачиваний:
30
Добавлен:
01.06.2015
Размер:
174.5 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Федеральное государственное автономное образовательное учреждение высшего профессионального образования «Южный федеральный университет»

Факультет

РАДИОТЕХНИЧЕСКИЙ

Кафедра

 

МИКРОПРОЦЕССОРНЫХ СИСТЕМ

Отчет по лабораторной работе №1 по дисциплине:

«Объектно-ориентированное программирование».

На тему: «Спектральный анализ кусочно-линейных функций с разрывами».

Выполнил:

 

студент группы Р-102

В.Г.Горчаков

Проверил:доцент каф. МПС

М.И.Ледовской

Таганрог 2013 г.

Цель лабораторной работы

Изучить принципы создания приложения «Спектральный анализ кусочно-линейных функций с разрывами» для Windows в инструментальной среде Delphi 7

Интерфейс приложения

графический

свойство

событие

обработчик

компонент

 

 

 

 

 

 

 

Button1

Caption

OnClick

Button1Click

Button2

Caption

OnClick

Button2Click

GroupBox1

Caption

 

 

StringGrid1

GoEditing

 

 

PaintBox1

 

OnPaint

PaintBox1Paint

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type

TForm1 = class(TForm) GroupBox1: TGroupBox; Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit;

UpDown1: TUpDown;

UpDown2: TUpDown;

UpDown3: TUpDown;

UpDown4: TUpDown;

UpDown5: TUpDown;

UpDown6: TUpDown; GroupBox3: TGroupBox; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel;

Edit8: TEdit;

Edit9: TEdit;

Edit10: TEdit;

Edit11: TEdit;

Edit12: TEdit; UpDown8: TUpDown; UpDown9: TUpDown; UpDown10: TUpDown; UpDown11: TUpDown; UpDown12: TUpDown; Label1: TLabel; GroupBox2: TGroupBox; Label8: TLabel;

Edit7: TEdit; UpDown7: TUpDown; Button1: TButton; PaintBox1: TPaintBox;

procedure EditClick(Sender: TObject); procedure PaintBoxPaint(Sender: TObject); procedure ButtonClick(Sender: TObject);

private

{Private declarations } public

{Public declarations } end;

Var

Form1: Tform1;

// параметры гармоник

M: array[0..5] of real;

// амплидуда

Q: array[1..5] of real;

// фаза

f1: real;

// частота первой гармоники

implementation

{$R *.DFM}

// сумма гармоник

function SumHarm(t: real): real; var

k: integer; y: real;

begin y:=M[0]/2; for k:=1 to 5 do

y:=y+M[k]*cos(2*pi*k*f1*t+Q[k]);

SumHarm:=y;

end;

// гармонический синтез procedure HarmSynt;

const RowCount = 12; // количествостроктаблицыStringGrid HarmCount=8; // количество гармоник + 1

var

Form1: Tform1;

//дискретные значения времени

MasT: array[1..RowCount-1] ofreal;

//значения функции в точках разрыва

MasYl: array[1..RowCount-1] of real; // левые MasYr: array[1..RowCount-1] of real; // правые

implementation

{$R *.dfm}

procedureFuncSpectr;

var

 

 

l,p: integer;

// левый нижний угол области вывода

w,h: integer;

// ширина и высота области вывода

t: real;

// время

tmax: real;

 

// верхняя граница времени

dt: real;

// приращение

Ymax: real;

// верхнее значение функции

N: integer;

// количество точек задания функции

Harm1,Harm2: array[1..HarmCount] of real; // значениягармоникспектра A,A1,A2,B,B1,B2,M: array [0..HarmCount] of real; // амплитудыгармоник

Q: array[0..HarmCount] of real;

// фазыгармоник

f1: real;

// частота первой гармоники

mt,mr: real;

// масштабы

 

cx0,cy0: integer; // координаты начала координат графиков функции chy0: array[0..HarmCount] of integer; // испектра

cy: integer;

// текущаяY-координата

z: real;

// вспомогательные переменные

i,k: integer;

 

begin

// область вывода графиков with Form1.PaintBox1 do begin

Canvas.Pen.Color:=clBlack;

Canvas.Brush.Color:=clWhite;

Canvas.Rectangle(0,0,Width,Height);

l:=70; // X-координата левого верхнего угла p:=Height-20; // Y-координата левого верхнего угла

h:=Height-50; // высота w:=Width-85; // ширина end;

//количество точек задания функции

N:=1;

while (MasT[N+1]>MasT[N]) and (N<RowCount-1) do N:=N+1;

//спектральный анализ кусочно-линейной функции с разрывами if N>1 then

begin tmax:=MasT[N];

f1:=1/tmax; dt:=(MasT[N]-MasT[1])/(N-1); M[0]:=0;

for i:=1 to N do M[0]:=M[0]+MasYl[i]+MasYr[i]; M[0]:=M[0]/2/N;

for k:=1 toHarmCountdo begin

z:=Pi*f1*k*dt;

A1[k]:=0; A2[k]:=0; B1[k]:=0; B2[k]:=0; for i:=1 to N do

begin

A1[k]:=A1[k]+MasYl[i]*Sin(2*z*i)-MasYr[i]*Sin(2*z*(i-1)); A2[k]:=A2[k]+MasYl[i]-MasYr[i]*Sin(z*(2*i-1)); B1[k]:=B1[k]+MasYr[i]*Cos(2*z*(i-1))-MasYl[i]*Cos(2*z*i); B2[k]:=B2[k]+MasYl[i]-MasYr[i]*Cos(z*(2*i-1));

end; A[k]:=A1[k]/z/N-Sin(z)*A2[k]/Sqr(N)/N;

B[k]:=B1[k]/z/N+Sin(z)*B2[k]/Sqr(N)/N;

M[k]:=Sqrt(Sqr(A[k])+Sqr(B[k]));

if A[k]<>0 then Q[k]:=-ArcTan(B[k]/A[k]); end;

end;

// максимальное значение функции

 

Ymax:=0;

 

for i:=1 to N do

 

begin

 

if Abs(MasYl[i]) >YmaxthenYmax:=Abs(MasYl[i]);

 

if Abs(MasYr[i]) >YmaxthenYmax:=Abs(MasYr[i]);

 

end;

 

// масштабы

 

mr:=(h-20)/(2+2*HarmCount); // относительных единиц по Y-координате

// по Y-

координате

 

if N>1 thenmt:=(w-15)/tmax; // времени по X-координате

 

with Form1.PaintBox1.Canvas do begin

//разметка осей для графика функции

//вертикальная ось

cx0:=l; cy:=p-h;

TextOut(cx0+w div 4,cy-25,'Функция'); MoveTo(cx0,cy); LineTo(cx0,cy+Round(2*mr)); MoveTo(cx0-3,cy); LineTo(cx0+3,cy); TextOut(cx0-20,cy-7,'+1');

cy0:=cy+Round(mr); TextOut(cx0-63,cy0-10,'Y(t)/Ymax');

// горизонтальнаяось

MoveTo(cx0,cy0); LineTo(cx0+w,cy0); if N>1 then

for i:=1 to N do begin

MoveTo(cx0+Round(MasT[i]*mt),cy0-3);

LineTo(cx0+Round(MasT[i]*mt),cy0+3); if (i<>1) and (i mod 2 = 1) then

TextOut(cx0+Round(MasT[i]*mt)-7,cy0+2,FloatToStr(MasT[i])); end;

TextOut(w+70,cy0+2,'t');

cy:=cy0+Round(mr); MoveTo(cx0-3,cy); LineTo(cx0+3,cy); TextOut(cx0-20,cy-7,'-1');

// разметка осей для графиков спектра cy:=cy+30;

TextOut(cx0+wdiv 5,cy-20,'Спектрфункции'); MoveTo(cx0,cy); LineTo(cx0,p+10);

for k:=0 toHarmCountdo begin

MoveTo(cx0-3,cy); LineTo(cx0+3,cy); chy0[k]:=cy+Round(mr); TextOut(cx0-45,chy0[k]-7,'Y'+IntToStr(k)+'/M1');

MoveTo(cx0,chy0[k]); LineTo(cx0+w,chy0[k]); if N>1 then

begin

MoveTo(cx0+Round(tmax*mt),chy0[k]-3); LineTo(cx0+Round(tmax*mt),chy0[k]+3); end;

TextOut(w+70,chy0[k]+2,'t');

cy:=chy0[k]+Round(mr); end;

MoveTo(cx0-3,cy); LineTo(cx0+3,cy);

//построение графика функции

Pen.Color:=clRed;

Pen.Width:=2;

MoveTo(cx0,cy0); ifYmax<>0 then for i:=1 to N do begin

LineTo(cx0+Round(MasT[i]*mt),cy0-Round((MasYl[i]/Ymax)*mr)); MoveTo(cx0+Round(MasT[i]*mt),cy0-Round((MasYl[i]/Ymax)*mr)); LineTo(cx0+Round(MasT[i]*mt),cy0-Round((MasYr[i]/Ymax)*mr)); MoveTo(cx0+Round(MasT[i]*mt),cy0-Round((MasYr[i]/Ymax)*mr)); end;

Pen.Width:=1;

//построение графиков спектра

t:=0;

dt:=0.001;

if (N>1) and (M[1]<>0) then begin

MoveTo(cx0,chy0[0]-Round(M[0]/M[1])); LineTo(cx0+Round(tmax*mt),chy0[0]-Round(M[0]/M[1])); repeat

for k:=1 toHarmCountdo begin

Harm2[k]:=(M[k]/M[1])*cos(2*Pi*k*f1*t+Q[k]);

if t=0 thenMoveTo(cx0+Round(t*mt),chy0[k]-Round(Harm2[k]*mr)) else MoveTo(cx0+Round((t-dt)*mt),chy0[k]-Round(Harm1[k]*mr)); LineTo(cx0+Round(t*mt),chy0[k]-Round(Harm2[k]*mr)); Harm1[k]:=Harm2[k];

end; t:=t+dt;

until (t>=tmax); end;

end;

end;

procedure Tform1.FormCreate(Sender: Tobject); var

i: integer; begin

// количествостолбцовтаблицы StringGrid StringGrid1.ColCount:= 3;

// разметкатаблицы

StringGrid1.ColCount:= 3; StringGrid1.Cells[0,0]:= ' t'; StringGrid1.Cells[1,0]:= ' Y(t-0) '; StringGrid1.Cells[2,0]:= ' Y(t+0) '; for i:=1 to RowCount-1 do

begin

// заполнениетаблицынулями

Form1.StringGrid1.Cells[0,i]:= '0';

Form1.StringGrid1.Cells[1,i]:= '0';

Form1.StringGrid1.Cells[2,i]:= '0';

// инициализациямассивовнулевымизначениями

MasT[i]:=StrToFloat(Form1.StringGrid1.Cells[0,i]);

MasYl[i]:=StrToFloat(Form1.StringGrid1.Cells[1,i]);

MasYr[i]:=StrToFloat(Form1.StringGrid1.Cells[2,i]); end;

end;

procedure Tform1.Button1Click(Sender: Tobject); var

i:integer; begin

for i:=1 to RowCount-1 do begin

// обновление значений времени и функции

MasT[i]:=StrToFloat(Form1.StringGrid1.Cells[0,i]);

MasYl[i]:=StrToFloat(Form1.StringGrid1.Cells[1,i]);

MasYr[i]:=StrToFloat(Form1.StringGrid1.Cells[2,i]); end;

FuncSpectr; end;

procedure Tform1.PaintBoxPaint(Sender: Tobject); begin

FuncSpectr; end;

procedure Tform1.Button2Click(Sender: Tobject); begin

Application.Terminate; end;

end.

Вывод: изучил принципы создания приложения «Спектральный анализ кусочно-линейных функций с разрывами» для Windows в

инструментальной среде Delphi 7. Изучили основные свойства объектов среды программирования Delphi 7.

Соседние файлы в папке 1
  • #
    01.06.201578.58 Кб291.docx
  • #
    01.06.2015174.5 Кб301.pdf
  • #
    01.06.2015434 б26Project1.cfg
  • #
    01.06.20152.6 Кб25Project1.dof
  • #
    01.06.2015188 б25Project1.dpr
  • #
    01.06.2015876 б25Project1.res
  • #
    01.06.2015201 б25Project1.~dpr