Documente Academic
Documente Profesional
Documente Cultură
1 2
Y ( z ) N 1 k N 1
Lista circulara Coeficienti
H ( z) hk z y (n) hk x(n k )
X ( z ) k 0 k 0
h(N-1)
3 4
6.1.1 FORMA TRANSVERSALĂ 6.1.1 FORMA TRANSVERSALĂ
Calculul ieşirii y(n): fread(x,sizeof(Word16),DataBlockSize,fpx);
for (n=0; n<DataBlockSize; n++)
N 1
y (n) hk x(n k ) {
k 0 delay[index%N]=x[n];
int main() sum=0;
{ for (k=0; k<N; k++)
Word16 sum=L_mac(sum,h[k],delay[(index-k)%N]);
x[DataBlockSize],y[DataBlockSize],delay[N],h[N]; y[n]=round(sum);
Word32 sum; index++;
short n,i;
}
long unsigned k,index;
fwrite(y,sizeof(Word16),DataBlockSize,fpy);
...
...
}
5 6
hN 1 h2 h1 h0 hN 1 h2 h1 h0
x ( n) x ( n)
7 8
Filtre cu răspuns infinit la impuls
Funcţia de transfer este de forma:
M
Y ( z) b z k
k
H ( z) k 0
X ( z) N
1 ak z k
k 1
6.2 IMPLEMENTAREA FILTRELOR
Ecuaţia cu diferenţe finite:
CU RĂSPUNS INFINIT LA IMPULS
M N
y (n) bk x(n k ) ak y (n k )
k 0 k 1
9 10
k 0
1 ak z k 1 z 1
z
k 1 b1 a1
x(n 1) y (n 1)
Ecuaţiile cu diferenţe finite: z 1 z 1
b2 a2
M N
y (n 2)
w(n) bk x(n k ) y (n) w(n) ak y (n k )
x ( n 2)
k 0 k 1
1 1
z z
bM aN
11
x(n M ) y (n N ) 12
6.2.1 FORMA DIRECTĂ 1 6.2.1 FORMA DIRECTĂ 1
int main() for (n=0; n<DataBlockSize; n++)
{ {
Word16 x[DataBlockSize],y[DataBlockSize]; delay_b[ix%(M+1)]=x[n];
Word16 delay_b[M+1],delay_a[N+1],b[M+1],a[N]; sum=0;
Word32 sum; for (k=0; k<=M; k++)
short n,i; sum=L_mac(sum,b[k],delay_b[(ix-k)%(M+1)]);
long unsigned k,ix,iy; for (k=1; k<=N; k++)
... sum=L_msu(sum,a[k],delay_a[(iy-k)%(N+1)]);
fread(x,sizeof(Word16),DataBlockSize,fpx); y[n]=round(sum);
for (n=0; n<DataBlockSize; n++) delay_a[iy%(N+1)]=y[n];
{ ix++;
... iy++;
}
fwrite(y,sizeof(Word16),DataBlockSize,fpy);
13 14
...
z 1 b1 a1 z 1 z 1 a1` z 1
b1
x(n 1) y (n 1)
z 1 b2 a2 z 1 z 1 b2 a2 z 1
Pi i
1 Li Li L j Li L j Lk z 1 z 1
H z i a1`
1 Li Li L j Li L j Lk
b1
i i, j i , j ,k
i, j i , j ,k
Li reprezintă transmitanţa buclei i a grafului, i
z 1 b2 a2 z 1
prima sumă se referă la toate buclele grafului, a doua
la perechile de bucle neadiacente, a treia la grupurile
Graful are două bucle simple adiacente, cu
de câte trei bucle neadiacente şi aşa mai departe.
transmitanţele: L1 a1 z 1 ; L2 a2 z 2
Pi reprezintă transmitanţa căii i de la nodul sursă la
nodul de ieşire, suma de la numărător fiind efectuată
deci 1 a1 z 1 a2 z 2
pentru toate aceste căi. şi trei căi simple între intrare şi ieşire,
În fine, Δi se obţine din Δ eliminând termenii ce P1 b0 ; 1 1;
1
P2 b1 z ; 2 1; b0 b1 z 1 b2 z 2
corespund unor bucle adiacente căii i . H z
17
P3 b2 z 2 ; 3 1; 1 a1 z 1 a2 z 2 18
Folosind relaţiile între coeficienţii şi rădăcinile Organizarea memoriei pentru un filtru de ordin
polinomului de la numitor obţinem: 2 numai cu poli cu coeficienţi scalaţi:
a1 p1 p2 p1 p2 2 y1 = y ( n 1) a1 / 2
a2 p1 p2 1 y2 = y ( n 2) a2 / 2
21 22
{ k 1
sum = L_deposit_h(shr(x[n],1));
sum = L_msu(sum,a[0],y1); Ecuaţiile cu diferenţe finite:
y[n]= shl(msu_r(sum,a[1],y2),1);
N M
y2 = y1;
w(n) x(n) ak w(n k ) y (n) bk w(n k )
y1 = y[n]; k 0 k 0
}
23 24
6.2.2 FORMA DIRECTĂ 2 6.2.2 FORMA DIRECTĂ 2
N M
w(n) = x(n) - ak w(n k ) y (n) bk w(n k ) Filtru IIR forma directă 2
k=1 k 0
x(n) w(n) b0 y (n) x(n) b0 y (n)
1 1 1
z
a1 z z b1 a1 b1
w( n 1) y (n 1)
1 1
a2 z z
b2 z 1
a2 b2
w(n 2) y (n 2)
y (n 2)
1
z
aN bN
1
z
aN w(n N )
1
z
bM 25 26
y (n M )
z 1 b
b0 b1 z 1 b2 z 2
a1 H ( z)
1
1 a1 z 1 a2 z 2
a2 z 1 b x ( n) w(n) b0 y ( n)
2
a1 z 1 b
1
aN z 1 b a2 z 1 b
M 2
27 28
6.2.2 FORMA DIRECTĂ 2 6.2.2 FORMA DIRECTĂ 2
Ecuațiile cu diferențe finite: Word16 x[DataBlockSize],y[DataBlockSize];
Word16 w1,w2;
w(n) x(n) a1w(n 1) a2 w(n 2) Word16 a[]={WORD16(a1), WORD16(a2)};
Word16 b[]={WORD16(b0), WORD16(b1), WORD16(b2)};
y (n) b0 w(n) b1w(n 1) b2 w(n 2) Word32 sum;
...
x ( n) w(n) b0 y ( n) fread(x,sizeof(Word16),DataBlockSize,fpx);
a1 z 1 b
1
a2 z 1 b
2
29 30
sum = L_msu(sum,a[1],w2); H ( z) 1
H k ( z)
k 1 1 ak ,1 z ak ,2 z 2 k 1
w = round(shl(sum,1));
sum = L_mult(b[0],w); Rezultă o realizare în cascadă:
sum = L_mac(sum,b[1],w1); x(n) y1 (n) y 2 ( n) y P ( n) y ( n)
H1 ( z) H 2 ( z) H P (z )
y[n]= shl(mac_r(sum,b[2],w2),1);
w2=w1; Fiecare din filtrele componente, având o funcţie de
w1=w; transfer de ordinul 2, poate fi realizată în una din
} formele directe 1 sau 2.
33 34
35 36
6.2.3 REALIZAREA ÎN CASCADĂ 6.2.4 REALIZAREA ÎN PARALEL
for (n=0; n<DataBlockSize; n++) În acest caz se porneşte de la descompunerea
{ sum = L_deposit_h(x[n]); în fracţii simple a funcţiei H(z).
for (k=0; k<NrSect; k++)
{ Fracţiile simple (cu numitor de gradul 1) au în
sum = L_msu(sum,a[k][0],w1[k]); general coeficienţi complecşi.
sum = L_msu(sum,a[k][1],w2[k]); Grupând însă fracţiile corespunzătoare
w = round(sum);
perechilor de poli complex conjugaţi, rezultă
sum = L_mult(b[k][0],w);
sum = L_mac(sum,b[k][1],w1[k]); funcţiile Hl(z) de gradul 2, cu coeficienţi reali,
sum = L_mac(sum,b[k][2],w2[k]); al,k, bl,k R
w2[k] = w1[k]; P b0, p b1, p z 1 P
w1[k] = w; H z C C H p z
} p 1 1 a1, p z 1 a2, p z 2 p 1
y[n] = round(sum);
37 38
}