Sunteți pe pagina 1din 32

Semnale si sisteme discrete (recapitulare)

Prezentarea mediului de lucru Matlab

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.

Spre deosebire de alte limbaje de nivel înalt, elementele de bază cu care se


lucrează sunt vectorii. Utilizatorul poate defini şi folosi vectori ale căror dimensiuni
iniţiale nu trebuie specificate. Problemele legate de gestionarea memoriei la
operaţiile care presupun creşterea dimensiunii unui vector se fac automat,
transparent utilizatorului, ceea ce este un avantaj faţă de limbaje de programare cum
ar fi C sau C++.

Numele Matlab este o prescurtare a cuvintelor “matrix laboratory”. Aceasta


deoarece, iniţial programul a fost destinat pentru calculul cu matrici. Limbajul a
evoluat şi a devenit un standard în universităţi când este vorba de cursuri
introductive sau avansate de matematică sau inginerie. Funcţiile specifice unui
anumit domeniu sunt grupate în colecţii de funcţii sau “toolboxes”. Acestea uşurează
foarte mult folosirea programului în scop educaţional sau de cercetare deoarece
utilizatorul se poate concentra direct pe aplicarea unei serii de operaţii asupra unui
set de date fără a se îngriji exclusiv de definirea acestor operaţii. Există mai multe
colecţii de funcţii specifice domeniului electronicii cum ar fi cea pentru prelucrarea de
semnale sau cea pentru domeniul comunicaţiilor.
Utilizatorii isi pot implementa propriile functii. Pentru a putea fi folosite acestea
trebuie sa se afle in directorul curent sau se adauga directorul in care se afla functiile
folosind File-> Set Path.

Fereastra principală a programului permite accesul direct la interpreterul de


comenzi. Acesta este un instrument care execută o secvenţă de cod linie cu linie.
Secvenţa de cod poate fi introdusă direct de la tastatură, iar după fiecare linie se
apasă tasta Enter sau poate fi scrisă într-un fişier de tip text, care se salvează cu
extensia “.M” şi se execută prin simpla scriere a numelui fişierului. De asemenea
liniile de cod scrise in editorul de tip text pot fi executate prin apasarea tastei F5 (se
executa toate liniile scrise; comanda nu este valabila in cazul functiilor) sau a tastei
F9 (se executa numai liniile de cod selectate).

Interfata programului Matlab este:

1
Directorul Variabilele
curent definite

Fisierele
din
directorul

Fereastra in care se Istoricul variabilelor


definesc variabilele si definete si a
se scriu sau se instructiunilor
executa instructiunile executate

1. Tipuri de date in Matlab

Implicit toate opratiile in Matlab sunt realizate in virgula mobila si cu precizie


dubla (64 biti). Exista insa posibilitatea utilizeze si date cu precizie simpla (32 de
biti), intregi (8, 16 sau 32 de biti). Functiile care fac conversia de la un tip de date la
altul sunt: double, single (functii pentru conversia la date de tip double si respectiv
single), int8, int16, int32 (functii pentru conversia la date de tip intreg), unit8,
unit16,uint32 (functii pentru conversia la date de tip intreg fara semn).
Exemplu daca se doreste definirea unei variabile a cu valoarea 10:
>>a=10

OBS: In fereastra Workspace sunt informatii despre variabila definita.

2
Tipul de date poate fi modificat:
>>b=single(a)

Alte tipuri de date pot fi:


- intreg cu semn pe 8 biti:
>> c=int8(a)
- intreg fara semn pe 8 biti:
>> d=uint8(a)
Alte functii Matlab care permit modificarea tipului de date sunt:

double | int16 | int64 | int8 | single | uint16 | uint32 | uin


t64 |
| uint8

2. Utilizarea editorului in Matlab

Editorul din Matlab se porneste selectand din Toolbar „New Script”.

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.

O alta solutie este sa se defineasca sectiuni in fisierul de tip script si sa se execute


numai sectiunea dorita (folosind „Run Section” sau CTRL+ENTER). O sectiune se
defineste intre 2 simboluri procent („%%”).

Este recomandat ca fiecare sectiune sa inceapa cu instructiunea clear all care


sterge din workspace toate variabilele definite.

3. Vectori si matrici in Matlab.

Un avantaj al Matlab-ului este usurinta cu care se lucreaza cu vectori si cu matrici.

Exemple de sintaxe care folosesc vectori si matrici.

Aplicatia 1
Sa se scrie in editorul din Matlab exemplele de mai jos si sa se execute.
Explicati rezultatele obtinute!

a=[1 2 3] se definesc 2 vectori a si b de tip rand care au 3


b=[ 4 5 6] elemente;
c=[1; 2; 3] se defineste un vector c de coloana care are 3
elemente;
A=[1 2 3; 4 5 6; 7 8 se definesc doua matrici A si B cu 3 randuri si 3
9] coloane
B=[2 3 4;5 6 7; 8 9 OBS: (Matlab-ul este key sensitive);
10]
A’ transpusa matricii A;
c=a’ se transforma un vector de tip rand intr-un vector de
tip coloana;

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’;

4. Afisarea vectorilor in Matlab

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) ;

plot([0 1 2 3],[-1 2 0 3],'*') plot([0 1 2 3],[-1 2 0 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().

Functii care permit editarea graficelor

 Afisarea gridului figurilor se realizeaza folosind grid on;

plot([0 1 2 3],[-1 2 0 3],'*');


grid on;

 Afisarea mai multor grafice pe aceeasi fereastra se realizeaza prin activarea


proprietatii hold on a figurii curente:

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');

OBS: - optiunea 'r' -> permite reprezentarea vectorului x2 cu culoarea rosie.


- Dezactivarea proprietatii hold on se realizeaza utilizand hold off.

 Daca se doreste ca x1 si respectiv x2 sa fie reprezentate in 2 figuri diferite,


atunci se foloseste functia figure().

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.

 Functiile xlabel() si ylabel() permit denumirea axelor OX si OY; functia


title() permite denumirea figurii.

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.

OBS: - Functia legend() se utilizeaza pentru a afisa legenda graficelor:


legend('x1+x2', 'x1.*x2')

 Definirea subfigurilor in cadrul unei figuri se realizeaza folosind functia


subplot(); in fiecare dintre subfiguri se va putea afisa un alt grafic.
De exemplu urmatorul script, urmareste impartirea figurii in 6 subfiguri
dispuse pe 2 randuri si pe 3 coloane:

figure(1);
subplot(2,3,1);
stem(a,x1);
subplot(2,3,2);
stem(a,x2);
subplot(2,3,6);
stem(a,x1+x2);

Rezultatul obtinut este:

Subfigurile se numeroteaza pe fiecare rand de la stanga la dreapta.

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.

5. Utilizarea vectorilor pentru a defini semnale in Matlab.

Pentru a defini un vector care sa aiba semnificatia timp, t, intre 0 si 1 cu pasul de


esantionare 0.01 se utilizeaza codul:
t=0:0.01:1; %vectorul t reprezinta variabila timp

Daca se doreste definirea a doi vectori care sa reprezinte functiile x1 (t )  2e 15t si


x2 (t )  1  2sin(2 5t ) , se utilizeaza codul:

x1=2*exp(-15*t); %se defineste vectorul x1


x2=1+2*sin(2*pi*5*t); % se defineste vectorul x2

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?

Pentru definirea semnalelor armonice discrete se foloseste frecventa normalizata.


Daca se considera semnalul sin(2 f 0 t ) , care se esantioneaza cu frecventa f s ,
atunci se obtine semnalul discret:
 
Ts sin(2 f 0 t )  Ts (t )  Ts sin(2 f 0 t )   (t  nTs )  Ts  sin(2 f0 nTs )   (t  nTs ) 
n  n 
  
f0
 Ts  sin  2 n    (t  nTs ) 
n   fs 

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:

a=ones(1,10) %returneaza un vector cu 10 elemente cu valoarile 1


b=zeros(1,10) %functia zeros returneaza un vector cu 10 elemente cu
valorile 0
length(a) %functia length returneaza numarul de elemente ale
vectorului a
size([1 2 3;4 5 6;7 8 9]) % returneaza numarul liniilor si
coloanelor matricei
%[1 2 3;4 5 6;7 8 9]
c=[1 zeros(1,10)] %metoda prin care se poate simula  [n]
figure(2);stem(c);

d=[1+1j*10 -2+1j*5 10+1j*5] % returneaza un vector cu numere


complexe
abs(d) % returneaza modulul elementelor
unui vector
real(d) % returneaza partea reala a
elementelor unui %vector
imag(d) % returneaza partea imaginara a
elementelor %unui vector
conj(d) %returneaza conjugatul elementelor
unui %vector
angle(d) %returneaza faza elementelor unui
vector

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 ) ?

6. Instructiuni de salvare, incarcare si stergere a variabilelor.

save date.mat salveaza toate variabilele din workspace in fisierul


date.mat. fisierul va fi salvat implicit in directorul
curent.
save date_partial.mat salveaza variabile a, b, F in fisierul
a, b, F date_partial.mat
clear all sterge toate variabilele.
load date.mat incarca variabilele salvate in date.mat in workspace
clear a b A sterge din workspace numai variabilele a, b, A

9
7. Definirea filtrelor in Matlab

Pentru a defini in Matlab filtre, se definesc 2 vectori corespunzatori numitorului si


numaratorului functiei de transfer. Elementele celor 2 vectori reprezinta coeficentii
polinoamelor de la numarator si respectiv numitor incepand cu coeficentul corespunzator
variabilei care da ordinul filtrului. De exemplu, pentru a defini filtrul discret
2  z 1
H ( z)  , se definesc vectorii:
1  0.5 z 2

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.

O alta modalitate de defini functiile de transfer este de a defini variabila s (s =tf('s'))


sau z (z = tf('z',Ts); unde Ts reprezinta pasul de esantionare) si apoi se pot defini
sistemele analogice sau discrete:

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);

Toate cele 3 functii au urmatoarea functionalitate:


 daca una dintre functii nu are definit nici un parametru de iesire atunci sunt
afisate graficele pentru modulul si resoectiv faza functiei de transfer:

freqz(numz,denz);
freqs(nums,dens);
bode(Hz);
bode(Hs);

OBS: - in acest caz frecventele pentru care se calculeaza raspunsul in frecventa


se determina de functie;
 functiile freqz() si freqs() pot accepta ca parametru si numarul
frecventelor pentru care se calculeaza raspunsul in frecventa:

freqz(numz,denz,2048);
freqs(nums,dens,2048);

 functia bode() afiseaza implicit axa frecventelor logaritmica, iar


functiile freqz() si freqs() afiseaza implicit axa frecventelor
liniara;
o daca se defineste un vector de frecvente atunci raspunsul in frecventa se
calculeaza pentru valorile specificate in vectorul de frecvente:

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);

 daca se definesc ca parametri de iesire doi vectori pentru modulul si faza


functiei de transfer atunci nu se mai afiseaza graficele modului si respectiv ale
fazei:

%
[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);

OBS: - Functiile freqs() si respectiv freqz() retuneaza raspunsul in


frecventa sub forma unui vector cu elemente complexe iar functia bode()
returneaza raspunsul in frecventa sub forma castigului (masurat in dB) si fazei
sistemului analogic sau discret.
o daca se doreste determinarea raspunsului la o anumita frecventa:
 pentru functiile freqs() si freqz() trebuie definit un vector de
care contine cel putin doua frecvente; de exemplu frecventa 0 si
frecventa pentru care se doreste calcularea raspunsului:

[Hz_w0]=freqz(numz,denz,[0 w0]);

 Pentru functia bode() este suficient sa se specifice frecventa pentru


care se doreste determinarea raspunsului:

[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

Modulul functiei de transfer este:


e  j e j 1
H ( j )    
1  0.9e  j  j
1  0.9e 1  0.9 cos( ) 2   0.9sin( ) 2
1

1.81  1.8cos( )

Faza functiei de tranfer este:


 e  j   0.9sin( ) 
 ( )  arg 
1  0.9e
 j

  arg e j
  
 arg 1  0.9e  j    arctan  
 1  0.9 cos( ) 
Daca h[n] caracteristica de frecventa a filtrelor numerice este:

H ( )  H ( z ) z e j   h[n]  e
n 
 j n

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 .

9. Calcularea raspunsului permanent a sistemelor discrete

Raspunsul unui filtru discret H(z) la un semnal armonic x[n] este:


x[ n]  A cos(0 n ) y[ n]  A  H ( j0 ) cos(0 n  arg{H ( j0 )})
H ( z)

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

10. Raspunsul tranzitoriu al filtrelor numerice.


x[n] y[n]
H ( z)

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 

Se considera filtrul discret H ( z )  1  z 2 si semnalul de intrare


e[n]   [n]   [n  1] . Raspunsul filtrului se poate calcul in domeniul Z:

e[n]   [n]   [n  1] y[n]  Z 1 Y ( z )   [n]   [n  1]   [n  2]   [n  3]


h[n]
Z
Z 1

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

OBS: Deoarece semnalul de intrare este definit pentru intervalul 0:1 (2


esantioane) iar raspunsul la impuls a filtrului pentru intervalul 0:2 (3 esantioane),
atunci semnalul de iesire este definit pe intervalul 0:3 (3+2-1=4 esantioane).

Produsul de convolutie se calculeaza folosind functia Matlab conv() Deoarece


vectorii, ce constitue parametrii de intrare a functiei conv(), au un numar limitat de
elemente functia se poate folosi pentru a determina raspunsul filtrelor de tip FIR
(filtre cu raspuns finit la impuls).
Raspunsul la impuls a filtrului H ( z )  1  z 2 este:
 
h[n]  Z 1  H ( z )  Z 1 1  z 2   [n]   [n  2]

x=[1 -1]; % definirea semnalului x[n]   [n]   [n  1] ;


h=[1 0 1]; % definirea raspunsului la impuls al
filtrului;
y=conv(x,h); % functia conv() returneaza produsul de
%convolutie dintre semnalele x[n] si h[n];
stem(0:3,y);
xlabel('n');
ylabel('y[n]');

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:

n=0:19; %se defineste vectorul


corespunzator %variabilei n
e=ones(1,length(n)); %semnalul de intrare
num=[1 0]; %numaratorul functiei de
transfer
den=[1 -0.8]; %numitorul functiei de tranfer
y=filter(num,den,e); %raspunsul filtrului
y_calculat=-4*0.8.^n+5*ones(1,length(n)); %semnalul
calculat
figure(1); %se defineste figura(1);
stem(n,e);hold on; %afisarea semnalului de intrare
stem(n,y,'r');grid on; %afisarea semnalului de iesire
legend('e[n]','y[n]');
xlabel('n');
ylabel('e[n], y[n]');
figure(2);
stem(n,y-y_calculat);grid on; %diferenta dintre semnalul
de %iesire si semnalul
calculate
OBS: Functia filter() returneaza un numar de esantioane ale semnalului
y[n] egal cu numarul esantioanelor ale semnalului e[n].

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().

11. Scrierea ecuatiilor cu diferente pentru sisteme discrete

Ecuatia cu diferente reprezinta o metoda de a determina iesirea unui sistem liniar ca


o combinatie liniara dintre valoarea curenta a intrarii, valorile intarziate ale
semnalelor de intrare si iesire. Daca filtrul este de tip FIR, atunci ecuatia cu diferente
reprezinta o metoda de iesire ca o combinatie liniara dintre valoarea curenta a intrarii
si valorile intarziate ale semnalelor de intrare.

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:

y[n]  e[n]  0.5e[n  1]  0.5 y[n  1]  0.06 y[n  2]

De exemplu de daca e[n]   [n]  0.5 [n  1]  0.25 [n  2] :

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().

Limbajul Matlab respectă principiile programării structurale, astfel că există o


foarte mare asemănare între sintaxa şi structurile sale cu cea a limbajului C.

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*')

Prin scrierea acesteia linie cu linie in fereastra principala sau in editorul de


text se va obţine următorul rezultat:
Suma=
55
a =
1 2 3 4 5 6 7 8 9 10
precum şi un grafic cu valorile vectorului “a”.
Sa se scrie in editorul de text exemplu de mai sus.
Obs:
In Matlab, spre deosebire de C, indexarea vectorilor se face incepand cu 1.
Daca in exemplul de mai sus se scria i=0:10 atunci interpretorul ar fi generat
eroare.

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.

12. Implementarea unui registru de deplasare serie in Matlab

Implementarea sumatoarelor si multiplicatoarelor se realizeaza folosind


operatorii de adunare si multiplicare. Implementarea elementului de intarziere se
poate realiza folosind instructiunea for sau while, ca in exemplul de mai jos care
implementeaza un registru de deplasare serie.

18
e1 e2 e3 e4
e5
1 1 1 1
z z z z

Se presupune ca la momentul 0: e1  1 , e2  0 , e3  0 , e4  0 , e5  0 . La fiecare


moment multiplu de 1, en  en1 . La fiecare moment, valorile en , se salveaza cate o
linie a matricei E. Matricea E se considera ca are 5 linii si 5 coloane.

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
+

13. Exemple instructiuni Matlab

 Instructiunea: „if ... end”


Exemplu:
Sa se salveze elementele pozitive ale vectorului a, in vectorului b:

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

 Instructiunea: „if ...elseif...else... end”


Exemplu:
Sa se salveze elementele pozitive ale vectorului a in vectorului b
iar cele negative in vectorul c, iar cu valoarea 0 in vectorul d:

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

14. Functii Matlab

Functiile in Matlab se definesc astfel:

function
[parametri_de_iesire]=nume_functie(parametri_de_intrare)
% comentarii legate de functie
corpul functiei

end

De exemplu urmatoarea functie calculeaza suma a doua numere:

function [diferinta,suma]=dif_suma(a,b)
%functia calculeaza suma si diferenta dintre a si b

diferinta =a-b;
suma =a+b;

end

OBS: -Functia se salveaza intr-un fisier cu numele nume_functie. Pentru a


putea fi folosita, fisierul care contine functia trebuie sa fie salvat/copiat in
directorul curent sau intr-un director specificat in File->Set Path.
-Textul comentat care imendiat dupa numele functiei

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 este un pachet de programe pentru modelarea, simularea şi


analizarea sistemelor dinamice. Pot fi simulate atât sisteme liniare cât şi neliniare,
modelate în timp continuu sau discret sau o combinaţie a celor două. Sistemele pot
avea porţiuni eşantionate cu frecvenţe de eşantionare diferite.
Pentru modelarea de sistem este furnizată o interfaţă grafică intuitivă şi foarte
uşor de utilizat. Blocurile sunt plasate şi interconectate cu ajutorul mouse-ului ceea
ce reprezintă un foarte mare avantaj (faţă de scrierea directă a ecuaţiilor diferenţiale
ce definesc un sistem). Simulink oferă o colecţie foarte mare de blocuri cum ar fi:
generatoare de semnal, instrumente de vizualizare, blocuri care realizează funcţii
matematice, componente liniare şi neliniare, etc. Setul de blocuri furnizat poate fi
extins oricând cu noi blocuri – este furnizată documentaţie completă despre felul
cum se poate crea un nou bloc. Mai multe blocuri pot fi grupate oricând într-un bloc
nou, oferind astfel posibilităţi extinse de analiză la un nivel superior de organizare.
După definirea unui model nou, simularea se poate efectua atât în mod grafic cât şi
cu ajutorul interpreterului. Cele două instrumente sunt legate unul de celălalt şi astfel
se poate opta pentru oricare dintre ele. În continuare vom folosi exclusiv modul grafic
pentru simplitatea utilizării şi datorită faptului că se evită scrierea de cod
(consumator de timp şi o potenţială sursă de erori). Pentru lansarea programului
Simulink se tastează în mediul Matlab comanda:

simulink

Pentru a defini un proiect Simulink, se selecteaza „Blank Model”. Modelul


Simulink este:

23
Blocurile Simulink sunt organizate in librarii:

Vom folosi în cadrul laboratorului blocurile din librariile “Simulink” şi “DSP


System Toolbox”. Dacă se deschide biblioteca “Simulink” se observă următoarele
librarii:
• Continuous - blocuri ce furnizează funcţii specifice circuitelor analogice:
derivare, integrare, funcţie de transfer, întârziere în domeniul timp, etc.;
• Discrete - blocuri ce furnizează funcţii specifice circuitelor discrete: funcţie de
transfer discretă, filtru discret, întârziere în domeniul timp cu un pas, integrator
discret, etc.;
• Function & Tables - blocuri care permit extinderea setului de blocuri existent cu
blocuri create de utilizator;
• Math - funcţii matematice de ordin general: sumă, produs, amplificare, modul,
fază, funcţii trigonometrice, etc.;
• Nolinear - funcţii specifice circuitelor neliniare;
• Signals & Systems - blocuri necesare pentru definirea semnalelor: masă,
multiplexor de mai multe semnale, funcţii pentru preluarea şi salvarea valorilor
în spaţiul Matlab, etc.;

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.

In cadrul laboratorului, se vor folosi sisteme: algebrice, discrete si analogice.

1. Sisteme algebrice

Un prim exemplu este modulatia in amplitudine:


sMA (t )  m(t ) sin( p t )  M 0 [1  m sin(m t )]sin( p t )
Se considera: M 0  2 , m  1.5 , m  2 100 ,  p  2 1100 .

Modelul Simulink este:

Blocurile utilizate fac parte din librariile:


 Constant, Sine Wave -> Simulink/Sources
 Add, Gain, Product -> Simulink/Math
 Scope -> Simulink/Sinks

Parametrii fiecarui bloc se modifica astfel:

Sine Wave: Sine Wave1:

25
Gain:

Parametrii simularii se seteaza in meniul Simulation -> Model Configuration


Parameteres (CTRL + E):
 pentru Stop time s-a selectat 0.1 (10 perioade ale semnalului modulator);
 pentru Max step size s-a selectat 105 (1/100 din valoarea perioadei
semnalului purtator);

Pentru a simula sistemul, se selecteaza Simulation->Run (CTRL+T).

OBS: se pot utiliza si shortcut-urile din Toolbar-ul sistemului:

26
Librariile Simulik Parametrii simularii Pornirea simularii

Rezultatul simularii este:

O modalitate mai eficienta (utila mai ales daca se intentioneaza modificarea


frecventa a valorilor modelului) de a utiliza Simulink-ul este ca toate valorile utilizate
in modelul Simulink si parametrii simularii sa fie definiti intr-un script de de .m:
%parametrii modelului MA:

fm=100;
m=1.5;
M0=2;
fp=1100;
MAX_STEP_SIZE=1e-5;
T_final=0.1;

Odata rulat script-ul, variabilele trebuie sa apara in Workspace, variabilele


respective pot fi folosite in Simulink:

27
2. Utilizarea sistemelor continue

Blocurile pentru sisteme continue se gasesc in libraria Simulink/Continous. Un


exemplu de sistem continue este blocul Transfer Function, care poate fi folosit
pentru a simula filtre de tip trece jos de exemplu. Pentru a defini filtrul a carui functiei
10
de transfer este , se definesc ca in Matlab vectorii numaratorului si numitorului
s  10
functiei de transfer:

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

Pentru sistemele discrete se folosesc blocurile din librariile Simulink/Discrete


sau DSP System Toolbox. De exemplu urmatorul sistem implementeaza ecuatia cu
diferente:
y[n]  2e[n]  3e[n  2]

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]:

Pentru a simula sistemele discrete se utilizeaza setarile:


- Solver options Type: Fixed-Step
- Solver: Discrete

In acest caz pasul de esantionare s-a ales 1.

Aplicatia 29

Iesirea sistemului discret care implementeaza functia de transfer


y[n]  2e[n]  3e[n  2]
este :

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:

Pentru valori diferite ale pasul de esantionare, se modifica Sample Time.

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

S-ar putea să vă placă și