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
k =0
k =1
y[ n] = ∑ α k x[ n − k ] − ∑ β k y[ n − k ]
(1)
Über die z-Transformation 1 N
N
k =0
k =1
Y ( z ) = ∑ α k X ( z) z − k − ∑ β k Y ( z) z − k
(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 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
H ( z) =
Y ( z) = X ( z)
∑α
k
z−k
k =0 N
1+ ∑ β kz
(3) −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. z–1
x[n]
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 Zeitverzö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 (5) z −1 = e − jω T = e − j 2π f / f A 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
H ( jω ) =
∑α k =0 N
k
e − jω kT
1+ ∑ β ke
(6) − 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.
ω T 2 arctan a T 2 Umgekehrt gilt: ω T 2 ω a = tan d T 2 ωd =
(8)
(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 Transformationsgleichung 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): s= j
ω T 2 tan d T 2
Über die mathematische Beziehung j tan x = s=
e jx − e − jx 1 − e −2 jx 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 = T 1 + e − jω d T T 1 + z −1
(10)
Zur Berechnung der Filterkoeffizienten setzt man in den Frequenzgang des analogen Filters H ( s) =
b0 + b1s + b2 s 2 + a 0 + a1 s + a 2 s 2 +
die bilineare Transformation (10) ein. Der Koeffizientenvergleich mit dem allgemeinen Frequenzgang eines IIR-Filters H ( z) =
α 0 + α 1 z −1 + α 2 z −2 + 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 H ( z) =
Bild 3:
α 0 + α 1 z −1 + α 2 z −2 . 1 + β 1 z −1 + β 2 z −2
(11)
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. 1
β2 1
stabil –2
–1
1 –1
Bild 4:
2
β1
instabil
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) H ( z) =
N Y ( z) = ∑ α k z−k X ( z) k =0
(14)
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 dϕ erhält man daraus für die Gruppenlaufzeit dω = −T N 2 .
Mit t gr = − t gr
Die Erkenntnis aus dieser Ableitung ist, daß FIR-Filter mit symmetrischen Koeffizienten immer eine lineare Phase und somit eine konstante Gruppenlaufzeit besitzen. LaufzeitVerzerrungen 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 (Überabtastung) 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 Übertragungssystems () 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)
b)
FIR-Koeffizienten für lineare Interpolation
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
Bild 6:
-2
-1
0 n
1
2
3
5
10
15 n
20
5
10
15
20
n
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 NyquistFrequenz 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. [TietzeSchenk, S. 814ff.]; [ELRAD 7/96]. Die Impulsantwort, respektive die FIR-Koeffizienten entsprechen der sinc-Funktion
αn =
sin(πn / L) . πn / L
(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)
b)
41 Filterkoeffizienten 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 0
c)
Spektrum der Fensterfunktion 0
-10
-20
-20
-30
-30
-40
-40
-50
-50
-60
-60
-70
-70
-80
-80
-90 5
10
Bild 8:
15
20 n
25
30
35
-100 0
40
Frequenzgang des FIR-Filters 0
-10
-90 0.5
1 1.5 Frequenz [Hz]
-100 0
2
0.5
4
x 10
1 1.5 Frequenz [Hz]
2 4
x 10
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)
b)
81 Filterkoeffizienten 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 0
c)
Spektrum der Fensterfunktion 0 -10
-10
-20
-20
-30
-30
-40
-40
-50
-50
-60
-60
-70
-70
-80
-80
-90 10
20
Bild 9:
30
40 n
50
60
70
-100 0
80
Frequenzgang des FIR-Filters 0
-90 0.5
1 1.5 Frequenz [Hz]
-100 0
2
0.5
4
x 10
1 1.5 Frequenz [Hz]
2 4
x 10
a) Filterkoeffizienten; b) Spektrum der Rechteck-Fensterfunktion; c) Frequenzgang des FIRFilters 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)
b)
41 Filterkoeffizienten 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 0
5
Bild 10:
10
15
20 n
25
30
35
40
c)
Spektrum der Fensterfunktion 0
Frequenzgang des FIR-Filters 0
-10
-10
-20
-20
-30
-30
-40
-40
-50
-50
-60
-60
-70
-70
-80
-80
-90
-90
-100 0
-100 0
0.5
1 1.5 Frequenz [Hz]
2 4
x 10
0.5
1 1.5 Frequenz [Hz]
2 4
x 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
2: 3:
move mac
; Eingangs-Sample laden; Zeiger r0 erhöhen
y:(r4)+,y0 ; Koeffizient laden; Zeiger r4 erhöhen 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 erforderliche Befehls-Syntax ersichtlich. Der Befehl wird von dem voranstehenden ‘rep’-Befehl Nmal wiederholt. Die abschließende (N+1-te) Multiplikation mit Runden erfolgt in Zeile 31. 1: 2: 3: 4: 5: 6: 7: 8: 9: 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 :
; F IR_ le f t .ASM ; ; F IR - F i l t e rung des l i n ken Kana l s ; Durchsch le i f en des rech ten orde r data1
EQU
41
ORG BSM
x :$40 orde r ,0
ORG
y :0
; Anzah l der F i l t e r koe f f i z i en ten ; Verzögerungsspe i cher im X-Bere i ch ; Spe icher f ü r R ingpu f fe r l ö schen ; Koe f f i z i en ten im Y- Bere i ch
koe f f s INCLUDE ' t p _ham.asm' INCLUDE ' i n i t _a in .asm'
l oop
; Koe f f i z i en ten des F IR - F i l t e r s l aden ; Rout inen e inb inden
move move move move
#data1 , r0 #koe f f s , r4 #orde r - 1 ,m0 #orde r - 1 ,m4
j se t jclr
#2,x :SS ISR , * #2,x :SS ISR , *
; au f nächs ten Frame war ten
move move
x :LEFT_RX_BUFF ,y0 x :R IGHT_RX_BUFF ,y1
; l i nken Kana l e in lesen ; rech ten Kana l e in lesen
move
y0 ,x : - ( r0 )
clr rep
a x : ( r0 )+ ,x0 #orde r - 1
; r0 ze ig t au f Daten ; r4 ze ig t au f Koe f f i z i en ten ; Datenanzah l = order ; Koe f f i z i en tenanzah l = order
; i n Datenspe i cher sch re iben y: ( r4 )+ ,y0 ; Ergebn i s - Akku l ö schen ; x0 , y0 ; F i l t e r sch le i f e
mac macr
30 : 31 : 32 : 33 : 34 : 35 : 36 :
Listing 1:
x0,y0,a x0,y0,a
x:(r0)+,x0
move move
a,x:LEFT_TX_BUFF y1,x:RIGHT_TX_BUFF
jmp
loop
y:(r4)+,y0 ; FIR-Berechnung ; letzte Multiplikation, runden ; Sample ausgeben ; und wieder von vorne
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 IIRFilter.
Bild 11: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10 :
Struktur des in Listing 2 realisierten IIR-Biquads (Direkte Form I) [ELRAD 11/96, S. 101]
; IIR_LEFT.ASM ; IIR Biquad-Filter Beispiel. Bandsperre f0 = 1000 Hz, Q = 5 ; ELRAD DSP-Reihe; Holger Strauss, 02/95 ca1 ca2 cb0 cb1 cb2
EQU EQU EQU EQU EQU
1.95727 -0.974157 0.987078 -1.95727 0.987078
; Filterkoeffizienten
11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : 51 : 52 :
coeffs
data_x data_y
ORG BSM ORG DC DC DC DC DC
x:$10 5 x:coeffs cb0/2 cb1/2 cb2/2 ca1/2 ca2/2
ORG BSM BSM
y:0 2 2
; Koeffizienten im X-Speicher
; x[n-1], x[n-2] ; y[n-1], y[n-2]
INCLUDE 'init_ain.asm'
loop
Listing 2:
; Routinen einbinden
move move move move move move
#coeffs,r0 #4,m0 #data_x,r4 #1,m4 #data_y,r5 #1,m5
; ; ; ; ; ;
r0 zeigt auf Koeffizienten 5 Koeffizienten r4 zeigt auf x[n-1], x[n-2] 2 Speicherplätze r5 zeigt auf y[n-1], y[n-2] 2 Speicherplätze
bset
#11,sr
; Scale up
jset jclr
#2,x:SSISR,* #2,x:SSISR,*
; auf nächsten Frame warten
move
x:LEFT_RX_BUFF,y1
; linken Kanal filtern
move mpy mac mac mac macr move move
x:(r0)+,x0 x0,y1,a x:(r0)+,x0 x0,y0,a x:(r0)+,x0 x0,y0,a x:(r0)+,x0 x0,y0,a x:(r0)+,x0 x0,y0,a a,y:(r5) a,x:LEFT_TX_BUFF
move move
x:RIGHT_RX_BUFF,x0 x0,x:RIGHT_TX_BUFF
; rechten Kanal durchschleifen
jmp
loop
; und wieder von vorne
; x0 = b0/2 ; a = b0/2*x[n] ; a += b1/2*x[n-1] ; a += b2/2*x[n-2] ; a += a1/2*y[n-1] ; a += a2/2*y[n-2] ; y[n-2] = 2*A (mit Shift) ; Ergebnis schreiben (mit Shift)
y:(r4)+,y0 y:(r4),y0 y:(r5)+,y0 y:(r5),y0 y1,y:(r4)
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 Selektivität erforderliche Ordnung Anzahl MAC-Operationen Speicherplatzbedarf lineare Phase konstante Gruppenlaufzeit Stabilität
FIR-Filter gering hoch viele hoch problemlos problemlos unbedingt
IIR-Filter hoch niedrig wenige gering kaum möglich kaum möglich bedingt
erforderliche Wortbreite erforderliche Koeffizientengenauigkeit Grenzzyklen adaptives Filter
mäßig mäßig keine möglich
hoch hoch vorhanden kaum möglich