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?
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?
Antworten:
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.
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
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.
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.
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:
Das Projekt ist hier:
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.