IIR Butterworth Filterkoeffizienten
Hallo,
Bin gerade bei einem aktuellen Projekt dabei, die Filterfunktionen von Matlab nachzubilden. Verwende dazu C#. Der Grund warum ich diesem Forum schreibe:
Ich suche nach einem Algorithmus, um die Filterfoeffizienten eines IIR Butterworth Filters zu berechnen - das ganze sollt sich aber recht einfach programmieren lassen. Bis jetzt habe ich die Koeffizienten immer von Matlab berechnen lassen ( [b, a] = butter (n,fg,'low')). Nun möchte ich aber auch die Koeffizienten selber berechnen - am besten für einen Tiefpass (später sollen auch HP, BP sowie BS folgen).
Dazu habe ich mich mal in das Thema der bilinearen Transformation eingelesen - das scheint mir aber nicht gerade der einfachste Weg um an die Koeffizienten zu kommen.
So weit ich weiß, gibt es auch eine Möglichkeit, das Pol- Nullstellendiagramm der Übertragungsfunktion als Polynom zu approximieren?! Ist das richtig? Wenn ja, wie müsste dieses Polynom aussehen, wenn ich die Ordnung des Filters variabel gestalten möchte?
Wäre super, wenn mir bei diesem Thema jemand etwas unter die Arme greifen könnte!
Besten Dank
Stefan
Liste der Anhänge anzeigen (Anzahl: 3)
Servus pic32,
weiß nicht, ob noch Bedarf besteht - ich poste trotzdem mal einfach einen möglichen Lösungsweg (vielleicht ists auch für andere aktuelle / zukünftige Projekte interessant).
Bei FIR-Filtern ist die numerische Berechnung sehr einfach: eine inverse FFT der gewünschten Übertragungsfunktion führt auf die Koeffizienten (= Impulsantwort des Filters).
Für IIR-Filter habe ich keine numerische Berechnung parat (ich nehme an, du willst verschiedene Filterparameter ändern und die neuen Koeffizienten bekommen), dafür aber eine symbolische (erfordert zuvor aber einigen Rechenaufwand "per Hand"):
Du nimmst die s-Übertragungsfunktion des Filters, für Butterworth einer bestimmen Ordnung also sowas ähnliches wie Anhang 23051 (mit Anhang 23052). Dann transformierst du diese Funktion in den z-Bereich (mit der Z-Transformation). Hier geht das ganz einfach, du brauchst nur alle 's' (die in der Wikipedia-Formel 'p' heißen) durch die sog. Tustin-Approximation 2/T*(z-1)/(z+1) ersetzt.
Dann müsstest du nur mehr die entstandene Formel auf die Form
Anhang 23053 bringen und könntest per Koeffizientenvergleich Beziehungen für die einzelnen Filterkoeffizienten ableiten, die du dann im Programm einbauen kannst.
Zugegeben - eine etwas schwerfällige Methode (vor allem wenn man den Filtertyp nachträglich ändert), sollte aber funktionieren (oder?)...
Schöne Grüße