Wie geht MATLAB mit IIR-Filtern um?


8

MATLAB hat eine butter, die einen Butterworth-Filter bei gegebener Reihenfolge und relativer Grenzfrequenz erstellt. Der erstellte Filter kann für filterjedes endliche Signal verwendet werden.

Wie macht MATLAB das, wenn der Filter eine unendliche Impulsantwort hat? Ich nehme an, es muss das Signal fenstern - wird dies durch ein einfaches rechteckiges Fenster gemacht, damit alle bekannten Werte verwendet werden?

Wie wird der kontinuierliche Filter diskretisiert? Bilineare Transformation, Impulsantwortanpassung usw.?

Ich glaube nicht, dass der MATLAB-Hilfetext dies erklärt:

Y = FILTER(B,A,X)filtert die Daten im Vektor Xmit dem durch Vektoren beschriebenen Filter Aund Berstellt die gefilterten Daten Y. Der Filter ist eine "Direct Form II Transposed" -Implementierung der Standarddifferenzgleichung:

a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)
                      - a(2)*y(n-1) - ... - a(na+1)*y(n-na)

Antworten:


8

Dies ist kein MATLAB-spezifisches Problem. Ich sehe ein paar allgemeinere Fragen:

Wie implementieren Sie einen digitalen IIR-Filter?

Sie können jedes allgemeine digitale Filter anwenden, indem Sie seine Impulsantwort mit dem Signal falten , das Sie filtern möchten. Das sieht aus wie:

y[n]]=k=0N.- -1x[k]]h[n- -k]]

Dies funktioniert hervorragend für FIR- Filter, aber bei IIR- Systemen treten Komplikationen auf, da deren Impulsantworten unendlich lang sind (N.in der obigen Summe). Dies macht es schwierig, die Filterausgabe unter Verwendung der obigen einfachen Faltungssumme zu berechnen. Um einen IIR-Filter tatsächlich zu implementieren, benötigen wir eine Möglichkeit, die Filterausgabe auf eine Weise auszudrücken, die rechnerisch besser nachvollziehbar ist.

Das Attribut eines IIR-Filters, das seine Impulsantwort unendlich lang macht, ist die rekursive Natur des Systems . Es gibt eine Rückmeldung vom Ausgang zurück zum Filtereingang. Dies bedeutet, dass die Ausgabe eines IIR-Filters zu einem bestimmten Zeitpunkt von zwei separaten Informationsquellen abhängen kann:

  • Das Eingangssignal zum Filter, Vergangenheit und Gegenwart, und

  • Vergangene Werte des Filterausgangssignals.

Dies führt zur Differenzgleichungsdarstellung des IIR-Systems:

ein0y[n]]=k=1M.- -1einky[n- -k]]+k=0N.- -1bkx[n- -k]]

Diese Darstellung zeigt, dass wir einen IIR-Filter implementieren können, indem wir eine gewichtete Summe von berechnen M. vergangene Ausgänge des Filters und N. vergangene Eingaben des Filters (in der Praxis, N. und M.könnte und ist oft gleich; Die Reihenfolge des Filters, wenn wie oben definiert, istmeinx(M.,N.)- -1). Dies ist ein geschlossener Ausdruck, der das Verhalten des Filters vollständig erfasst und für die automatisierte Implementierung geeignet ist. Dies ist die Gleichung, auf die im MATLAB-Hilfeauszug verwiesen wird, den Sie in Ihrer Frage gezeigt haben. Beachten Sie, dassein0 wird fast ausschließlich als gleich angenommen 1;; Ich habe es nur aufgenommen, weil es im zitierten Hilfetext angezeigt wird, auf den verwiesen wird a(1).

Um Ihre Frage speziell zu beantworten, implementiert MATLAB IIR-Systeme unter Verwendung der obigen Gleichung. Wenn Sie einen IIR-Filter mit MATLAB oder auf andere Weise entwerfen, erhalten Sie zwei Koeffizientensätze (eink und bkin der Differenzgleichung), die definiert, wie vergangene Filterein- und -ausgänge in der Filterimplementierung gewichtet werden. Es gibt einige andere Feinheiten, die manchmal relevant sind; Beispielsweise bezieht sich der Text auf die Verwendung einer "direkt in Form II transponierten" Realisierung des Filters. Anschließend wenden Sie den Filter an, indem Sie die obige Differenzgleichung für jede gewünschte Ausgangsstichprobe berechnen.

Tatsächlich gibt es eine Reihe von Topologien , mit denen digitale Filter mit jeweils eigenen Kompromissen implementiert werden können. DF2T wird häufig wegen seiner effizienteren Struktur (es enthält eine minimale Anzahl von Verzögerungselementen) und seiner verbesserten Robustheit gegenüber Rundungsfehlern (seit den Vorwärtskopplungskoeffizienten) verwendetbk werden zuerst implementiert).

Wie gestaltet MATLAB Butterworth-Filter?

In der Dokumentation für die butterFunktion ist nicht angegeben, wie die diskrete Annäherung an den analogen Butterworth-Filterprototyp generiert wird . Wenn butter.mSie jedoch hineinschauen , finden Sie:

% step 5: Use Bilinear transformation to find discrete equivalent:
if ~analog,
    [a,b,c,d] = bilinear(a,b,c,d,fs);
end

Es scheint also, dass es die bilineare Transformation verwendet , um den Butterworth-Filterprototyp auf eine digitale Filterrealisierung abzubilden.


2

Die Filterfunktion von MATLAB implementiert einfach die Differenzgleichung für einen transformierten Filter der direkten Form II. Es gibt keinen Grund, den Filter zu digitalisieren, da er in erster Linie im diskreten Raum entworfen wurde. Der Ausgang von filter () hat die gleiche Länge wie der Eingang. Das ist technisch "falsch", da es den Teil des Filters abschneidet, der diese Länge verlängern würde. Wenn Sie Zugriff auf den Schwanz erhalten haben, können Sie Ihrem Eingangssignal eine anständige Anzahl von Nullen hinzufügen. Da es sich um eine "unendliche" Antwort handelt, können Sie dies nicht perfekt tun, aber in der Praxis ist es in den meisten Anwendungen nicht sehr schwierig.

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.