Forum: Digitale Signalverarbeitung / DSP / Machine Learning adaptiv IIR Filter Koeffizienten ändern, wie?


von Adib (Gast)


Lesenswert?

Hallo Leute,

ich möchte gerne IIR Koeffizienten zur Laufzeit anpassen.
Sprich Filter Grenzfrequenz ändern.

Ich habe Bedenken, dass wenn ich die Koeffizienten direkt tausche es 
evtl. Sprünge im Ausgangssignal gibt oder Instabilitäten.

Habt Ihr da eventuell Hinweise, wie man solche Funktionalität 
implementiert?
Oder weiterführende Links?

Danke und Grüße,

Adib.
--

von Tobias P. (hubertus)


Lesenswert?

Hoi,

das würde ich bei einem IIR nicht machen, denn der Grund ist: du 
müsstest vor jeder Änderung der Koeffizienten erst prüfen, ob das 
Resultierende Filtee stabil sein wird. Was machst du, wenn es nicht 
stabil ist?

Daher nimmt man für adaptive Filter FIR-Filter, weil diese immer stabil 
sind und du die Koeffizienten modifizieren kannst, ohne dabei in Teufels 
Küche zu kommen.

von Adib (Gast)


Lesenswert?

Hallo Tobias,

Ich hatte mir gedacht zumindest aus einem Satz vordefinierter 
Koeffizienten zu wählen.

Ich weiss aber nicht, inwiefern die Speicherelemente eine Rolle spielen. 
Ich würde ungern das Filter komplett "resetten".

Danke, Adib.
--

von Manfred M. (bittbeisser)


Lesenswert?

Ich bin nur ein Bastler und kein Profi. Daher habe ich das was Du vor 
hast schon mal in meinem Morsedecoder Experiment ausprobiert.

 > Ich weiss aber nicht, inwiefern die Speicherelemente eine Rolle
 > spielen. Ich würde ungern das Filter komplett "resetten".
Aber genau das musst Du machen! Ich hatte das ausprobiert mit mehreren 
vordefinierten Parameter Sets. Bei der Umschaltung gab es immer sehr 
hohe Peaks, die meine Ergebnisse störten.

Beim "resetten" gibt es zwar Unterbrechungen, aber bei meiner Anwendung 
stören die weniger oder fallen gar nicht auf. Bei einem 4-poligen 
IIR-Tiefpass ist die Unterbrechung ja nicht allzu groß.

Eine Alternative wäre natürlich mehrere Filter parallel laufen zu lassen 
und dann nur die Ausgänge umzuschalten. Aber ich denke dann könnte man 
auch schon fast über FIR Alternativen nachdenken.

Was ich nicht weiter zuende gedacht habe, ist die Möglichkeit, eine 
bestimmte Anzahl von Werten in einem (Ring-) Speicher aufzubewahren, um 
dann das neue Filter damit zu initialisieren. Das ist zwar auch nicht 
exakt, aber ein möglicher Kompromiss.

: Bearbeitet durch User
von Tobias P. (hubertus)


Lesenswert?

Und was soll denn der Vorteil des IIR sein?
Klar, man bräuchte weniger Taps, aber sämtliche Algorithmen für die 
Adaption der Filterkoeffizienten werden grausig kompliziert, sofern es 
überhaupt möglich ist. Hinzu kommt das oben erwähnte 'reseten' des 
Filters.

Ich würde wirklich dazu raten, ein adaptives FIR-Filter mal anzuschauen. 
Reset entfällt, und mit dem NLMS-Algorithmus kann man eine schnelle und 
gute Adaption erreichen. Der Adaptionsalgorithmus ist ein Zweizeiler, 
wenn ich mich recht erinnere, also wirklich einfach ;-)

von Manfred M. (bittbeisser)


Lesenswert?

> Und was soll denn der Vorteil des IIR sein?
z.B. niedrige Latenz und geringe CPU-Last.

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Im DSP-Buch von Grüningen gibt es ein Kapitel über abstimmbare 
Digitalfilter
ISBN 9783905681420 ab Seite 61
Da wird teilweise mit einen einzigen Parameter abgestimmt
Das Buch wird alle paar Jahre bei einem anderen Verlag wieder neu 
herausgebracht, mit vielen Änderungen. Das Kapitel kenne ich nur aus der 
Auflage.
Beitrag "Re: Chorus Effekt"
im DAFX-Buch könnte auch was zum Thema stehen

: Bearbeitet durch User
von Dergute W. (derguteweka)


Angehängte Dateien:

Lesenswert?

Moin,

Ich glaub', es ist garnicht so schlimm, wenn man bei der Variation der 
Filterkoeffizienzen keinen zu grossen Humbug treibt.
Hoert sich zumindest in dem Dingens so an, wie ich mir's vorgestellt 
hab. Das ist ein Cauer 2.Ordnung mit 10dB Ripple, 40dB Sperrdaempfung, 
dessen Grenzfrequenz  linear variiert wird, waehrend es mit einem 
Rechteckpuls angeregt wird.
In dem Beispiel wird die Grenzfrequenz ueber einen Parameter zwischen 
0..1 eingestellt.
Hier wird das Filter tatsaechlich instabil, wenn ich damit nah' bei 0 
oder 1 bin. Das kommt aber daher, weil ich die Filterkoeffizienten nur 
durch Polynome 2. Ordnung approximiere; die liegen dann bei 0 und 1 am 
tuechtigsten "neben" den echten Werten - da ist die Instabilitaet dann 
auch kein Wunder.

Gruss
WK

von Wolfgang (Gast)


Lesenswert?

Adib schrieb:
> Habt Ihr da eventuell Hinweise, wie man solche Funktionalität
> implementiert?

Nimm ein MF10. Dann brauchst du nur die Taktfrequenz zu ändern.
http://www.ti.com/lit/an/snoa572c/snoa572c.pdf

von T.U.Darmstadt (Gast)


Lesenswert?

Tobias P. schrieb:
> Und was soll denn der Vorteil des IIR sein?
> Klar, man bräuchte weniger Taps, aber sämtliche Algorithmen für die
> Adaption der Filterkoeffizienten werden grausig kompliziert, sofern es
> überhaupt möglich ist.
Das muss natürlich vorher und in engen Grenzen geschehen.

> Hinzu kommt das oben erwähnte 'reseten' des
> Filters.
Das sollte kein Problem sein. Man könnte 2 Filter nehmen und 
alternierend verwenden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.