Forum: Analoge Elektronik und Schaltungstechnik Übertragungsfunktion aktives Filter


von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe angehangenes Filter (1kHz) simulatorisch "gebastelt". Leider 
kann ich die Ü-Fkt zur mathematischen Ermittlung der Grenzfrequenz nicht 
aufstellen. Kann mir jemand Denkanstöße liefern? Meine Uni-Zeit liegt 
echt schon lang zurück. Ich bekomms leider nicht mehr hin.

Gruß
Steffen

von Helmut S. (helmuts)


Lesenswert?

Aus dem Buch "Aktive Filter", Herpy, Berka

Formel angepasst für Verstärkung 1

F(jw) = 1/(1 +jw*(R1*C1+(R1+R2+R3)*C3) +(jw)^2*(R1*(R2+R3)*C1*C3 + 
R3*(R1+R2)*C2*C3) + (jw)^3*R1*R2*R3*C1*C2*C3)

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Helmut,

danke dir erstmal. Kannst du mir noch weiterhelfen, wie ich daraus die 
Grenzfrequenz bestimme. Ich habe mittlerweile auch die Ü-Fkt 
aufgestellt. Sieht etwas anders aus als deine.

Gruß
Steffen

von Helmut S. (helmuts)


Lesenswert?

Die Grenzfrequenz ergibt sich, wenn man den Betrag der 
Übertagungsfunktion nimmt und diese gleich 1/sqrt(2) setzt. Dann das 
Ganze nach w(omega) bzw f auflösen. Diese Berechnung erfodert das Lösen 
einer Gleichung 3. Grades.

Normalwerweise geht man aber anders vor. Man überlegt sich ob man 
Bessel- oder Butterworth-Funktion haben will und die gewünschte 
Grenzfrequenz. Dann gibt man am besten C1, C2 und C3 vor und berechnet 
die Widerstände. Diese Berechnung erfordert das Lösen eines 
nichtlinearen Gleichungssystems (Matlab). Da man die so berechneten 
Widerstände nicht exakt mit den Werten kaufen kann oder will, simuliert 
man dann mit den gewählten Widerständen mit LTspice um die Abweichung im 
Frequenzgang zu überprüfen.
In der Literatur findet man auch geschlossene Lösungen(Formeln) bei 
denen durch Vorgabe gleicher Widerstände die Kapazitäten berechnet 
werden. Allerdings muss man dann eventuell "krumme" Kapazitätswerte in 
Kauf nehmen.

: Bearbeitet durch User
von Steffen (Gast)


Lesenswert?

Hallo Helmut,

die Widerstände und Cs habe ich ja sozusagen simulatorisch bereits 
festgelegt. Was ich nun brauche ist eigentlich nur noch eine Funktion, 
mit der ich für jede Amplitude+Frequenz der Eingangsspannung die 
Ausgangsspannung berechnen kann.

Geht das dann einfacher?

Gruß
Steffen

von Helmut S. (helmuts)


Lesenswert?

F(jw) = 1/(1 +jw*(R1*C1+(R1+R2+R3)*C3) +(jw)^2*(R1*(R2+R3)*C1*C3 +
R3*(R1+R2)*C2*C3) + (jw)^3*R1*R2*R3*C1*C2*C3)


|F(w)| = 1/sqrt(Realteil^2+Imaginärteil^2)


|F(w)| = 1/sqrt( (1-w^2*(R1*(R2+R3)*C1*C3 +
R3*(R1+R2)*C2*C3))^2 + (w*(R1*C1+(R1+R2+R3)*C3)-w^3*R1*R2*R3*C1*C2*C3)^2 
)

w = 2*pi*f



Das muss man wissen um obige Formel für den Betrag zu erstellen.

(jw)^2 = -w^2

(jw)^3 = -j*w^3

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Lesenswert?

Im Anhang findest du die Formel für die Grenzfrequenz in Python-Syntax.
Mit deinen Werten für die Widerstände und Kondensatoren ist

  fg = 915,2637 Hz

Das meint auch LTspice, wenn man einen nahezu idealen Opamp nimmt oder
ihn durch eine E-Quelle mit Verstärkung 1 ersetzt.

von Helmut S. (helmuts)


Lesenswert?

> Im Anhang findest du die Formel für die Grenzfrequenz in Python-Syntax.

Mit welchem Programm(Maple, Maxima,...) wurde diese Formel für die 
Grenzfrequenz erstellt?

: Bearbeitet durch User
von Steffen (Gast)


Lesenswert?

Hallo Yalu,

die Formel ist ja mächtig. Kannst du es kurz erklären (ein bisschen 
Syntax). Ich verstehe python leider nicht.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Helmut S. schrieb:
> Mit welchem Programm(Maple, Maxima,...) wurde diese Gleichung erstellt?

Programm?

Ich habe gerade eine Schubkarre organisiert, um damit die
vollgeschriebenen Zettel zum Altpapiercontainer zu bringen ;-)


Nein, Spaß beiseite: Ich hab's vom Fräulein Maxima rechnen lassen.

Man kann da aber sicher noch ein paar Dinge etwas vereinfachen.

von Steffen (Gast)


Lesenswert?

bzw. Warum liefert mir folgendes Tool eine höhere fg ? Ähnlich siehts 
auch beim TI Tool aus. Wenn ich messe, komme ich auf die von dir 
berechnete fg...

http://sim.okawa-denshi.jp/en/Sallen3tool.php

von Yalu X. (yalu) (Moderator)


Lesenswert?

Steffen schrieb:
> Kannst du es kurz erklären (ein bisschen
> Syntax). Ich verstehe python leider nicht.

So viel zu erklären gibt es da nicht:

r1, r2, r3, c1, c2 und c3 sind die Werte der passiven Bauteile.
+, -, * und / sind die Operatoren für die vier Grundrechenarten.
** ist der Potenzoperator und sqrt() die Quadratwurzelfunktion. An zwei
Stellen tauchen auch noch Kubikwurzeln auf, die hier als **(1/3)
geschrieben werden.

von Steffen (Gast)


Lesenswert?

Hi Yalu,

ich gehe davon aus, dass du die Formel nicht extra für mich eingegeben 
haszt ;) Die ist ja echt ziemlich mächtig. Wie bist du auf die Formel 
gekommen, bzw. woher kommt sie?

Danke dir erstmal!

Gruß
Steffen

von Yalu X. (yalu) (Moderator)


Lesenswert?

Steffen schrieb:
> Warum liefert mir folgendes Tool eine höhere fg ?

Dieses Tool berechnet die Polstellen der Übertragungsfunktion bzw. die
Beträge der zugehörigen Frequenzen. Der erste Pol entspricht aber nicht
automatisch der 3dB-Grenzfrequenz des Gesamtfilters. Das ist nur dann
näherungsweise der Fall, wenn der zweite Pol weit genug vom ersten
entfernt liegt, so dass der Frequenzgang im Bereich des ersten Pols
durch den zweiten nicht oder nur unwesentlich beeinflusst wird.

Steffen schrieb:
> Wie bist du auf die Formel gekommen, bzw. woher kommt sie?

Wie schon oben geschrieben, habe ich dafür das Computer-Algebra-System
(CAS) Maxima verwendet:

  http://maxima.sourceforge.net/

Dazu gibt es noch eine Oberfläche, die das Arbeiten damit etwas
komfortabler macht:

  http://andrejv.github.io/wxmaxima/

Ich habe die von Maxima ermittelte Formel in ein Python-Programm
kopiert, weil ich davon ausging, dass mehr Leute Python als Maxima
installiert haben.

: Bearbeitet durch Moderator
von Steffen (Gast)


Lesenswert?

Ah OK. Ich werd mir das Tool mal herunterladen. Kannst du mir die maxima 
sources zur Verfügung stellen? Dann habe ich gleich mal was "reales" zum 
rumspielen.

Wie hast du es gerechnet, damit du das Problem mit den zu eng 
beieinanderstehenden Polstellen nicht hast?

Gruß
Steffen

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

PS:

Ich habs eben mal ausprobiert. Wenn man die Pole näher zueinander 
bringt, stimmt es mit der Simulation überein. Komisch. Sollte es nicht 
anders herum sein?

von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Lesenswert?

Steffen schrieb:
> Ah OK. Ich werd mir das Tool mal herunterladen. Kannst du mir die maxima
> sources zur Verfügung stellen? Dann habe ich gleich mal was "reales" zum
> rumspielen.

Ich habe die Quelldatei mit ein paar Kommentaren versehen und als
Maxima-Batch- und als wxMaxima-Datei angehängt. Erstere startest du von
der Kommandozeile mit
1
maxima -b sallen3.mac

letztere lädst du mit "File" -> "Open..." in wxMaxima und startest die
Berechnung mit "Cell" -> "Evaluate All Visible Cells".

> Wie hast du es gerechnet, damit du das Problem mit den zu eng
> beieinanderstehenden Polstellen nicht hast?

Genau so, wie es Helmut oben geschrieben hat:

Helmut S. schrieb:
> Die Grenzfrequenz ergibt sich, wenn man den Betrag der
> Übertagungsfunktion nimmt und diese gleich 1/sqrt(2) setzt. Dann das
> Ganze nach w(omega) bzw f auflösen.

von Steffen (Gast)


Lesenswert?

Super,

danke dir. Ich habe es nachvollzogen. Morgen werde ich versuchen es 
nochmals händisch zu lösen!

Vielen Dank nochmal!

von Helmut S. (helmuts)


Angehängte Dateien:

Lesenswert?

Herleitung der -3dB Grenzfrequenz

F(jw) = 1/(1 +jw*(R1*C1+(R1+R2+R3)*C3) +(jw)^2*(R1*(R2+R3)*C1*C3 +
R3*(R1+R2)*C2*C3) + (jw)^3*R1*R2*R3*C1*C2*C3)

|F(w)| = 1/sqrt(Realteil^2+Imaginärteil^2)

|F(w)| = 1/sqrt( (1-w^2*(R1*(R2+R3)*C1*C3 +
R3*(R1+R2)*C2*C3))^2 + (w*(R1*C1+(R1+R2+R3)*C3)-w^3*R1*R2*R3*C1*C2*C3)^2
)

w = 2*pi*f

-3dB Frequenz berechnen

1/sqrt(2) = 1/sqrt( (1-w^2*(R1*(R2+R3)*C1*C3 +
R3*(R1+R2)*C2*C3))^2 + (w*(R1*C1+(R1+R2+R3)*C3)-w^3*R1*R2*R3*C1*C2*C3)^2
)

1-w^2*(R1*(R2+R3)*C1*C3+R3*(R1+R2)*C2*C3))^2 + 
(w*(R1*C1+(R1+R2+R3)*C3)-w^3*R1*R2*R3*C1*C2*C3)^2 = 2

(1-w^2*d)^2 +(w*e-w^3*f)^2 = 2

x=w^2

x3 +x^2*(d^2-2*e*f)/f^2 + x*(e^2-2*d)/f^2 -1/f^2 = 0

Hier die Berechnung mit Scilab unter Anwendung der Cardanischen 
Lösungsformel für Gleichungen 3. Grades.
Achtung diese untenstehende Berechnung erfordert das "double precision" 
Zahlenformat falls das jemand in irgend einer Programmiersprache 
implementiert. Der Grund ist dass die Variable D den Wert 10^47 
erreicht. Matheprogramme rechnen schon in der Grundeinstellung mit 
double precision. Man beachte nthroot(,3). Die Funktion ^(1/3) liefert 
falsche Werte für negative Argumente.

--------- Scilab code ----------

R1=15e3
R2=100e3
R3=30e3
C1=10e-9
C2=3.3e-9
C3=1e-9

d=R1*(R2+R3)*C1*C3 + R3*(R1+R2)*C2*C3
e=R1*C1+(R1+R2+R3)*C3
f=R1*R2*R3*C1*C2*C3

a=(d*d-2*e*f)/(f*f)
b=(e*e-2*d)/(f*f)
c=-1/(f*f)

// Lösung der Gleichung 3. Grades mit der Cardanischen Formel
// x^3 + a*x^2 + b*x + c = 0

p=(3*b-a*a)/3
q=2*a*a*a/27-a*b/3+c
D=p*p*p/27+q*q/4
u=nthroot(-q/2+sqrt(D),3)
v=nthroot(-q/2-sqrt(D),3)
x=u+v-a/3

w=sqrt(x)
f=w/(2*%pi)



Ergebnis:
f = 915.26369

Im Anhang ist die Datei(.asc) für die Simulation mit LTspice.

: Bearbeitet durch User
von steffen (Gast)


Lesenswert?

Danke auch dir helmut

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
Noch kein Account? Hier anmelden.