Professional Documents
Culture Documents
Семинарски рад
Коришћење MATLAB –а
у дигиталним системима управљања
Ментор: Студент:
др Радојка Крнета Крста Гавриловић, 3150/2001
У Чачку,
јануар 2007
САДРЖАЈ
1.Основе Matlab-а
1.1 Вектори
1.2 Функције
1.3 Графички приказ (Plotting)
1.4 Полиноми
1.5 Матрице
1.6 Штампање
1.7 Коришћење M-фајлова у Matlab-у
1.8 Помоћ у Matlab-у
3.1 Представљање
3.2 Конверзија коришћењем c2dm
3.3 Стабилност и временски одзив
3.4 Дискретизовано ГМК
6.1 Представљање
6.2 Регулатор
6.3 Карактеристике P, I, и D регулатора
6.4 Пример
6.4.1 Јединични одзив отворене спреге
6.4.2 Пропорционални регулатор
6.4.3 Пропорционални-диференцијални регулатор
6.4.4 Пропорционални-интегрални регулатор
6.4.5 Пропорционални-интегрални-диференцијални регулатор
7.1Bode-ови дијаграми
7.1.1 Претек појачања и фазе
7.1.2 Фреквенција пропусног опсега
7.1.3 Одзив затворене спреге
8.MATLAB примери
1.Основе Matlab-а
1.1 Вектори
1.2 Функције
1.3 Графички приказ (Plotting)
1.4 Полиноми
1.5 Матрице
1.6 Штампање
1.7 Коришћење M-фајлова у Matlab-у
1.8 Помоћ у Matlab-у
Команде MATLAB-a коришћене за ову област су: plot, polyval, roots, conv, deconv,
polyadd,
Inv, eig, poly
1.1 Вектори
Креираћемо векторе тако што ћемо унети бројну вредност сваког вектора (одвајамо их
размаком између следећих заграда).
a = [1 2 3 4 5 6 9 8 7]
Matlab ће израчунати:
a=
1 2 3 4 5 6 9 8 7
t = 0:2:20
t=
0 2 4 6 8 10 12 14 16 18 20
b=a+2
b=
3 4 5 6 7 8 11 10 9
Ако желимо да саберемо два вектора, једначина сабирања два вектора имаће следећи
облик:
c=a+b
c=
4 6 8 10 12 14 20 18 16
Одузимање вектора постиже се стављањем знака минус ``-`` између два вектора.
1.2 Функције
sin(pi/4)
ans =
0.7071
Ако се одлучимо за неку другу функцију можемо откуцати help [function name] у
Matlab
командном прозору.
t=0:0.25:7;
y = sin(t);
plot(t,y)
1.4 Полиноми
s 4 3s 3 15s 2 2 s 9
x = [1 3 -15 -2 9]
x=
1 3 -15 -2 9
Matlab интерпретира вектор дужине n+1 као полином n-тог реда. Ако полином нема
коефи
циент, мора се унети нула на одговарајуће место у вектору. Нпр:
s4 1
y = [1 0 0 0 1]
z = polyval([1 0 0 0 1],2)
z=
17
Такође, можемо наћи корен полинома. Ово је корисно када имамо полиноме виших
редова
као нпр.
s 4 3s 3 15s 2 2 s 9
Проналажење корена полинома је лако, као и само уношење команде у Matlab;
ans =
-5.5745
2.5836
-0.7951
0.7860
z=
1 6 16 16
Ако желимо да поделимо два полинома користићемо команду deconv. Нпр. поделимо, z
са
y и добићемо резултат x.
[xx, R] = deconv(z,y)
xx =
1 2
R=
0 0 0 0
Као што се види, x је вектор полинома, а ако се y не садржи у z онда ће вектор остатка
бити различит од нуле.
1.5 Матрице
Уношење матрица у Matlab је исто као и уношење вектора, где је сваки ред ( врста )
матрице одвојен тачка - запетом.
B=
1 2 3 4
5 6 7 8
9 10 11 12
B=[1 2 3 4
5 6 7 8
9 10 11 12]
B=
1 2 3 4
5 6 7 8
9 10 11 12
C = B'
C=
1 5 9
2 6 10
3 7 11
4 8 12
D=B*C
D=
30 70 110
70 174 278
110 278 446
D =C*B
D=
107 122 137 152
122 140 158 176
137 158 179 200
152 176 200 224
Ако имамо квадратну матрицу, нпр. матрицу Е, можемо је, такође, помножити са самом
собом онолико пута колико нам је потребно, да бисмо добили жељену вредност степена
те матрице.
E^3
ans =
37 54
81 118
Ако хоћемо да сваки елеменат матрице подигнемо на трећи степен, морамо сваки
елеменат матрице подићи на трећи степен коришћењем команде ^.
E^3
ans =
1 8
27 64
X = inv(E)
X=
-2.0000 1.0000
1.5000 -0.5000
ans =
-0.3723
5.3723
p = poly(E)
p=
roots(p)
ans =
5.3723
-0.3723
1.6 Штампање
У Matlab-у потребно је после и приликом креирања m-fajla, да се тај фајл сачува под
неким именом у work директоријуму Matlab-а.
Покретање помоћи у Matlab-у врши се командом help у командном прозору, или ако
нам је
непозната нека команда и желимо да знамо њену функцију тада се уноси следеће: help
commandname.
2.Упуство за моделирање система
У овом примеру узећемо играчку воза која се састоји од агрегата и шасије. Воз путује
само у једном правцу, а ми желимо да направимо контролу (управљање) да воз има
могућност благог почетка кретања и благог заустављања са константном брзином
вожње.
На основу Њутновог закона знамо да збир сила које делује на масу је једнак убрзању
масе У овом случају силе које делују на масу M1 су сила опруге, сила трења и силе у
агрегату. Силе на масу M2 су сила опруге и сила трења.У вертикалном правцу,
гравитациона сила не постоји, већ само нормална сила земљине теже. Једначине
кретања у хоризонталном правцу дате су у следећим релацијама:
M 1 x1 F k ( x1 x 2 ) M 1 g x1
.. .
M 2 x 2 k ( x1 x 2 ) M 2 g x 2
.. .
2.3 Променљиве стања и излазне једначине
x1 v1
.
v1 k M 1 x1 gv1 k x2 F
.
M1 M1
x2 v2
.
x gv 2
v2 k M 2 k
.
M2 2
Узећемо да је излаз система брзина агрегата (мотора). Излазна једначина ће гласити:
y v1
1. Функција преноса
sX 1 ( s ) V1 ( s )
sX 2 ( s ) V2 ( s ) Y ( s ) V1 ( s )
sV1 ( s ) k X ( s ) gV1 ( s ) k X (s) 1 F ( s)
M1 1 M2 2 M1
sV2 ( s ) k X (s) k X ( s ) gV2 ( s )
M2 1 M2 2
Када нађемо функцију преноса , нула као почетни услов мора бити усвојена.
Функција преноса добиће следећи облик:
Y (s) M 2 s 2 M 2 gs 1
F ( s) M 1 M 2 s 2 (2 M 1 M 2 g ) s 2 ( M 1 k M 1 M 2 ( g ) 2 M 2 k ) s kg ( M 1 M 2 )
2. Простор стања
x2
v 2
У m-file унећемо једначине, али пре тога бројне вредности параметара, пошто Matlab не
препознаје симболичке променљиве.
M1 = 1 kg
M2 = 0.5 kg
k = 1 N/sec
F= 1 N
u = 0.002 sec/m
g = 9.8 m/s^2
уносимо следеће:
M1=1;
M2=0.5;
k=1;
F=1;
u=0.002;
g=9.8;
Сада имамо два избора и то: да користимо функцију преноса, или простор стања за
представљање система.
Ако одаберемо функцију преноса онда уносимо следеће команде:
A=[ 0 1 0 0;
-k/M1 -u*g k/M1 0;
0 0 0 1;
k/M2 0 -k/M2 -u*g];
B=[ 0;
1/M1;
0;
0];
C=[0 1 0 0];
D=[0];
3.1 Представљање
3.2 Конверзија коришћењем c2dm
3.3 Стабилност и временски одзив
3.4 Дискретизовано ГМК
Команде MATLAB-a коришћене за ову област су: c2dm, pzmap, zgrid, dstep, stairs, rlocus
3.1 Представљање
1.Функција преноса
X (s) 1
F ( s ) Ms bs k
2
M = 1 kg
b = 10 N.s/m
k = 20 N/m
F(s) = 1
M=1;
b=10;
k=20;
num=[1];
den=[M b k];
Ts=1/100;
[numDz,denDz]=c2dm(num,den,Ts,'zoh')
numDz =
1.0e-04 *
0 0.4837 0.4678
denDz =
1.0000-1.9029 0.9048
Из ових матрица дискретна функција преноса се може написати у облику:
X ( z ) 0.0001(0.4837 z 0.4678)
F ( z) z 2 1.9029 z 0.9048
2.Простор стања
y 1 0 0F
x
v
M=1;
b=10;
k=20;
A=[0 1;
-k/M -b/M];
B=[ 0;
1/M];
C=[1 0];
D=[0];
Ts=1/100;
[F,G,H,J] = c2dm (A,B,C,D,Ts,'zoh')
Креирамо нови m-file и копирамо предходне команде. Покрећемо тај m-file у Matlab
командном прозору и добијамо следеће матрице:
F=
0.9990 0.0095
-0.1903 0.9039
G=
0.0000
0.0095
H=
1 0
J=
0
На снову ових матрица, дискретни модел у простору стања можемо написати у облику:
Z e sT
4. 6
n
TS
1.8
n
Tr
ln M P / 2
1 ln M P /
2
где су:
ζ = Фактор пригушења
ωn = Природна учестаност (rad/sec)
Ts = Време смирења
Tr = Време успона
Mp = Прескок
Y ( z) 1
2
F ( z ) z 0.3 z 0.5
numDz=[1];
denDz=[1 -0.3 0.5];
pzmap(numDz,denDz)
axis([-1 1 -1 1])
zgrid
1 KG ( z ) Hzoh( z ) 0
Y ( z) z 0.3
2
F ( z ) z 1.6 z 0.7
numDz=[1 -0.3];
denDz=[1 -1.6 0.7];
rlocus (numDz,denDz)
axis ([-1 1 -1 1])
zeta=0.4;
Wn=0.3;
zgrid (zeta,Wn)
Из овог графика, закључујемо да је систем стабилан зато што су сви полови лоцирани
унутар јединичног круга. Природна учестаност је већа од 0.3, а фактор пригушења је
већи од 0.4. У овом примеру имали смо ГМК унутар жељене области где је фактор
појачања (K) одабран у жељеној области која даје потребан одзив пројектованог
система.
Команде MATLAB-a коришћене за ову област су: cloop, rlocfind, rlocus, sgrid, step
ГМК функције преноса H(s) је представљање локација свих могућих полова затворене
спреге са пропорционалним појачањем К и повратном спрегом.
a ( s ) Kb( s) 0
a(s)
b( s ) 0
K
Без обзира колику ћемо узети вредност К, затворена спрега система мора увек имати
n полова, где је n број полова H(s). ГМК мора имати n грана, свака грана почиње од
пола
H(s) и иде у нулу H(s). У овом случају граница H(s) је s -> 0.
Број полова у основи је n-m, одузимањем броја полова од броја нула добијамо број
грана ГМК.
ГМК је уствари локација свих могућих полова затворене спреге. Из ГМК можемо
одабрати
жељено појачање код система затворене спреге. Ако су изабрани полови на десном
делу равни систем ће бити нестабилан. Полови који су ближи имагинарној оси имају
добар утицај на одзив затворене спреге, тада систем може бити дру гог па некад и првог
реда што зависи од локације доминантних полова.
Y (s) s7
H (s)
U ( s ) s ( s 5)( s 15)( s 20)
num=[1 7];
den=conv(conv([1 0],[1 5]),conv([1 15],[1 20]));
rlocus(num,den)
axis([-22 3 -15 15])
4.3 Бирање вредности параметра појачања К из ГМК
Очигледно, неће сви полови затворене спреге задовољити наш критеријум цртања
ГМК. Да би знали који део ГМК је прихватљив користићемо команду sgrid (Zeta,Wn)
да прикажемо линије природне учестаности (то могу бити вектори ако желите да
видите опсег прихватљивих вредности). У нашем случају потребно је да је 07<Z
и1.8<ωn и треба их унети у командни прозор.
zeta=0.7;
Wn=1.8;
sgrid(zeta, Wn)
На графику две црне испрекидане линије под углом од 450 указују на локацију пола Z
= 0.7; између ових линија полови ће имати Z > 0.7 и изван линија Z < 0.7. Круг на
графику указује на локацију пола са природном учестаности ωn = 1.8, унутар круга ωn
< 1.8, а ван круга ωn > 1.8.
Сви полови су у левом делу равни на предходном графику, тако да је систем затворене
спреге стабилан.
У овом случају потребан је само пропорционални регулатор да помери полове на
графику:
[kd,poles] = rlocfind(num,den)
Треба знати да ГМК може имати више од једне гране, када одаберемо пол, лако је наћи
где се налази други тј. остали полови. Са графика видимо да су сви полови одабрани
(сви у црвеној боји "+") на одговарајућој позицији.
Ако желимо да нађемо одзив на јединичну функцију морамо знати функцију преноса
затворене спреге. У Matlab унећемо следеће:
step(numCL,denCL)
5.Упуство за простор стања
Команде MATLAB-a коришћене за ову област су: acker, lsim, place, plot, rscale
dx
A x Bu
dt
y C x Du
где је, х вектор (може бити позиција, брзина у механичким системима), u је скаларна
величина представљена као улаз (може бити сила или обртни момент у механичком
систему), и y је скаларна величина представљена као излаз.
Матрице А(n х n), В(n х 1), С(1 х n) дају везу између вектора стања и улазних и
излазних величина.
Да бисмо приказали метод простора стања, као пример користићемо магнетну куглу.
Напајање кроз намотаје индукује магнетну силу која делује на куглу (направљену од
магнетног материјала) тако да кугла може да виси у ваздуху.
Једначина овог система гласи:
d 2h Ki 2
M Mg
dt 2 h
di
V L iR
dt
где је: h вертикална позиција кугле, i је јачина струје кроз електромагнет, V је
прикључни напон, М маса кугле, g је гравитација, L је индуктивност, R је отпорност и
К је коефициент магнетне силе на кугли.
Узећемо вредности за следеће величине: M = 0.05 Kg, K = 0.0001, L = 0.01 H, R = 1Ω, g
=9.
81 m/sec2. Систем је у равнотежи ако је h = K i2/Mg тј. када кугла стоји у ваздуху.
dx
A x Bu
dt
y C x Du
h
Одавде: x h преставља променљиве стања за систем, u је улазни напон (Δ V), и y
j
је излаз (Δ h). Уносимо матрицу система у m-file.
A=[ 0 1 0
980 0 -2.8
0 0 -100];
B = [0
0
100];
C = [1 0 0];
Прва ставка, коју треба урадити са једначином стања јесте пронаћи полове система, то
су
вредности s које се добијају решшавањем det (sI - A) = 0.
poles = eig(A)
добићемо три пола:
poles =
31.3050
-31.3050
-100.0000
један од ових полова се налази у десној полуравни, што значи да је систем нестабилан.
Да бисмо проверили шта се дешава у нестабилном систему када је почетни услов
ненулти, додајемо следеће команде у наш m-file.
t = 0:0.01:2;
u = 0*t;
x0 = [0.005 0 0];
[y,x] = lsim(A,B,C,0,u,t,x0);
h = x(:,2); %Delta-h je izlaz
plot(t,h)
Пре него што приступимо овој методи морамо одлучити где желимо да се полови
налазе.
Подесићемо t < 0.5 sec са прескоком од 5%, онда можемо да ставимо два доминантна
пола у опсегу -10 +/- 10i. Трећи пол можемо поставити на -50 на почетку, а касније ту
вредност променит. У m-file додајемо следеће:
p1 = -10 + 10i;
p2 = -10 - 10i;
p3 = -50;
K = place(A,B,[p1 p2 p3]);
lsim(A-B*K,B,C,0,u,t,x0);
p1 = -20 + 20i;
p2 = -20 - 20i;
p3 = -100;
K = place(A,B,[p1 p2 p3]);
lsim(A-B*K,B,C,0,u,t,x0);
Поређењем кеофициента К у оба случаја, закључак је, генерално, што се даље померају
полови, то ће бити већи коефициент.
Напомена!!
Ако желимо да ставимо два или више полова на исту позицију команда place неће
функционисати, тада можемо користити команду acker.
На пример:
K = acker(A,B,[p1 p2 p3])
t = 0:0.01:2;
u = 0.001*ones(size(t));
lsim(A-B*K,B,C,0,u,t)
Фактор појачања се обележава као N (Nbar) и представљен је у следећој шеми:
Nbar=rscale(A,B,C,0,K)
5.4 Пројектовање обсервера
Обсервер је у основи копија малог `постројења` који има исти улаз и скоро исту
диференцијалну једначину. Одговарајуће трајање мереног излаза y упоређује се са
излазом .
Ако желимо да динамика обсервера буде што бржа, него што је и сам систем, морамо
поставити полове најмање пет пута даље улево од доминантног пола у систему. Ако
бисмо
користили команду place морамо, да поставимо три обсервер пола на различите
локације.
op1 = -100;
op2 = -101;
op3 = -102;
At = [A - B*K B*K
zeros(size(A)) A - L*C];
Bt = [ B*Nbar
zeros(size(B))];
Ct = [ C zeros(size(C))];
Да би видели како изгледа одзив за ненулти почетни услов без референтног улаза
додајмо следеће линије у m-file. Типично је да обсервер почиње са нулом као почетним
условом
=0. Ово нам даје почетни услов за грешку која је једнака почетном услову стања.
lsim(At,Bt,Ct,0,zeros(size(t)),t,[x0 x0])
6.1 Увод
6.2 Регулатор
6.3 Карактеристике P, I, и D регулатора
6.4 Пример
6.4.1 Јединични одзив отворене спреге
6.4.2 Пропорционални регулатор
6.4.3 Пропорционални-диференцијални регулатор
6.4.4 Пропорционални-интегрални регулатор
6.4.5 Пропорционални-интегрални-диференцијални регулатор
6.1 Увод
6.2 Регулатор
KI Kd s2 K ps Kr
Kp Kd s
s s
Kp = Пропорционално појачање
KI = Интегрално појачање
Kd = Диференцијално појачање
Сигнал (u) ће бити послат урећају и нови излаз (Y) ће бити израчунат. Излаз (Y) биће
послат сензору да нађе нову грешку сигнала (e). Регулатор узима нови сигнал грешке и
рачуна диференцијал и нтеграл за тај нови сигнал грешке.
Пропорционални регулатор (Kp) има ефекат скраћења времена успона, али неће никад
елиминисати грешку стационарног стања. Интегрални регулатор (K I) има ефекат
елиминисања грешке стационарног стања. Диференцијални регулатор (Kd) имаће
ефекат пораста стабилности система и редукцију прескока.
Ефекти сваког дејства регулатора Kp, Kd, и Ki на систем са затвореном спрегом
изведени су у следећој табели.
Грешка
Одзив Време успона Прескок Време смирења стационарног
стања
Kp умањено увећано мале промене увећано
Kd умањено увећано увећано уклоњено
Потребно је да знамо да ове корелације нису у потпуности исправне, зато што Kp, Kd, и
Ki
су зависне једна од друге. У ствари, промена једног од ових параметара може
променити, ефекат друге две.
6.4 Пример
M x x kx F
.. .
Ms 2 X ( s ) bsX ( s ) kX ( s ) F ( s )
X (s) 1
F ( s ) Ms bs k
2
где је:
M = 1kg
b = 10 N.s/m
k = 20 N/m
F(s) = 1
X (s) 1
2
F ( s ) s 10 s 20
Овај проблем нам показује како свака од Kp, Ki и Kd има допринос за:
- брзо време пораста
- минимални прескок
- елиминисање грешке стационарног стања
num=1;
den=[1 10 20];
step(num,den)
Покретањем m-file у Matlab командном прозору добићемо следећи график:
X (s) Kp
2
F ( s ) s 10 s (20 K p )
Kp=300;
num=[Kp];
den=[1 10 20+Kp];
t=0:0.01:2;
step(num,den,t)
num=1;
den=[1 10 20];
Kp=300;
[numCL,denCL]=cloop(Kp*num,den);
t=0:0.01:2;
step(numCL, denCL,t)
X (s) Kd s K p
2
F ( s ) s (10 K d ) s (20 K p )
Kp=300;
Kd=10;
num=[Kd Kp];
den=[1 10+Kd 20+Kp];
t=0:0.01:2;
step(num,den,t)
Овај график нам даје информацију о пропорционалном регулатору који редукује време
смирења као и прескок и има мали ефекат на време успона и грешку стационарног
стања.
X (s) K ps Kr
3
F ( s ) s 10 s 2 (20 K p ) s K r
Kp=30;
Ki=70;
num=[Kp Ki];
den=[1 10 20+Kp Ki];
t=0:0.01:2;
step(num,den,t)
X (s) Kd s2 K ps Kr
F ( s ) s 3 (10 K d ) s 2 (20 K p ) s K r
Kp=350;
Ki=300;
Kd=50;
num=[Kd Kp Ki];
den=[1 10+Kd 20+Kp Ki];
t=0:0.01:2;
step(num,den,t)
Сада имамо систем без прескока, брзо време успона и нема грешке стационарног стања.
Команде MATLAB-a коришћене за ову област су: bode, margin, lsim, step, and cloop
bode(50,[1 9 30 40])
50
s 9 s 30 s 40
3 2
Учестаност је на логаритамској скали, а фаза је дата у степенима, а појачање је дато у
децибелима.
Напомена: децибел је дефинисан као 20*log10 ( |G(j*w| ).
где је K константа појачања и G(s) је функција преноса између улаза и излаза. Претек
појачања је дефинисан као промена у појачању отворене спреге да би систем био
нестабилан. Претек појачања је разлика између фазне криве и -1800 у тачки где нам
учестаност даје појачање од 0dB. Претек појачања је разлика између вредности криве и
0dB у тачки где нам фреквенција даје фазу од -1800.
Добра ствар у претеку појачања јесте да нам не треба поновно цртање Bode-овг
дијаграма
у случају налажења новог претека појачања. На пример: ако унесемо команду
bode(50,[1 9 30 40]) добићемо следећи дијаграм:
Претек појачања се креће око 100 степени. Сада уносимо појачање 100. Уношењем
следе
ће команде bode(100*50,[1 9 3040]). Требало би да добијемо следећи график.
Као што се види график фазе је исти као и пре, график појачања је померен за 40dB на
горе.
Претек фазе је сада око -60 степени. Овај исти резултат ће бити постигнут ако се y-оса
на
графику појачања помери за 40dB на доле. У Matlab командном прозору унећемо
команду
margin да бисмо добили претек појачања.
margin(50,[1 9 30 40])
w= 0.3;
num = 1;
den = [1 0.5 1 ];
t=0:0.1:100;
u = sin(w*t);
[y,x] = lsim(num,den,u,t);
plot(t,y,t,u)
axis([50,100,-2,2])
w = 3;
num = 1;
den = [1 0.5 1 ];
t=0:0.1:100;
u = sin(w*t);
[y,x] = lsim(num,den,u,t);
plot(t,y,t,u)
axis([90, 100, -1, 1])
10
1.25s 1
num = 10;
den = [1.25,1];
bode(num, den)
Ту су неколико карактеристика система који се директно могу прочитати са Bode-ових
ди
јаграма. Пре свега можемо видети фреквентни опсег је око 10 rad/sec. Како је
фреквентни
опсег исти као и природна учестаност, време успона је 1.8/ω=1.8/10=1.8 sec.
Претек појачања система је приближно 95 степени. Ово одговара пригушењу од
5/100=0.95.
Последње што нас интересује јесте грешка стационарног стања која може да се
директно прочита са Bode-овог дијаграма. Константе (Kp, Kv, or Ka) су лоциране као
пресек асимтоте са линијом за ω=1. Знамо да је овај систем нултог реда и лако можемо
наћи пресек.
Грешка стационарног стања је 1/(1+Kp)=1/(1+10)=0.091. Ако је систем првог реда
уместо нултог реда, константа за грешку стационарног стања може се наћи на сличан
начин као на следећем графику:
Хајде да проверимо јединични одзив на графику. Ово се може урадити додавањем две
линије кода у Matlab командном прозору.
[numc,denc] = cloop(num,den,-1);
step(numc,denc)
Као што се види систем има време успона око 2 секунде и има грешку стационарног
стања око 9%. Сада је потребно одабрати регулатор који ће одговарати задатом
критеријуму. Одабраћемо PI регулатор који је дат функцијом преноса:
K * ( s a)
GC ( s )
s
Прва ствар која нам треба јесте да нађемо фактор пригушења који одговара
процентуалном
прескоку од 40%.Укључивањем ове вредности у једначину налазимо да фактор
пригушења одговара прескоку приближно 0,28.
Претек фазе би требао бити приближно 30 степени. Морамо имати фреквентни
пропусни опсег већи или једнак 12, ако хоћемо да нам време смирења буде мање од
1.75 секунди који се подудара са жељеним карактеристикама.
Сада, када знамо наш жељени претек фазе и фреквентни пропусни опсег, можемо
почети са цртањем графика. Треба да знамо да тражимо Bode-ов дијаграм отворене
спреге, а фреквентни пропусни опсег ће одговарати приближном појачању од -7 dB.
num = [10];
den = [1.25, 1];
numPI = [1];
denPI = [1 0];
newnum = conv(num,numPI);
newden = conv(den,denPI);
bode(newnum, newden, logspace(0,2))
Наш претек фазе и фреквентни пропусни опсег су премали. Додаћемо појачање и фазу
са
нулом. Променићемо m-file са следећим командама.
num = [10];
den = [1.25, 1];
numPI = [1 1];
denPI = [1 0];
newnum = conv(num,numPI);
newden = conv(den,denPI);
bode(newnum, newden, logspace(0,2))
num = [10];
den = [1.25, 1];
numPI = 5*[1 1];
denPI = [1 0];
newnum = conv(num,numPI);
newden = conv(den,denPI);
bode(newnum, newden, logspace(0,2))
Потребно је проверити наш јединични одзив и коначан резултат тако што ћемо додати
следеће командне линије у m-file:
[clnum,clden] =cloop(newnum,newden,-1);
step(clnum,clden)
Као што се види одзив је бољи, али у пракси некад нећемо моћи подешавати појачање и
позицију полова, да бисмо добили жељене параметре.
-Прилог-
Кратак опис неких команди у MATLAB – у које су коришћене у предходним
упуствима.
Напомена: Mаtlab стандардне команде су обележене у црвеној боји, а нестандардне у
зе-
леној боји.
abs Абсолутна вредност
acker Рачуна K матрицу на место полова од A-BK, видети команду place
axis Подешава размеру графику, видети команду plot, figure
bode Црта Bode-ов дијаграм, видети logspace, margin, nyquist1
c2dm Континуални систем у дискретни
clf Брише фигуру
conv Конволуција , видети deconv
ctrb Контролабилна матрица, видети obsv
deconv Деконволуција и одвајање полинома, видети conv
det Налази детерминанту матрице
dimpulse Импулсни одзив линеарног система, видети dstep
dlsim Симулација дискретних линеарних система, видети lsim
dstep Јединични одзив дискретног линеарног система, видети stairs
eps Matlab нумеричка толеранција
feedback Повратна веза два система
figure Креира нову фигуру, видети subplot, axis
for Следећа петља
format Број формата ( експоненти )
function Креира функцију m-fајlа
grid Црта мрежу на графику
gtext Додаје део текста на графику, видети text
help Помоћ
hold Задржава тренутни график, видети figure
if Кондиционална извршна наредба
imag Враћа имагинарни део комплексног броја, видети real
impulse Импулсниодзив континуалног линеарног система, видети step, lsim, dlsim
input Улаз
inv Налази инверзну матрицу
Креира мрежу на консанти пригушења (zeta) и време смирења (sigma),
jgrid
видети sgrid, sigrid, zgrid
legend Легенда на графику
length Дужина вектора, видети size
lnyquist1 Креира Nyquist-ов график на логаритамској скали, видети nyquist1
log Природни логаритам, видети log10
loglog График који користи логаритамску скалу, видети semilogx/semilogy
logspace Враћа логаритамски вектор
lsim Симулира линеарни систем, видети step, impulse, dlsim.
margin Приказује претек фазе и претек појачања, видети bode
norm Норма вектора
nyquist1 Црта Nyquist-ов дијаграм
obsv Опсервабилна матрица, видети ctrb
ones Враћа вектор матрице за један, видети zeros
place Рачуна K матрицу на место полова од A-BK, видети команду acker
plot Црта график, видети figure, axis, subplot.
poly Враћа крактеристичне полиноме
polyadd Додаје два различита полинома
polyval Извршавање полинома
print Штампа тренутни график
pzmap Мапа пол-нуле
rank Налази број линеарно независних колона и редова у матрици.
real Враћа реални део комплексног броја, видети imag
rlocfind Налази вредност од k и полова одабраних тачака
rlocus Црта ГМК
roots Налази корен полинома
rscale Налази фактор увећања за систем са повратном спрегом
Генерише мрежу линија фактора пригушења (sigma), видети jgrid, sgrid,
sigrid
zgrid
size Даје димензију вектору матрице, видети length
sqrt Квадратни корен
ss Креира модел простора стања или га претвара у линеарни систем, видети tf
ss2tf State-space to transfer function representation, see also tf2ss
ss2zp State-space to pole-zero representation, see also zp2ss
stairs График јединичне одскочне функције за дискретан систем, видети dstep
step Црта јединични одзив, видети impulse, lsim, dlsim.
subplot Дели график у више прозора, видети plot, figure
text Додаје део текста тренутном графику, видети title, xlabel, ylabel, gtext
tf Креира функцију преноса, видети ss
tf2ss Преносна функција за престављање простора стања, видети ss2tf
tf2zp Преносна функција за престављање пола-нуле, видети zp2tf
title Додаје назив тренутном графику
xlabel/ylabel Додаје лабелу датом графику, текст,...
zeros Враћа вектор матрице од нуле
Генерише граничне линије фактора пригушења (zeta) и природне
zgrid
учестаности (Wn), видети sgrid, jgrid, sigrid
zp2ss Пол-нула за престављање простора стања, видети ss2zp
zp2tf Пол-нула за престављње функције преноса, видети tf2zp
8.MATLAB примери
У овом поглављу биће обрађени неки примери везани за материју која је укратко
описана у претходном поглављу.Сви примери урађени су у програмском пакету
MATLAB.
Пример 8.1
За функцију датој на следећој слици нацртати: g(t) ; g(-t) ; -g(t) ; g(t-1) ; g(2t) ;
Решење:
g = inline('2*t.*(t>=0 & t<=2) ','t');
t = (-3:0.01:4);
subplot(5,1,1); plot(t,g(t));
ylabel('g(t)');
axis([-0.5 6 -0.5 6]);
subplot(5,1,2); plot(t,-g(t));
ylabel('-g(t)');
axis([-0.5 6 -6 2]);
subplot(5,1,3); plot(t,g(t-1));
ylabel('g(t-1)');
axis([0 4 -0.5 6]);
subplot(5,1,4); plot(t,g(2*t));
ylabel('g(2t)');
axis([-0.5 6 -0.5 6]);
subplot(5,1,5); plot(t,g(-t));
xlabel('Vreme u (s)');
ylabel('g(-t)');
axis([-3 3 -0.5 5]);
График функције континуалног карактера
Решење:
Слика 8.1
Пример 8.2
Две функције дефинисане су на следећи начин:
,
Нацртати производ ове две функције у интерналу: -2<t<2
Решење:
x1=inline('(1.*(sin(20*pi*t)>=0))','t');
t=-2:0.01:2;
x12=inline('(-1.*(sin(20*pi*t)<0))','t');
subplot(3,1,1); plot(t,x12(t)+x1(t));
ylabel('x1(t)');
axis([-2 2 -1.3 1.3]);
x2=inline('(t.*(sin(2*pi*t)>=0))','t');
x22=inline('(-t.*(sin(2*pi*t)<0))','t');
subplot(3,1,2); plot(t,x22(t)+x2(t));
ylabel('x2(t)');
axis([-2 2 -2 2]);
subplot(3,1,3); plot(t,(x22(t)+x2(t)).*(x12(t)+x1(t)));
axis([-2 2 -2 2]);
ylabel('x1(t)*x2(t)');
xlabel('Vreme u (s)');
Решење:
x1=inline('(1.*(sin(20*pi*t)>=0))','t');
t=-2:0.03:2;
x12=inline('(-1.*(sin(20*pi*t)<0))','t');
subplot(3,1,1); plot(t,x12(t)+x1(t));
stem (t,x12(t)+x1(t))
ylabel('x1(t)');
axis([-2 2 -1.3 1.3]);
x2=inline('(t.*(sin(2*pi*t)>=0))','t');
x22=inline('(-t.*(sin(2*pi*t)<0))','t');
subplot(3,1,2); plot(t,x22(t)+x2(t));
stem (t,x22(t)+x2(t))
ylabel('x2(t)');
axis([-2 2 -2 2]);
subplot(3,1,3); plot(t,(x22(t)+x2(t)).*(x12(t)+x1(t)));
stem (t,(x22(t)+x2(t)).*(x12(t)+x1(t)))
axis([-2 2 -2 2]);
ylabel('x1(t)*x2(t)');
xlabel('Vreme u (s)');
Слика 8.2
Пример 8.3
Нацртати следеће континуалне синусоидалне сигнале:
Решење: под а)
t=0:0.04:5;
x=sin(2*pi*t);
axis([-0.2 6 -1.5 1.5]);
subplot(211),plot(t,x),title('Kontinualni signal')
xlabel('(t)');
ylabel('sin(2pit)');
subplot(212),stem(t,x),title('Diskretni signal')
xlabel('(t)');
ylabel('sin(2pit)');
Слика 8.3а
Решење: под b)
t=0:0.04:5;
x=sin(2*pi*t-pi/4);
axis([-0.2 6 -1.5 1.5]);
subplot(211),plot(t,x),title('Kontinualni signal')
xlabel('(t)');
ylabel('sin(2pit-pi/4)');
subplot(212),stem(t,x),title('Diskretni signal')
xlabel('(t)');
ylabel('sin(2pit-pi/4)');
График функције sin (2πt-π/4) континуалног и дискретног сигнала
Слика 8.3b
Решење: под c)
t=0:0.04:5;
x=sin(2*pi*t+pi/2);
axis([-0.2 6 -1.5 1.5]);
subplot(211),plot(t,x),title('Kontinualni signal')
xlabel('(t)');
ylabel('sin(2pit+pi/2)');
subplot(212),stem(t,x),title('Diskretni signal')
xlabel('(t)');
ylabel('sin(2pit+pi/2)');
График функције sin (2πt+π/2) континуалног и дискретног сигнала
Слика 8.3c
Решење: под d)
t=0:0.04:4;
z=exp(j*4*pi*t);
axis([-0.2 5 -1.5 1.5]);
subplot(211),plot(t,real(z)),title('Kontinualni signal')
xlabel('(t)');
ylabel('Re[e^j4pit]');
subplot(212),stem(t,real(z)),title('Diskretni signal')
xlabel('(t)');
ylabel('Re[e^j4pit]');
График функције Re[ej 4πt] континуалног и дискретног сигнала
Слика 8.3d
Пример 8.4
Скицирати следеће дискретне сигнале.Одредити период сваког сигнала.
Решење: под a)
n=0:0.4:8;
x=cos(pi*n/4);
axis([-0.2 6 -1.3 1.3])
stem(n,x);
xlabel('(n)');
ylabel('cos(pin/4)');
Слика 8.4a
Решење: под b)
n=0:0.4:8;
x=sin(pi*n/3);
axis([-0.2 6 -1.3 1.3])
stem(n,x);
xlabel('(n)');
ylabel('sin(pin/3)');
Слика 8.4b
Решење: под c)
n=0:0.1:8;
x=cos(pi*n);
axis([-0.2 6 -1.3 1.3])
stem(n,x);
xlabel('(n)');
ylabel('cos(pin)');
Слика 8.4c
Решење: под d)
n=0:0.2:8;
x=sin(n);
axis([-0.2 6 -1.3 1.3])
stem(n,x);
xlabel('(n)');
ylabel('sin(n)');
Слика 8.4d
Пример 8.5
Свака функција g(t) може се написати у облику g(t)= gp(t)+gn(t) , где је gp(t) парни део,
а
gn(t) непарни део функције.Из особина парности (gp(-t) = gp(t)) и непарности (gn(t)= -
gn(t)).
Решење: под а)
syms t;
g=inline('2*t^2-3*t+6');
gp=1/2*(g(t)+g(-t));
gn=1/2*(g(t)-g(-t));
gp=simple(gp)
gn=simple(gn)
Решење: под c)
syms t;
g=inline('(2-t)/(t+1)');
gp=1/2*(g(t)+g(-t));
gn=1/2*(g(t)-g(-t));
gp=simple(gp)
gn=simple(gn)
Пример 8.6
парам-
етри:
-фрекфенција f 0.1 ; амплитуде А=5 и B=9; почетна фаза 3 .Ову функцију
преставити
графичким путем у MATLAB-у.
Решење:
n=0:150;
f=0.1;
omega=2*pi*f;
A=5;
B=9;
faza=pi/3;
e=A*exp(j*(omega*n+faza))+B*exp(2/5*j*(omega*n));
subplot(211),stem(n,real(e));
title('Realni deo'),xlabel('indeks (n)')
subplot(212),stem(n,imag(e));
title('Imaginarni deo'),xlabel('indeks (n)')
Слика 8.6
Пример 8.7
а) F s
s 1 4s 2s 2 1
; b) F s ; c) F s
3s 2 4 s 3 (5s 3 2 s ) (( s 2)( s 3)) 2
Решење: под а)
syms X s x
X = (s+1)/(3*s^2+4*s+3);
x = ilaplace(X);
ezplot(x,[0,10])
резултат:
x =
1/15*exp(-2/3*t)*5^(1/2)*sin(1/3*5^(1/2)*t)+1/3*exp(-
2/3*t)*cos(1/3*5^(1/2)*t)
Да би се нацртала функција x(t ) у интервалу од t 0 до t 10 , користи се следећа
команда:
ezplot(x,[0,10])
Слика 8.7a
Решење: под b)
syms X s x
X = 4*s/(5*s^3+2*s);
x = ilaplace(X);
ezplot(x,[0,10])
резултат:
x =
2/5*10^(1/2)*sin(1/5*10^(1/2)*t)
Слика 8.7b
Решење: под c)
syms X s x
X = (2*s^2+1)/((s-2)*(s-3))^2;
x = ilaplace(X)
ezplot(x,[0,10])
резултат:
x =
9*t*exp(2*t)+26*exp(2*t)+19*t*exp(3*t)-
26*exp(3*t)
Слика 8.7c
Пример 8.8
5 z 3 z 2 3z
X ( z)
z 3 2z 1
Решење:
syms X x z
X = (5*z^3-z^2-3*z)/(z^3-2*z+1);
x = iztrans(X)
резултат:
x =
1+2*sum((1/_alpha)^n,_alpha = RootOf(_Z^2-_Z-1))
Пример 8.9
x1 5 2 - 7 6 - 3 3 - 4 6 7 - 2 - 9 4 3 1 1 - 3 1 - 9 6 2 3 4 - 1 - 3 - 8 1 - 4 2 7 - 4 - 5 6 3
x 2 2 - 3 1 - 5 4 2 - 5 3 - 2 - 6 1 6 - 4 - 3 1 2 5 4 - 2 - 7 - 3 1 - 3 1 - 5 6 - 4 2 3 6 - 4
Решење:
x1=[5 2 -7 6 -3 3 -4 6 7 -2 -9 4 3 11 -3 1 -9 6 2 3 4 -1 -3 -8 1 -4 2 7 -4 -5 6 3];
x2=[2 -3 1 -5 4 2 -5 3 -2 -6 1 6 -4 -3 1 2 5 4 -2 -7 -3 1 -3 1 -5 6 -4 2 3 6 -4];
y=conv(x1,x2);
Nx1=length(x1);
Nx2=length(x2);
Ny=Nx1+Nx2-1;
nx1=0:Nx1-1;
nx2=0:Nx2-1;
ny=0:Ny-1;
subplot(221),stem(nx1,x1),title('Signal x1'),xlabel('n')
axis([0 33 -10 10])
subplot(222),stem(nx2,x2),title('Signal x2'),xlabel('n')
axis([0 33 -10 10])
subplot(212),stem(ny,y),title('Konvolucija signala x1 i x2'),xlabel('n')
axis([0 65 -400 400])
Слика 8.9
Пример 8.10
Решење: под а)
a=-0.4;
N=25;
n=[0:N-1]';
x=a.^n;
stem(n,x), xlabel('n'), ylabel ('x(n)'), title('niz x(n)=-0.4^n');
Слика 8.10а
Решење: под b)
B=1;
A=[1 -a];
z=0;
p=-0.4;
zplane(z,p);
Слика 8.10b
Пример 8.11
Решење: под а)
[H,w]=freqz(Q,P,256);
figure (2)
subplot(211), plot(w,abs(H),'k'),...
xlabel('frekvencija (rad)'),...
title('Amplitudska karakteristika')
axis([0 pi 0 1]);
subplot(212), plot(w,unwrap(angle(H)),'k'),...
xlabel('frekfencija (rad)'),...
title('Fazna karakteristika')
axis([0 pi -6 4]);
Слика 8.11а
Решење: под b)
Q=[0.11,-0.01,0.08,-0.06,0.044];
P=[2.5,-1.16,0.1,-0.13,1.5];
figure (1)
zplane(Q,P)
Слика 8.11b
Пример 8.12
Ако имамо каскадну везу два елемента чији су импулсни одзиви h1(n) и h2(n) импулсни
одзив целог система је дат изразом: h(n)=h1(n)*h2(n)
Дату једначину проверити у MATLAB – у.
h1(n)={0.25,0.8,0.16} i h2(n)={1,0.36,0.58,0.02}
Решење:
h1=[0.25 0.8 0.16];
h2=[1 0.36 0.58 0.02];
impuls=[1 zeros(1,10)];
pom=conv(h1,impuls);
hrez1=conv(h2,pom);
hrez2=conv(h1,h2);
disp('Impulsni odziv dobijen direktnim izracunavanjem je:')
disp(hrez1)
disp(hrez2)
Nh=length(hrez1);
nh=0:Nh-1
stem(nh,hrez1), title('Impulsni odziv kaskadne veze dva linarna
sistema')
Слика 8.12
-Прилог-
Кратак опис неких команди у MATLAB – у које су коришћене у предходним
примерима.
label x,y,z – Свака оса неког графичког објекта у MATLAB – у садржи лабелу за
ту осу ( х,y,z).У лабелу се уноси кратак текстуални опис везано за ту осу.
syms t – Ова команда приказује вредности неке задате функције уз помоћ симболичке
математике у MATLAB – у.