Sunteți pe pagina 1din 9

Capitolul 6 Realizarea filtrelor digitale 151 152 Aplicaii ale procesoarelor de semnal n comunicaii

x( n) x(n 1) x(n 1) x(n N + 1)


z 1 z 1 z 1

h0 h1 h2 hN 1
y ( n)
CAPITOLUL 6
Figura 5.1. Forma transversal pentru FIR

REALIZAREA FILTRELOR DIGITALE 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
6.1 IMPLEMENTAREA FILTRELOR CU RSPUNS FINIT LA
eantioane de intrare indexat modulo N.
IMPULS (FIR)
Coeficienii filtrului sunt stocai ntr-un vector de lungime N.

Funcia de transfer a unui filtru cu rspuns finit la impuls de lungime N


este de forma: h(N-1)
Y ( z)
H ( z) = = h0 + h1 z 1 + .. + hN 1 z N 1 (6.1)
X ( z)
Ecuaia cu diferene finite este: x(n-1)
N 1 x(n)
r0
y (n) = x(n k )hk (6.2)
k =0
x(n-N+1) h(1)
$0 $0 h(0) r4
unde x( n) este intrarea filtrului la momentul n, y (n) este ieirea, hk
sunt coeficienii funciei pondere i N este lungimea filtrului.
Figura 6.2. Organizarea memoriei pentru filtrul FIR

6.1.1 Forma transversal 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.
Ecuaia (6.2) poate fi implementat ntr-o structur transversal ca n Apoi este parcurs lista prin decrementarea indexului cu variabila k.
figura urmtoare. Calcului ieirii y(n) se face prin nmulire cu acumulare ntr-o variabila
sum iniializat cu 0 la fiecare iteraie.
Capitolul 6 Realizarea filtrelor digitale 153 154 Aplicaii ale procesoarelor de semnal n comunicaii

int main() Dac nu este ndeplinit condiia (6.4) atunci fie intrarea x(n) , fie
{
Word16 x[DataBlockSize],y[DataBlockSize],delay[N],h[N]; coeficienii hk trebuie scalai cu factorul s. Dac intrarea este mprit la s,
Word32 sum;
short n,i; atunci gama dinamic a semnalului la intrare se micoreaz, deci i raportul
long unsigned k,index;
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
fread(x,sizeof(Word16),DataBlockSize,fpx);
rspunsul n frecven al filtrului. Aceste implicaii trebuie evaluate n funcie
for (n=0; n<DataBlockSize; n++) de aplicaie i aleas una din variante.
{
delay[index%N]=x[n];
sum=0;
for (k=0; k<N; k++)
{ 6.2 IMPLEMENTAREA FILTRELOR CU RSPUNS INFINIT
sum=L_mac(sum,h[k],delay[(index-k)%N]);
}
LA IMPULS (IIR)
y[n]=round(sum);
index++;
} Pentru un filtru IIR avem funcia de transfer de forma:
fwrite(y,sizeof(Word16),DataBlockSize,fpy); M

Y ( z) b z k
k

... H ( z) = = k =0
(6.5)
X ( z) N

}
1 + ak z k
k =1

Coeficienii numrtorului bk i ai numitorului ak se determin


Toi coeficienii sunt considerai n format fracionar (de modul
printr-una din metodele de proiectare a filtrelor digitale cu rspuns infinit la
subunitar) reprezentai n C n format Word16. Dac n urma proiectrii
impuls (folosind eventual mediul MATLAB) n funcie, bineneles, de
filtrului FIR apar i coeficieni de modul supraunitar, atunci toi coeficienii
condiiile de proiectare cerute.
trebuie scalai prin mprirea cu:
Notnd cu x(n) secvena de la intrarea filtrului i cu y (n) secvena de
m = max ( hk ) (6.3)
la ieirea filtrului, rezult ecuaia cu diferene finite:
De asemenea, pentru a evita depirea capacitii registrelor, dac
M N
eantioanele intrrii sunt n intervalul (1,1) , atunci trebuie ndeplinit y (n) = bk x(n k ) ak y (n k ) (6.6)
k =0 k =1
condiia:
Pentru calculul ieirii y (n) exist mai multe posibiliti de
N 1
s= h
k =0
k 1 (6.4) implementare n funcie de structura aleas. Performanele implementrii
Capitolul 6 Realizarea filtrelor digitale 155 156 Aplicaii ale procesoarelor de semnal n comunicaii

(complexitate aritmetic memorie ocupat, transferuri paralele) difer n cu aceeai funcie de transfer i alocnd un numr suficient de bii pentru
funcie de structura aleas. coeficieni.
De asemenea, n proiectare i implementare trebuie evaluate efectele Cuantizarea semnalului are efecte n diferite noduri ale filtrului, putnd
reprezentrii semnalelor utiliznd un numr finit de bii. n cazul reprezentrii fi considerate ca surse de zgomot alb, aditiv, nrutind RSZ al ieirii. Aceste
numerelor n formate cu virgul fix apare o depire dac rezultatul unei erori pot fi minimizate realiznd nmulirea i acumularea rezultatului n
operaii aritmetice este de modul supraunitar. Acest lucru este posibil dup registre de lungime dublu-cuvnt.
operaiile de nsumare i de nmulire cu o constant de modul supraunitar. O cale de mijloc pentru evitarea nrutirii raportului semnal-zgomot
(RSZ) i, pe de alt parte, evitarea depirii gamei dinamice (overflow) este
Analiza posibilitii depirilor comport dou aspecte: scalarea. Nu este nevoie de scalare n fiecare nod al reelei deoarece
analiza funciei de transfer, H ( z ) i eventual scalarea acesteia astfel semnalele n unele noduri sunt doar ntrzieri ale semnalelor din alte noduri.

nct s se elimine sau s se reduc suficient de mult probabilitatea De asemenea, dac rezultatul final al adunrii semnalelor din mai multe

ca semnalul de ieire s fie de modul supraunitar; noduri este subunitar, n cazul adunrii n complement fa de doi n final se

analiza posibilitii depirilor n toate nodurile reelei, conducnd obine rezultatul corect indiferent dac n diferite noduri apar depiri la

(dac este necesar) la o scalare a semnalului compensat n final, sumele pariale. Trebuie astfel realizat o tehnic de scalare a semnalului la

astfel nct s nu afecteze realizarea funciei de transfer impuse. intrare pentru a evita depirile numai n nodurile unde acestea pot apare.

n filtrele digitale att amplitudinea semnalului ct i coeficienii sunt Se presupune c semnalul de intrare este n modul subunitar:

valori discrete sau cuantizate cu un numr finit de bii. Dei astfel de sisteme x ( n) 1 (6.7)

sunt neliniare, efectele acestor cuantizri pot fi interpretate ca fiind surse de Fie H m ( z ) funcia de transfer de la intrare la nodul m. Pentru a nu avea
zgomot aditiv. Erorile de cuantizare ale coeficienilor modific funcia de depire n nodul m trebuie ndeplinit condiia:
transfer a filtrului i se produc astfel variaii ale zerourilor i polilor, variaii ym ( n ) 1 (6.8)
care schimb nedorit rspunsul n frecven al filtrelor. Erorile de cuantizare a
Avem:
semnalului pot fi privite ca surse de zgomot aditiv n diferite noduri ale

reelei. ym ( n ) = h
k =0
m (k ) x(n k ) hm (k ) x(n k ) hm (k ) = km
k =0 k =0
(6.9)

Cuantizarea coeficienilor are efecte diferite de cuantizarea semnalului


Nodurile n care pot apare depiri sunt n partea recursiv a structurii
din punct de vedere al zgomotului. Cuantizarea coeficienilor produce erori n
i, bineneles, la ieirea filtrului. Scalarea este necesar dac cel puin unul
rspunsul n frecven i n amplitudine ale filtrului, fiind erori deterministe.
din coeficienii km este supraunitar. Coeficientul cu care se face scalarea la
Aceste erori pot fi minimizate folosind structuri de filtre mai puin sensibile,
intrarea structurii va fi:
Capitolul 6 Realizarea filtrelor digitale 157 158 Aplicaii ale procesoarelor de semnal n comunicaii

1 1 1 Astfel, pentru un filtru de ordin N rezult schema de mai jos:


s min , ,..., (6.10)
k1 k2 km

n cazul n care intrarea este zero sau o constant, exist posibilitatea ca x ( n) b0 w(n) y ( n)

ieirea filtrului, n loc de o apropiere asimptotic de o valoarea constant, s


z 1 b1 a1 z 1
oscileze cu amplitudini relativ mici. Aceste oscilaii sunt numite cicluri x(n 1) y (n 1)
limit. Acetia pot fi redui la amplitudini acceptabile crescnd numrul de z 1 b2 a2 z 1
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 z 1 z 1
bM aN
produce depiri ale gamei dinamice a filtrului IIR. Soluia acestei probleme x(n M ) y(n N )
este folosirea aritmeticii cu saturaie la adunare ceea ce limiteaz rezultatul Figura 5.3. Filtru IIR forma direct 1
adunrii n modul subunitar.

Evident, pentru calculul lui w(n) se folosete programul pentru

6.2.1 Forma direct 1 implementarea unui filtru FIR.


Pentru seciunea recursiv se va implementa o a doua linie de ntrziere

Scriind relaia intrare-ieire sub forma: pentru stocarea ieirilor anterioare ale filtrului.
M
W ( z ) = X ( z ) bk z k (6.11) x ( n) y ( n)
k =0

W ( z) z 1
Y ( z) = N
(6.12) a1
1 + ak z k y (n 1)
k =1
a2 z 1
Rezult ecuaiile cu diferene finite:
M
w(n) = bk z k (6.13)
k =0

aN z 1
N
y (n) = w(n) ak y (n k ) (6.14) y(n N )
k =1
Figura 5.7. Filtru IIR de ordin N numai cu poli
Capitolul 6 Realizarea filtrelor digitale 159 160 Aplicaii ale procesoarelor de semnal n comunicaii

int main()
{
Word16 x[DataBlockSize],y[DataBlockSize]; S considerm acum implementarea unui filtru de ordin 2 numai cu
Word16 delay_b[M+1],delay_a[N+1],b[M+1],a[N];
Word32 sum; poli, cu funcia de transfer de forma:
short n,i;
1
long unsigned k,ix,iy; H ( z) = (6.15)
1 + a1 z + a2 z 2
1

...
Ieirea va fi calculat cu formula:
fread(x,sizeof(Word16),DataBlockSize,fpx);
y (n) = x(n) a1 y (n 1) a2 y (n 2) (6.16)
for (n=0; n<DataBlockSize; n++)
{ Pentru un filtru de ordin 2 nu este necesar implementarea cu liste
delay_b[ix%(M+1)]=x[n];
sum=0;
circulare, strile filtrului putnd fi stocate n dou variabile de stare.
for (k=0; k<=M; k++) Coeficienii a1 i a2 se consider de modul subunitar.
{
sum=L_mac(sum,b[k],delay_b[(ix-k)%(M+1)]); y (n 2) a2
}
for (k=1; k<=N; k++) y ( n 1) a1
{
sum=L_msu(sum,a[k],delay_a[(iy-k)%(N+1)]); Figura 5.4. Organizarea memoriei pentru un filtru de ordin 2 numai cu poli
}
y[n]=round(sum);
delay_b[iy%(N+1)]=y[n];
Word16 x[DataBlockSize],y[DataBlockSize];
ix++; Word16 y1,y2,a[]={WORD16(a1), WORD16(a2)};
iy++; Word32 sum;
}
...
fwrite(y,sizeof(Word16),DataBlockSize,fpy);
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);

...
Capitolul 6 Realizarea filtrelor digitale 161 162 Aplicaii ale procesoarelor de semnal n comunicaii

n exemplul urmtor este implementat un filtru IIR de ordin 2, numai


n exemplul anterior am considerat coeficienii numitorului de modul cu poli, cu coeficienii scalai cu 2. Organizarea memoriei:
subunitar. Fie un filtru de ordin 2 stabil. Polii funciei de transfer sunt n
cercul de raz unitate, deci de modul subunitar. y (n 2) a2 / 2
Avem: y ( n 1) a1 / 2

1 1 Figura 5.6. Organizarea memoriei pentru un filtru de ordin 2 numai cu poli


H ( z) = = (6.17)
1 + a1 z 1 + a2 z 2 (1 p1 z 1 )(1 p2 z 2 )
cu coeficienii scalai
Folosind relaiile ntre coeficienii i rdcinile polinomului de la
numitor obinem: for (n=0; n<DataBlockSize; n++)
{
a1 = p1 + p2 p1 + p2 2 sum = L_deposit_h(shr(x[n],1));
(6.18)
a2 = p1 p2 1 sum = L_msu(sum,a[0],y1);
y[n]= shl(msu_r(sum,a[1],y2),1);
Aceasta nseamn c, n cazul unui filtru de ordin 2 coeficienii y2 = y1;
y1 = y[n];
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: 6.2.2 Forma direct 2

x ( n) 1/ 2 2 y ( n) Relaia intrare-ieire se scrie:


X ( z)
a1 / 2 z 1 W ( z) = N
(6.20)
1 + ak z k
k =1
a2 / 2 z 1
M
Y ( z ) = W ( z ) bk z k (6.21)
k =0
Figura 5.5. Filtru IIR de ordin 2 numai cu poli cu coeficienii scalai
De unde rezult ecuaiile cu diferene finite:
N
Ecuaia cu diferene finite devine: w(n) = x(n) ak w(n k ) (6.22)
k =0
x(n) a1 a
y ( n) = 2 y (n 1) 2 y (n 2) (6.19) M
2 2 2 y (n) = bk w(n k ) (6.23)
k =0
Capitolul 6 Realizarea filtrelor digitale 163 164 Aplicaii ale procesoarelor de semnal n comunicaii

Aceste relaii conduc la structura din figura urmtoare (cunoscut i cu Word16 x[DataBlockSize],y[DataBlockSize];
Word16 w1,w2;
denumirea de forma canonic): Word16 a[]={WORD16(a1), WORD16(a2)};
Word16 b[]={WORD16(b1), WORD16(b2)};
x ( n) w(n) b0 y ( n)
Word32 sum;
a1 z 1 b
1 ...

a2 z 1 b fread(x,sizeof(Word16),DataBlockSize,fpx);
2

for (n=0; n<DataBlockSize; n++)


{
sum = L_deposit_h(x[n]);
sum = L_msu(sum,a[0],w1);
aN z 1 b sum = L_msu(sum,a[1],w2);
M
w = round(sum);
sum = L_mac(sum,b[0],w1);
Figura 5.9. Filtru IIR forma direct 2 y[n]= mac_r(sum,b[1],w2);
w2=w1;
w1=w;
}
Se observ pentru aceast structur o reducere a numrului celulelor de
fwrite(y,sizeof(Word16),DataBlockSize,fpy);
ntrziere fa de forma direct 1, deci o reducere a memoriei necesare.
S considerm pentru nceput un filtru de ordin 2 cu b0 = 1 . Funcia de ...

transfer poate fi scris:


Trebuie menionat c n cazul unei funcii de transfer cu b0 1 se poate
1 + b1 z 1 + b2 z 2
H ( z) = (6.24) face o normare a coeficienilor numrtorului cu b0 , normare care poate fi
1 + a1 z 1 + a2 z 2
compensat la ieire prin nmulirea cu o constant corespunztoare.
Filtrul implementat n forma direct 2 are structura de mai jos i se mai
Ca i n cazul formei directe 1, pentru coeficieni mai mici ca 2 n
numete i filtru biquad:
modul poate fi implementat un program cu scalare a coeficienilor cu 2
pornind de la ecuaia cu diferene finite:
x ( n) w(n) y ( n)
x(n) a1 a
1
w(n) = 2 w(n 1) 2 w(n 2) (6.25)
a1 z b1 2 2 2
w(n) b1 b
z 1 b y (n) = 2 + w(n 1) + 2 w(n 2) (6.26)
a2 2 2 2 2
i avnd structura:
Figura 5.10. Filtru IIR biquad
Capitolul 6 Realizarea filtrelor digitale 165 166 Aplicaii ale procesoarelor de semnal n comunicaii

x(n) 1/ 2 w(n) 2 y ( n) Forma cascad pentru dou structuri biquad este prezentat mai jos:

a1 / 2 z 1 b / 2
1
x ( n) w1 (n) w2 (n) y ( n)

a2 / 2 z 1 b / 2
2
a1,1 z 1 b1,1 a2,1 z 1 b2,1

Figura 5.12. Filtru biquad cu coeficienii scalai


a1,2 z 1 b1,2 a2,2 z 1 b2,2

Coeficienii sunt stocai in vectorii a i b mprii la 2. Valorile Figura 5.14. Forma cascad cu structuri biquad
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 for (n=0; n<DataBlockSize; n++)
{
memorie. sum = L_deposit_h(x[n]);

for (k=0; k<NrSect; k++)


for (n=0; n<DataBlockSize; n++) {
{ sum = L_msu(sum,a[k][0],w1[k]);
sum = L_deposit_h(shr(x[n],1)); sum = L_msu(sum,a[k][1],w2[k]);
sum = L_msu(sum,a[0],w1); w = round(sum);
sum = L_msu(sum,a[1],w2); sum = L_mac(sum,b[k][0],w1[k]);
w = round(shl(sum,1)); sum = L_mac(sum,b[k][1],w2[k]);
sum = L_mac(sum,b[0],w1); w2[k] = w1[k];
y[n]= shl(mac_r(sum,b[1],w2),1); w1[k] = w;
w2=w1; }
w1=w; y[n] = round(sum);
} }

6.2.3 Realizarea n cascad 6.2.4 Realizarea n paralel

Se realizeaz factorizarea funciei de transfer n funcii de ordin 2 cu n acest caz se pornete de la descompunerea n fracii simple a funciei

coeficieni reali implementate cu structuri biquad: H ( z ) . Funcia de transfer poate fi scris sub forma:
p
1 + bk ,1 z 1 + bk ,2 z 2 p
H ( z) = 1
= H k ( z) (6.27)
k =1 1 + ak ,1 z + ak ,2 z 2 k =1 P b0, p + b1, p z 1 P
H ( z) = C + = C + H p (z) (6.28)
Coeficienii seciunilor de ordin 2 au garantat modulul mai mic dect 2 p =1 1 + a1, p z 1 + a2, p z 2 p =1

dac filtrul este stabil i de faz minim.


Capitolul 6 Realizarea filtrelor digitale 167

Se obine schema din figura 5.15.


y1[n]
H1 ( z )

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

y p [ n]
H p (z )

C y[n]

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