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, istm a x ( 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 butter
Funktion ist nicht angegeben, wie die diskrete Annäherung an den analogen Butterworth-Filterprototyp generiert wird . Wenn butter.m
Sie 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.