Gibt es Standard-Implementierungsformen für abstimmbare Butterworth-Filter?


17

Eine der Standardmethoden zur Implementierung eines Butterworth-Filters besteht in einer Kaskade von Abschnitten zweiter Ordnung, die jeweils einem Paar komplex-konjugierter Pole entsprechen. Für ein Filter vierter Ordnung gäbe es beispielsweise zwei Abschnitte zweiter Ordnung. Wenn wir uns überlegen, wie sich die Polpositionen für ein Tiefpassfilter in der z-Ebene ändern, wenn der Cutoff für nahe 0 Hz bis nahe Nyquist ausgelegt ist, entspricht der von jedem Polpaar "überstrichene" Pfad einem Bogenpaar innerhalb des Einheitskreises , wie in der folgenden Abbildung dargestellt [für Filter vierter Ordnung]:

Polpositionen in der Z-Ebene für Butterworth-Tiefpassfilter vierter Ordnung

Wenn man bedenkt, wie lange diese Filter schon existieren und wenn man bedenkt, dass diese "Bögen" Geraden in der S-Ebene entsprechen, liegt es nahe, dass jemand eine Implementierungsform mit einem einzigen Parameter entwickelt hätte, der die Pole überstreichen kann entlang der Bögen zur "Laufzeit" [im Gegensatz zur "Entwurfszeit"]. Allerdings bin ich noch nicht auf so etwas gestoßen.

Es ist relativ unkompliziert, verschiedene Methoden zu finden, insbesondere innerhalb von Segmenten des Bereichs, und bereit zu sein, ein wenig zusätzliche Berechnungen anzustellen. Was ich mich wundere, ist das folgende:

Gibt es eine Standardmethode für die Implementierung eines abstimmbaren [digitalen] Butterworth-Filters einer bestimmten Reihenfolge, die 1) optimale Eigenschaften (z. B. Effizienz, Robustheit) aufweist und 2) den gesamten Bereich abdeckt?

Oder ist das wirklich nur ein so einfaches Problem, dass sich niemand die Mühe macht, darüber zu reden? Wenn dies der Fall ist, wird es anscheinend in Filterentwurfsprogrammen neben den Optionen für "statische" Entwürfe angezeigt.

Ich habe folgendes gefunden: Ein Mehrzweck-Butterworth-Filter mit variabler Grenzfrequenz , aber auf den ersten Blick scheint es nicht viele Informationen darüber zu geben, was darin enthalten ist.

Update (re: answers)

Um es etwas klarer zu machen:

  • Ich suche ein "Meta-Design" mit einem Parameter (sagen wir ab [0,1]), der den Cutoff von DC zu Nyquist automatisch anpasst (während die Verstärkung normalisiert bleibt), um es in einem zeitvariablen System zu verwenden. So etwas wie dieser zweipolige Resonator , außer mit Einschränkungen von Butterworth. Die Idee ist, dass die Berechnung des Parameters effizienter ist als die Ausführung des typischen Offline-Entwurfs zur Laufzeit.
  • Ich bin nicht unbedingt selbst suchen , wie ein „Meta-Filter“ zu entwerfen (dh die Mathematik mit Variablen anstelle von Zahlen), ich frage mich , ob es Möglichkeiten für Standard [nicht offensichtlich] Umsetzung Formen - denn, Angenommen, der einfache Ansatz, der dem statischen Fall entspricht, führt im zeitvariablen Fall zu numerischen Problemen.
  • Vielleicht gibt es keine Probleme, und der einfache Ansatz wird in der Praxis verwendet. Das wäre toll. Ich mache mir Sorgen, dass ich dieses Thema in keiner der Quellen, die ich konsultiert habe, explizit erwähnt habe, aber vielleicht habe ich etwas wirklich Offensichtliches verpasst, also frage ich.
  • Während ich hier weitere Details hinzufügte, stieß ich auf eine allgemeine Behandlung von parametrischen Biquad-Strukturen, die fast das ist, wonach ich suche (und einige nette Referenzen hat).

Update 2

Ich suche nach Antworten, wie ich sie Jason R in meinem zweiten Kommentar gegeben habe:

"Oh ja, Sie möchten die Parametrisierung III-2b aus der so-and-so-These in Form eines abgegriffenen Zustandsgitters verwenden, weil sie den einen oder anderen Kantenfall auflöst, während Sie die minimale Anzahl von Multiplikationen verwenden."

Vielleicht gibt es so etwas nicht, aber meine Frage ist, ob es das tut und wenn ja, was ist es oder wo kann ich es finden?

Jackpot

Auf der Grundlage eines Verweises auf die "beobachterkanonische Form", den Tim Wescott in der Antwort von Jason R im Thread comp.dsp gegeben hatte , nahm ich an, dass ich möglicherweise anfangen musste, in der Literatur zu Steuerungssystemen herumzustöbern , und versuchte, zu suchen butterworth "state space" , und es ergab sich die folgende, sehr coole Behandlung des Entwerfens / Implementierens, nicht nur parametrischer Butterworth, sondern auch Chebyshev- und Elliptic-Filter:

Sophocles J. Orfanidis, "High-Order Digital Parametric Equalizer Design", J. Audio Eng. Soc., Vol. 53, S. 1026-1046, November 2005.

Es wird eine Weile dauern, bis ich mich damit befasst habe, aber nach dem, was ich bisher gelesen habe, wäre ich sehr überrascht, wenn es nicht das ist, wonach ich suche. Ich gebe Jason R dieses Dokument als Referenz für die comp.dsp, die mich zum Orfanidis-Artikel geführt hat. Seine Antwort ist auch eine schöne praktische Übersicht über die Gestaltung von Butterworth-Filtern.

Antworten:


10

Ich bin mir nicht sicher, wonach Sie suchen. Wie Sie in Ihrer Frage festgestellt haben, sind die Übertragungsfunktionen der Butterworth-Filterfamilie gut verständlich und lassen sich leicht analytisch berechnen. Es ist ziemlich einfach, eine Butterworth-Filterstruktur zu implementieren, die nach Filterreihenfolge und Grenzfrequenz abstimmbar ist:

  1. Berechnen Sie anhand der ausgewählten Filterreihenfolge, Grenzfrequenz und Abtastrate die Polpositionen für den analogen Butterworth-Prototypfilter. Da Butterworth-Filter keine Nullen haben, wird die Übertragungsfunktion durch die Polpositionen (und die DC-Verstärkung) bestimmt.

  2. Ordnen Sie mithilfe der bilinearen Transformation die Polpositionen des analogen Prototyps den entsprechenden Positionen in Ihrer digitalen Realisierung des Filters zu.

  3. Das digitale Filter wird wiederum durch die in Schritt 2 angegebenen Polpositionen definiert. Brechen Sie das Filter in Abschnitte zweiter Ordnung, indem Sie die Pole paarweise gruppieren.

Das ist es. Wie ich bereits sagte, ist es unkompliziert, einen Butterworth-Filter mit beliebigen Parametern programmgesteuert zu entwerfen. Keiner der Vorgänge ist schrecklich kompliziert zu implementieren.

Edit: Ich bin nicht sicher, welches Endergebnis Sie suchen. Ich denke, Sie interessieren sich stattdessen am meisten für die Implementierung von IIR-Filtern mit zeitvariablen Koeffizienten, die nicht unbedingt für ein Butterworth-Filter spezifisch sind. Ich gehe davon aus, dass Ihr Ziel darin besteht, Artefakte beim Ändern der Filtergrenzfrequenz zu minimieren. Dies wurde in einer Diskussion in der comp.dsp-Newsgroup Anfang dieses Jahres behandelt. Ich bin mir zwar nicht sicher, welchen Anwendungsfall oder welche Anforderungen Sie für diese Filterstruktur haben, aber es gibt eine Reihe von Möglichkeiten, um den Wechsel durchzuführen.

Ich weiß, dass Sie gesagt haben, Sie möchten, dass Ihr Filter einen einzelnen Parameter hat, der die Grenzfrequenz definiert, aber die Tatsache bleibt, dass Ihre einstellbare Struktur eine Möglichkeit haben muss, die Grenzfrequenz in die erforderlichen Koeffizienten umzusetzen (oder im Fall von Butterworth nur die Polstellen). Der oben beschriebene Prozess ist zum Erzeugen der Polstellen auf der Grundlage der gewünschten normalisierten Abtastrate geeignet.

Sie könnten möglicherweise den Prozess der Polortberechnung vereinfachen, indem Sie die Geometrie der Polorte des Digitalfilters in der Z-Ebene analysieren. Das analoge Butterworth-Filter hat Pole, die in der linken Hälfte der S-Ebene halbkreisförmig liegen. Die bilineare Transformation ordnet diesen Halbkreis dem elliptisch aussehenden Muster zu, das Sie in Ihrer Fragenbeschreibung dargestellt haben. Wenn Sie dieses bekannte Muster für die Pole des analogen Butterworth-Filters, die Zuordnungsfunktion der bilinearen Transformation und einige Algebra verwenden, können Sie möglicherweise einen relativ einfachen Ausdruck für die Polpositionen des digitalen Filters finden, wodurch Sie einen direkteren Filter erhalten Tuning-Aktion.


Jason, ich suche nicht nach einer bestimmten Butterworth-Spezifikation, sondern nach einem "Meta-Design". Ich werde die Frage mit ein wenig mehr Details aktualisieren.
Datageist

1
Betreff: Bearbeiten. Der Prozess, den Sie im letzten Absatz beschrieben haben, ist genau so, wie ich ihn angehen würde - ich frage mich nur, ob dies tatsächlich irgendwo behandelt wurde. Mit anderen Worten, Dinge wie: "Oh ja, Sie möchten die Parametrisierung III-2b aus der Thesis von so und so in Form eines abgegriffenen Zustandsgitters verwenden, weil sie den einen oder anderen Kantenfall auflöst, während die minimale Anzahl von Multiplikationen verwendet wird. "
Datageist

1
Kleiner wählerischer Kommentar: In der Z-Ebene hat der BW-Filter tatsächlich Nullen. Für Tiefpassfilter sind sie alle bei -1 und für Hochpassfilter sind sie bei +1.
Hilmar

@Hilmar: Guter Punkt. Die Nullen, von denen Sie sprechen, entsprechen den Nullen, die in der Ebene als auftreten (für Tiefpassfilter; als für Hochpass). s s 0s±ss0
Jason R

2

Ja, es gibt Standard-Implementierungsformulare für Butterworth und fast jede andere Filterantwort. Sie sind alle vollständig in meiner Open-Source-IIR-Filterbibliothek implementiert. Hier ist ein Codeausschnitt, der die Pol / Null-Paare für einen Butterworth-Filter beliebigen Grades erzeugt:

void AnalogLowPass::design (int numPoles)
{
  if (m_numPoles != numPoles)
  {
    m_numPoles = numPoles;

    reset ();

    const double n2 = 2 * numPoles;
    const int pairs = numPoles / 2;
    for (int i = 0; i < pairs; ++i)
    {
      complex_t c = std::polar (1., doublePi_2 + (2 * i + 1) * doublePi / n2);
      addPoleZeroConjugatePairs (c, infinity());
    }

    if (numPoles & 1)
      add (-1, infinity());
  }
}

Wie Sie sehen können, wird die Position der Pole berechnet, indem die S-Ebene in "Paare" gleicher Segmente unterteilt wird.

Für alle gängigen Arten von Filterantworten wird ein geeigneter Code bereitgestellt: Chebyshev, Elliptic, Legendre, einschließlich der jeweiligen Regalversionen.

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

Bildschirmfoto


Die DSPFilters-Bibliothek adressiert direkt den in der ursprünglichen Frage angesprochenen Anwendungsfall und verwendet eine parametrisierte Gleichung, um Pol / Null-Paare eines Digitalfilters zur Laufzeit zu berechnen. Ich werde die Antwort dahingehend ändern, dass sie auch ein Quellcode-Snippet enthält.
Vinnie Falco
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.