Stabilitaet IIR-Filter

Nov 14, 2005 1 Replies

X-No-Archive: Yes



begin Text


Hallo,



ich bitte die dumme Frage zu entschuldigen: ein IIR-Filter ist doch genau dann stabil, wenn alle Pole (= Nennernullstellen) innerhalb des Einheitskreises kiegen, richtig?



Hintergrund: ich will Filter "auf die faule Tour" durch lineare Regression "entwerfen" - ich gebe ein Eingangs- und ein Ausgangssignal vor und lasse einen Approximationsalgorithmus (Tabellenkalkulation) solange an den Filterkoeffizienten drehen, bis das Ausgangssignal bestmöglich fittet.



Problem: wenn ich einfach die Nennerkoeffizienten selbst variiere, kommen instabile Filter heraus - der Fit paßt zwar auf die Sample-Signale hervorragend (sie werden "gelernt"), aber bei einem anderen Eingangssignal läuft das System sofort numerisch weg (ist ja auch kein Wunder).



Und nun habe ich mir folgende Problemlösung überlegt:



Das Nennerpolynom läßt sich als Produktdarstellung aus Faktoren



F_i = 1 - 2 * r_i * cos phi_i * z^-1 + r_i^2 * z^-2



(und bei ungeradzahliger Ordnung ggf. aus noch einem Faktor



F_Re = 1 - a * z^-1



für eine reelle Polstelle bei z = a).



Wenn man das Produkt ausmultipliziert, müßte für r_i < 1 automatisch ein stabiles Filter herauskommen.



Um es dem Programm einfach zu machen, kann man dann noch



r_i = 1 / [1 + exp(a_i)] und cos phi_i = 1 / SQR(1 + b_i^2)



(und evtl. noch a = tanh(a_0))



setzen, und dann kann der Solver nach Belieben mit den a_i's und b_i's herumwirbeln, ohne daß das Filter instabil werden kann; die Zählerkoeffinzienten haben sowieso "Narrenfreiheit".



Ist da irgendwo ein Denkfehler drin?


Gruß aus Bremen Ralf


X-No-Archive: Yes

begin Text

Hallo,

ich bitte die dumme Frage zu entschuldigen: ein IIR-Filter ist doch genau dann stabil, wenn alle Pole (= Nennernullstellen) innerhalb des Einheitskreises liegen, richtig?

Hintergrund: ich will Filter "auf die faule Tour" durch lineare Regression "entwerfen" - ich gebe ein Eingangs- und ein Ausgangssignal vor und lasse einen Approximationsalgorithmus (Tabellenkalkulation) solange an den Filterkoeffizienten drehen, bis das Ausgangssignal bestmöglich fittet.

Problem: wenn ich einfach die Nennerkoeffizienten selbst variiere, kommen instabile Filter heraus - der Fit paßt zwar auf die Sample-Signale hervorragend (sie werden "gelernt"), aber bei einem anderen Eingangssignal läuft das System sofort numerisch weg (ist ja auch kein Wunder).

Und nun habe ich mir folgende Problemlösung überlegt:

Das Nennerpolynom läßt sich als Produktdarstellung aus Faktoren

F_i = 1 - 2 * r_i * cos phi_i * z^-1 + r_i^2 * z^-2

(und bei ungeradzahliger Ordnung ggf. aus noch einem Faktor

F_Re = 1 - a * z^-1

für eine reelle Polstelle bei z = a) darstellen.

Wenn man das Produkt ausmultipliziert, müßte für r_i < 1 automatisch ein stabiles Filter herauskommen.

Um es dem Programm einfach zu machen, kann man dann noch

r_i = 1 / [1 + exp(a_i)] und cos phi_i = 1 / SQR(1 + b_i^2)

(und evtl. noch a = tanh(a_0))

setzen, und dann kann der Solver nach Belieben mit den a_i's und b_i's herumwirbeln, ohne daß das Filter instabil werden kann; die Zählerkoeffinzienten haben sowieso "Narrenfreiheit".

Ist da irgendwo ein Denkfehler drin?

Sind a_i = 0 und b_i = i geeignete Startwerte für die Iteration?

Gruß aus Bremen Ralf

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required