-         

Ergebnis 1 bis 5 von 5

Thema: IIR Butterworth Filterkoeffizienten

  1. #1

    IIR Butterworth Filterkoeffizienten

    Anzeige

    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

  2. #2
    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?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    15.02.2004
    Beiträge
    9
    > 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.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    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

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    24
    Beiträge
    601
    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 Klicke auf die Grafik für eine größere Ansicht

Name:	deda914f69eb813a7e2a539603499216.png
Hits:	5
Größe:	1,1 KB
ID:	23051 (mit Klicke auf die Grafik für eine größere Ansicht

Name:	44849618c2cdd77bfd42dca4c821d862.png
Hits:	16
Größe:	449 Bytes
ID:	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
    Klicke auf die Grafik für eine größere Ansicht

Name:	9c97d70c9615dfa744499f7150ec25bd.png
Hits:	6
Größe:	3,1 KB
ID:	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

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •