Sie sind auf Seite 1von 12

1.

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

1.1.1Frequenzgang von Digitalen Filtern

Bild 1: Direkte Form I eines digitalen Filters [Tietze-Schenk, S. 804]

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

Über die z-Transformation 1


N N
Y ( z ) = ∑ α k X ( z) z − k − ∑ β k Y ( z) z − k (2)
k =0 k =1

ergibt sich schließlich die digitale Übertragungsfunktion.

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.

x[n] z–1 y[n]

y[n] = x[n – 1]
Y(z) = z–1X(z) = e–jωT X(z)

Bild 2: Ideales Zeitverzögerungsglied

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

Bild 3: IIR-Filter 2. Ordnung (IIR-Biquad) [Tietze-Schenk, S. 839]

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

Bild 4: Stabilitätsbereich eines IIR-Biquads

1.2FIR-Filter

Bild 5: FIR-Filter mit einem globalen Summierer am Ausgang [Tietze-Schenk, S. 807]


Die Koeffizienten βk in den digitalen Filtern (Bild 1) bestimmen die Stärke der
Rückkopplung. Macht man sie zu Null, entfällt die Rückkoplung und man erhält als
Ausgangssignal exakt die Faltungssumme des Eingangssignals mit den N + 1 Koeffizienten α
. Aus diesem Grund gibt es bei FIR-Filtern keinerlei Stabilitätsprobleme. Die Impulsantwort
k

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

Daraus ergibt sich die digitale Übertragungsfunktion


[ ]
Y ( z ) = α 0 + α 1 z −1 + α 2 z −2 +  + α N z − N X ( z)
N
Y ( z)
H ( z) = = ∑ α k z−k (14)
X ( z) k =0
Mit z −1 = e − jω T folgt weiters der komplexe Frequenzgang
N
H ( jω ) = ∑ α k e − jω kT (15)
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

Mit t gr = − erhält man daraus für die Gruppenlaufzeit

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.8 0.8 0.8

0.6 0.6 0.6

0.4 0.4 0.4

0.2 0.2 0.2

0 0 0

-0.2 -0.2 -0.2


-3 -2 -1 0 1 2 3 5 10 15 20 5 10 15 20
n n n

Bild 6: Lineare Interpolation durch Faltung mit einer Dreieckfunktion; a) FIR-Koeffizienten; b)


Abtastwerte nach der Erhöhung der Abtastrate durch Einfügen von Nullen (o); c) Faltung von
a) und b) ergibt lineare Interpolation (*)

Obwohl die Koeffizienten dieses linearen Interpolationsfilters empirisch ermittelt wurden,


besitzt das resultierende System die typischen Eigenschaften von FIR-Filtern, wie lineare
Phase und Stabilität. Alleine der Frequenzgang ist noch nicht ideal, was zu deutlichen
Signalverzerrungen führt. In der Laborübung wird der resultierende Klirrfaktor anhand eines
MATLAB-Demonstrationsprogrammes gezeigt.
Interpolation mit einem idealen Tiefpaßfilter
Durch das zuvor beschriebene Einfügen der L – 1 Nullen wird die Nyquist-Frequenz um den
Faktor L erhöht. Im resultierenden Nutzfrequenzbereich von ±fA′/2 = ±L⋅fA/2 ist dadurch das
periodische Spektrum des abgetasteten Originalsignals mehrfach enthalten (Bild 7b). Ein
ideales Interpolationsfilter muß die Spektralanteile oberhalb der ursprünglichen Nyquist-
Frequenz von fA/2 entfernen, nur das Originalspektrum wird durchgelassen. Diese Filterung
entspricht einer Multiplikation mit einer Rechteckfunktion im Frequenzbereich, so, wie es
bereits in Abschnitt bei der Rekonstruktion des analogen Signals beschrieben wurde.

Bild 7: Oversampling bei der DA-Umsetzung [Zölzer, S. 70]

Da die Multiplikation im Frequenzbereich einer Faltung im Zeitbereich entspricht, – der


Operation, die unser FIR-Filter durchführt – liegt es nahe, daß man die Filterkoeffizienten
durch inverse Fouriertransformation aus dem Frequenzgang des Filters bestimmt. [Tietze-
Schenk, S. 814ff.]; [ELRAD 7/96]. Die Impulsantwort, respektive die FIR-Koeffizienten
entsprechen der sinc-Funktion
sin(πn / L)
αn = . (17)
πn / L
Die Funktion ist symmetrisch, woraus wieder ein linearer Phasengang resultiert, allerdings
erstreckt sie sich von n = [–∞ ... ∞], was praktisch nicht realisierbar ist.
Eine Lösungsmöglichkeit besteht darin, die sinc-Funktion symmetrisch bei n = ±(N – 1)/2
abzuschneiden, wodurch man eine Impulsantwort mit N-Punkten erhält. Dieses Abschneiden
kann als Multiplikation der Impulsantwort mit einem Rechteck-Fenster angesehen werden.
Bild 8 zeigt die Auswirkung dieser Multiplikation auf den Frequenzgang des Tiefpaßfilters,
der keineswegs als ideal bezeichnet werden kann. Durchlaß- und Sperrbereich besitzen eine
große Welligkeit, außerdem ist die Sperrdämpfung nicht sehr gut.
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

-0.4 -100 -100


0 5 10 15 20 25 30 35 40 0 0.5 1 1.5 2 0 0.5 1 1.5 2
n Frequenz [Hz] 4
x 10 Frequenz [Hz] 4
x 10

Bild 8: a) Filterkoeffizienten (beschnittene sinc-Funktion); b) Spektrum des Rechteckfensters;


c) Frequenzgang des FIR-Filters und dessen Spezifikation (N = 41; L = 4; fA = 48 kHz)

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

-0.4 -100 -100


0 10 20 30 40 50 60 70 80 0 0.5 1 1.5 2 0 0.5 1 1.5 2
n Frequenz [Hz] 4
x 10 Frequenz [Hz] 4
x 10

Bild 9: a) Filterkoeffizienten; b) Spektrum der Rechteck-Fensterfunktion; c) Frequenzgang des FIR-


Filters und dessen Spezifikation (N = 81; L = 4; fA = 48 kHz)

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

-0.4 -100 -100


0 5 10 15 20 25 30 35 40 0 0.5 1 1.5 2 0 0.5 1 1.5 2
n Frequenz [Hz] 4
x 10 Frequenz [Hz] 4
x 10

Bild 10: a) Sinc-Funktion (⋅⋅⋅⋅), Hamming-Funktion (– – –) und resultierende Filterkoeffizienten (–+–);


b) Spektrum der Hamming-Fensterfunktion; c) Frequenzgang des FIR-Filters und dessen
Spezifikation (N = 41; L = 4; fA = 48 kHz)
1.3Realisierung von digitalen Filtern

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

Die bilineare Transformation erlaubt uns Analogfilter 2. Ordnung in IIR-Biquads


umzurechnen (siehe Abschnitt 1.1.2). Als Beispiel für eine Implementierung soll eine
Bandsperre mit einer Mittenfrequenz von f0 = 1000 Hz und der Güte Q = 5 dienen. Für die
vier Filter-Grundtypen in zweiter Ordnung (Tiefpaß, Hochpaß, Bandpaß und Bandsperre)
lassen sich die IIR-Koeffizienten in geschlossener Form angeben und somit leicht berechnen
[Tietze-Schenk, S. 840], [ELRAD 11/96, S. 100]. Für unser Beispiel erhalten wir die
Koeffizienten:
α0 = 0.987078 (b0) β1 = –1.95727 (–a1)
α1 = –1.95727 (b1) β2 = 0.974157 (–a2)
α2 = 0.987078 (b2)
Ein Problem entsteht bei den Koeffizienten α1 und β1, die größer als Eins, und deshalb im
Festkommaformat des DSP nicht darstellbar sind. Zur Abhilfe halbiert man sämtliche
Koeffizienten und macht von der Shift-Logik der ALU gebrauch. Diese tritt beim Auslesen
des Akkumulators in Aktion und sorgt für eine automatische Multiplikation mit 2 (siehe
Listing 2, Zeile 46 und 47). Eingeschaltet wird die Shift-Logik durch das Setzen von Bit 11
des Statusregisters (SR) (siehe Listing 2, Zeile 33). Bild 11 zeigt die Struktur des in Listing 2
realisierten Filters. Beachten sie bitte, daß im Listing und im dazugehörigen Bild andere
Bezeichnungen für die Filterkoeffizienten gewählt wurden als bei der Beschreibung der IIR-
Filter.

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

1.4Gegenüberstellung IIR – FIR

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

Merkmal FIR-Filter IIR-Filter


Selektivität gering hoch
erforderliche Ordnung hoch niedrig
Anzahl MAC-Operationen viele wenige
Speicherplatzbedarf hoch gering
lineare Phase problemlos kaum möglich
konstante Gruppenlaufzeit problemlos kaum möglich
Stabilität unbedingt bedingt
erforderliche Wortbreite mäßig hoch
erforderliche Koeffizientengenauigkeit mäßig hoch
Grenzzyklen keine vorhanden
adaptives Filter möglich kaum möglich