Stabilitaet IIR-Filter

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

Reply to
Ralf Kusmierz
Loading thread data ...

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

Reply to
Ralf Kusmierz

PolyTech Forum website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.