|
|
Verstärkungsfaktor eines digitalen Filters |
|
seackone |
Forum-Anfänger
|
|
Beiträge: 39
|
|
|
|
Anmeldedatum: 30.10.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.11.2015, 10:34
Titel: Verstärkungsfaktor eines digitalen Filters
|
|
|
|
|
Guten Morgen!
Und schon wieder habe ich ein kleines Verständnis-Problem im Bezug auf digitale Filter.
Ich würde erstmal etwas zur Aufgabenstellung schreiben, meinen Lösungsansatz darlegen und anschließend mein Problem erläutern.
Es soll ein analoges Butterworth-Tiefpassfilter (mit gegebenen Parametern wie Grenzfrequenz und Ordnung) mit Hilfe zweier Transformationsforschriften in ein digitales IIR-Filter überführt werden.
Das war nicht so schwer, hierfür habe ich ich die Funktion "butter" verwendet, welche mir nach Eingabe der Parameter Null -und Polstellen sowie den Verstärkungsfaktor zurück gibt. Erstelle ich daraus die Übertragungsfunktion und plotte das Ergebnis, entspricht der Filter den Vorgaben.
Es soll die Trapezregel sowie die Euler-Vorwärts-Regel verwendet werden, um den analogen Tiefpass mit unterschiedlichen Abtastfrequenzen in ein digitales Tiefpass-Filter zu Transformieren. Für die Euler-Vorwärts-Regel soll eine eigene Funktion geschrieben werden.
Im Prinzip soll hier nur das Filter aus der s-Ebene in die z-Ebene, mit unterschiedlichen Transformationsvorschriften transformiert werden. Für die Trapez-Regel lautet diese:
s = 2*ft*(z-1)/(z+1)
Hierbei ist ft die jeweilige gegeben Abtastfrequenz in Hertz. Die Funktion "bilinear" verwendet genau diese Transformationsvorschrift, um ein analoges Filter in ein Digitales zu überführen. Somit ist dieser Teil der Aufgabe ebenfalls kein Problem. Jetzt aber zur Euler-Vorwärts-Regel (hab den Begriff zuvor noch nicht gehört, vielleicht gibts da auch einen anderen Namen? Ich hab sowas mal als: "Annäherung eines Integrals mit Ober -und Untersummen" kennengelernt) . Die Transformationsvorschrift lautet:
s = ft*(z-1)
Mein Ansatz war die Null -und Polstellen sowie den Verstärkungsfaktor [z,p,k] aus dem analogen Filter in meine Funktion zu übernehmen. Dazu kommt noch die jeweilige Abtastfrequenz [ft]. Damit ich die Transformationsvorschrift anwenden kann, habe ich diese zunächst nach z umgestellt und erhalte somit die neuen Null -und Polstellen mit der jeweiligen Abtastfrequenz:
zd = (s-ft)/ft = (z-ft)/ft
pd = (s-ft)/ft = (p-ft)/ft
zd = Nullstellen des digitalen Filters
pd = Polstellen des digitalen Filters
s = Nullstellen des analogen Filters
p= Polstellen des analogen Filters
ft = Abtastfrequenz in Hertz
Ich subtrahiere also die jeweilige Nullstelle mit der Abtastfrequenz und dividiere die Differenz ebenfalls mit der Abtastfrequenz. Das Gleiche gilt für alle Polstellen. Wie ich daraus die Übertragungsfunktion erzeugen kann, weis ich ebenfalls. Allerdings muss (wie auch bei der Trapez-Regel) das anschließend erzeugte Nullstellenpolynom mit dem Verstärkungsfaktor multipliziert werden. Und genau hier liegt mein Verstädnis-Problem. Ich weis nicht genau wie ich ihn berechnen kann!
Bei der analogen Butterworth-Approximation "buttap" findet man in der Hilfe den Algorithmus zum Verstärkungsfaktor:
k = real(prod(-p))
Dabei sind p die Polstellen des analogen Filters. Damit komme ich hier natürlich nicht weiter, da ich eine Transformation von der s in die z Ebene vornehmen möchte. Also habe ich mir den Algorithmus von "bilinear" mal angeschaut, in der Hoffnung ich würde daraus etwas schlauer werden:
kd = real(k*prod(fs-z)./prod(fs-p))
kd = Verstärkungsfaktor des digitalen Filters
k = Verstärkungsfaktor des analogen filters
fs = Abtastfrequenz in Hertz
z = Nullstellen des analogen Filters
p = Nullstellen des digitalen Filters
Natürlich kann ich das nicht auf die Euler-vorwärts-Regel anwenden. Mein Problem besteht generell darin, dass ich nicht wirklich weis, was der Verstärkungsfaktor überhaupt ist. Lasse ich ihn bei der Berechnung der Übertragungsfunktion einfach weg, ist die gesamte Übertragungskennlinie gedämpft. Von daher macht der Verstärkungsfaktor seinem Namen wohl alle Ehre um eine 0dB Referenz zu erhalten. Dazu steht leider in meinem gesamten Signalverarbeitungs-Skript nichts und auch nach einigen Recherchen bin ich nicht wirklich schlauer. Weiterhin bleibt das Problem bestehen, wie ich den Verstärkungsfaktor bei der Euler-vorwärts-Regel berechne. Die Lösung dazu wäre übrigens:
kd = k*ft^(length(z)-length(p))
kd = Verstärkungsfaktor des digitalen Filters
k = Verstärkungsfaktor des analogen Filters
ft = Abtastfrequenz in Hertz
z = Nullstellen des analogen Filters
p = Polstellen des analogen Filters
Jetzt wäre nett, wenn mir jemand erklären könnte, wie ich darauf komme
Vielen Dank und viele Grüße
seackone
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|