Hallo, ich habe einen Kerbfilter mit der Übertragungsfunktion H(s)=1/(1+s/(1+s^2)). Ich ersetze das s durch w/wc (wc = cutoff-Frequenz) und führe eine bilineare Transformation durch : (w=j(1-z)/(1+z)) Mit dem resultierenden Quotient mache ich einen Koeffizientenvergleich, um die a und b des zugehörigen Biquads zu bestimmen. Der Zähler lautet : (wc^2-1)+(2wc^2+2)z+(wc^2-1)z^2 Der Nenner lautet : (wc^2-1+jwc)+(2wc^2+2)z+(wc^2-1-jwc)z^2 Als letztes teile ich sämtliche Koeffizienten durch (wc^2-1-jwc). Ich habe die Formeln in ein Programm umgesetzt und mir die Spektralfrequenzanzeige in Adobe Audition angesehen. Leider ist das Ergebnis kein Kerbfilter. Weiß einer von Euch, wo mein Denkfehler liegt? Gruß Kai
"Spektralfrequenzanzeige in Adobe Audition" ist nicht unbedingt das, was ich als Messintrument heranziehen würde.
Hm, weiss nicht. Die ist eigentlich sehr zuverlässig. Womit würdest Du es denn machen? Gruß Kai
Okay, habe es hinbekommen :-) Nach dem Ersetzen von s durch (w/wc)^n musste ich die Nullstellen von 1 + (1-µ)(w/wc)^n + (w/wc)^2n bestimmen und die erste Hälfte faktorisieren. Nach paarweisem Zusammenfassen erhielt ich die gesuchten Koeffizienten für das jeweilige Biquad. Die Biquads konnte ich dann problemlos kaskadieren. Einer von zwei Fehlern war, dass ich in den sinus und cosinus-Termen pi * j / n eingesetzt habe, wo eigentlich 2.0 * pi * j / n hingehörte. Das rührte daher, dass ich s durch (w/wc)^2n statt durch (w/wc)^n ersetzte. Für den anderen Fehler habe ich noch keine Ursache gefunden. Nämlich, dass ich nicht einfach die bilineare Transformation anwenden kann.
Kai123 schrieb: > Okay, > habe es hinbekommen :-) >> > Für den anderen Fehler habe ich noch keine > Ursache gefunden. Nämlich, dass ich nicht > einfach die bilineare Transformation > anwenden kann. Vielleicht weil die bilineare Transformation zwischen einem Filter in Laplace-Transformation und Z-Transformation eine Taylor-Näherung verwendet mit einem Entwicklungspunkt bei der Frequenz Null. Ich habe jetzt kein Lehrbuch zur Hand, aber bei der bilinearen Transformation wird s = ln (z) (oder ähnlich) Durch eine Taylor-Reihenentwicklung genähert.
Taylor kenne ich aus Analysis I. Aber ich verstehe nicht, wie die Näherung mir hierbei helfen kann. Laplace und Z- Transfomierte kenne ich nur vom Namen. Ich bin Neuling auf diesem Gebiet und programmiere erst seit zwei Wochen Filter in C++. Mein Denkfehler tritt nicht nur bei dem Kerbfilter auf, sondern auch bei einfacheren Filtertypen. Ich würde gerne Schritt für Schritt verstehen und sehen, wo genau die falsche Umformung liegt. Ich beginne mal mit einem einfachen Butterworth-Tiefpass : 1. H(s) = 1 / (1 + s^2) f := s 2. z = exp(2*pi*j*f) <=> ln(z) = 2*pi*j*f <=> f = 1/(2*pi*j)*ln(z) @MJF : ist es das, was Du meintest mit "s = ln (z) (oder ähnlich)"? 3. Ausführen des pre-warp : w = tan(pi*f) = tan(-j/2*ln(z)) = sin(-j/2*ln(z)) / cos(-j/2*ln(z)) = j * sinh(-1/2*ln(z)) / cosh(-1/2*ln(z)) = j * [1 / 2 * exp(-1/2*ln(z)) - exp(1/2*ln(z))] / [1 / 2 * exp(-1/2*ln(z)) + exp(1/2*ln(z))] = j * [z^(-1/2) - z^(1/2)] / [z^(-1/2) + z^(1/2)] = j * [1 - z] / [1 + z] 4. Somit ist w = j * [1 - z] / [1 + z] und 5. 1 / (1 + (w / wc)^2) = (1+z)^2*wc^2 / [(wc^2-1)*z^2 + 2(wc^2+1)z + wc^2-1] Das Ergebnis ist schon irgendwie ein Tiefpass, aber mit starker Resonanz in der Eckfrequenz wie sie bei Butterworth nicht auftreten sollte.
Ich denke, ich habe es. Bei Butterworth (und anderen rekursiven Filtern) lautet die Definition der Transfer-Funktion nicht H(s) = 1 / (1 + s^2) (oder vergleichbar), sondern H(s)*H(-s) = 1 / (1 + s^2), also ist sie definiert als das Produkt einer zu findenden Funktion mit ihrer komplex konjugierten. Nun hat 1 + s^2 zwei Nullstellen (j und -j), von denen nur die erste interessiert. Nun setze ich w = j * (1-z) / (1+z) in (w/wc - j) ein, kehre den Bruch um und bekomme (1+z)*wc / (-1 + wc + (1 + wc)z) (unter Vernachlässigung von j). An dieser Stelle mache ich wieder einen Koeffizientenvergleich und erhalte ein Biquad erster Ordnung. Es ist genau das gesuchte Biquad zu der Transfer-Funktion :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.