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.
--
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.
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.
--
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.
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 ;-)
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
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
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.