Sunteți pe pagina 1din 17

Capitolul 6 Realizarea filtrelor digitale

CAPITOLUL 6
REALIZAREA FILTRELOR DIGITALE
6.1 IMPLEMENTAREA FILTRELOR CU RSPUNS FINIT LA
IMPULS (FIR)
Funcia de transfer a unui filtru cu rspuns finit la impuls de lungime N
este de forma:
1 1
0 1 1
( )
( ) ..
( )
N
N
Y z
H z h h z h z
X z

+ + +
Ecuaia cu diferene finite este:
1
0
( ) ( )
N
k
k
y n x n k h

unde
( ) x n
este intrarea filtrului la momentul n,
( ) y n
este ieirea,
k
h

sunt coeficienii funciei pondere i N este lungimea filtrului.
6.1.1 Forma transversal
Ecuaia poate fi implementat ntr-o structur transversal ca n figura
urmtoare.
151
Aplicaii ale procesoarelor de semnal n comunicaii
0
h
( ) x n

1
z


1
z

( 1) x n ( 1) x n

1
z

1
h
2
h
1 N
h

( 1) x n N +
( ) y n
Figura 5.1. Forma transversal pentru FIR
Pentru calculul ieirii
( ) y n
trebuie memorate strile filtrului i
coeficienii funciei pondere.
Strile filtrului sunt stocate ntr-o list circular care conine ultimele N
eantioane de intrare indexat modulo N.
Coeficienii filtrului sunt stocai ntr-un vector de lungime N.
Memoria X
r0
Memoria Y
h(N-1)
h(1)
h(0)
x(n-1)
x(n)
x(n-N+1)
$0 $0 r4
Figura 6.2. Organizarea memoriei pentru filtrul FIR
Se folosete o list circular de lungime N parcurs cu un index limitat
modulo N. Eantionul de intrare x(n) este introdus n list la indexul curent.
Apoi este parcurs lista prin decrementarea indexului cu variabila k.
Calcului ieirii y(n) se face prin nmulire cu acumulare ntr-o variabila
sum iniializat cu 0 la fiecare iteraie.
152
Capitolul 6 Realizarea filtrelor digitale
int main()
{
Word16 x[DataBlockSize],y[DataBlockSize],delay[N],h[N];
Word32 sum;
short n,i;
long unsigned k,index;
...
fread(x,sizeof(Word16),DataBlockSize,fpx);
for (n=0; n<DataBlockSize; n++)
{
delay[index%N]=x[n];
sum=0;
for (k=0; k<N; k++)
{
sum=L_mac(sum,h[k],delay[(index-k)%N]);
}
y[n]=round(sum);
index++;
}
fwrite(y,sizeof(Word16),DataBlockSize,fpy);
...
}
Toi coeficienii sunt considerai n format fracionar (de modul
subunitar) reprezentai n C n format Word16. Dac n urma proiectrii
filtrului FIR apar i coeficieni de modul supraunitar, atunci toi coeficienii
trebuie scalai prin mprirea cu:
( )
max
k
m h
De asemenea, pentru a evita depirea capacitii registrelor, dac
eantioanele intrrii sunt n intervalul
( 1,1)
, atunci trebuie ndeplinit
condiia:
1
0
1
N
k
k
s h

153
Aplicaii ale procesoarelor de semnal n comunicaii
Dac nu este ndeplinit condiia atunci fie intrarea
( ) x n
, fie
coeficienii
k
h
trebuie scalai cu factorul s. Dac intrarea este mprit la s,
atunci gama dinamic a semnalului la intrare se micoreaz, deci i raportul
semnal-zgomot al structurii se micoreaz. Pe de alt parte, dac sunt scalai
coeficienii, acetia vor putea fi reprezentai pe mai puini bii i este afectat
rspunsul n frecven al filtrului. Aceste implicaii trebuie evaluate n funcie
de aplicaie i aleas una din variante.
6.2 IMPLEMENTAREA FILTRELOR CU RSPUNS INFINIT
LA IMPULS (IIR)
Pentru un filtru IIR avem funcia de transfer de forma:
0
1
( )
( )
( )
1
M
k
k
k
N
k
k
k
b z
Y z
H z
X z
a z

Coeficienii numrtorului
k
b
i ai numitorului
k
a
se determin
printr-una din metodele de proiectare a filtrelor digitale cu rspuns infinit la
impuls (folosind eventual mediul MATLAB) n funcie, bineneles, de
condiiile de proiectare cerute.
Notnd cu
( ) x n
secvena de la intrarea filtrului i cu
( ) y n
secvena de
la ieirea filtrului, rezult ecuaia cu diferene finite:
0 1
( ) ( ) ( )
M N
k k
k k
y n b x n k a y n k



Pentru calculul ieirii
( ) y n
exist mai multe posibiliti de
implementare n funcie de structura aleas. Performanele implementrii
154
Capitolul 6 Realizarea filtrelor digitale
(complexitate aritmetic memorie ocupat, transferuri paralele) difer n
funcie de structura aleas.
De asemenea, n proiectare i implementare trebuie evaluate efectele
reprezentrii semnalelor utiliznd un numr finit de bii. n cazul reprezentrii
numerelor n formate cu virgul fix apare o depire dac rezultatul unei
operaii aritmetice este de modul supraunitar. Acest lucru este posibil dup
operaiile de nsumare i de nmulire cu o constant de modul supraunitar.
Analiza posibilitii depirilor comport dou aspecte:
analiza funciei de transfer,
( ) H z
i eventual scalarea
acesteia astfel nct s se elimine sau s se reduc suficient de mult
probabilitatea ca semnalul de ieire s fie de modul supraunitar;
analiza posibilitii depirilor n toate nodurile reelei,
conducnd (dac este necesar) la o scalare a semnalului compensat
n final, astfel nct s nu afecteze realizarea funciei de transfer
impuse.
n filtrele digitale att amplitudinea semnalului ct i coeficienii sunt
valori discrete sau cuantizate cu un numr finit de bii. Dei astfel de sisteme
sunt neliniare, efectele acestor cuantizri pot fi interpretate ca fiind surse de
zgomot aditiv. Erorile de cuantizare ale coeficienilor modific funcia de
transfer a filtrului i se produc astfel variaii ale zerourilor i polilor, variaii
care schimb nedorit rspunsul n frecven al filtrelor. Erorile de cuantizare a
semnalului pot fi privite ca surse de zgomot aditiv n diferite noduri ale
reelei.
Cuantizarea coeficienilor are efecte diferite de cuantizarea semnalului
din punct de vedere al zgomotului. Cuantizarea coeficienilor produce erori n
rspunsul n frecven i n amplitudine ale filtrului, fiind erori deterministe.
Aceste erori pot fi minimizate folosind structuri de filtre mai puin sensibile,
155
Aplicaii ale procesoarelor de semnal n comunicaii
cu aceeai funcie de transfer i alocnd un numr suficient de bii pentru
coeficieni.
Cuantizarea semnalului are efecte n diferite noduri ale filtrului, putnd
fi considerate ca surse de zgomot alb, aditiv, nrutind RSZ al ieirii. Aceste
erori pot fi minimizate realiznd nmulirea i acumularea rezultatului n
registre de lungime dublu-cuvnt.
O cale de mijloc pentru evitarea nrutirii raportului semnal-zgomot
(RSZ) i, pe de alt parte, evitarea depirii gamei dinamice (overflow) este
scalarea. Nu este nevoie de scalare n fiecare nod al reelei deoarece
semnalele n unele noduri sunt doar ntrzieri ale semnalelor din alte noduri.
De asemenea, dac rezultatul final al adunrii semnalelor din mai multe
noduri este subunitar, n cazul adunrii n complement fa de doi n final se
obine rezultatul corect indiferent dac n diferite noduri apar depiri la
sumele pariale. Trebuie astfel realizat o tehnic de scalare a semnalului la
intrare pentru a evita depirile numai n nodurile unde acestea pot apare.
Se presupune c semnalul de intrare este n modul subunitar:
( ) 1 x n
Fie
( )
m
H z
funcia de transfer de la intrare la nodul m. Pentru a nu avea
depire n nodul m trebuie ndeplinit condiia:
( ) 1
m
y n
Avem:
0 0 0
( ) ( ) ( ) ( ) ( ) ( )
m m m m m
k k k
y n h k x n k h k x n k h k k




Nodurile n care pot apare depiri sunt n partea recursiv a structurii
i, bineneles, la ieirea filtrului. Scalarea este necesar dac cel puin unul
din coeficienii
m
k
este supraunitar. Coeficientul cu care se face scalarea la
intrarea structurii va fi:
156
Capitolul 6 Realizarea filtrelor digitale
1 2
1 1 1
min , ,...,
m
s
k k k
_


,
n cazul n care intrarea este zero sau o constant, exist posibilitatea ca
ieirea filtrului, n loc de o apropiere asimptotic de o valoarea constant, s
oscileze cu amplitudini relativ mici. Aceste oscilaii sunt numite cicluri
limit. Acetia pot fi redui la amplitudini acceptabile crescnd numrul de
bii de reprezentare cu virgul fix a semnalului.
Oscilaiile n depiri sunt produse de caracteristica circular a
sumatorului n complement fa de 1 sau fa de 2. Aceste oscilaii pot
produce depiri ale gamei dinamice a filtrului IIR. Soluia acestei probleme
este folosirea aritmeticii cu saturaie la adunare ceea ce limiteaz rezultatul
adunrii n modul subunitar.
6.2.1 Forma direct 1
Scriind relaia intrare-ieire sub forma:
0
( ) ( )
M
k
k
k
W z X z b z

1
( )
( )
1
N
k
k
k
W z
Y z
a z

Rezult ecuaiile cu diferene finite:


0
( )
M
k
k
k
w n b z

1
( ) ( ) ( )
N
k
k
y n w n a y n k

157
Aplicaii ale procesoarelor de semnal n comunicaii
Astfel, pentru un filtru de ordin N rezult schema de mai jos:
( ) x n
0
b ( ) y n
1
z

1
z

1
z

1
b
2
b
M
b
( ) w n
( 1) x n
( ) x n M
1
z

1
z

1
z

1
a
2
a
N
a
( 1) y n
( ) y n N
Figura 5.3. Filtru IIR forma direct 1
Evident, pentru calculul lui
( ) w n
se folosete programul pentru
implementarea unui filtru FIR.
Pentru seciunea recursiv se va implementa o a doua linie de ntrziere
pentru stocarea ieirilor anterioare ale filtrului.
( ) x n ( ) y n
1
z

1
z

1
z

1
a
2
a
N
a
( 1) y n
( ) y n N
Figura 5.7. Filtru IIR de ordin N numai cu poli
158
Capitolul 6 Realizarea filtrelor digitale
int main()
{
Word16 x[DataBlockSize],y[DataBlockSize];
Word16 delay_b[M+1],delay_a[N+1],b[M+1],a[N];
Word32 sum;
short n,i;
long unsigned k,ix,iy;
...
fread(x,sizeof(Word16),DataBlockSize,fpx);
for (n=0; n<DataBlockSize; n++)
{
delay_b[ix%(M+1)]=x[n];
sum=0;
for (k=0; k<=M; k++)
{
sum=L_mac(sum,b[k],delay_b[(ix-k)%(M+1)]);
}
for (k=1; k<=N; k++)
{
sum=L_msu(sum,a[k],delay_a[(iy-k)%(N+1)]);
}
y[n]=round(sum);
delay_b[iy%(N+1)]=y[n];
ix++;
iy++;
}
fwrite(y,sizeof(Word16),DataBlockSize,fpy);
...
}
159
Aplicaii ale procesoarelor de semnal n comunicaii
S considerm acum implementarea unui filtru de ordin 2 numai cu
poli, cu funcia de transfer de forma:
1 2
1 2
1
( )
1
H z
a z a z

+ +
Ieirea va fi calculat cu formula:
1 2
( ) ( ) ( 1) ( 2) y n x n a y n a y n
Pentru un filtru de ordin 2 nu este necesar implementarea cu liste
circulare, strile filtrului putnd fi stocate n dou variabile de stare.
Coeficienii
1
a
i
2
a
se consider de modul subunitar.
Memoria X
r0
Memoria Y
2
a
1
a
( 2) y n
( 1) y n r4
Figura 5.4. Organizarea memoriei pentru un filtru de ordin 2 numai cu poli
Word16 x[DataBlockSize],y[DataBlockSize];
Word16 y1,y2,a[]={WORD16(a1), WORD16(a2)};
Word32 sum;
...
fread(x,sizeof(Word16),DataBlockSize,fpx);
for (n=0; n<DataBlockSize; n++)
{
sum=L_deposit_h(x[n]);
sum=L_msu(sum,a[0],y1);
y[n]=msu_r(sum,a[1],y2);
y2=y1;
y1=y[n];
}
fwrite(y,sizeof(Word16),DataBlockSize,fpy);
...
160
Capitolul 6 Realizarea filtrelor digitale
n exemplul anterior am considerat coeficienii numitorului de modul
subunitar. Fie un filtru de ordin 2 stabil. Polii funciei de transfer sunt n
cercul de raz unitate, deci de modul subunitar.
Avem:
1 2 1 2
1 2 1 2
1 1
( )
1 (1 )(1 )
H z
a z a z p z p z


+ +
Folosind relaiile ntre coeficienii i rdcinile polinomului de la
numitor obinem:
1 1 2 1 2
2 1 2
2
1
a p p p p
a p p
+ +

Aceasta nseamn c, n cazul unui filtru de ordin 2 coeficienii
numitorului sunt de modul mai mic ca 2. Pentru a-i putea reprezenta n virgul
fix, n complement fa de 2, este necesar scalarea coeficienilor cu 2.
Structura echivalent este prezentat mai jos:
( ) x n 1/ 2 ( ) y n
1
z

1
z

1
/ 2 a
2
/ 2 a
2
Figura 5.5. Filtru IIR de ordin 2 numai cu poli cu coeficienii scalai
Ecuaia cu diferene finite devine:
1 2
( )
( ) 2 ( 1) ( 2)
2 2 2
x n a a
y n y n y n
1

1
]
161
Aplicaii ale procesoarelor de semnal n comunicaii
n exemplul urmtor este implementat un filtru IIR de ordin 2, numai
cu poli, cu coeficienii scalai cu 2. Organizarea memoriei:
Memoria X
r0
Memoria Y
2
/ 2 a
1
/2 a
( 2) y n
( 1) y n r4
Figura 5.6. Organizarea memoriei pentru un filtru de ordin 2 numai cu poli
cu coeficienii scalai
for (n=0; n<DataBlockSize; n++)
{
sum = L_deposit_h(shr(x[n],1));
sum = L_msu(sum,a[0],y1);
y[n]= shl(msu_r(sum,a[1],y2),1);
y2 = y1;
y1 = y[n];
}
6.2.2 Forma direct 2
Relaia intrare-ieire se scrie:
1
( )
( )
1
N
k
k
k
X z
W z
a z

0
( ) ( )
M
k
k
k
Y z W z b z


De unde rezult ecuaiile cu diferene finite:
0
( ) ( ) ( )
N
k
k
w n x n a w n k

0
( ) ( )
M
k
k
y n b w n k

162
Capitolul 6 Realizarea filtrelor digitale
Aceste relaii conduc la structura din figura urmtoare (cunoscut i cu
denumirea de forma canonic):
( ) x n
0
b ( ) y n
1
b
2
b
M
b
( ) w n
1
z

1
z

1
z

1
a
2
a
N
a
Figura 5.9. Filtru IIR forma direct 2
Se observ pentru aceast structur o reducere a numrului celulelor de
ntrziere fa de forma direct 1, deci o reducere a memoriei necesare.
S considerm pentru nceput un filtru de ordin 2 cu
0
1 b
. Funcia de
transfer poate fi scris:
1 2
1 2
1 2
1 2
1
( )
1
b z b z
H z
a z a z


+ +

+ +
Filtrul implementat n forma direct 2 are structura de mai jos i se mai
numete i filtru biquad:
( ) x n ( ) y n
1
b
2
b
( ) w n
1
z

1
z

1
a
2
a
Figura 5.10. Filtru IIR biquad
163
Aplicaii ale procesoarelor de semnal n comunicaii
Word16 x[DataBlockSize],y[DataBlockSize];
Word16 w1,w2;
Word16 a[]={WORD16(a1), WORD16(a2)};
Word16 b[]={WORD16(b1), WORD16(b2)};
Word32 sum;
...
fread(x,sizeof(Word16),DataBlockSize,fpx);
for (n=0; n<DataBlockSize; n++)
{
sum = L_deposit_h(x[n]);
sum = L_msu(sum,a[0],w1);
sum = L_msu(sum,a[1],w2);
w = round(sum);
sum = L_mac(sum,b[0],w1);
y[n]= mac_r(sum,b[1],w2);
w2=w1;
w1=w;
}
fwrite(y,sizeof(Word16),DataBlockSize,fpy);
...
Trebuie menionat c n cazul unei funcii de transfer cu
0
1 b
se poate
face o normare a coeficienilor numrtorului cu
0
b
, normare care poate fi
compensat la ieire prin nmulirea cu o constant corespunztoare.
Ca i n cazul formei directe 1, pentru coeficieni mai mici ca 2 n
modul poate fi implementat un program cu scalare a coeficienilor cu 2
pornind de la ecuaia cu diferene finite:
1 2
( )
( ) 2 ( 1) ( 2)
2 2 2
x n a a
w n w n w n
1

1
]
1 2
( )
( ) 2 ( 1) ( 2)
2 2 2
w n b b
y n w n w n
1
+ +
1
]
i avnd structura:
164
Capitolul 6 Realizarea filtrelor digitale
( ) x n ( ) y n
1
/ 2 b
2
/ 2 b
( ) w n
1
z

1
z

1
/ 2 a
2
/ 2 a
1/ 2
2
Figura 5.12. Filtru biquad cu coeficienii scalai
Coeficienii sunt stocai in vectorii a i b mprii la 2. Valorile
intermediare
( ) w n
trebuie stocate n memorie nescalate, adic rezultatul
sumatorului de la intrare trebuie nmulit cu 2 nainte de a fi stocat n celula de
memorie.
for (n=0; n<DataBlockSize; n++)
{
sum = L_deposit_h(shr(x[n],1));
sum = L_msu(sum,a[0],w1);
sum = L_msu(sum,a[1],w2);
w = round(shl(sum,1));
sum = L_mac(sum,b[0],w1);
y[n]= shl(mac_r(sum,b[1],w2),1);
w2=w1;
w1=w;
}
6.2.3 Realizarea n cascad
Se realizeaz factorizarea funciei de transfer n funcii de ordin 2 cu
coeficieni reali implementate cu structuri biquad:
1 2
,1 ,2
1 2
1 1
,1 ,2
1
( ) ( )
1
p p
k k
k
k k
k k
b z b z
H z H z
a z a z



+ +

+ +

Coeficienii seciunilor de ordin 2 au garantat modulul mai mic dect 2
dac filtrul este stabil i de faz minim.
165
Aplicaii ale procesoarelor de semnal n comunicaii
Forma cascad pentru dou structuri biquad este prezentat mai jos:
( ) x n
( ) y n
1,1
b
1,2
b
1
( ) w n
1
z

1
z

1,1
a
1,2
a
2,1
b
2,2
b
2
( ) w n
1
z

1
z

2,1
a
2,2
a
Figura 5.14. Forma cascad cu structuri biquad
for (n=0; n<DataBlockSize; n++)
{
sum = L_deposit_h(x[n]);
for (k=0; k<NrSect; k++)
{
sum = L_msu(sum,a[k][0],w1[k]);
sum = L_msu(sum,a[k][1],w2[k]);
w = round(sum);
sum = L_mac(sum,b[k][0],w1[k]);
sum = L_mac(sum,b[k][1],w2[k]);
w2[k] = w1[k];
w1[k] = w;
}
y[n] = round(sum);
}
6.2.4 Realizarea n paralel
n acest caz se pornete de la descompunerea n fracii simple a funciei
( ) H z
. Funcia de transfer poate fi scris sub forma:
( ) ( )
1
0, 1,
1 2
1 1
1, 2,
1
P P
p p
p
p p
p p
b b z
H z C C H z
a z a z



+
+ +
+ +

166
Capitolul 6 Realizarea filtrelor digitale
Se obine schema din figura 5.15.
1
[ ] y n
1
( ) H z
2
( ) H z
) (z H
p
2
[ ] y n
[ ]
p
y n
[ ] y n
[ ] x n
C
Figura 5.14. Realizarea n paralel
for (n=0; n<DataBlockSize; n++)
{
y[n] = 0;
for (p=0; p<NrSect; p++)
{
sum = L_deposit_h(x[n]);
sum = L_msu(sum,a[p][0],w1[k]);
w = msu_r(sum,a[p][1],w2[k]);
sum = L_mult(b[p][0],w);
sum = L_mac(sum,b[p][1],w1[k]);
y[n] = add(round(sum),y[n]);
w2[k] = w1[k];
w1[k] = w;
}
}
167

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