Date post: | 07-Jun-2015 |
Category: |
Documents |
Upload: | api-3734081 |
View: | 2,913 times |
Download: | 0 times |
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.1 IIR-Filter
1.1.1 Frequenzgang 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.
y n x n k y n kkk
N
kk
N
[ ] [ ] [ ]
0 1
(1)
Über die z-Transformation 1
Y z X z z Y z zkk
kk
k
N
k
N
( ) ( ) ( )
10
(2)
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 x n ej 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]
H zY z
X z
z
z
kk
k
N
kk
k
N( )( )
( )
0
1
1(3)
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] y[n]
y[n] = x[n – 1]
Y(z) = z–1X(z) = e–jT X(z)
z–1
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 e e x n ej n T j nT j T j T[ ] [ ]( ) 1 .
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 e ej T j f f A 1 2 / (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
H je
e
kj kT
k
N
kj kT
k
N( )
0
1
1(6)
mit
H j H j e j H j( ) ( ) arg ( ) . (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.2 Die 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.
d
a
T
T
2
2arctan (8)
Umgekehrt gilt:
a
d
T
T
2
2tan (9)
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 = ja folgt aus (9):
s jT
Td2
2tan
Über die mathematische Beziehung j xe e
e e
e
e
jx jx
jx jx
jx
jxtan
1
1
2
2 und z e j Td 1 erhält man
sT
e
e T
z
z
j T
j T
d
d
2 1
1
2 1
1
1
1
(10)
Zur Berechnung der Filterkoeffizienten setzt man in den Frequenzgang des analogen Filters
H sb b s b s
a a s a s( )
0 1 22
0 1 22
die bilineare Transformation (10) ein. Der Koeffizientenvergleich mit dem allgemeinen
Frequenzgang eines IIR-Filters
H zz z
z z( )
0 11
22
11
221
liefert dann die gesuchten Filterkoeffizienten k und k.
1.1.3 IIR-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
H zz z
z z( )
0 11
22
11
221
. (11)
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 z21 2 0 . (12)
Als Bedingung dafür, daß beide Pole innerhalb des Einheitskreises liegen erhält man
1 2 und 1 21 1 .
Stellt man diesen Stabilitätsbereich graphisch dar, so erhält man das in Bild 4 gezeigte
Dreieck.
–1
–2 –1 1 2 1
1
2
1
stabil
instabil
Bild 4: Stabilitätsbereich eines IIR-Biquads
1.2 FIR-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
k. Aus diesem Grund gibt es bei FIR-Filtern keinerlei Stabilitätsprobleme. Die
Impulsantwort besitzt endliche Länge, sie entspricht den Koeffizienten k. Die Differenzen-
gleichung des in Bild 5 dargestellten FIR-Filters lautet
y n x n x n x n x n N x n kN kk
N
[ ] [ ] [ ] [ ] [ ] [ ] 0 1 2
0
1 2 (13)
Daraus ergibt sich die digitale Übertragungsfunktion
Y z z z z X zNN( ) ( ) 0 1
12
2
H zY z
X zzk
k
k
N
( )( )
( )
0
(14)
Mit z e j T 1 folgt weiters der komplexe Frequenzgang
H j ekj kT
k
N
( )
0
(15)
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:
H j e N k Tj T Nk
k
N
( ) cos( )
2
0
2 (16)
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 td
dgr
erhält man daraus für die Gruppenlaufzeit
t T Ngr 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.1 Interpolationsfilter 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 = LfA umgewandelt.
Durch diesen Vorgang wird die maximale Nutzsignalfrequenz ebenfalls um den Faktor L
erhöht (von fA/2 auf fA/2 = LfA/2). Der entscheidende Vorteil ist, daß durch diese Technik
das komplizierte und teure analoge Rekonstruktionsfilter am Ausgang des digitalen
Übertragungssystems (Error: Reference source not found) 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)
-3 -2 -1 0 1 2 3-0.2
0
0.2
0.4
0.6
0.8
1
FIR-Koeffizienten für lineare Interpolation
n
b)
5 10 15 20-0.2
0
0.2
0.4
0.6
0.8
1
n
Abtastratenerhöhung durch Eifügen von Nullen c)
5 10 15 20-0.2
0
0.2
0.4
0.6
0.8
1
n
Faltungssumme ergibt lineare Interpolation
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 = LfA/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 Error: Reference source not found 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
n
n L
n L
sin( / )
/ . (17)
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)
0 5 10 15 20 25 30 35 40-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
n
41 Filterkoeffizienten b)
0 0.5 1 1.5 2
x 104
-100
-90
-80
-70
-60
-50
-40
-30
-20
-10
0Spektrum der Fensterfunktion
Frequenz [Hz]
c)
0 0.5 1 1.5 2
x 104
-100
-90
-80
-70
-60
-50
-40
-30
-20
-10
0Frequenzgang des FIR-Filters
Frequenz [Hz]
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)
0 10 20 30 40 50 60 70 80-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
n
81 Filterkoeffizienten b)
0 0.5 1 1.5 2
x 104
-100
-90
-80
-70
-60
-50
-40
-30
-20
-10
0Spektrum der Fensterfunktion
Frequenz [Hz]
c)
0 0.5 1 1.5 2
x 104
-100
-90
-80
-70
-60
-50
-40
-30
-20
-10
0Frequenzgang des FIR-Filters
Frequenz [Hz]
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)
0 5 10 15 20 25 30 35 40-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
n
41 Filterkoeffizienten b)
0 0.5 1 1.5 2
x 104
-100
-90
-80
-70
-60
-50
-40
-30
-20
-10
0Spektrum der Fensterfunktion
Frequenz [Hz]
c)
0 0.5 1 1.5 2
x 104
-100
-90
-80
-70
-60
-50
-40
-30
-20
-10
0Frequenzgang des FIR-Filters
Frequenz [Hz]
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.3 Realisierung von digitalen Filtern
1.3.1 FIR-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öhen2: move y:(r4)+,y0 ; Koeffizient laden; Zeiger r4 erhöhen3: 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: ; FIR_left.ASM2: ;3: ; FIR-Filterung des linken Kanals; Durchschleifen des rechten4: 5: order EQU 41 ; Anzahl der Filterkoeffizienten6:7: ORG x:$40 ; Verzögerungsspeicher im X-Bereich8: data1 BSM order,0 ; Speicher für Ringpuffer löschen9:10: ORG y:0 ; Koeffizienten im Y-Bereich11: koeffs 12: INCLUDE 'tp_ham.asm' ; Koeffizienten des FIR-Filters laden13: INCLUDE 'init_ain.asm' ; Routinen einbinden14:15: move #data1,r0 ; r0 zeigt auf Daten16: move #koeffs,r4 ; r4 zeigt auf Koeffizienten17: move #order-1,m0 ; Datenanzahl = order18: move #order-1,m4 ; Koeffizientenanzahl = order19:20: loop jset #2,x:SSISR,* ; auf nächsten Frame warten21: jclr #2,x:SSISR,*22:23: move x:LEFT_RX_BUFF,y0 ; linken Kanal einlesen24: move x:RIGHT_RX_BUFF,y1 ; rechten Kanal einlesen25:26: move y0,x:-(r0) ; in Datenspeicher schreiben27:28: clr a x:(r0)+,x0 y:(r4)+,y0 ; Ergebnis-Akku löschen; x0, y0 vorbereiten29: rep #order-1 ; Filterschleife30: mac x0,y0,a x:(r0)+,x0 y:(r4)+,y0 ; FIR-Berechnung31: macr x0,y0,a ; letzte Multiplikation, runden32:33: move a,x:LEFT_TX_BUFF ; Sample ausgeben34: move y1,x:RIGHT_TX_BUFF35:36: jmp loop ; und wieder von vorne
Listing 1: Implementierung eines FIR-Filters auf dem DSP56002
1.3.2 IIR-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.ASM2: ; IIR Biquad-Filter Beispiel. Bandsperre f0 = 1000 Hz, Q = 53: ; ELRAD DSP-Reihe; Holger Strauss, 02/954: 5: ca1 EQU 1.95727 ; Filterkoeffizienten6: ca2 EQU -0.9741577: cb0 EQU 0.9870788: cb1 EQU -1.957279: cb2 EQU 0.98707810:11: ORG x:$1012: coeffs BSM 5 ; Koeffizienten im X-Speicher13: ORG x:coeffs14: DC cb0/215: DC cb1/216: DC cb2/217: DC ca1/218: DC ca2/219:20: ORG y:021: 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 einbinden25:26: move #coeffs,r0 ; r0 zeigt auf Koeffizienten27: move #4,m0 ; 5 Koeffizienten28: move #data_x,r4 ; r4 zeigt auf x[n-1], x[n-2]29: move #1,m4 ; 2 Speicherplätze30: move #data_y,r5 ; r5 zeigt auf y[n-1], y[n-2]31: move #1,m5 ; 2 Speicherplätze32:33: bset #11,sr ; Scale up34:35: loop jset #2,x:SSISR,* ; auf nächsten Frame warten36: jclr #2,x:SSISR,*37: 38: move x:LEFT_RX_BUFF,y1 ; linken Kanal filtern39:40: move x:(r0)+,x0 ; x0 = b0/241: 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 durchschleifen50: move x0,x:RIGHT_TX_BUFF51:52: jmp loop ; und wieder von vorne
Listing 2: Realisierung eines IIR-Biquads
1.4 Gegenü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äterforderliche OrdnungAnzahl MAC-OperationenSpeicherplatzbedarflineare Phasekonstante GruppenlaufzeitStabilitäterforderliche Wortbreiteerforderliche KoeffizientengenauigkeitGrenzzyklenadaptives Filter
geringhochvielehochproblemlosproblemlosunbedingtmäßigmäßigkeinemöglich
hochniedrigwenigegeringkaum möglichkaum möglichbedingthochhochvorhandenkaum möglich