PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IIR Butterworth Filterkoeffizienten



pic32
27.05.2012, 15:28
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

pic32
27.05.2012, 18:11
Nach einiger Zeit suchen bin ich nun auf das Thema "Sinus Cosinus Generator" gestoßen. Allerdings habe ich leider keine gute Literatur bei der Hand und konnte auch im Netz nichts brauchbares finden.

Kann mir zu diesem Thema jemand weiterhelfen oder eine gute Literatur empfehlen?

Janvi
27.07.2012, 20:02
> Wäre super, wenn mir bei diesem Thema jemand etwas unter die Arme greifen könnte!

kann ich nicht, aber ich weis einen weiteren Fall wo extra ein PC angeflanscht wurde auf dem nur Matlab läuft weil das wder der uC noch ein FPGA halbwegs hinkriegt. In diesem Fall ist das eine Autokorrelation mit Fourier und Revers-Fourier wo sonst weder die Rechenzeit noch der Speicher auch nur annähernd reicht. Wie Matlab manche Dinge so rattenschnell über Matrizen gerechnet kriegt ist mir auch ein Rätsel.

Che Guevara
29.07.2012, 13:08
Hi,

ich weiß nicht, ob dir das weiterhilft, aber ich poste es trotzdem mal: http://www-users.cs.york.ac.uk/~fisher/mkfilter/
Auf der HP kannst du eingeben, welchen Filter du haben möchtest und welche Eigenschaften er haben soll.

Gruß
Chris

ikarus_177
17.08.2012, 09:39
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 23051 (mit 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
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