[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy

introduction

Python a un package appelé Lcapy qui peut analyser les circuits linéaires. Lcapy a diverses fonctions, mais cet article explique comment trouver la fonction de transfert d'un circuit symboliquement (mathématiquement).

L'article suivant explique comment activer Lcapy. [Circuit x Python] Comment activer le package d'analyse de circuit linéaire Lcapy

environnement

Python: 3.7.4、SymPy: 1.6.2、Lcapy: 0.67.0

Étant donné que Lcapy est toujours un package en développement, le code de cet article peut ne pas fonctionner avec le même ver que ci-dessus. Même dans mon environnement, le code de la documentation officielle peut ne pas fonctionner ... Sachez que votre code peut ne pas fonctionner sans pièces défectueuses!

Exemple 1) Circuit RC

Dans cet article, nous utiliserons la méthode Circuit pour trouver la fonction de transfert. Comme premier exemple, résolvons la fonction de transfert du circuit RC dans la figure ci-dessous. image.png

Code pour trouver la fonction de transfert:

Exemple 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

Résultat de l'exécution:

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

Commentaire: J'entre dans une netlist dans Circuit ("" "" ""). La tension appliquée de C est obtenue par cct.C.V (s), et la fonction de transfert est obtenue en divisant celle-ci par la tension d'entrée cct.Vi.V (s). La fonction de transfert est simplifiée avec symplify. De cette façon, nous pouvons voir que la fonction de transfert a été obtenue symboliquement (mathématiquement).


Il est également possible d'omettre les valeurs d'élément (RF et CF dans l'exemple 1-1). Dans ce cas, valeur de l'élément = nom de l'élément (R et C).

Exemple 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

Résultat de l'exécution:

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

Bien entendu, il est également possible de saisir la valeur de l'élément sous forme de valeur numérique au lieu d'un symbole.

code:

Exemple 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

Résultat de l'exécution: $\frac{1000}{s + 1000}$

Il est également possible de trouver symboliquement la fonction de transfert puis de la remplacer par la valeur.

Exemple 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)

Résultat de l'exécution: $\frac{1}{\frac{s}{1000} + 1}$

Exemple 2) Circuit passif plus complexe

S'il s'agit d'un circuit simple comme l'exemple 1), il ne faudra pas beaucoup de temps pour saisir la liste des réseaux par vous-même. Cependant, lorsqu'il s'agit d'un circuit légèrement compliqué comme celui illustré ci-dessous, l'auto-entrée est gênante. image.png

Vous n'êtes pas obligé d'écrire la netlist vous-même en créant un schéma de circuit avec l'outil de conception de circuit, en y générant une netlist et en la transmettant au code Lcapy.

La figure ci-dessus a été dessinée avec LTSPICE, mais dans le cas de LTSPICE, vous pouvez obtenir la netlist à partir de View => SPICE NETLIST. image.png

Collez la netlist dans votre code Lcapy comme suit:

Exemple 1-3) Circuit RC


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

La fonction de transfert est obtenue par une méthode différente de l'exemple 1). Tout d'abord, V1 est modifiée comme suit dans la liste des réseaux copiés.   V1 IN 0 s 1 Cela signifie un signal d'amplitude = 1 dans la région s. La fonction de transfert H est obtenue en mesurant la tension du noeud "OUT".

Résultat de l'exécution: $\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)}$

Exemple 3) Amplificateur opérationnel à gain constant

Gain limité, sortie unique, aucune dépendance de fréquence

Les amplificateurs non inverseurs comme celui illustré ci-dessous peuvent également être analysés avec Lcapy. image.png

VCVS (source de signal de tension de commande de tension) est utilisé comme condensateur opérationnel. Si vous dessinez avec LTSPICE, cela ressemblera à la figure ci-dessous. image.png

Comme dans l'exemple 2), si vous copiez et collez la liste des réseaux et modifiez V1, vous pouvez trouver la fonction de transfert.

Exemple 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

Résultat de l'exécution: $- \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}}$

Gain limité, sortie unique, unipolaire

Si vous souhaitez analyser avec un amplificateur opérationnel à un pôle, vous pouvez créer un schéma de circuit comme celui illustré ci-dessous. image.png

Les caractéristiques de l'amplificateur opérationnel doivent être exprimées par l'équation suivante. $A(f) = \frac{A_{OL}}{1+s/p}$ L'optique est fabriquée en combinant VCCS (source de courant de contrôle de tension), résistance, capacité et VCVS. Les pôles sont déterminés par la capacité et sont $ C = {1} / p $. La valeur de capacité peut être saisie dans une formule, et la formule est saisie dans {}. Par conséquent, la valeur de capacité est définie sur {1 / p} sur LTSPICE.

Exemple 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

Résultat de l'exécution: $- \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)}$

Gain limité, entièrement différentiel, sans dépendance de fréquence

Un amplificateur entièrement différentiel peut être calculé avec Lcapy en utilisant le circuit illustré ci-dessous. image.png

À la fin

Le package Lcapy, qui vous permet de trouver facilement la fonction de transfert sans résoudre l'équation du circuit, est très pratique. Une fois que vous avez une fonction de transfert, vous voudrez l'étendre (comme trouver les pôles) ou faire une analyse numérique, que je couvrirai dans un article séparé.

[Circuit x Python] Comment développer et calculer les fonctions de transfert à l'aide de Lcapy

Recommended Posts

[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy
[Circuit x Python] Comment développer et calculer les fonctions de transfert à l'aide de Lcapy
[Circuit x Python] Comment activer le package d'analyse de circuit linéaire Lcapy
[Python] Une fonction simple pour trouver les coordonnées du centre d'un cercle
[Circuit x Python] Comment résoudre symboliquement les équations de circuit en utilisant sympy
Comment trouver le coefficient de mise à l'échelle d'une ondelette bipolaire
Comment tester unitaire une fonction contenant l'heure actuelle à l'aide de Freezegun en Python
Comment déterminer l'existence d'un élément sélénium en Python
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Comment vérifier la taille de la mémoire d'une variable en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Comment trouver l'adresse mémoire de la valeur de la trame de données Pandas
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
Comment diviser et traiter une trame de données à l'aide de la fonction groupby
[Python] Explique comment utiliser la fonction range avec un exemple concret
Comment connaître le nombre de processeurs sans utiliser la commande sar
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
Comment créer un wrapper qui préserve la signature de la fonction à envelopper
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
Comment calculer la volatilité d'une marque
Comment trouver la zone du diagramme de Boronoi
Récupérer l'appelant d'une fonction en Python
[Algorithm x Python] Comment utiliser la liste
[2015/11/19] Comment enregistrer un service localement à l'aide du SDK python avec naoqi os
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
[python] Comment trier par le Nth Mth élément d'un tableau multidimensionnel
[Python] Smasher a essayé de faire du processus de chargement de la vidéo une fonction à l'aide d'un générateur
Comment trouver le coefficient de la courbe approximative passant par les sommets en Python
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Comment obtenir une liste de fichiers dans le même répertoire avec python
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Comment écrire une interface graphique à l'aide de la commande maya
Comment obtenir le nombre de chiffres en Python
Comment configurer un environnement Python à l'aide de pyenv
[Introduction à Python] Comment itérer avec la fonction range?
Découpez une partie de la chaîne à l'aide d'une tranche Python
Comment écrire un type liste / dictionnaire de Python3
Comment créer un package Python à l'aide de VS Code
[Python] Résumé de la façon de spécifier la couleur de la figure
Comment frapper le document de Magic Function (Line Magic)
[Introduction à Python] Comment arrêter la boucle en utilisant break?
Comment exécuter une commande à l'aide d'un sous-processus en Python
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
Note Python: Le mystère de l'attribution d'une variable à une variable
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ②
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ④
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
J'ai essayé de savoir comment rationaliser le flux de travail avec Excel x Python ⑤
Comment appeler une fonction
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ①
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ③
Comment trouver le premier élément qui correspond aux critères de la liste Python
Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
J'ai essayé de trouver l'entropie de l'image avec python
[Ubuntu] Comment supprimer tout le contenu du répertoire
Comment trouver le nombre optimal de clusters pour les k-moyennes
Découvrez la largeur apparente d'une chaîne en python