Documente Academic
Documente Profesional
Documente Cultură
Acest prim laborator are drept scop prezentarea principalelor caracteristici ale
mediului de lucru Matlab. Vor fi trecute în revistă, pe scurt, principiul de funcţionare,
cele mai folosite comenzi precum şi două instrumente foarte puternice ale acestuia:
Simulink şi SpTool. De asemenea vor fi construite pas cu pas câteva scheme bloc
simple pentru exemplificarea funcţionalităţii acestuia.
Se poate spune despre Matlab că este un limbaj de nivel foarte înalt care prezintă
performanţe crescute în ceea ce priveşte calculul tehnic. Pe lângă interpretorul de
comenzi sunt prezente o mulţime de instrumente cum ar fi cele pentru vizualizarea
datelor, pentru prelucrarea imaginilor şi sunetelor, pentru analiza circuitelor electrice,
etc.
1
Directorul Variabilele
curent definite
Fisierele
din
directorul
2
Tipul de date poate fi modificat:
>>b=single(a)
3
Pentru a executa codul scris in editor se poate poate folosi „Run” sau F5, caz in care
se executa tot scriptul sau se selecteaza liniile din script care se doresc executate si
se apasa F9.
Aplicatia 1
Sa se scrie in editorul din Matlab exemplele de mai jos si sa se execute.
Explicati rezultatele obtinute!
4
d=a*b’ produsul scalar al vectorilor a si b;
e=a+b suma vectorilor a si b;
f=a.*b produsul vectorilor element cu element;
C=A*B produsul matricilor A si B;
D=A.*B produsul element cu element al matricilor A si B;
g=a.^2 puterea a doua a fiecarui element a lui a;
E=A^2 matricea A ridicata la puterea a doua;
F=A.^2 puterea a doua a fiecarui element al matricii A;
x1=[0:2:8] defineste un vector x1 ale carui valori sunt din 2 in 2
incepand cu 0 ([0 2 4 6 8]);
x2=[8:-2:0] defineste un vector x2 ale carui valori sunt din 2 in 2
incepand cu 8 ([8 6 4 2 0]);
A(1,:) selecteaza primul rand al matricii A;
A(:,2) selecteaza a doua coloana a matricii A;
[a b] concateneaza vectorii a si b intr-un vector tip rand;
[a’; b’] concateneaza vectorii a si b intr-un vector tip coloana;
[a; b] formeaza o matrice care are randurile vectorii a si
respectiv b;
[a’ b’] formeaza o matrice care are coloanele vectorii a’ si
respectiv b’;
Un alt avantaj al Matlab-ului este usurinta cu care pot afisa si edita graficele.
Principala functiei Matlab pentru afisare este plot(). Functia afiseaza un vector in
raport cu alt vector.
De exemplu :
plot([0 1 2 3],[-1 2 0 3],'*') afiseaza punctele corespunzatoare
perechilor (0,-1), (1,2), (2,0), (3,3) ;
plot([0 1 2 3],[-1 2 0 3])uneste cu segmente de dreapta punctele
corespunzatoare perechilor (0,-1), (1,2), (2,0), (3,3) ;
5
Aplicatia 2
Explicati reprezentarea obtinuta daca se executa: plot([0 2 3 1],[-1 2
0 3]) .
Aplicatia 3
Observati care este diferenta dintre utilizarea functiei plot() si a functiei
stem().
a =[0 1 2 3 4];
x1=[1 2 3 4 5];
x2=[5 4 3 2 1];
plot(a,x1); hold on;
plot(a,x2,'r');
a =[0 1 2 3 4];
x1=[1 2 3 4 5];
x2=[5 4 3 2 1];
figure(1);
plot(a,x1);
figure(2);
plot(a,x2,'g');
OBS: - Orice alte grafice se afiseaza dupa afisarea vectorului x2, se afiseaza in
figura 2.
a =[0 1 2 3 4];
x1=[1 2 3 4 5];
x2=[5 4 3 2 1];
plot(a,x1); hold on;
plot(a,x2,'r');
6
xlabel('vectorul a');
ylabel('vectorii x1 si x2');
title('Reprezentarea vectorilor x1 si x2');
Aplicatia 4
Afisati in figura 1 vectorii a=[0:4] si x1=[1 2 3 4 5] , iar in figura 2 vectorii a=[0:4]
si x2=[-1 2 -3 4 -5]; in figura 3 sa se afiseze vectorul a si suma dintre vectorii x1
si x2 si in aceeasi figura vectorul a si produsul element cu element dintre
vectorii x1 si x2. Pentru toate cele 3 figuri, axele si figurile vor fi denumite
corespunzator.
figure(1);
subplot(2,3,1);
stem(a,x1);
subplot(2,3,2);
stem(a,x2);
subplot(2,3,6);
stem(a,x1+x2);
Aplicatia 5
Sa se afiseze in aceeasi figura perechile de vectori: (a,x1), (a,x2), (a,x1+x2),
(a,x1.*x2). Axele figurilor vor fi notate corespunzator.
7
OBS: - Pentru editarea graficelor se pot folosi optiunile functiei plot sau mai
simplu folosind “Show plot tools” toolbar.
OBS: - Pasul de esantionare pentru variabila timp se alege astfel incat sa fie
respectata teorema esantionarii: frecventa de esantionare trebuie sa fie de cel
putin 2 ori mai mare decat banda semnalului.
Aplicatia 6
A1. Care este valoarea maxima pe care o poate avea pasul de esantionare a
semnalului x2?
f0
Deoarece f s 2 f 0 , rezulta ca 0.5 .
fs
Semnalele discrete se definesc astfel:
x[n] sin(2 f 0 d n) , n
f
unde f 0d 0 se numeste frecventa normalizata si este adimensionala.
fs
Aplicatia 7
Care este perioada semnalului discret x[n] sin(2 0.1n) ?
8
Alte functii utilizate des in definirea altor semnale sunt ones(),
zeros(),length(a). si size(). Exemple:
Aplicatia 8
Sa se defineasca un vector t cuprins intre 0 si 0.5 si pasul de esantionare de
0.02 si sa se calculeze vectorii corespunzatori semnalelor:
a) e1 (t ) [1 sin(2 20t )] (t )
b) e2 (t ) e 5(t 0.1) (t 0.1)
c) e1 (t ) e 10t sin(2 20t ) (t )
Este respectata teorema esantionarii pentru semnalul e1 (t ) ?
9
7. Definirea filtrelor in Matlab
numz=[2 1 0];
denz=[1 0 0.5];
In acelasi mod de definesc filtrele analogice. De exemplu pentru filtrul cu functia de transfer
2s
H (s) 2 se definesc vectorii:
s 3s 10
nums=[0 2 0];
dens=[1 3 10];
Asa cum se observa, daca unul dintre termenii polinoamelor de la numitor sau numator
lipseste, atunci elementul corespunzator a vectorului este 0.
O alta functie utila este tf() care creeaza modelul unui sistem dinamic; exista functii in
Matlab care primesc ca paramatru de intrare variabila returnata de functia tf():
pentru a defini sistemul analogic pentru H(s):
Hs=tf(nums,dens);
pentru a defini sistemul analogic pentru H(z):
Hz=tf(numz,denz,1);
unde Ts=1sec reprezinte pasul de esantionare la care lucreaza sistemul discret.
s =tf('s');
Hs=2/(s^2+3*s+10);
sau
z =tf('z',1);% daca pasul de esantionare a sistemului discret este 1;
Hs=(2+z^(-1))/(1+0.5*z^(-2));
Aplicatia 9
Sa se defineasca filtrele discrete si analogice:
z 1 z 1 0.1z 2 10 s
a) H ( z ) 1
b) H ( z ) 1 2
c) H ( s ) d) H ( s )
1 0.5 z 1 0.3 z 0.05 z s 10 s 10
10
8. Calcularea raspunsului in frecventa a filtrelor discrete.
Pentru calculul raspunsului in frecventa a filtrelor analogice sau discrete, se pot utiliza
functiile freqz(), pentru sisteme discrete, freqs(), pentru sisteme analogice (care fac
parte din Signal Processing Toolbox) sau bode() care poate fi folosita atat pentru sisteme
analogice cat si pentru sisteme discrete (care face parte din Control System Toolbox);
freqz(numz,denz);
freqs(nums,dens);
bode(Hz);
bode(Hs);
freqz(numz,denz,2048);
freqs(nums,dens,2048);
wz=0:0.001:2*pi*0.5;
figure(1);
freqz(numz,denz,wz);
ws=0:0.1:100;
figure(2);
freqs(nums,dens,ws);
figure(3);
bode(Hz,wz);
figure(4);
bode(Hs,ws);
%
[H_z,wz_out] = freqz(numz,denz,2048);
%sau
[H_z] = freqz(numz,denz,wz);
%
11
[H_s,ws_out] = freqs(nums,dens,2048);
%sau
[H_s] = freqs(nums,dens,ws);
%
[mag_z,phase_z,wz_out]=bode(Hz);
%sau
[mag_z,phase_z]=bode(Hz,wz);
[Hz_w0]=freqz(numz,denz,[0 w0]);
[Hz_w0]=bode(Hz,w0);
Aplicatia 10
Folosind functiile freqz() si respectiv bode(), sa se determine si sa se
z 1
afiseze in doua figuri diferite, raspunsul in frecventa a filtrului H ( z ) .
1 0.9 z 1
z 1
Calcularea raspunsului in frecventa a filtrului H ( z ) :
1 0.9 z 1
z 1 e j
H ( j )
1 0.9 z 1 z e j 1 0.9e j
12
Aplicatia 11
Sa se afiseze diferenta dintre modulul si faza vectorului returnat de functia
freqz() si modulul si faza calculate mai sus.
Aplicatia 12
Sa se demonstreze ca functia H ( ) este periodica cu perioada 2 .
Aplicatia 13
1
Sa se determine, y[n], raspunsul filtrului H ( z ) la semnalul de intrare
1 0.9 z 1
2
x[n] 1 2 cos n . Sa se afiseze pe aceelasi grafic semnalul x[n] si semnalul
10
y[n].
Aplicatia 14
Folosind valorile modului si fazei determinate in Matlab, sa se scrie expresia
semnalului y[n].
Daca h[n] este raspunsul la impuls a unui filtru discret, atunci raspunsul in frecventa
a filtrului este:
H ( j ) H ( z ) z e j h[n] e
n
j n
Aplicatia 15
Sa se demonstreze ca functia H ( j ) este periodica cu perioada 2 .
Aplicatia 16
Folosind functia freqz() sa se afiseze modulul raspunsului in frecventa a
1
filtrului H ( z ) pentru intervalul de frecvente w [7 , 7 ] .
1 0.9 z 1
Daca H [ z ] este functia de transfer a filtrului numeric iar h[n] raspunsul sau la
impuls, relatia intre intrarea si iesirea filtrului este:
y[n] x[n] h[n] sau Y ( z ) X [ z ] H ( z )
unde " " reprezinta produsul de convolutie definit prin:
13
x[n] h[n] x[k ] h[n k ] x[n k ] h[k ]
k k
E ( z ) Z e[n] 1 z 1 Y ( z ) H ( z ) E ( z ) 1 z 1 z 2 z 3
2
H ( z) 1 z
Aplicatia 17
Sa se calculeze si sa afiseze in Matlab, folosind functia conv(), raspunsul
filtrului H ( z ) 1 z 1 la semnalul de intrare e[n] [n] 2 [n] 3 [n] 4 [n] .
1
Se considera filtrul discret de tip IIR, H ( z ) si semnalul de intrare
1 0.8 z 1
x[n] [n] . Raspunsul filtrului se poate calcul in domeniul Z:
14
e[n] [n] h[n] y[n] Z 1 Y ( z ) 4 0.8n [n] 5 [n]
Z Z 1
1 1
Y ( z) H ( z) E( z)
1 1 0.8 z 1 z 1
1
E ( z ) Z e[n] H ( z ) 1 z 2
1 z 1 4 5
1
1 0.8 z 1 z 1
Atat pentru filtrele IIR cat si FIR, se poate utiliza functia filter(). Functia
are ca parametri de intrare: vectorii corespunzatori numaratorului si numitorului
functiei de transfer si vectorul semnalului de intrare:
Aplicatia 18
Sa se calculeze si sa se determine in Matlab, folosind functia filter(),
z 1
raspunsul filtrelor H1 ( z ) 1
si respectiv H 2 ( z ) 1 z 1 la semnalul de
1 0.9 z
intrare e[n] [n] [n 10] . Sa se compare semnalul returnat de functia
filter() si cel calculat.
Aplicatia 19
15
Sa se afiseze si sa compare raspunsul tranzitoriu si raspunsul permanent
2
(calculat in aplicatia 13) a semnalului x[n] 1 2 cos n , aplicat filtrului
10
1
H ( z) , pentru n=0:49. Explicati diferenta dintre cele semnale.
1 0.9 z 1
Raspunsul la impuls a unui filtru discret este determinat folosind functia impz(). Ca
si functia freqz(), functia are 2 functionalitati:
daca functia impz() nu returneaza nici un vector, atunci este afisat
raspunsul la implus a filtrului:
impz(num,den);
impz(num,den,N);%in acest caz sunt afisate N
esantioane %ale raspunsului la
impuls
daca functia impz() returneaza un vector, atunci raspunsul la implus
a filtrului este salvat in vectorul respectiv:
h=impz(num,den);
h=impz(num,den,N); %in acest caz dimensiunea
vectorului h %este N
Aplicatia 20
Sa se calculeze si sa se determine in Matlab, folosind functiile impz() si
z 1
filter(), raspunsul la impuls a filtrelor H1 ( z ) si respectiv
1 0.9 z 1
H 2 ( z ) 1 z 1 . Sa se compare raspunsul la impuls calculat si respectiv
determinat in Matlab.
Polii si zerourile se determina in Matlab folosind functia tf2zp() iar diagrama poli-
zerouri se afiseaza folosind functia zplane():
[z,p,k]=tf2zp(num,den);
zplane(num,den);
Aplicatia 21
Sa se calculeze polii si zerourile functiei de transfer:
1 0.9 z 1
H1 ( z ) si H 2 ( z ) 1 0.5 z 1 0.2 z 2
1 0.5 z 1 0.2 z 2
folosind functia tf2zp()si sa se reprezinte diagrama poli-zerouri folosind
functia zplane().
16
1 0.5 z 1
Se considera filtrul H ( z ) . Se considera e[n] semnalul de
1 0.5 z 1 0.06 z 2
intrare si y[n] semnalul de iesire:
e[n] y[n]
H ( z)
Y ( z) 1 0.5 z 1
Atunci H ( z ) . Rezulta ca:
E ( z ) 1 0.5 z 1 0.06 z 2
Y ( z ) E ( z ) 0.5 z 1 E ( z ) 0.5 z 1Y ( z ) 0.06 z 2Y ( z )
Folosind proprietatea de intarziere a transformatei Z:
Z
f [n k ] z k F ( z )
Se obtine ecuatia cu diferente:
Atunci:
y 0 e 0 1
y 1 e 1 0.5e 0 0.5 y 0 0.5 0.5 1 0.5 1 0.5
y[2] e[2] 0.5e[1] 0.5 y[1] 0.06 y[0] 0.25 0.5 0.5 0.5 (0.5) 0.06 1 0.19
y[3] e[3] 0.5e[2] 0.5 y[2] 0.06 y[1] 0 0.5 0.25 0.5 0.19 0.06 (0.5) 0.19
Aplicatia 22
Sa se determine iesirea filtrului folosind functia filter().
Aplicatia 23
Sa se determine ecuatia cu diferente pentru filltrul discret:
H1 ( z ) 1 0.5 z 1 0.06 z 2
si respectiv,
1 z 2
H 2 ( z)
1 0.5 z 1 0.06 z 2
17
Pentru semnalul de intrare e[n] [n] 0.25 [n 2] , sa se calculeze valoarea
iesirii pentru y[2] si y[3]. Sa se determine iesirea filtrului utilizand functia
filter().
Exemplu:
Se consideră următoarea secvenţă de cod:
suma=0;
for i=1:10
suma = suma + i;
a(i) = i;
end
suma
a
plot(a,'k*')
Pentru informatii prinvind orice functie sau comanda din Matlab se poate
folosi comanda help sau doc.
Exemplu :
help for sau doc for
Aplicatia 24
Sa se determine valorile pentru y[2] si y[3], obtinute in aplicatia 23, folosind
instructiunea for.
18
e1 e2 e3 e4
e5
1 1 1 1
z z z z
clear all;
e1=1;e2=0;e3=0;e4=0;e5=0;
E=zeros(5,5);
E(1,:)=[e1 e2 e3 e4 e5];
for n=2:5
e5=e4;
e4=e3;
e3=e2;
e2=e1;
e1=0;
E(n,:)=[e1 e2 e3 e4 e5];
end
Aplicatia 25
Sa se salveze iesirea circuitului ,y=2e2+3e5, pentru n=1:5, intr-o matrice Y
care are 5 linii si 5 coloane.
e1 e2 e3 e4 e5
1 1 1 1
z z z z
3
2 y
+
a=[1 -2 3 -1 0 10 -12];
k=1;
for n=1:length(a)
if a(n)>0
b(k)=a(n);
k=k+1;
end
end
19
Instructiunea: „if ...else... end”
Exemplu:
Sa se salveze elementele pozitive ale vectorului a in vectorului b
iar cele negative sau cu valoarea 0 in vectorul c:
clear a b
a=[1 -2 3 -1 0 10 -12];
k1=1;
k2=1;
for n=1:length(a)
if a(n)>0
b(k1)=a(n);
k1=k1+1;
else
c(k2)=a(n);
k2=k2+1;
end
end
clear a b c
a=[1 -2 3 -1 0 10 -12];
k1=1;
k2=1;
k3=1;
for n=1:length(a)
if a(n)>0
b(k1)=a(n);
k1=k1+1;
elseif a(n)<0
c(k2)=a(n);
k2=k2+1;
else
d(k3)=a(n);
end
end
Instructiunea: „while...end”
Explicati valorile salvate in vectorul a:
clear a
x=1;
k=1;
while x<=25
x=2*x;
a(k)=x;
20
k=k+1;
end
Instructiunea: break;
Explicati valorile salvate in vectorul a:
clear a
x=1;
k=1;
while 1
x=2*x;
a(k)=x;
k=k+1;
if x>25
break;
end
end
function
[parametri_de_iesire]=nume_functie(parametri_de_intrare)
% comentarii legate de functie
corpul functiei
end
function [diferinta,suma]=dif_suma(a,b)
%functia calculeaza suma si diferenta dintre a si b
diferinta =a-b;
suma =a+b;
end
21
Aplicatia 26
Sa se scrie o functie care calculeaza produsul scalar a doi vectori, norma L2 a
primului vector si norma L2 a celui de-al doilea vector.
22
Introducere in Simulink
simulink
23
Blocurile Simulink sunt organizate in librarii:
24
• Sinks - aparate de măsură: multimetru, osciloscop, grafic XY, etc.;
• Sources - surse de semnal: generatoare de semnal sinusoidal, triunghiular,
dreptunghiular, zgomot, rampă, pulsuri, click, etc.
1. Sisteme algebrice
25
Gain:
26
Librariile Simulik Parametrii simularii Pornirea simularii
fm=100;
m=1.5;
M0=2;
fp=1100;
MAX_STEP_SIZE=1e-5;
T_final=0.1;
27
2. Utilizarea sistemelor continue
28
Aplicatia 27
Sa se implementeze in Simulink un model pentru detectorul sincron.
OBS: Pentru un demodulator sincron:
se inmulteste semnalul sMA (t ) si semnalul sin( p t ) :
r (t ) sMA (t ) sin( p t )
semnalul r(t) se filtreaza folosind un FTJ cu banda de 120Hz:
r(t) y(t)
2 120
s 2 120
Aplicatia 28
Sa se masoare timpul de crestere a raspunsului la treapta unitate a sistemului
continuu:
10
H ( s)
s 10
3. Utilizarea sistemelor discrete
29
Blocul „Discrete Impulse” face parte biblioteca din „DSP System Toolbox” si
simuleaza impulsul discret:
1, n 0
[ n]
0, n 0
Blocul „Unit Delay”, simuleaza elementul de intarziere:
1
e[n] e[n-1]
z
e[n]: e[n-1]:
Aplicatia 29
30
Calcutati y[n] pentru e[n] [n] , pentru n=0:4. Comparati rezultatul obtinut cu iesirea
sistemului obtinuta in Simulink.
Aplicatia 30
Sa se implementeze in Simulink ecuatia cu diferente:
y[n] 2e[n] 0.5 y[n 1]
si e[n] [n] .
Calcutati y[n] pentru e[n] [n] , pentru n=0:4. Comparati rezultatul obtinut cu iesirea
sistemului obtinuta in Simulink.
Sistemele discrete se pot simula folosind blocul Discrete Filter, din libraria
1
Simulink/Discrete. Pentru sistemul discret H ( z ) , se defineste numaratorul
1 0.5 z 1
si numitorul functiei de transfer:
31
Aplicatia 31
Sa se determine functia de transfer a circuitului descris de ecuatia cu diferente de la
aplicatia 30. Sa se verifice in Simulink daca sistemul implementat in aplicatia 30, are
1
aceeasi iesire ca sistemul discret descris de functia de transfer: H ( z ) .
1 0.5 z 1
32