Welche Faktoren sollten bei der Auswahl einer IIR-Filterrealisierung berücksichtigt werden?

16

IIR-Filter können als direkte Form 1 oder 2 implementiert werden . Aber wie entscheidest du dich für ein Formular? Was sind die Vor- und Nachteile von jedem?

anasimtiaz
quelle
Darüber hinaus, was ist der beste Weg, um sie auf der GPU zu implementieren.
Royi
2
@Drazick, GPUs sind ein ganz anderes Spiel. eine andere Frage erfordern.
Trevor Boyd Smith

Antworten:

9

Zunächst ein wenig aus Wikipedia zur Implementierung von Direct Form I und II .

Direkte Form I erfordert mehr Speicher, ist jedoch eine etwas einfachere Strategie und es ist weniger wahrscheinlich, dass Rundungs- und Resonanzprobleme auftreten.

Die direkte Form II benötigt weniger Speicher, kann jedoch ungewöhnliche Interaktionen, größere Zahlen und mehr Rundungsfehler verursachen. Ein Großteil davon kann durch Kaskadierung kleinerer Filter, insbesondere von Filtern 2. Ordnung, reduziert werden.

PearsonArtPhoto
quelle
2
In beiden Fällen sollten Sie Abschnitte zweiter Ordnung kaskadieren.
Oliver Charlesworth
1
Kurz gesagt, ist es ein Kompromiss zwischen Speicher- und Rundungsfehlern?
Anasimtiaz
2
Super schwache Antwort IMO. Technisch beantwortet es die Frage ... aber nur "technisch". Ich würde gerne einen Quellcode in einer Sprache sehen. Ich weiß, wie man einen FIR-Filter implementiert, der einfach ist. Mal sehen, IIR-Quellcode.
Trevor Boyd Smith
2
Was ist in Bezug auf die pro Stichprobe durchgeführten mathematischen Operationen eine bessere Implementierung I oder II?
anasimtiaz
1
Ich weiß, wie man FIR-Filterung macht. Ich weiß auch, was die direkte Form I / II / III / IV ist. Was ich noch nicht erlebt habe, ist IIR: Design oder Implementierung. Mein ursprünglicher Kommentar war nicht sehr konstruktiv. Ich hätte sagen sollen: "Ich verstehe, was die direkte Form I-IV ist. Würden Sie bitte mehr darüber sprechen, wie Sie einen IIR-Filter entwerfen / implementieren?"
Trevor Boyd Smith
9

Ein wenig altmodisch, verdient aber möglicherweise eine umfassendere Antwort, zumal Direct Form II Sie in große Schwierigkeiten bringen kann. Erstens gibt es keine "Einheitsgröße" und die beste Wahl hängt von Ihrer spezifischen Anwendung und Ihren Einschränkungen ab. Was Sie berücksichtigen können, ist

  1. Speicher: Direkte Form II und transponierte Form II benötigen etwas weniger Zustandsspeicher als Direkte Form I und transponierte Form I, aber in einer kaskadierten Abschnittsimplementierung zweiter Ordnung ist der Unterschied gering
  2. MIPS: In Bezug auf die Anzahl der Multiplikationen und Additionen sind alle vier Implementierungen gleich. Abhängig vom Befehlssatz des jeweiligen Prozessors kann es jedoch erhebliche Unterschiede in der Implementierungseffizienz geben. Also "es kommt darauf an".
  3. Fixpunkt-Eigenschaften: Dies macht einen großen Unterschied. In erster Linie müssen Sie sicherstellen, dass Ihre Statusvariablen nicht überlaufen, damit Sie die Übertragungsfunktion zwischen Ein- / Ausgabe und Statusvariablen analysieren können. Hier sind Direct Form I und Transposed Form II die klaren Gewinner. Zustandsvariablen sind an +106 dB oder ungefähr an Eingabe und Ausgabe gebunden. In der direkten Form II zum Beispiel wird die Übertragungsfunktion vom Eingang zum Zustand nur durch die Pole gegeben. Ich habe Beispiele aus der Praxis gesehen, bei denen die Verstärkung tatsächlich 100 dB überschreiten kann. Dies ist ein absolutes No-Non für die Festkomma-Implementierung.
  4. Rauschen: In Bezug auf Kürzung und Abrundungsfehler sind alle Implementierungen ungefähr gleich. Das in 3) erwähnte Problem der Zustandsvariablen-Übertragungsfunktion wirkt sich auch in gewissem Umfang aus, und ich habe bei Direct Form II-Filtern auch bei Verwendung von 32-Bit-Gleitkommazahlen Probleme mit hörbarem Rauschen festgestellt.

Zusammenfassend ist die transponierte Form II also meistens die beste Wahl. In einigen Fixpunktszenarien ist Direct Form I besser, insbesondere wenn es erhebliche Rauschprobleme gibt, da es leichter mit Dingen wie Fehlerspektrumformung usw. ergänzt werden kann.

Hilmar
quelle
Dies ist eine viel umfassendere und bessere Antwort!
Lorem Ipsum
2
Ich habe heute viel schwieriger herausgefunden, warum Direct Form I eine bessere Wahl für meine Bewerbung ist. Danke für eine wirklich gute Antwort!
Anasimtiaz
1

Sofern Sie nicht mit einem sehr ressourcenarmen System arbeiten oder extreme Anforderungen haben, spielt es in der Praxis keine Rolle, ob Sie sich für die direkte Form I oder II entscheiden. Wenn Sie zum Beispiel Dinge auf einem PC oder einem Smartphone erledigen, spielt das keine Rolle. Persönlich bevorzuge ich Form I.

Das eigentliche Problem ist normalerweise MIPS. Wenn Sie vorhaben, eine Festkommaimplementierung durchzuführen, werden die Dinge komplizierter. Beispielsweise verbraucht Ihr IIR-Filter in ARM viel mehr MIPS, wenn sowohl Koeffizienten als auch Filterzustände 32-Bit sind. 32 Bit in Zuständen und Koeffizienten sind erforderlich, wenn Sie beispielsweise ein Tiefpassfilter mit sehr niedriger Grenzfrequenz implementieren müssen. In diesen Fällen können Sie einen anderen Filtertyp verwenden, z. B. einen zustandsvariablen Filter.

Niaren
quelle
1

Neben den technischen Unterschieden wie der numerischen Genauigkeit gibt es auch das Problem der Stabilität. Wenn digitale Filter nahe beieinander liegende Pol / Null-Paare aufweisen, kann der Frequenzgang an verschiedenen Stellen instabil werden (normalerweise nahe Nyquist oder nahe Null).

Wenn IIR-Filter für Musikanwendungen verwendet werden, kann die Wahl der Realisierung einen tiefgreifenden Einfluss auf die Filterstabilität haben, wenn Filterparameter in Echtzeit moduliert werden (z. B. durch Variieren der Grenzfrequenz bei einem Tiefpassfilter).

Ich habe eine Open-Source-Anwendung, mit der Sie die Unterschiede und zeitlich veränderlichen Parameter wie Grenzfrequenz oder Spitzenverstärkung der folgenden Realisierungen abhören können:

  • Direkte Form I
  • Direkte Form II
  • Transponierte Direktform I
  • Transponierte direkte Form II
  • Gitterform
  • Zustandsvariable

Das Projekt ist hier:

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

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

Bildschirmfoto

Vinnie Falco
quelle
1
Sie haben dies mehrmals gepostet, und ich bin geneigt, Spam-Richtlinien durchzusetzen, es sei denn, Ihre Antworten sind tatsächlich auf die Fragen zugeschnitten. Keiner dieser Posts beantwortet Fragen direkt und bewirbt auch ein Produkt. Bearbeiten Sie sie, um die Fragen direkt zu beantworten, oder sie werden entfernt.
Phonon
0

Zusätzlich zu den obigen Kommentaren zu Speicher, MIPS, Rauschen und Stabilität; Es gibt noch einen anderen Faktor, der häufig übersehen wird. Dieser Faktor ist die Rücksetzfähigkeit; was in den meisten meiner Situationen sehr wichtig ist.

Bei einer Direct Form II-Implementierung gibt es keine Zustände für die verzögerten Ausgaben. Wenn Sie daher einen Direct Form II-Filter auf "5" "zurücksetzen", ist die anfängliche Ausgabe nicht "5". Ich halte dies für ziemlich konträr - intuitiv, was bei der Verwendung von Simulink zu ernsthaften Frustrationen geführt hat. Aus diesem Grund verwende ich fast immer eine Direct Form I-Implementierung. Leider unterstützt Simulink Direct Form I nur, wenn Sie über die DSP-Toolbox verfügen, und selbst dann können Sie die Anfangsbedingungen eines Eingangssignals nicht festlegen.

Kyle
quelle