[Circuit x Python] So erweitern und berechnen Sie Übertragungsfunktionen mit Lcapy

Einführung

Ich habe einen Artikel darüber geschrieben, wie man die Übertragungsfunktion einer Schaltung mit Lcapy, einem linearen Schaltungsanalysepaket von Python, symbolisch analysiert.

[Circuit x Python] So finden Sie die Übertragungsfunktion einer Schaltung mit Lcapy

Nachdem Sie die Übertragungsfunktion gefunden haben, möchten Sie sie erweitern oder numerisch analysieren. Diese Methoden werden in diesem Artikel erläutert.

Umgebung

Python: 3.7.4、SymPy: 1.6.2、Lcapy: 0.67.0

Schaltung zu analysieren

Stellen Sie sich einen invertierenden Verstärker vor, bei dem ein Operationsverstärker durch die Widerstände RG und RF zurückgeführt wird. Die Eigenschaften des Operationsverstärkers sind durch die folgende Gleichung auszudrücken. $A(f) = \frac{A_{OL}}{1+s/p}$ image.png

Diese Schaltung erschien auch in Vorheriger Artikel und ist auf LTSPICE wie folgt gezeichnet. image.png

Der Code zum Finden der Übertragungsfunktion und das Ausführungsergebnis lauten wie folgt.

python


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)}$

1. 1. Erweitern Sie die Übertragungsfunktion

Anweisungen zum Erweitern der Übertragungsfunktion finden Sie in der offiziellen Dokumentation Expressions => Methods (http://lcapy.elec.canterbury.ac.nz/expressions.html).

Ein in der obigen Schaltung verwendetes Beispiel ist unten gezeigt. image.png

Auf diese Weise können Sie Ausdrücke mit sehr wenig Code einfach erweitern und transformieren.

2. Numerische Berechnung

Nachdem Sie die Schaltung symbolisch analysiert haben, um die Übertragungsfunktion zu finden, weisen Sie der Übertragungsfunktion einen Wert zu und führen eine numerische Analyse durch.

Suchen Sie zuerst die Übertragungsfunktion. (Der Code wurde teilweise von dem oben aufgeführten geändert. Siehe unten für den Grund)

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 step
G1 0 N002 0 INN AOL
""")

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

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

Der folgende Code weist der erhaltenen Übertragungsfunktion einen Wert zu. Eingangswerte: AOL = 1000, p = 2π x 10 kHz, RG = 1 kΩ, RF = 2 kΩ

H = H.subs("AOL", 1000).subs("p", 2*pi*1e4).subs("RG", 1000).subs("RF", 2000)
H

Ausführungsergebnis: $- \frac{40000000000.0 \pi}{3000 s + 20060000000.0 \pi}$

Die Eigenschaften der Übertragungsfunktion (hier Intensität, Einheit dB) können mit dem folgenden Code berechnet und grafisch dargestellt werden.


import numpy as np
import matplotlib.pyplot as plt

freq = np.logspace(start=5, stop=9, num=(9-5)*21)
sm1 = H(f).dB.evaluate(freq)

fig, ax = plt.subplots()
ax.plot(freq,sm1)

ax.set_xscale("log")
ax.set_xlabel("Frequency (Hz)")
ax.set_ylabel("Signal Magnitude (dB)")

plt.show()

Ausführungsergebnis: image.png

Der folgende Code wird numerisch berechnet, um ein Array zu generieren sm1 = H(f).dB.evaluate(freq)

Die folgende Verarbeitung wird hier durchgeführt. Ersetzen Sie s durch 2πjf → Berechnen Sie das Dezibel davon → Numerische Berechnung mit evaluieren (freq)

image.png

Fehler? (2020/10/31)

Wenn Sie eine numerische Berechnung anhand des unter "Zu analysierende Schaltung" beschriebenen Codes durchführen, tritt ein Fehler auf.

python


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 = H.subs("AOL", 1000).subs("p", 2*pi*1e4).subs("RG", 1000).subs("RF", 2000)

import numpy as np
import matplotlib.pyplot as plt

freq = np.logspace(start=5, stop=9, num=(9-5)*21)
sm1 = H(f).dB.evaluate(freq)

fig, ax = plt.subplots()
ax.plot(freq,sm1)

ax.set_xscale("log")
ax.set_xlabel("Frequency (Hz)")
ax.set_ylabel("Signal Magnitude (dB)")

plt.show()
""")

Ausführungsergebnis: ValueError: Cannot convert non-causal s-expression to f domain

Ich denke nicht, dass es im Code seltsam ist, aber ich bekomme eine Fehlermeldung. Die gleiche Übertragungsfunktion kann mit dem Code "2. Numerische Berechnung" erhalten werden, kann jedoch aus irgendeinem Grund berechnet werden. In meiner Umgebung verursacht der in der offiziellen Dokumentation beschriebene Code ebenfalls einen Fehler, daher denke ich, dass es sich um einen Fehler handelt. Wenn sich die Situation ändert, werde ich diesen Teil korrigieren.

Recommended Posts

[Circuit x Python] So erweitern und berechnen Sie Übertragungsfunktionen mit Lcapy
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
[Circuit x Python] So lösen Sie Schaltungsgleichungen symbolisch mit sympy
[Python] Berechnen von MAE und RMSE
[Circuit x Python] Aktivieren des linearen Schaltungsanalysepakets Lcapy
[Python] Zusammenfassung der Verwendung von Split- und Join-Funktionen
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
So installieren Sie Python mit Anaconda
So berechnen Sie das Datum mit Python
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Verwendung von Funktionen in separaten Dateien Perl-Version und Python-Version
So verpacken und verteilen Sie Python-Skripte
Von Python bis zur Verwendung von MeCab (und CaboCha)
So installieren und verwenden Sie pandas_datareader [Python]
[Steuerungstechnik] Grafische Darstellung der Übertragungsfunktionen von Python
So löschen Sie Python 2.x auf einem Mac.
Python: Verwendung von Einheimischen () und Globalen ()
Verwendung von Python zip und Aufzählung
[Python] Verstehen, wie rekursive Funktionen verwendet werden
Verwendung ist und == in Python
So generieren Sie eine Sequenz in Python und C ++
So erstellen Sie erklärende Variablen und Zielfunktionen
Python datetime So berechnen Sie Datumsangaben und konvertieren Zeichenfolgen strftime, strptime [Definitive Edition]
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
[Algorithmus x Python] Verwendung der Liste
[Python] Verwendung von Hash-Funktion und Taple.
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
[Python] [Django] Verwendung des Auswahlfelds und Hinzufügen von Optionen
So richten Sie eine Python-Umgebung mit pyenv ein
So senden Sie Microsoft Forms automatisch mit Python (Mac-Version)
[Python] So erweitern Sie Variablen in einer Zeichenfolge
So erstellen Sie ein Python-Paket mit VS Code
[Python] So sortieren Sie Diktate in Listen und Instanzen in Listen
[Python] So teilen und modularisieren Sie Dateien (einfach, Beispiel)
[Python] So erstellen Sie eine Korrelationsmatrix und eine Heatmap
Beenden bei Verwendung von Python in Terminal (Mac)
So rufen Sie mehrere Arrays mit Slice in Python ab.
[Einführung in Python] Wie stoppe ich die Schleife mit break?
Python # So überprüfen Sie Typ und Typ für Super-Anfänger
So führen Sie einen Befehl mit einem Unterprozess in Python aus
[Einführung in Python] So schreiben Sie sich wiederholende Anweisungen mit for-Anweisungen
So installieren Sie Python
So installieren Sie Python
Analysieren von Java-Quellcode mit AST (Abstract Syntax Tree) mithilfe von ANTLR und Python
Versuchen Sie es mit GUI, PyQt in Python
[Einführung in Python] Wie man bedingte Verzweigungen mit if-Anweisungen schreibt
So tauschen Sie Elemente in einem Array in Python aus und wie kehren Sie ein Array um.
[Python] Zusammenfassung zum Abrufen von Listen und Wörterbuchelementen
[Python] Wie man mit Klassenvariablen mit Dekorator und Metaklasse spielt
Herstellen einer Verbindung zu verschiedenen DBs über Python (PEP 249) und SQL Alchemy
So verschieben Sie ein zweidimensionales Array nur mit Python [Hinweis]
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
[Python] So legen Sie Variablennamen dynamisch fest und vergleichen die Geschwindigkeit
TensorFlow-Lernmethode für Profis der freien Künste und Python-Anfänger
Hinzufügen neuer Daten (gerade Linien und Diagramme) mit matplotlib
Erstellen Sie eine Python-Umgebung und übertragen Sie Daten auf den Server