Digitale Filter
Digitale Filter
Digitale Filter
Allgemein unterscheidet man bei digitalen Filtern zwei unterschiedliche Strukturen: ‘Infinite
Impulse Response’ (IIR) und ‘Finite Impulse Response’ (FIR) Filter. IIR-Filter enthalten
Rückkopplungselemente, woraus sich theoretisch eine unendliche Impulsantwort ergibt. Bei
den FIR-Filtern sind alle Rückkoppelungen gleich null und die Impulsantwort ist endlich.
FIR-Filter berechnen die Faltungssumme von Eingangssignal und Impulsantwort des Filters.
1.1IIR-Filter
Bild 1 zeigt die direkte Form I eines IIR-Filters, die einen einzigen globalen Summierer am
Ausgang besitzt. Die Zahl der Filterstufen gibt die Ordnung N des Filters an. Aus der Struktur
des Filters läßt sich die Differenzengleichung direkt ablesen.
N N
y[ n] = ∑ α k x[ n − k ] − ∑ β k y[ n − k ] (1)
k =0 k =1
1
Die z-Transformation des zeitdiskreten Eingangssignals ist definiert durch
∞
X ( z) = ∑ x[n]z
n =−∞
−n
Durch diese Transformation wird beispielsweise die zeitdiskrete Folge x[n] = {–1, 0.5, 1} für n = {1, 2, 3} in die
Potenzfunktion X(z) = –z–1 + 0.5z–2 + z–3 übergeführt. Die z-Transformierte ist im Allgemeinen eine unendliche
Potenzreihe, wobei z eine komplexe Variable ist. Die zeitdiskrete Fourier-Transformation
∞
X ( e jω ) = ∑ x[n]e − jω n
n =−∞
stellt einen Sonderfall der z-Transformation dar. Die z-Transformierte ausgewertet entlang des Einheitskreises in
der komplexen z-Ebene ist identisch der Fourier-Transformierten. [Oppenheim]
N
Y ( z) ∑α k z−k
H ( z) = = k =0
N (3)
X ( z)
1+ ∑ β kz −k
k =1
Ein IIR-Filter ist stabil, wenn die Pole dieser Übertragungsfunktion – das sind die Nullstellen
des Nennerpolynoms – innerhalb des Einheitskreises der komplexen z-Ebene liegen. Diese
Bedingung entspricht der Stabilitätsbedingung von analogen Filtern, bei der die Pole in der
linken offenen s-Halbebene liegen müssen. Wie wir später noch zeigen werden, wird die linke
offene s-Halbebene durch die bilineare Transformation auf das Innere des Einheitskreises der
z-Ebene abgebildet.
y[n] = x[n – 1]
Y(z) = z–1X(z) = e–jωT X(z)
Zur Berechnung des Frequenzganges betrachten wir zunächst einmal das ideale Zeitver-
zögerungsglied y[n] = x[n – 1] (Bild 2), an dessen Eingang die Sinusfolge x[n] = sin (ωnT)
angelegt wird. Aus der harmonischen Eingangsfolge ausgedrückt in Exponentialschreibweise
x[n] = e jω nT
folgt die harmonische Ausgangsfolge
y[n] = e jω ( n −1) T = e jω nT e − jω T = x[n]e − jω T .
Der Frequenzgang des Zeitverzögerungsgliedes H(z) = Y(z) / X(z) = z–1 lautet demnach
H ( jω ) = e − jω T . (4)
Entsprechend läßt sich der Frequenzgang jedes beliebigen linearen, zeitunabhängigen
zeitdiskreten Systems durch Substitution von
z −1 = e − jω T = e − j 2π f / f A (5)
und anschließendem Auswerten des Resultats nach Betrag und Phase berechnen. Die
Frequenzgänge aller digitalen Filter ist periodisch mit fA = 1/T.
Für das durch Gleichung (3) beschriebene System ergibt sich der komplexe Frequenzgang
N
∑α k e − jω kT
H ( jω ) = k =0
N (6)
1+ ∑ β ke − jω kT
k =1
mit
H ( jω ) = H ( jω ) e j arg H ( jω ) . (7)
Diese Gleichungen sind gleichermaßen für IIR- sowie für FIR-Filter gültig, da FIR-Filter
durch Nullsetzen der Rückkopplungsparameter βk aus IIR-Filtern hervorgehen.
1.1.2Die bilineare Transformation
Mit Hilfe einer geeigneten Transformation ist es möglich eine im s-Bereich entworfene
analoge Übertragungsfunktion H(s) in den z-Bereich zu übertragen. Die Schwierigkeit besteht
dabei in der Aufgabe, einen ursprünglich unendlich ausgedehnten Frequenzbereich auf den
endlichen Frequenzbereich f = [–fA/2 ... fA/2] abzubilden (Abtasttheorem). Darüber hinaus muß
der Frequenzgang des Digitalfilters periodisch mit der Abtastfrequenz fA sein. Eine
Transformation die diese Eigenschaften besitzt ist die bilineare Transformation. Die
Arcustangens-Funktion führt analoge Kreisfrequenzen ωa in digitale Frequenzen ωd über.
2 ω T
ωd = arctan a (8)
T 2
Umgekehrt gilt:
2 ω T
ω a = tan d (9)
T 2
Durch diese Beziehungen wird der ursprüngliche analoge Frequenzgang insbesondere bei
höheren Frequenzen (ωd → πfA) stark gestaucht, wodurch sich auch die ursprünglichen
Grenzfrequenzen verschieben. Um diesen Effekt zu kompensieren müssen vor dem Entwurf
des analogen Filter-Prototypen die gewünschten digitalen Frequenzspezifikationen mit
Gleichung (9) in analoge umgerechnet werden.
Zur Berechnung der digitalen Übertragungsfunktion H(z) benötigt man nun eine Transfor-
mationsgleichung für die komplexe Frequenzvariable s. Diese Gleichung muß die Fähigkeit
besitzen die Pol- und Nullstellen in der s-Ebene in Pol- und Nullstellen in der z-Ebene
überzuführen. Die jω Achse der s-Ebene wird dabei auf den Einheitskreis in der z-Ebene
abgebildet. Mit s = jωa folgt aus (9):
2 ω T
s= j tan d
T 2
e jx − e − jx 1 − e −2 jx
Über die mathematische Beziehung j tan x = = und z −1 = e − jω d T erhält man
e jx + e − jx 1 + e −2 jx
2 1 − e − jω d T 2 1 − z −1
s= = (10)
T 1 + e − jω d T T 1 + z −1
Zur Berechnung der Filterkoeffizienten setzt man in den Frequenzgang des analogen Filters
b0 + b1s + b2 s 2 +
H ( s) =
a 0 + a1 s + a 2 s 2 +
die bilineare Transformation (10) ein. Der Koeffizientenvergleich mit dem allgemeinen
Frequenzgang eines IIR-Filters
α 0 + α 1 z −1 + α 2 z −2 +
H ( z) =
1 + β 1 z −1 + β 2 z −2 +
liefert dann die gesuchten Filterkoeffizienten αk und βk.
1.1.3IIR-Biquads
Bei der Realisierung von IIR-Filtern muß aufgrund der Rückkopplung immer eine
Stabilitätsbetrachtung durchgeführt werden. Dazu müssen die Pole – das sind die Nullstellen
des Nennerpolynoms – bestimmt werden, was insbesondere bei Filtern höherer Ordnung nicht
immer problemlos ist. Aus diesem Grund beschränkt man sich gerne auf Filter zweiter
Ordnung, und setzt, genauso wie bei Analogfiltern, Filter höherer Ordnung durch kaskadierte
Filter zweiter Ordnung zusammen. Wegen der quadratischen Terme in Zähler und Nenner
werden diese Filter häufig ‘Biquad’-Filter genannt. Bild 3 zeigt die Struktur einer solchen
Filterstufe, die Übertragungsfunktion ist gegeben durch
α 0 + α 1 z −1 + α 2 z −2
H ( z) = . (11)
1 + β 1 z −1 + β 2 z −2
Zur Überprüfung der Stabilität betrachtet man die komplexen Nullstellen des Polynoms
z 2 + β 1z + β 2 = 0 . (12)
Als Bedingung dafür, daß beide Pole innerhalb des Einheitskreises liegen erhält man
β 1 < 2 und β 1 − 1 < β 2 < 1 .
Stellt man diesen Stabilitätsbereich graphisch dar, so erhält man das in Bild 4 gezeigte
Dreieck.
β2
1 1
stabil
–2 –1 1 2 β1
–1 instabil
1.2FIR-Filter
besitzt endliche Länge, sie entspricht den Koeffizienten αk. Die Differenzengleichung des in
Bild 5 dargestellten FIR-Filters lautet
N
y[ n] = α 0 x[ n] + α 1 x[ n − 1] + α 2 x[n − 2] + + α N x[ n − N ] = ∑ α k x[ n − k ] (13)
k =0
Diese Beziehung läßt sich vereinfachen wenn die Impulsantwort symmetrisch ist. Das
bedeuted α k = α N − k für gerade Symmetrie, bzw. α k = −α N − k für ungerade. Ist
Beispielsweise die Bedingung für gerade Symmetrie erfüllt, so lassen sich jeweils zwei Terme
mit gleichen Koeffizienten zusammenfassen und ein gemeinsamer Phasenterm kann
ausgeklammert werden:
N
H ( jω ) = e − jω T N 2 ∑ α k cos( N 2 − k )ω T (16)
k =0
Um den Amplitudengang zu berechnen braucht man nun lediglich die Summe in Gleichung
(16) zu berücksichtigen. Aus der Exponentialfunktion folgt die Phasenverschiebung:
ϕ = −ω T N 2
dϕ
Mit t gr = − erhält man daraus für die Gruppenlaufzeit
dω
t gr = −T N 2 .
Die Erkenntnis aus dieser Ableitung ist, daß FIR-Filter mit symmetrischen Koeffizienten
immer eine lineare Phase und somit eine konstante Gruppenlaufzeit besitzen. Laufzeit-
Verzerrungen können also bei symmetrischen FIR-Filtern nicht auftreten, weswegen man
ausschließlich Filter mit symmetrischen Koeffizienten entwirft.
Die obige Ableitung läßt sich ebenso für ungerade Symmetrie durchführen. In diesem Fall
muß bei gerader Ordnung N der mittlere Koeffizient verschwinden, d.h. αN/2 = 0 sein.
1.2.1Interpolationsfilter für Oversampling
Als Beispiel für ein FIR-Filter soll ein digitales Interpolationsfilter für Oversampling (Über-
abtastung) entwickelt werden. Beim Oversampling wird ein mit konstanter Abtastrate fA
bereitstehendes digitales Signal in ein Signal mit L-facher Abtastrate fA′ = L⋅fA umgewandelt.
Durch diesen Vorgang wird die maximale Nutzsignalfrequenz ebenfalls um den Faktor L
erhöht (von fA/2 auf fA′/2 = L⋅fA/2). Der entscheidende Vorteil ist, daß durch diese Technik das
komplizierte und teure analoge Rekonstruktionsfilter am Ausgang des digitalen Übertragungs-
systems () durch ein digitales Filter ersetzt werden kann. Abschließend ist nur noch ein sehr
einfaches analoges Filter erforderlich.
Betrachtet man z.B. L = 4 - faches Oversampling, so müssen zwischen den vorhandenen
Abtastwerten zunächst einmal L – 1 = 3 zusätzliche eingeschoben werden. Die Größe dieser
zusätzlichen Abtastwerte wird durch digititale Interpolation aus den bestehenden Abtastwerten
gewonnen. Aufgrund ihrer linearen Phase sind dazu FIR-Filter hervorragend geeignet.
Lineare Interpolation
Bei der linearen Interpolation werden die L – 1 Zwischenwerte so bestimmt, daß sie genau auf
den Verbindungslinien zwischen je zwei bestehenden Samples liegen. Bild 6 zeigt, daß diese
Interpolation mittels Faltung von einem FIR-Filter durchgeführt werden kann. Die
erforderlichen Filterkoeffizienten, die ja bekanntlich der Impulsantwort entsprechen,
beschreiben eine symmetrische Dreieckfunktion. Die L – 1 eingefügten Zwischenwerte
wurden vor der Faltung zu Null gesetzt.
a) FIR-Koeffizienten für lineare Interpolation b) Abtastratenerhöhung durch Eifügen von Nullen c) Faltungssumme ergibt lineare Interpolation
1 1 1
0 0 0
-10 -10
0.8
-20 -20
0.6 -30 -30
-40 -40
0.4
-50 -50
0.2
-60 -60
0 -70 -70
-80 -80
-0.2
-90 -90
Auch die Vergrößerung der Anzahl der Koeffizienten bringt nur geringfügige Verbesserungen.
Zwar steigt die Frequenzselektivität, Dämpfung im Sperrbereich und Welligkeit werden
hingegen kaum verbessert (Bild 9).
a) 1
81 Filterkoeffizienten b) 0
Spektrum der Fensterfunktion c) 0
Frequenzgang des FIR-Filters
-10 -10
0.8
-20 -20
0.6 -30 -30
-40 -40
0.4
-50 -50
0.2
-60 -60
0 -70 -70
-80 -80
-0.2
-90 -90
Erhebliche Verbesserungen lassen sich erzielen, indem man die sinc-Koeffizienten mit den
von der FFT-Berechnung bekannten Fensterfunktionen bewertet (Bild 10). Auf Kosten der
Selektivität steigt die Dämpfung im Sperrbereich. Die Welligkeit wird auch stark verbessert.
a) 1
41 Filterkoeffizienten b) 0
Spektrum der Fensterfunktion c) 0
Frequenzgang des FIR-Filters
-10 -10
0.8
-20 -20
0.6 -30 -30
-40 -40
0.4
-50 -50
0.2
-60 -60
0 -70 -70
-80 -80
-0.2
-90 -90
1.3.1FIR-Filter
Listing 1 zeigt die Implementierung eines FIR-Filters auf dem DSP56002. Die
Filterkoeffizienten werden in Zeile 12 per ‘include’-Befehl aus einer externen Datei geladen,
die zum Beispiel mit dem Filterentwurfsprogramm ‘FIRFilt’ erzeugt werden kann. Das
Programm nützt in sehr anschaulicher Weise die Parallelverarbeitung des DSP. Betrachten wir
zunächst einmal welche Schritte zur Berechnung eines FIR-Filters durchzuführen sind. Aus
Bild 5 sehen wir, daß N + 1 (verzögerte) Eingangswerte mit N + 1 Filterkoeffizienten
multipliziert und anschließend aufsummiert werden müssen. Multiplikation und Summation
können auf elegante Weise von der ‘mac’-Operation erledigt werden (z.B. mac X0,Y0,A),
doch muß zuvor dafür gesorgt werden, daß jeweils der richtige Eingangswert und der
dazugehörige Koeffizient in die Registern X0 und Y0 geladen werden. Die Abtastwerte stehen
in einem Ringpuffer im internen X-Speicher des DSP und die Koeffizienten im Y-Speicher
zur Verfügung. Durch die Modulo-Adressierung ist gewährleistet, daß die Adreßregister R0
bzw. R4 immer auf die im nächsten Schritt zu multiplizierenden Werte zeigen. Zur
Berechnung einer einzelnen FIR-Stufe sind demnach drei Befehle notwendig:
1: move x:(r0)+,x0 ; Eingangs-Sample laden; Zeiger r0 erhöhen
2: move y:(r4)+,y0 ; Koeffizient laden; Zeiger r4 erhöhen
3: mac x0,y0,a ; Multiplikation und Summation
Unter Ausnutzung der Parallelverarbeitungsmöglichkeiten des DSP lassen sich diese drei
Befehle in nur einem Befehlszyklus durchführen. In Listing 1, Zeile 30 ist die dazu erfor-
derliche Befehls-Syntax ersichtlich. Der Befehl wird von dem voranstehenden ‘rep’-Befehl N-
mal wiederholt. Die abschließende (N+1-te) Multiplikation mit Runden erfolgt in Zeile 31.
1: ; F IR_ le f t .ASM
2: ;
3: ; F IR - F i l t e rung des l i n ken Kana l s ; Durchsch le i f en des rech ten
4:
5: orde r EQU 41 ; Anzah l der F i l t e r koe f f i z i en ten
6:
7: ORG x :$40 ; Verzögerungsspe i cher im X-Bere i ch
8: data1 BSM orde r ,0 ; Spe icher f ü r R ingpu f fe r l ö schen
9:
10 : ORG y :0 ; Koe f f i z i en ten im Y- Bere i ch
11 : koe f f s
12 : INCLUDE ' t p _ham.asm' ; Koe f f i z i en ten des F IR - F i l t e r s l aden
13 : INCLUDE ' i n i t _a in .asm' ; Rout inen e inb inden
14 :
15 : move #data1 , r0 ; r0 ze ig t au f Daten
16 : move #koe f f s , r4 ; r4 ze ig t au f Koe f f i z i en ten
17 : move #orde r - 1 ,m0 ; Datenanzah l = order
18 : move #orde r - 1 ,m4 ; Koe f f i z i en tenanzah l = order
19 :
20 : l oop j se t #2,x :SS ISR , * ; au f nächs ten Frame war ten
21 : jclr #2,x :SS ISR , *
22 :
23 : move x :LEFT_RX_BUFF ,y0 ; l i nken Kana l e in lesen
24 : move x :R IGHT_RX_BUFF ,y1 ; rech ten Kana l e in lesen
25 :
26 : move y0 ,x : - ( r0 ) ; i n Datenspe i cher sch re iben
27 :
28 : clr a x : ( r0 )+ ,x0 y: ( r4 )+ ,y0 ; Ergebn i s - Akku l ö schen ; x0 , y0
29 : rep #orde r - 1 ; F i l t e r sch le i f e
30 : mac x0,y0,a x:(r0)+,x0 y:(r4)+,y0 ; FIR-Berechnung
31 : macr x0,y0,a ; letzte Multiplikation, runden
32 :
33 : move a,x:LEFT_TX_BUFF ; Sample ausgeben
34 : move y1,x:RIGHT_TX_BUFF
35 :
36 : jmp loop ; und wieder von vorne
Listing 1: Implementierung eines FIR-Filters auf dem DSP56002
1.3.2IIR-Biquads
Bild 11: Struktur des in Listing 2 realisierten IIR-Biquads (Direkte Form I) [ELRAD 11/96, S. 101]
1: ; IIR_LEFT.ASM
2: ; IIR Biquad-Filter Beispiel. Bandsperre f0 = 1000 Hz, Q = 5
3: ; ELRAD DSP-Reihe; Holger Strauss, 02/95
4:
5: ca1 EQU 1.95727 ; Filterkoeffizienten
6: ca2 EQU -0.974157
7: cb0 EQU 0.987078
8: cb1 EQU -1.95727
9: cb2 EQU 0.987078
10 :
11 : ORG x:$10
12 : coeffs BSM 5 ; Koeffizienten im X-Speicher
13 : ORG x:coeffs
14 : DC cb0/2
15 : DC cb1/2
16 : DC cb2/2
17 : DC ca1/2
18 : DC ca2/2
19 :
20 : ORG y:0
21 : data_x BSM 2 ; x[n-1], x[n-2]
22 : data_y BSM 2 ; y[n-1], y[n-2]
23 :
24 : INCLUDE 'init_ain.asm' ; Routinen einbinden
25 :
26 : move #coeffs,r0 ; r0 zeigt auf Koeffizienten
27 : move #4,m0 ; 5 Koeffizienten
28 : move #data_x,r4 ; r4 zeigt auf x[n-1], x[n-2]
29 : move #1,m4 ; 2 Speicherplätze
30 : move #data_y,r5 ; r5 zeigt auf y[n-1], y[n-2]
31 : move #1,m5 ; 2 Speicherplätze
32 :
33 : bset #11,sr ; Scale up
34 :
35 : loop jset #2,x:SSISR,* ; auf nächsten Frame warten
36 : jclr #2,x:SSISR,*
37 :
38 : move x:LEFT_RX_BUFF,y1 ; linken Kanal filtern
39 :
40 : move x:(r0)+,x0 ; x0 = b0/2
41 : mpy x0,y1,a x:(r0)+,x0 y:(r4)+,y0 ; a = b0/2*x[n]
42 : mac x0,y0,a x:(r0)+,x0 y:(r4),y0 ; a += b1/2*x[n-1]
43 : mac x0,y0,a x:(r0)+,x0 y:(r5)+,y0 ; a += b2/2*x[n-2]
44 : mac x0,y0,a x:(r0)+,x0 y:(r5),y0 ; a += a1/2*y[n-1]
45 : macr x0,y0,a y1,y:(r4) ; a += a2/2*y[n-2]
46 : move a,y:(r5) ; y[n-2] = 2*A (mit Shift)
47 : move a,x:LEFT_TX_BUFF ; Ergebnis schreiben (mit Shift)
48 :
49 : move x:RIGHT_RX_BUFF,x0 ; rechten Kanal durchschleifen
50 : move x0,x:RIGHT_TX_BUFF
51 :
52 : jmp loop ; und wieder von vorne
Listing 2: Realisierung eines IIR-Biquads
Grundsätzlich läßt sich sowohl mit IIR- als auch mit FIR-Strukturen jeder beliebige,
gewünschte Frequenzgang realisieren. Systembedingt besitzen jedoch beide Typen gewisse
Vor- und Nachteile, die in Tabelle 1 aufgelistet sind [Tietze-Schenk, S. 850 f.].
Tabelle 1: Gegenüberstellung von FIR- und IIR-Filtern