Sunteți pe pagina 1din 15

5.

STRUCTURI DE FILTRE NUMERICE

LUCRAREA 5
STRUCTURI DE FILTRE NUMERICE.
INTERFEȚE GRAFICE

5.1. Structuri pentru filtre cu răspuns infinit la impuls.

Fie funcţia de transfer


M

b z k
k
B z
H  z  k 0
 (0.1)
N
A z 
1   ak z k

k 1

În domeniul timp, filtrul poate fi caracterizat prin ecuaţia cu diferenţe


finite:
M N
y[n] = bk x[n  k ]   ak y[n  k ] (0.2)
k 0 k 1

Această ecuaţie permite calculul unui eşantion al ieşirii pe baza a M


eşantioane ale intrării şi a N  1 eşantioane anterioare ale ieşirii. Modul în care
este calculată ieşirea (întâi partea nerecursivă şi apoi partea recursivă etc.) poate
fi reprezentat grafic sub forma unei structuri cu unităţi de înmulţire, adunare şi
elemente de întârziere.
5. STRUCTURI DE FILTRE NUMERICE

5.1.1. Forma directă

Pornind de la ecuaţia cu diferenţe finite (0.2) operaţiile prin care se


calculează ieşirea filtrului pot fi reprezentate în structuri de tipul forma directă 1
sau forma directă 2 ca în figurile 5.1 şi 5.2 prin simpla identificare a
coeficienţilor ak şi bk .

Figura 5.1. Forma directă 1

x[n] b0 y[n]

1
z
 a1 b1

1
z
 a2 b2

1
z
 aN bN

Figura 5.2 Forma directă 2


5. STRUCTURI DE FILTRE NUMERICE

5.1.2. Forma cascadă

Funcţia de transfer poate fi factorizată sub forma:

b0,k (1  zk z 1 )(1  zk* z 1 ) P b0,k  b1,k z 1  b2, k z 2


P P
H  z=  1 * 1
 1
= H ( z ) (0.3)
k=1 (1  pk z )(1  pk z ) k=1 1  a1,k z  a2,k z 2
k
k=1

unde zk sunt zerourile iar pk sunt polii funcţiei de transfer grupaţi în perechi
complex conjugate pentru obţinerea funcţiilor de transfer de ordin 2 cu
coeficienţi reali H k ( z ) . Dacă funcţia de transfer are zerouri sau poli reali atunci
se poate face o descompunere şi cu polinoame de ordin 1. Rezultă o realizare în
cascadă, reprezentată în figura 5.3.

x[n] y1[ n ] y2 [ n ] y P [ n]  y[ n]
H1 ( z) H 2 ( z) H P (z )

Figura 5.3. Realizarea în cascadă

Fiecare din filtrele componente, având o funcţie de transfer de ordinul 2,


poate fi realizată în una din formele directe 1 sau 2.

Funcţiile MATLAB zp2sos, şi tf2sos permit determinarea funcţiilor


de transfer de ordin 2 (Second Order Sections) pentru descompunerea în forma
cascadă.

Sintaxe:

[SOS,G]=tf2sos(B,A)
 obţine o matrice SOS care conţine coeficienţii secţiunilor de ordin 2 pentru
factorizarea funcţiei de transfer H ( z ) . B reprezintă vectorul coeficienţilor
numărătorului B( z ) iar A reprezintă vectorul coeficienţilor numitorului A( z ) .
 SOS este o matrice de forma
SOS = [ b01 b11 b21 1 a11 a21
b02 b12 b22 1 a12 a22
...
b0L b1L b2L 1 a1L a2L ]
unde fiecare linie din matrice conţine coeficienţii unei structuri de ordin 2.
b0,k  b1,k z 1  b2,k z 2
Hk  z  =
1  a1,k z 1  a2,k z 2
5. STRUCTURI DE FILTRE NUMERICE

 G este un scalar care reprezintă câştigul global al sistemului. Dacă G nu este


specificat acesta este inclus în prima secţiune.

[SOS,G]=zp2sos(Z,P,K)
 obţine o matrice SOS care conţine coeficienţii secţiunilor de ordin 2 pentru
factorizarea funcţiei de transfer H ( z ) . Z reprezintă vectorul zerourilor, P
reprezintă vectorul polilor, iar K reprezintă câştigul descompunerii poli-
zerouri. Polii şi zerourile trebuie să fie daţi în perechi complex conjugate.
 G este un scalar care reprezintă câştigul global al sistemului. Dacă G nu este
specificat acesta este inclus în prima secţiune.

5.1.3. Forma paralel

În acest caz se porneşte de la descompunerea în fracţii simple a funcţiei


H ( z ) . Presupunând coeficienţii funcţiei de transfer ak , bk R , fracţiile simple
(cu numitor de gradul 1) au în general coeficienţi complecşi. Grupând însă
fracţiile corespunzătoare perechilor de poli complex conjugaţi, rezultă funcţiile
H p ( z ) de gradul 2, cu coeficienţi reali, ak , p , bk , p R . Funcţia de transfer poate
fi scrisă sub forma:

P b0, p  b1, p z 1 P
H  z  C    C  H p z (0.4)
p 1 1  a1, p z 1  a2, p z 2 p 1

Se obţine schema din figura 5.4.


y1[n]
H1 ( z )

y2 [ n ]
x[n] H 2 ( z)

y p [n]
H p (z )

C y[ n ]

Figura 5.4. Realizarea în paralel


5. STRUCTURI DE FILTRE NUMERICE

Funcţia MATLAB residuez realizează descompunerea în fracţii simple


B( z )
a funcţiei de transfer H ( z )  . Ea poate fi aplicată în două sensuri:
A( z )

[R,P,K]=residuez(B,A)
B( z )
 descompune în fracţii simple funcţia H ( z )  definită de vectorii
A( z )
coeficienţilor B şi A astfel:
B( z ) r1 rN
 1
   1
 k1  k2 z 1  
A( z ) 1  p1z 1  pN z
 R şi P sunt vectori coloană care conţin reziduurile şi, respectiv, polii.
 K este un vector linie pentru termenii liberi (dacă ordinul numărătorului este
mai mare decât al numitorului).
 Dacă p j este un pol multiplu de ordin m, descompunerea în fracţii simple va
conţine termeni de forma:
rj rj 1 rj m1
 
1  p j z 1  1  p j z 1 
1
1 pjz 2 m

[B,A]=residuez(R,P,K)
 reface funcţia de transfer H ( z ) din descompunerea în fracţii simple.

Astfel, pentru obţinerea descompunerii în structura paralel cu coeficienţi


reali, se poate aplica următoarea metodă (numai dacă polii sunt ordonaţi în
perechi complex conjugate).

[r,p,k]=residuez(b,a)
[b1,a1]=residuez(r(1:2),p(1:2),[])
[b2,a2]=residuez(r(3:4),p(3:4),[])
etc...
5. STRUCTURI DE FILTRE NUMERICE

5.1.4. Forma latice

Sinteza funcţiei de transfer a unui filtru RII:

B( z ) Y ( z )
H ( z)   (0.5)
A( z ) X ( z )

în forma latice se face completând structura latice recursivă cu o structură în


scară (figura 5.5).

x[n] y1[n]

 kN  k N 1  k1
kN z 1 k N 1 z 1 k1
z 1
y2 [ n ]

cN cN  2 c1 c0
c N 1

y[n]
Figura 5.5. Realizarea în forma latice-scară

În figură apar pe lângă nodurile de intrare x[n] şi de ieşire y[n] încă două
noduri y1[n] şi y2 [n] . Se demonstrează că funcţiile parţiale de transfer asociate
acestor două ieşiri sunt:

Y1 ( z ) 1
H1 ( z )   (0.6)
X ( z ) A( z )
Y2 ( z ) z  N A( z 1 ) A ( z )
H 2 ( z)    (0.7)
X ( z) A( z ) A( z )

Din ecuaţia (0.6) rezultă că în cazul unei funcţii de transfer numai cu poli
structura latice nu are şi structura în scară, iar ieşirea filtrului va fi y1[n] .
În ecuaţia (0.7) s-a notat cu A ( z ) polinomul reciproc al numitorului A( z )
obţinut din polinomul A( z ) prin inversarea ordinii coeficienţilor.

A ( z )  aN  aN 1z 1    a0 z  N (0.8)
5. STRUCTURI DE FILTRE NUMERICE

Evident funcţia H 2 ( z ) este o funcţie trece-tot şi aceasta poate fi sintetizată


în forma latice fără structura în scară, ieşirea filtrului fiind y2 [n] .
Sinteza structurii latice pentru o funcţie de transfer RII se face pornind de la
coeficienţii a0 , a1,..., aN ai numitorului A( z ) şi se obţin coeficienţii de reflexie
k1 ,..., k N după algoritmul recursiv:

for j = 0 :1: N
aN , j  a j
end
for i = N : -1: 2
ki  ai ,i
for j = 1:1: i -1
a ka
ai 1, j  i , j i 2i ,i  j
1  ki
end
end
k1  a1,1

Calculul coeficienţilor scară c0 ,..., cN se face, de asemenea, recursiv


folosind şi coeficienţii b0 , b1,..., bN ai numărătorului B( z ) .
cN  bN
for l  N  1, N  2,,0
N
cl  bl   ci ai ,i l
i l 1

end

Funcţia MATLAB tf2latc calculează coeficienţii structurii latice.

Sintaxe:

[K,C]=tf2latc(B,A)
 returnează vectorul K ce conţine coeficienţii de reflexie ki şi vectorul C ce
conţine coeficienţii structurii scară ci pentru un filtru RII cu coeficienţii
numărătorului aflaţi în vectorul B şi coeficienţii numitorului aflaţi în vectorul
A normaţi la a0 .
5. STRUCTURI DE FILTRE NUMERICE

K=tf2latc(B)
 returnează vectorul K ce conţine coeficienţii de reflexie ki pentru un filtru
RFI cu coeficienţii funcţiei de transfer aflaţi în vectorul B normaţi la b0 .

K=tf2latc(1,A)
 returnează vectorul K ce conţine coeficienţii de reflexie ki pentru un filtru
RII numai cu poli, cu coeficienţii numitorului aflaţi în vectorul A normaţi la
a0 .

Observaţie.
Dacă în urma calculelor unul din coeficienţii de reflexie va fi egal cu 1 atunci
funcţia tf2latc va genera eroare (deoarece termenul 1  ki2 care apare la
numitor este 0).

Invers, se poate obţine funcţia de transfer pornind de la coeficienţii de reflexie şi


coeficienţii structurii scară folosind funcţia latc2tf. Detalii se pot obţine cu
help latc2tf.

Exemplu:
Fie sistemul RII având funcţia de transfer:
B( z ) (0.5  z 1 )(1  0.5 z 1 )(1  1.2 z 1  1.8 z 2 )
H ( z)  
A( z ) 1  0.5 z 1  1.2 z 3  0.5 z 4
Sintetizaţi structurile pentru formele cascadă, paralel şi latice.

// Polinomul de la numitor este:


a=[1 0.5 0 1.2 0.5];

// Polinomul de la numărător se obţine din zerourile funcţiei de transfer.


z1=[-2; -0.5];
z2=roots([1 -1.2 1.8]);

// Deoarece primul termen liber este 0.5, polinomul trebuie înmulţit cu 0.5.
b=0.5*poly([z1; z2])

b =
0.5000 0.2500 -0.5000 2.7500 1.5000

// Forma cascadă
[SOS,G]=tf2sos(b,a)
5. STRUCTURI DE FILTRE NUMERICE

SOS =
1.0000 2.5000 1.0000 1.0000 1.5206 0.4564
1.0000 -1.2000 1.8000 1.0000 -1.0206 1.0955
G =
0.5

Rezultă descompunerea în cascadă:


1  2.5 z 1  z 2 1  1.2 z 1  1.8 z 2
H  z   G  H1 ( z )  H 2 ( z ) = 0.5  
1  1.52 z 1  0.456 z 2 1  1.02 z 1  1.095 z 2

// Forma paralel
[r,p,k]=residuez(b,a)

r =
-0.6541
-0.6329 + 0.1741i
-0.6329 - 0.1741i
-0.5800
p =
-1.1091
0.5103 + 0.9138i
0.5103 - 0.9138i
-0.4115
k =
3.0000

Se observă că există reziduuri şi poli complecşi. Deoarece dorim o structură cu


coeficienţi reali vom grupa perechea de valori complex conjugate într-o funcţie
de transfer de ordin 2 cu coeficienţi reali:

[b2,a2]=residuez(r(2:3),p(2:3),[])

b2 =
-1.2659 0.3278
a2 =
1.0000 -1.0206 1.0955

Rezultă descompunerea în paralel:


r1 B ( z) r4
H ( z)  1
 2  k 
1  p1 z A2 ( z ) 1  p4 z 1
0.65 1.26  0.32 z 1 0.58
   3
1  1.1z 1 1  1.02 z 1  1.09 z 2 1  0.41z 1
5. STRUCTURI DE FILTRE NUMERICE

// Coeficienţii formei latice se obţin direct:


[k,c]=tf2latc(b,a)

k =
0.3061
-0.2794
1.2667
0.5000

c =
-2.3898
-1.4985
-0.2333
2.0000
1.5000

Observaţii:
 Valorile exacte ale coeficienţilor obţinuţi mai sus au mult mai multe zecimale
decât cele afişate în MATLAB în formatul short. În practică, din cauza
reprezentării numerelor pe un număr finit de biţi apar diferenţe (trunchieri)
ale valorilor coeficienţilor faţă de cele simulate.
 În exemplul anterior se poate observa că sistemul este instabil, fie prin faptul
că un pol este în modul mai mare ca 1, fie folosind testul Schür-Cohn pentru
coeficienţii de reflexie k se observă ca coeficientul k3 e supraunitar.

E1. Exerciţii:
Fie sistemele RII având funcţiile de transfer:
2  3.6 z 1  1.3z 2  0.4 z 3  0.2 z 4
1. H ( z ) =
1  2.8 z 1  3.15 z 2  1.75 z 3  0.425 z 4
(1  2 z 1  3z 2  4 z 3 )(1  z 3 )
2. H ( z ) 
1  0.8 z 2  0.66 z 4  0.35 z 6
1
3. H ( z ) 
1  1.27 z  1.19 z  1.18 z 3  0.4 z 4
1 2

0.4  0.7 z 1  0.175 z 2  z 3


4. H ( z ) 
1  0.175 z 1  0.7 z 2  0.4 z 3
( z  0.9e j0.95 / 4 )( z  0.9e j0.95 / 4 )( z  0.9e j1.05 / 4 )( z  0.9e j1.05 / 4 )
5. H ( z ) 
( z  0.95e j / 4 )( z  0.95e j / 4 )( z  0.9e j / 4 )( z  0.9e j / 4 )
Sintetizaţi şi desenaţi structurile pentru formele directă 1 şi 2, cascadă, paralel,
latice.
5. STRUCTURI DE FILTRE NUMERICE

5.2. Interfețe grafice

5.2.1. Mediul de dezvoltare GUIDE

GUIDE reprezintă un mediu de dezvoltare specific Matlab, în care se pot crea cu


ușurință interfețe grafice (Graphical User Interface Development Environment). Se
lansează tastând la linia de comandă:

guide

În urma lansării acestei comenzi, pe ecran va apare următoarea fereastră, în care


utilizatorul poate alege un anumit tip de interfață grafică în funcție de cerințele de
proiectare; de obicei se alege prima opțiune ”Blank GUI (Default)”.

GUIDE oferă posibilitatea de a alege butoane dintr-o listă predefinită,


poziționându-le pe suprafața grafică (sau canvas) cu „drag and drop”. Pe măsură
ce utilizatorul alege și așează pe canvas diverse obiecte și după ce salvează
interfața grafică creată sub forma unui fișier cu extensia .fig, GUIDE creează
automat un fișier cu extensia .m care poate fi vizualizat selectând din meniu
View/M-File Editor. Acest fișier conține toate funcțiile necesare rulării unei
interfețe grafice în Matlab într-o formă inițială, adică needitate. Aceste funcții
trebuie completate cu codul Matlab corespunzător aplicației care se dorește a fi
creată.
De exemplu, pentru a putea vedea funcția chemată atunci când se dă click pe un
buton de tip ”pushbutton” se dă click-dreapta pe butonul respectiv și se alege din
meniul afișat opțiunea View Callbacks/Callback, ca în figură:
5. STRUCTURI DE FILTRE NUMERICE

5.2.2. Interfața grafică ”PDS_gui”

Se deschide exemplul de interfață grafică ”PDS_gui” alegând în fereastra inițială


a mediului GUIDE, GUIDE Quick Start, tab-ul Open Existing GUI și selectând
fișierul PDS_gui.fig. Va apărea următoarea fereastră:

Pentru a putea rula interfața grafică, se selectează opțiunea Tools/Run din meniu,
sau se apasă butonul verde din meniul Toolbar.

E2. Exerciţii:
1. Pentru exemplul PDS_gui să se studieze fișierul cu același nume și
extensia .m, accesibil direct din meniul Toolbar de la butonul . Se va alcătui
5. STRUCTURI DE FILTRE NUMERICE

o listă cu numele tuturor funcțiilor existente și se va stabili corespondența


obiect-funcție acolo unde se poate. De exemplu, primele patru funcții sunt:

function varargout = PDS_gui(varargin)


function PDS_gui_OpeningFcn(hObject, eventdata, handles, varargin)
function varargout = PDS_gui_OutputFcn(hObject, eventdata, handles)
function inSignal_Callback(hObject, eventdata, handles)

iar ultima funcție corespunde butonului de editare de text cu eticheta inSignal în


care se introduce semnalul s.
Prima funcție nu se editează, ea reprezentând o primă etapă de inițializare. A
doua funcție, PDS_gui_OpeningFcn, este apelată imediat după rularea interfeței
grafice (Run), înainte ca utilizatorul să poată iniția vreo acțiune asupra acesteia.
Aceasta reprezintă o a doua etapă de inițializare, în care proiectantul își declară
și definește variabilele necesare.

Observaţie:
 Pentru a ști ce etichetă are fiecare buton în parte, se dă dublu-click de
exemplu pe butonul de editare a semnalului s, deschizând astfel fereastra
Inspector (sau Property Inspector). Aceasta conține toate proprietățile
obiectului curent, adică ale butonului de editare de text în acest caz.
Eticheta obiectului se găsește în câmpul corespunzător proprietății Tag.
Observați ce alte proprietăți mai au obiectele din exemplul dat.

2. Să se studieze cu ajutorul Help-ului din Matlab semnificațiile


următoarelor noțiuni: GUI Data și handles Structure. Pentru aceasta se va apela
la meniul Help/Product Help al principalei ferestre Matlab. Să se noteze pe scurt
aceste semnificații.

3. Reluați exercițiul 1 pentru celelalte două interfețe grafice cu care lucrează


PDS_gui: gui_player.fig și gui_filter.fig. Corespondențele dintre funcții și
obiecte se află dând click-dreapta pe obiectul respectiv și alegând din meniul
afișat opțiunea View Callbacks/Callback.

E3. Exerciţii:
1. Pentru interfața grafică PDS_gui, să se completeze funcția callback
corespunzătoare butonului Spectrogram astfel încât, atunci când acest buton este
apăsat, să fie afișată spectrograma semnalului s dat ca ”Input signal”. Să se
verifice pentru un semnal s de tip sinusoidal cu frecvența de 800Hz, eșantionat
cu Fs = 2kHz și generat pe durata 0,5secunde, de amplitudine unitară.

Observaţie:
 După completarea callback-ului, salvarea modificărilor, lansarea în
execuție cu Tools/Run, editarea câmpurilor Input signal și t cu valorile
5. STRUCTURI DE FILTRE NUMERICE

cerute, trebuie apăsat butonul Signal to ‘test.wav’ file. Astfel, semnalul dat
este scris într-un fișier test.wav care apoi se va deschide cu Open din
meniul Toolbar al interfeței grafice.

2. Deschideți pe rând fișierele baby.wav și speech.wav și vizualizați formele


de undă în timp, spectrele semnalelor și spectrogramele. Pentru formele de undă
în timp folosiți opțiunile Zoom in și Zoom out din Toolbar-ul interfeței grafice.
Ce tip de semnal corespunde vocalei a ? Vocala a se poate identifica cu ușurință
în baby.wav.

E4. Exerciţii:
1. Pentru interfața grafică gui_player să se identifice funcția callback
asociată obiectului pop-up meniu, având eticheta signSelect. În această funcție,
primele două linii sunt:

str = get(hObject, 'String');


val = get(hObject,'Value');

Identificați semnificația acestor linii căutând în Help sintaxa funcției get. Pentru
aceasta tastați în Command Window comanda

help get

Cu ce se poate înlocui parametrul hObject al acestor funcții fără a schimba


semnificația și comportamentul lor?

2. În aceeași funcție callback de la exercițiul anterior este creat un player


asociat unui singur semnal, fie cel original fie cel filtrat. Studiați funcția
audioplayer utilizată pentru a crea player-ul; în Matlab/Help/Product Help
căutați documentația referitoare la audioplayer.

E5. Exerciţii:
1. La interfața grafică gui_filter se va studia modul de implementare a
filtrului digital RII. De remarcat faptul că filtrul este reproiectat pentru fiecare
modificare adusă parametrilor acestuia în căsuța de editare dedicată lor sau în
meniul pop-up care permite alegerea tipului dintre FTJ, FTS, FTB și FOB! Ce
metodă a fost folosită pentru proiectarea filtrului RII, directă sau indirectă?

2. În următoarele două figuri este exemplificat rezultatul filtrării trece jos și


apoi trece sus a semnalului baby.wav. Explicați modificările apărute în
spectrogramă.
5. STRUCTURI DE FILTRE NUMERICE

3. Reluați proiectarea filtrului pentru un filtru de tip eliptic, înlocuindu-l pe


cel de tip Butterworth existent. Folosiți următorii parametri: Fs = 25kHz,
Fe1=4500Hz, Fe2=6000Hz, Fb1=3500Hz, Fb2=7000Hz. Filtrați semnalul
speech.wav și observați diferențele.
4. Reluați filtrele de la exercițiile 2 și 3 și ascultați semnalele original și
filtrat cu player-ul din interfața grafică gui_player.
6. Creați o funcție nouă care să primească ca parametri de intrare toți
parametrii setați în gui_filter pentru a putea proiecta un filtru RII. Funcția
trebuie să returneze coeficienții b și a ai filtrului. Această funcție va fi apelată de
callback-urile asociate obiectelor cu etichetele filtParam și filtType.

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