Програмування у середовищі Turbo Pascal
Міністерство
освіти та науки України
Національний
Гірничий Університет
Кафедра
системного аналізу та управління
Курсова
робота
з
дисципліни: "Програмування"
Виконав:
Ст. гр. Саіт-10 Александров А.Ю.
Керівник: ас. Гаранжа Д.М.
Дніпропетровськ
2011
Зміст
Вступ
. Постановка задачі
. Таблиця символьних імен
. Блок-схеми
. Лістинг програми
. Лістинг результатів
Висновок
Список використаної літератури
Вступ
У науці та техніці часто мають справу з періодичними явищами
- явищами, що повторюються через деякий проміжок часу T, який має назву період. Прикладом
може бути рух електричної машини, що через певний проміжок часу робить
оберт і проходить через своє початкове положення. Цей же принцип
використовується і в більшості електротехнічних пристроїв, які базуються на
змінному струмі. Наприклад, мережа побутового живлення має частоту 50 Гц. Це
означає, що протягом секунди сигнал у мережі повторює своє початкове значення
50 разів.
Ця курсова робота виконана для відновлення вхідного сигналу,
який заданий графо аналітично за методом розкладання на гармоніки методом
Фур’є. У курсовій роботі наведені алгоритми та блок-схеми програм на мові Turbo Pascal, які реалізують поставлену задачу.
Мета роботи полягає у закріпленні навичок програмування у
середі Turbo Pascal .
1.
Постановка
задачі
У ході виконання курсової роботи потрібно скласти схему
алгоритму та програму, яка б обчислювала:
а) миттєве значення імпульсного сигналу на протязі двох
періодів з виводом результатів у табличному та графічному вигляді;
б) значення шпаруватості, частоти та коефіцієнта заповнення
імпульсів;
в) середнє значення напруги за час тривалості імпульсу;
г) спектральний склад імпульсів та активну ширину спектру;
д) діюче значення напруги за період.
Дані спектрального аналізу потрібно зберегти у типізованих
дискових файлах.
Відновити сигнал за усіченим до заданої гармоніки спектрам,
прочитаним з дискового файлу. Спектр усікається за таким
принципом:
+ № варіанта = 5 + 1 = 6.
Активну довжину імпульсу на рівні 0,5А.
Середньоквадратичну похибку відновленого сигналу.
Додаткове завдання.
Конвертувати дані про поточні значення спектру сигналу в
текстовий формат і зберегти на диску.
Вхідний сигнал задано формулою:
При: А=10V, =100ms, T=2000ms.
2. Вхідний сигнал
. Лістинг програми
kursovoy;Graph,
CRT;=10;=0.1;=2;=10000;=200;_usech=6;=0.001;=Pr/(n-1);=20;=240;=100;=20;=array
[1..n] of real;GD, GM, GE: integer;, U2: massiv; tu, k, q, f: real; ua:
real;DFT(a,b: massiv; n,s: integer; var c,d: massiv);i, j: integer; arg:real;
q,w:massiv;s=1 theni:=1 to n do begin[i]:=0; d[i]:=0;j:=1 to n do
begin:=-2*pi*(j-1)*(i-1)/n;[i]:=c[i]+a[j]*cos(arg);[i]:=d[i]+a[j]*sin(arg);;[i]:=c[i]/n;[i]:=d[i]/n;i:=1
to n do begin[i]:=0; w[i]:=0;j:=1 to n do begin:=
2*pi*(j-1)*(i-1)/n;[i]:=q[i]+a[j]*cos(arg)-b[j]*sin(arg);[i]:=w[i]+b[j]*cos(arg)-a[j]*sin(arg);;[i]:=sqrt(sqr(q[i])+sqr(w[i]));q[i]<=0
then[i]:=-c[i];;;F_U(t: real): real;t <= (Pr/2)
then_U:=-A*(1-exp(-1*t/tau))_U:=A*(1-exp(-1*(Pr-t)/tau));;Simpson_F9(sn:
integer): real;a, b, h, s: real; i: integer;:=Pr/2;:=Pr;:=(b-a)/(sn-1);:=0;i:=1
to sn-1
do:=s+4*F_U(a+i*h)+2*F_U(a+(i+1)*h);_F9:=h*(s+F_U(a)-F_U(b))/3;;Simpson_F12(sn:
integer): real;a, b, h, s: real; i: integer;:=0;:=Pr;:=(b-a)/(sn-1);:=0;i:=1 to
sn-1 do:=s+4*sqr(F_U(a+i*h))+2*sqr(F_U(a+(i+1)*h));_F12:=
h*(s+sqr(F_U(a))-sqr(F_U(b)))/3;;Graphic;x,y: real;:
integer;:=0;:=F_U(x);[1]:=y;(x0+round(x*xz), y0-round(y*yz));i:=2 to n do
begin:=x+dt;:=F_U(x);[i]:=y;(x0+round(x*xz),
y0-round(y*yz));;:=0;:=F_U(x);(x0+Pr*xz+round(x*xz), y0-round(y*yz));i:=2 to n
do begin:=x+dt;:=F_U(x);(x0+Pr*xz+round(x*xz), y0-round(y*yz));;;Graphic2;x,y:
real;: integer;:=0;:=U2[1];(x0+round(x*xz), y0-round(y*yz));i:=2 to n do
begin:=x+dt;:=U2[i];(x0+round(x*xz),
y0-round(y*yz));;:=0;:=U2[1];(x0+Pr*xz+round(x*xz), y0-round(y*yz));i:=2 to n
do begin:=x+dt;:=U2[i];(x0+Pr*xz+round(x*xz),
y0-round(y*yz));;;Parametri_Impulsa;x, y, tx: real;, l: integer;:=0;:=0;:=Pr/(bigN-1);i:=1
to bigN do beginF_U(x) > 0 then inc(l);:=x+tx;;:=
round(100*(Pr*l/bigN))/100;:=1/Pr; {F7}:=Pr/tu; {F8}:=1/q;('Parametry
impulsa:');('Chastota impulsa = ', f:0:2);('');('Skvaznost = ',
q:0:2);('');('Koeficient zapolneniya impulsa = ', k:0:2);;Sr_Napryazenie;a, b,
h1, h2: real;, sn2:
integer;:=Pr/2;:=Pr;:=sqrt(eps);:=h1/2;:=round((b-a)/h1)+1;:=round((b-a)/h2)+1;(Simpson_F9(sn2)-Simpson_F9(sn1))
> eps do:=sn2;:=h2;:=h1/2;:=round((b-a)/h2)+1;;('Srednie napriajenie za
vremea dlitelnosti impulsa = ',
Simpson_F9(sn2)/tu:0:5);('');;Parametri_Impulsa2;fr: file of real;, m:
integer;, d, b: massiv;, f, sum: real;(u1, b, n, 1, c, d);(fr,
'save.dat');(fr);:=0;:=0;i:=1 to n do
begin:=sqrt(sqr(c[i])+sqr(d[i]));:=-arctan(d[i]/c[i]);(fr, s, f);:=sum+s/2;sum <
0.95*ua then inc(m);;:=m+1;('Aktivna shirina spektra m = ', m);('Parametry
spektra sohraneny na disk');(fr);;Deistvyushee_Naprazenie;a, b, h1, h2: real;,
sn2:
longint;:=0;:=Pr;:=sqrt(eps);:=h1/2;:=round((b-a)/h1)+1;:=round((b-a)/h2)+1;(Simpson_F12(sn2)-Simpson_F12(sn1))
> eps do
begin:=sn2;:=h2;:=h1/2;:=round((b-a)/h2)+1;;:=sqrt(Simpson_F12(sn2)/Pr);('Effectivnoe
znachenie napryazeniya za period = ', ua:0:5);;Vostanovlenie_Signala;fr: file
of real;: integer;, d, b: massiv;, f, sum: real;(fr, 'save.dat');(fr);i:=1 to
N_usech do begin(fr, s, f);[i]:=s*cos(f);[i]:=s*sin(f);;i:=N_usech+1 to n do
begin[i]:=0;[i]:=0;;(c, d, n, -1, u2, b);(fr);;Impuls_Pri_05A;z: real;, l:
integer;:=0;i:=1 to n do beginU2[i] >= A/2 then inc(l);;l<>0 then
z:=round(100*Pr *l/n)/100;('Aktivnaya dlina impulsa na urovne 0,5A = ',
z:0:2);;SK_Oshibka;er: real;: integer;:=0;i:=1 to n do:=er+sqr(u1[i]-u2[i]);
{F16}:=sqrt(er/(n-1)/n);('Srednekvadraticheskaya oshibka = ',
er:0:5);;Sohranenie;ft: text;: integer;(ft, 'save.txt');(ft);i:=1 to n do
writeln(ft, u2[i]:0:5);(ft);;i, j: integer;: real;;:=Detect;(GD, GM,
'');:=GraphResult;GE<>GrOk then('Graph mode error!');;(red);(0, y0, 640,
y0);(x0, 0, x0, 480);(5, 5, 'U');(630, 245, 'T');(5, 245, '0');(x0+5+xz*2 div
2, 250, 'T/2');(x0+5+xz*4 div 2, 250, 'T');(x0+5+xz*6 div 2, 250,
'3T/2');(x0+5+xz*8 div 2, 250, '2T');(5, y0-yz*A, 'A');(0, y0+yz*A, '-A');(15,
y0-yz*A, 25, y0-yz*A);(15, y0+yz*A, 25, y0+yz*A);i:=1 to 10 do
begin(x0+(xz*2*i) div 2, 235, x0+(xz*2*i) div 2, 245);;(white);_Signala;;(green);;;;;_Impulsa;('');_Napryazenie;('');_Impulsa2;('');_Naprazenie;('');_Pri_05A;('');_Oshibka;;:=
0;j:=1 to n div 20 do begin;('-------------------------------');('| t | U(t) |
U2(t) |');('-------------------------------');i:=(j-1)*20+1 to j*20 do begin('|
', x:0:2, ' | ' ,U1[i]:0:2, ' ', '| ' ,U2[i]:0:2, ' |');:=
x+dt;;('-------------------------------');;;
Sohranenie;.
таблиця
лістинг программа pascal
4. Блок-схеми
Рис.1. Блок-схема процедури DFT. Робить пряме та зворотне
перетворення Фур’є
Рис.2. Блок-схема процедури F_U. Задає функцію
Рис.3. Блок-схема процедури Simpson_F9.
Формулі Сімпсона для значення середньої напруги
Рис.4. Блок-схема процедури Simpson_F12.
Формулі Сімпсона для значення ефективної напруги
Рис.5. Блок-схема процедури Graphic. Малює графік функції
Рис.6. Блок-схема процедури Graphic2. Малює графік відновленої функції
Рис.7. Блок-схема процедури Parametri_Impulsa. Розраховує шпаруватість, коефіцієнт
та частоту заповнення імпульсу
Рис.8. Блок-схема процедури SR_Napryzenie. Розраховує значення середньої
напруги
Рис.9. Блок-схема процедури Parametri_Impulsa2. Розраховує активну ширину спектра
і зберігає данні про спектральній аналіз на диск у файл Save.dat
Рис.10. Блок-схема процедури Deistvyushee_Naprazenie. Розраховує значення ефективної
напруги
Рис.11. Блок-схема процедури Vostanovlenie_Signala. Відновлює сигнал за данними з файла Save.dat
Рис.12. Блок-схема процедури Impuls_Pri_05A. Активну довжину імпульсу на рівні 0,5А
Рис.13. Блок-схема процедури SK_Oshibka.
Розраховує помилку
№
|
Змінна
|
Фізична величина
|
Что обозначает
|
1
|
A
|
V
|
Наруга
|
2
|
tau
|
mHz
|
Частота
|
3
|
Pr
|
Ms
|
Період
|
4
|
bigN
|
-
|
Кількість точок для розрахунку імпульса
|
5
|
N
|
-
|
Кількість точок
|
6
|
N_usech
|
-
|
Кількість гармонік
|
7
|
dt
|
-
|
Змінна кроку дискретизації
|
8
|
eps
|
-
|
Точність для формули Сімпсона
|
9
|
y0
|
-
|
Зміщення по у
|
10
|
x0
|
-
|
Зміщення по х
|
11
|
xz
|
-
|
Масштаб по х
|
12
|
yz
|
-
|
Масштаб по у
|
13
|
U1
|
|
Значення заданої функції
|
14
|
U2
|
|
Значення усіченої функції
|
15
|
n
|
-
|
Кількість точок дискретизації
|
16
|
s
|
-
|
Значення вектора S
|
17
|
i
|
-
|
Змінна циклу
|
j
|
-
|
Змінна циклу
|
19
|
GD
|
-
|
Graph Driver
|
20
|
GM
|
-
|
Graph Mode
|
21
|
GE
|
-
|
Graph error
|
22
|
sn
|
-
|
Значення за формулою Сімпсона
|
23
|
l
|
-
|
Кількість точок функції >0
|
24
|
fr
|
-
|
Файл
|
25
|
er
|
%
|
Середньоквадратична похибка
|
26
|
m
|
-
|
Активная ширина спектра
|
27
|
sum
|
-
|
Активна довжина спектра
|
28
|
z
|
Ms
|
Активна довжина імпульсу на рівні 0,5А
|
29
|
h
|
-
|
Величина кроку у формулі Сімпсона
|
30
|
x
|
-
|
Координата х
|
31
|
y
|
-
|
Координата у
|
32
|
tx
|
-
|
Крок при підрахуванні імпульсу
|
33
|
t
|
-
|
Змінна
t
|
34
|
tu
|
Ms
|
Довжина імпульсу
|
35
|
k
|
-
|
36
|
q
|
Ms-1
|
Шпаруватість
|
37
|
f
|
mHz
|
Частота імпульсу
|
38
|
ua
|
V
|
Ефективна напруга
|
39
|
a
|
-
|
Границя інтегрування
|
40
|
b
|
-
|
Границя інтегрування
|
5.
Лістинг
результатів
Скріншоти розрахунків
Скріншоти значень сигналу
Завдання для MC Excel
Рис. 16. Функція у MC Excel
Висновок
За допомогою методу розкладання на гармоніки, було відновлено
вхідний сигнал за 6 гармоніками. При збільшенні числа гармонік, за якими
відновлюється сигнал, різниця між вхідним та відновленним сигналом наближається
до нуля. При зменшенні числа гармонік графік відновленного сигналу поступово
відхиляється від вхідного.
У ході роботи був побудований графік вхідного та відновленого
сигналу, виведені дані вхідного та відновленого сигналів та розрахунки згідно
варіанту.
Дані вхідного сигналу, фазового спектру збережені у
типізовані файли з назвою "Save.dat". Додатково, фазовий
спектр збережений у текстовий файл "Save.txt" для побудови у Microsoft Excel заданого сигналу у функції часу.
Список використаної літератури
1. Аладьев В.З. Тупло В.Г. Turbo Pascal для
всех. -К.: Техника, 1993. -176с.
2. Немнюгін С.А. Turbo Pascal.-М.:Питер, 2000.
-491стр.