[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy

Einführung

Python hat ein Paket namens Lcapy, das lineare Schaltkreise analysieren kann. Lcapy hat verschiedene Funktionen, aber dieser Artikel erklärt, wie man die Übertragungsfunktion einer Schaltung symbolisch (mathematisch) findet.

Der folgende Artikel erklärt, wie Sie Lcapy aktivieren. [Circuit x Python] Aktivieren des linearen Schaltungsanalysepakets Lcapy

Umgebung

Python: 3.7.4、SymPy: 1.6.2、Lcapy: 0.67.0

Da Lcapy noch ein Entwicklungspaket ist, funktioniert der Code in diesem Artikel möglicherweise nicht mit derselben Version wie oben. Selbst in meiner Umgebung funktioniert der Code in der offiziellen Dokumentation möglicherweise nicht ... Beachten Sie, dass Ihr Code ohne fehlerhafte Teile möglicherweise nicht funktioniert!

Beispiel 1) RC-Schaltung

In diesem Artikel verwenden wir die Circuit-Methode, um die Übertragungsfunktion zu ermitteln. Lassen Sie uns als erstes Beispiel die Übertragungsfunktion der RC-Schaltung in der folgenden Abbildung lösen. image.png

Code zum Auffinden der Übertragungsfunktion:

Beispiel 1-1)


from lcapy import *
cct = Circuit("""
Vi 1 0 
R 1 2 RF
C 2 0 CF
""")

H = (cct.C.V(s) / cct.Vi.V(s)).simplify()
H

Ausführungsergebnis:

\frac{1}{C_{F} R_{F} s + 1}

Kommentar: Ich gebe eine Netzliste in Circuit ein ("" "" ""). Die angelegte Spannung von C wird durch cct.C.V (s) erhalten, und die Übertragungsfunktion wird erhalten, indem diese durch die Eingangsspannung cct.Vi.V (s) dividiert wird. Die Übertragungsfunktion wird mit symplify vereinfacht. Auf diese Weise können wir sehen, dass die Übertragungsfunktion symbolisch (mathematisch) erhalten wurde.


Es ist auch möglich, die Elementwerte wegzulassen (RF und CF in Beispiel 1-1). In diesem Fall ist Elementwert = Elementname (R und C).

Beispiel 1-2)


from lcapy import *
cct = Circuit("""
Vi 1 0 
R 1 2
C 2 0
""")

H = (cct.C.V(s) / cct.Vi.V(s)).simplify()
H

Ausführungsergebnis:

\frac{1}{C R s + 1}

Natürlich ist es auch möglich, den Elementwert als numerischen Wert anstelle eines Symbols einzugeben.

Code:

Beispiel 1-3)


from lcapy import *
cct = Circuit("""
Vi 1 0 
R 1 2 1e3
C 2 0 1e-6
""")

H = (cct.C.V(s) / cct.Vi.V(s)).simplify()
H

Ausführungsergebnis: $\frac{1000}{s + 1000}$

Es ist auch möglich, die Übertragungsfunktion symbolisch zu finden und dann den Wert zu ersetzen.

Beispiel 1-4)


from lcapy import *
cct = Circuit("""
Vi 1 0 
R 1 2 RF
C 2 0 CF
""")

H = (cct.C.V(s) / cct.Vi.V(s)).simplify()
H.subs('CF',1e-6).subs('RF',1e3)

Ausführungsergebnis: $\frac{1}{\frac{s}{1000} + 1}$

Beispiel 2) Komplexere passive Schaltung

Wenn es sich um eine einfache Schaltung wie in Beispiel 1) handelt, dauert es nicht lange, bis Sie die Netzliste selbst eingegeben haben. Wenn es sich jedoch um eine etwas komplizierte Schaltung wie die unten gezeigte handelt, ist die Selbsteingabe problematisch. image.png

Sie müssen die Netzliste nicht selbst schreiben, indem Sie mit dem Schaltungsentwurfstool einen Schaltplan erstellen, dort eine Netzliste erstellen und an den Lcapy-Code übergeben.

Die obige Abbildung wurde mit LTSPICE gezeichnet, aber im Fall von LTSPICE können Sie die Netzliste unter View => SPICE NETLIST abrufen. image.png

Fügen Sie die Netzliste wie folgt in Ihren Lcapy-Code ein:

Beispiel 1-3) RC-Schaltung


from lcapy import *
cct = Circuit("""
V1 IN 0 s 1
R1 OUT N001 RP
C1 OUT 0 CM
L1 IN N001 LP
R2 OUT 0 RM
C2 OUT N001 CP
""")

H = cct["OUT"].V(s).simplify()
H

Die Übertragungsfunktion wird durch ein anderes Verfahren als in Beispiel 1) erhalten. Zunächst wird V1 in der Liste der kopierten Netze wie folgt geändert.   V1 IN 0 s 1 Es bedeutet ein Signal mit einer Amplitude = 1 im s-Bereich. Die Übertragungsfunktion H wird durch Messen der Spannung des Knotens "OUT" erhalten.

Ausführungsergebnis: $\frac{R_{M} \left(C_{P} R_{P} s + 1\right)}{C_{M} C_{P} L_{P} R_{M} R_{P} s^{3} + L_{P} s^{2} \left(C_{M} R_{M} + C_{P} R_{P}\right) + R_{M} + R_{P} + s \left(C_{M} R_{M} R_{P} + C_{P} R_{M} R_{P} + L_{P}\right)}$

Beispiel 3) Operationsverstärker mit konstanter Verstärkung

Begrenzte Verstärkung, einzelner Ausgang, keine Frequenzabhängigkeit

Nicht invertierende Verstärker wie der unten gezeigte können auch mit Lcapy analysiert werden. image.png

Als Betriebskondensator wird VCVS (Voltage Control Voltage Signal Source) verwendet. Wenn Sie mit LTSPICE zeichnen, sieht es wie in der folgenden Abbildung aus. image.png

Wenn Sie wie in Beispiel 2) die Netzliste kopieren und einfügen und V1 ändern, finden Sie die Übertragungsfunktion.

Beispiel 3-1)


from lcapy import *
cct = Circuit("""
R1 N001 N002 RG
R2 OUT N001 RF
V1 N002 0 s 1
C1 N001 OUT CF
E1 OUT 0 0 N001 AOL
C2 N001 0 CG
""")

H = cct["OUT"].V(s).simplify()
H

Ausführungsergebnis: $- \frac{A_{\mathrm{OL}} R_{F}}{A_{\mathrm{OL}} R_{G} + R_{F} R_{G} s \left(A_{\mathrm{OL}} C_{F} + C_{F} + C_{G}\right) + R_{F} + R_{G}}$

Begrenzte Verstärkung, Einzelausgang, einpolig

Wenn Sie mit einem Operationsverstärker mit einem Pol analysieren möchten, können Sie einen Schaltplan wie den unten gezeigten erstellen. image.png

Die Eigenschaften des Operationsverstärkers sind durch die folgende Gleichung auszudrücken. $A(f) = \frac{A_{OL}}{1+s/p}$ Die Optik wird durch Kombination von VCCS (Spannungssteuerungsstromquelle), Widerstand, Kapazität und VCVS hergestellt. Die Pole werden durch die Kapazität bestimmt und sind $ C = {1} / p $. Der Kapazitätswert kann in eine Formel eingegeben werden, und die Formel wird in {} eingegeben. Daher wird der Kapazitätswert bei LTSPICE auf {1 / p} gesetzt.

Beispiel 3-2)


from lcapy import *
cct = Circuit("""
E1 0 OUT N002 0 1
C1 N002 0 {1/p}
R1 N002 0 1
R2 OUT INN RF
R3 INN N001 RG
V1 N001 0 s 1
G1 0 N002 0 INN AOL
""")

H = cct["OUT"].V(s).simplify()
H

Ausführungsergebnis: $- \frac{A_{\mathrm{OL}} R_{F} p}{A_{\mathrm{OL}} R_{G} p + R_{F} p + R_{G} p + s \left(R_{F} + R_{G}\right)}$

Begrenzte Verstärkung, vollständig differentiell, keine Frequenzabhängigkeit

Ein vollständig differenzieller Verstärker kann mit Lcapy unter Verwendung der unten gezeigten Schaltung berechnet werden. image.png

Am Ende

Das Lcapy-Paket, mit dem Sie die Übertragungsfunktion leicht finden können, ohne die Schaltungsgleichung zu lösen, ist sehr praktisch. Sobald Sie eine Übertragungsfunktion haben, möchten Sie diese erweitern (z. B. die Pole finden) oder eine numerische Analyse durchführen, die ich in einem separaten Artikel behandeln werde.

[Circuit x Python] Erweitern und Berechnen von Übertragungsfunktionen mit Lcapy

Recommended Posts

[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
[Circuit x Python] So erweitern und berechnen Sie Übertragungsfunktionen mit Lcapy
[Circuit x Python] Aktivieren des linearen Schaltungsanalysepakets Lcapy
[Python] Eine einfache Funktion zum Ermitteln der Mittelkoordinaten eines Kreises
[Circuit x Python] So lösen Sie Schaltungsgleichungen symbolisch mit sympy
So ermitteln Sie den Skalierungskoeffizienten eines bipolaren Wavelets
So testen Sie eine Funktion, die die aktuelle Zeit enthält, mit Freezegun in Python
So bestimmen Sie die Existenz eines Selenelements in Python
[Einführung in Python] So teilen Sie eine Zeichenfolge mit der Funktion split
So überprüfen Sie die Speichergröße einer Variablen in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
So ermitteln Sie die Speicheradresse des Pandas-Datenrahmenwerts
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
Teilen und Verarbeiten eines Datenrahmens mithilfe der Groupby-Funktion
[Python] Erklärt anhand eines konkreten Beispiels, wie die Bereichsfunktion verwendet wird
So ermitteln Sie die Anzahl der CPUs ohne den Befehl sar
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
So erstellen Sie einen Wrapper, der die Signatur der zu umschließenden Funktion beibehält
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
So berechnen Sie die Volatilität einer Marke
So finden Sie den Bereich des Boronoi-Diagramms
Holen Sie sich den Aufrufer einer Funktion in Python
[Algorithmus x Python] Verwendung der Liste
[19.11.2015] So registrieren Sie einen Dienst lokal mit dem Python SDK bei naoqi os
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
[Python] So sortieren Sie nach dem N-ten M-ten Element eines mehrdimensionalen Arrays
[Python] Smasher hat versucht, den Video-Ladevorgang mithilfe eines Generators zu einer Funktion zu machen
So ermitteln Sie den Koeffizienten der ungefähren Kurve, die in Python durch die Scheitelpunkte verläuft
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
So schreiben Sie eine GUI mit dem Befehl maya
So ermitteln Sie die Anzahl der Stellen in Python
So richten Sie eine Python-Umgebung mit pyenv ein
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
So erstellen Sie ein Python-Paket mit VS Code
[Python] Zusammenfassung, wie die Farbe der Figur angegeben wird
Wie man das Dokument der magischen Funktion (Linienmagie) trifft
[Einführung in Python] Wie stoppe ich die Schleife mit break?
So führen Sie einen Befehl mit einem Unterprozess in Python aus
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python ④ optimiert werden kann
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
Ich habe versucht herauszufinden, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
So rufen Sie eine Funktion auf
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
So finden Sie das erste Element, das den Kriterien in der Python-Liste entspricht
Fügen Sie eine Funktion hinzu, um dem Wetter heute mitzuteilen, dass der Bot locker ist (hergestellt von Python).
Ich habe versucht, die Entropie des Bildes mit Python zu finden
[Ubuntu] So löschen Sie den gesamten Inhalt des Verzeichnisses
So finden Sie die optimale Anzahl von Clustern für k-means
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus