Sunteți pe pagina 1din 12

Realizarea filtrelor discrete de tip IIR si FIR

1. Implementarea filtrelor de tip FIR.

Functia de transfer a unui filtru de tip FIR este:


M −1
H ( z) = h z
k =0
k
−k
(1)

si corespunde urmatoarei ecuatii cu diferente:


M −1
y[n] =  h x[n − k ]
k =0
k (2)

a. Forma directa
Forma directa de implementare a filtrelor de tip FIR poate fi dedusa din
relatia (2) sau (1).
Y ( z ) M −1 − k
H ( z) = =  hk z
X ( z ) k =0
M −1
Y ( z) = h z
k =0
k
−k
X ( z)

Atunci iesirea filtrului este:


M −1
y[n] =  h x[n − k ]
k =0
k

Pentru un filtru de ordin 4 rezulta implementarea:

Aplicatia 1
- Utilizand filterDesigner, sa se proiecteze utilizand un filtru de tip FIR de
ordin 4 si sa se exporte in Workspace coeficentii filtrului:
- File->Export-> se selecteaza Export;
 coeficentii filtrului apar in fereastra Workspace;
- Utilizand Simulink, sa se realizeze filtrul utilizand filtrul elemente de
sistem, utilizand: sumatoarea, scaloare (Gain) si elemente de
intarziere (Unit delay);
- Se aplica sistemului semnal de tip treapta unitate;
- Sa se compare iesirea sistemului implementat cu iesirea blocului
Discrete Filter din Simulink;

Se vor folosi urmatoarele blocuri din Simulink:

1
Library Block

Simulink/Sources

Simulink/Math Operations

Simulink/Math Operations

Simulink/Discrete

Simulink/Sinks

Simulink/Discrete

OBS:
- Pasul de esantionare pentru sursa se considera 1:

- Valorile corespunzatoare scaloarelor din Workspace pot si utilizate in


Simulink, apeland elementele vectorului corespunzator functiei de
transfer:

- Pentru a defini doua canale pentru osciloscop:


Se alege Parameters si se definesc 2 axe.

2
- Coeficentii filtrului de tip FIR se pot apela in Simulink, in blocul Discrete
Transfer Fcn. apeland vectorul corespunzator functiei de transfer;

- Se seteaza parametrii simularii corespunzatori sistemelor discrete:


Simulation->Configuration Parameters
- se alege „fundamental sample time” 1

b. Implementarea filtrelor de tip FIR cu faza liniara


Implementarea filtrelor de tip FIR cu faza liniara se bazazea pe faptul ca
h[n]=h[N-1-n] sau h[n]=-h[N-1-n] 0 ≤ n ≤ N − 1 .

Daca filtrul are un numar impar de coeficenti rezulta implementarea:

3
Aplicatia 2
- Sa se implementeze filtrul de tip FIR de la aplicatia 1, folosind structura
corespunsatoare filtrelor cu faza liniara;
- Sa se aplice filtrului realizat semnal de tip treapta unitate si sa se
compare iesirea cu iesirea implementarii la aplicatia 1

Daca raspunsul la impuls a filtrului are un numar par de coeficenti rezulta


implementarea:

4
2. Realizarea filtrelor de tip IIR.

Se considera functia de transfer a unui filtru de tip IIR de ordin 3:


p + p1 z −1 + p2 z −2 + p3 z −3 Y ( z )
H ( z) = 0 = (3)
1 + d1 z −1 + d 2 z −2 + d3 z −3 X ( z)
Rezulta:

Y ( z ) = p0 X ( z ) + p1 z −1 X ( z ) + p2 z −2 X ( z ) + p3 z −3 X ( z ) − d1 z −1Y ( z ) − d 2 z −2Y ( z ) − d3 z −3Y ( z )

Se obtine ecuatia cu diferente:

y[n] = p0 x[n] + p1 x[n − 1] + p2 x[n − 2] + p3 x[n − 3] − d1 y[n − 1] − d 2 y[n − 2] − d3 y[n − 3] (4)

a) Forma directa de tip 1:


- Folosind 3 elemente de intarziere se obtin versiuni intarziate ale
semnalului de intrare (se obtin semnalele: x[n-1], x[n-2], x[n-3]) si alte 3
elemente de intarziere se obtin versiuni intarziate ale semnalului de
iesire ( se obtin semnalele: y[n-1], y[n-2], y[n-3]).
- Folosind 4 multiplicatoare se obtin semnalele: pk x[n − k ], k = 0 : 3 ;
- Folosind 3 multiplicatoare se obtin semnalele: d k y[n − k ], k = 1: 3 ;
- Folosind 3 sumatoare se obtine semnalul:
u[n] = p0 x[ n] + p1 x[n − 1] + p2 x[ n − 2] + p3 x[n − 3]
- Folosind 3 sumatoare se obtine semnalul:
y[n] = u[n] − d1 y[n − 1] − d 2 y[n − 2] − d3 y[ n − 3]

H FIR ( z ) H IIR ( z )
x[n] u[n] y[n]
+ +
p0
−1 z −1
z

x[n-1] + + y[n-1]
p1 − d1
z −1
z −1

x[n-2] + + y[n-2]
p2 −d 2

z −1 z −1

x[n-3] y[n-3]
p3 −d3

5
Deci Y ( z ) = H FIR ( z ) ⋅ H IIR ( z ) ⋅ X ( z ) , unde:
H FIR ( z ) = p0 + p1 z −1 + p2 z −2 + p3 z −3
1
H IIR ( z ) =
1 + d1 z + d 2 z −2 + d3 z −3
−1

Transformata Z a semnalului de intrare se poate scrie si astfel:


Y ( z ) = H IIR ( z ) ⋅ H FIR ( z ) ⋅ X ( z )
Rezulta implementarea:
H IIR ( z ) H FIR ( z )
x[n] w[n] y[n]
+ +
p0
z −1
z −1

+ w[n − 1] w[n − 1] +
−d1 p1
z −1
z −1

+ w[n − 2] w[n − 2] +
−d 2 p2

z −1 z −1
w[n − 3] w[n − 3]
−d3 p3

Forma directa de tip 2, se obtine plecand de la observatia ca in implementarea


de mai sus, semnalele de la iesirea elementelor de intarziere sunt aceleasi (w[n-
k], unde k=0:3). Se obtine astfel o implementare cu mai putine elemente de
intarziere:
x[n] y[n]

6
Aplicatia 3
- Utilizand filterDesigner, sa se proiecteze utilizand un filtru de tip IIR de
ordin 3;
- Sa se transforme filtrul proiectat intr-o structura de tip forma directa;
- Edit-> Convert to Single Section;
- sa se exporte in Workspace coeficentii filtrului:
- File->Export-> se selecteaza Export;
 coeficentii filtrului apar in fereastra Workspace;
- Utilizand Simulink, sa se realizeze filtrul utilizand filtrul elemente de
sistem, utilizand: sumatoarea, scaloare (Gain) si elemente de
intarziere (Unit delay);
- Se aplica sistemului semnal de tip treapta unitate;
- Se va utiliza pasul de esantionare 1
- Sa se defineasca parametrii simularii pentru sisteme discrete utilizand
„Fundamental Sample time” 1.
- Sa se compare iesirea sistemului implementat cu iesirea blocului
Discrete Filter din Simulink;

b) Structura de tip cascada (serie)

Structura in cascada se obtine scriind polinoamele de la numitor si numarator ca


un produs de polinoame de ordin 2 (daca exista radacini complex conjugate) si
polinoame de ordinul 1 (daca exista radacini reale). Pentru o functie de transfer
de ordinul 3 rezulta:
p + p1 z −1 + p2 z −2 + p3 z −3
H ( z ) = H1 ( z ) H 2 ( z ) = 0 =
1 + d1 z −1 + d 2 z −2 + d3 z −3
(5)
=
( b01 + b11 ⋅ z −1 + b21 ⋅ z −2 )( b02 + b12 ⋅ z −1 )
= H1 ( z ) ⋅ H 2 ( z )
(1 + a11 ⋅ z −1 + a21 ⋅ z −2 )(1 + a12 ⋅ z −1 )
Fiecare factor H k ( z ) se implementeaza folosind forma directa II. Rezulta
implementarea:
H1 ( z ) H 2 ( z)
x[n] y[n]
+ + + +
b01 b02
z −1 z −1

+ +
− a11 b11 − a12 b12
z −1

− a21 b21

7
Pentru determinarea coeficentilor bij si aij se poate folosi functia Matlab
tf2sos(); pentru informatii despre functie apelati doc tf2sos;
Daca vectorii exporati din filterDesigner sunt Num si Den, codul Matlab pentru
pentru calcularea vectorilor bij si aij este:
sos=tf2sos(Num,Den)

Pentru functia de ordinul 3, matricea sos are elementele:


b b b 1 a11 a21 
sos =  01 11 21 
b02 b12 0 1 a12 0 

OBS: - Daca matricea sos este definita in Workspace, atunci elementele matricei
pot fi utilizate in Simulink pentru a seta valoarea Gain-urilor:

In figura de mai sus, valoarea Gain-ului este data de b01 .

Aplicatia 4
- Sa se implementeze in Simulink folosind forma in cascada functia de
transfer H(z) utilizata la aplicatia 3.
- Sa se aplice sistemului semnal de tip treapta unitate.
- Sa se compare raspunsul filtrului implementat cu cel obtinut la
aplicatia 3.

Alegerea perechilor poli-zerouri pentru implementarea cascada

Daca se are in vedere cuantizarea coeficentilor alegerea perechilor poli-zerouri


influenteaza raspunsul in frecventa a filtrelor discrete. Pentru ca raspunsul in
frecventa a filtrului discret cu coeficenti cuantizati sa aproximeze cat mai bine
raspunsul in frecventa a filtrului ideal, perechile poli-zerouri ai biquazilor , Hk(z),
se aleg astfel:

8
a) polii complecsi conjugati cei mai apropiati de cercul unitate fac
pereche cu zeroul cel mai apropiat din planul z. Astfel se
formeaza sisteme de ordin maxim 2 (Hk(z)).
b) Regula a) se repeta pana cand s-au format perechi din toti polii si
zerourile lui H(z).
c) Sistemele de ordin maxim 2 astfel formate trebuie ordonate
crescator sau descrescator in raport cu apropierea de cercul
unitate.
(Pentru determinarea perechilor poli-zerouri pentru biquazi, se pot
folosi functiile Matlab: zplane(), roots() si abs() ).

Functia tf2sos() genereaza biquazii astfel incat sa se respecte regulile de mai


sus. Ca exemplu se considera filtrul de ordin 5 de tip FJT cu frecventa de taiere
0.16π proiectat folosind filterDesigner si metoda de proiectare: Chebyshev type
II. Implicit, utilitarul filterDesigner implementeaza filtrul in forma cascada.

Aceasta se observa folosind meniul Zero/Pole Editor:

9
Selectand Sectiunile 1, 2 si respectiv 3, se observa perechile poli-zerouri care
formeaza realizeaza cascada. Se observa ca prima sectiune este formata din
polii cei mai apropiati de cercul unitate si ca acestia fac pereche cu zerourile cele
mai apropiate de poli. Sectiunile 2 si respectiv 3 respecta de asemenea regulile
de proiectare a biquazilor.
Functia tf2sos() de asemenea proiecteaza biquazii folosind aceleasi reguli de
realizare a perechilor poli-zerouri.
Pentru a se utiliza functia tf2sos() mai intai se transforma implementarea
cascada in realizare de tipul FD 1 (se selecteaza din meniul EDIT optiunea
„Convert to single section”). Dupa ce se exporta in Workpace filtrul de ordin 5
proiectat, vectorii Num si Den sunt utilizati ca parametri de intrare pentru functia
tf2sos().
Daca se afiseaza diagramele poli-zerouri pentru implementarea in forma FD2 si
respectiv pentru cei 3 biquazi se obtine:

10
Codul Matlab este:

sos=tf2sos(Num,Den);
figure(1);
zplane(Num,Den);grid on;
figure(2);
subplot(1,3,1);zplane(sos(1,1:3),sos(1,4:6));
axis([-1.1 1.1 -1.1 1.1]);
title('Biquad 1');
subplot(1,3,2);zplane(sos(2,1:3),sos(2,4:6));
axis([-1.1 1.1 -1.1 1.1]);
title('Biquad 2');
subplot(1,3,3);zplane(sos(3,1:3),sos(3,4:6));
axis([-1.1 1.1 -1.1 1.1]);
title('Biquad 3');

OBS: Implicit functia tf2sos() ordoneaza biquazii de la polii cei mai apropiati
de origine la cercul unitate. Aceeasi realizare a formei cascada se obtine si daca
in filterDesigner se selecteaza in Edit -> Reorder and Scale Second-Order
Sections -> Least selective section to most selective section.

Prin metoda de proiectare prezentata mai sus se incearca eliminarea


biquazilor care pot avea factor de calitate mare. O intelegere intuitiva a legaturii
dintre pozitia polilor si a zerourilor si caracteristica de frecventa a filtrului este
prezentata in urmatorul exemplu.

Pentru o functiei de transfer oarecare:


∏(z − z )
k
H ( z) = k
(6)
∏( p − p )
k
k

modulul functiei de transfer este:

11
∏| e ω − z
j
k |
| H (ω ) |= k
(7)
∏| e ω − p
k
j
k |

Considerand exemplu de mai sus in care exista un pol si un zerou,


modulul functiei de transfer este:

U k (ω ) BL
| H (ω ) |= = (8)
Vk (ω ) AL
Din exemplul de mai sus se observa ca filtre cu factor de calitate mare
apar in situatia in care distanta dintre polii si zerourile biquazilor este mare.

Realizarea Paralela a filtrelor de tip IIR

Structura paralela se obtine scriind relatia (3) ca o suma:


L L
b0 k + b1k ⋅ z −1
H ( z ) =  H k ( z ) = −1
(9)
k =1 k =1 a0 k + a1k ⋅ z + a2 k ⋅ z −2
(se presupune ca M<N)
Obs: - fiecare factor H k ( z ) se va implementa folosind forma directa II
- pentru determinarea coeficientilor bij si aij se poate folosi functia
Matlab residuez (pentru a afla cum se foloseste apelati doc
residuez);
o functia residuez returneaza polii si reziduurile complex
conjugate; se vor suma termenii H k ( z ) care au poli
complex conjugaţi astfel încât filtrul implementat sa aibă
coeficienţi reali.
o pentru sumarea lui H k ( z ) se poate folosi tot funcţia
residuez, parametrii funcţiei fiind polii si respectiv
residuurile complex conjugate calculate anterior.

12

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