Une bibliothèque Python pour l'analyse et la visualisation des fonctions de transfert en automatique et traitement du signal. Cette bibliothèque fournit des outils complets pour travailler avec les fonctions de transfert dans les domaines temporel et fréquentiel, avec support des diagrammes de Bode, tracés de contours et génération de documentation LaTeX.
-
Représentation des Fonctions de Transfert :
- Zéros et pôles (représentation racines)
- Coefficients polynomiaux (numérateur/dénominateur)
- Fonctions lambda pour des définitions personnalisées
-
Analyse de la Réponse Fréquentielle :
- Calcul de la réponse harmonique
- Calcul du module et de la phase
- Détection automatique des intégrateurs et dérivateurs
- Identification des pulsations de rupture
-
Outils de Visualisation :
- Diagrammes de Bode (gain et phase)
- Tracés Matplotlib ou PGF/TikZ avec style personnalisable
-
Sortie LaTeX : Générer des équations prêtes pour publication :
- Fonction de transfert H(p)
- Gain en dB : G_dB(ω)
- Module : |H(jω)|
- Phase : φ(ω)
-
Support PGF/TikZ : Créer des tracés de haute qualité pour documents LaTeX avec :
- Approximations asymptotiques (lignes rouges en pointillés)
- Courbes de réponse exactes (lignes bleues continues)
- Mise à l'échelle et étiquetage automatiques des axes
- Dimensions de tracé personnalisables
# Cloner le dépôt
git clone <url-du-dépôt>
cd ftransfert
# Installer les dépendances
pip install numpy matplotlib sympyfrom ftransfert import Ftransfert
# Utilisation de zéros et pôles
zeros = [(0, 0), (-2, 1)] # paires (réel, imaginaire)
poles = [(0, 0), (-5, 0), (-3, -4)]
H = Ftransfert(zeros=zeros, poles=poles, gain=10, name="H")
# Utilisation de coefficients polynomiaux
num = [1, 2, 1] # p² + 2p + 1
den = [1, 5, 6] # p² + 5p + 6
H = Ftransfert(num=num, den=den, gain=1, name="H")from ftransfert.bode.plot import bode as bodeplot
# Créer un diagramme de Bode
bodeplot(H, xlim=(1e-2, 1e2), y1lim=(-40, 20), y2lim=(-180, 0))from ftransfert.bode.tikz import bode as bodetikz
# Générer un document LaTeX avec diagrammes de Bode
bodetikz(H, filename="sortie.tex",
xlim=(1e-2, 1e2),
y1lim=(-40, 40),
y2lim=(-90, 90))Paramètres d'initialisation :
zeros: Liste de zéros sous forme de tuples (réel, imaginaire)poles: Liste de pôles sous forme de tuples (réel, imaginaire)num: Coefficients du polynôme numérateurden: Coefficients du polynôme dénominateurgain: Gain du système (défaut : 1)name: Nom de la fonction (défaut : "F")
Méthodes principales :
eval(p, gain): Évaluer H(p) au point complexe pharmonic_response(w, gain): Calculer la réponse fréquentiellelatex(key): Générer la représentation LaTeXinfo(): Afficher les informations de la fonction de transferttablatex(**kwargs): Générer un tableau LaTeX de valeurs
La bibliothèque calcule automatiquement :
- Les pulsations de rupture (ω_i)
- Les approximations asymptotiques du gain et de la phase
- La multiplicité des pôles et zéros
- Le gain statique
ftransfert/
├── common/
│ ├── Ftransfert.py # Classe principale de fonction de transfert
│ ├── contour.py # Outils d'intégration de contours
│ ├── utils.py # Fonctions utilitaires
│ ├── string_.py # Formatage de chaînes
│ └── latex.py # Assistants LaTeX
├── bode/
│ ├── plot.py # Fonctions de tracé Matplotlib
│ ├── tikz.py # Génération LaTeX/TikZ
├── fromquad/
│ ├── quadRLC.py # Représentation d'un quadripole linéaire et calcul de la fonction de transfert associée
- Python 3.10+
- NumPy
- Matplotlib
- SymPy
H = Ftransfert(zeros=[(-2, 0)], poles=[(-5, 0), (-3, -4)], gain=10)
H.info()Sortie :
----------------------------------------------------
Ftransfert Infos
----------------------------------------------------
Système (type:roots)
Gain : 10
Gain (static) : 0.667
nombre d'intégrateurs (i) = 0
nombre de dérivateurs (d) = 0
poles (n) = 2 [(-5+0j), (-3-4j)]
zeros (m) = 1 [(-2+0j)]
m <= n (causal)
Sous-systèmes :
pulsations, multiplicité : (2.00, 1), (5.00, -1), (5.00, -1)
print(H.tablatex(wlim=(0.1, 100), n=5))# Afficher la fonction de transfert
print(H)
# Obtenir la représentation LaTeX
print(H.latex("p"))
print(H.latex("moduledB"))
print(H.latex("argument"))# Système : H(p) = K / (1 + τp)
tau = 0.1 # constante de temps
K = 5 # gain statique
poles = [(-1/tau, 0)]
H = Ftransfert(zeros=[], poles=poles, gain=K, name="H")
# Tracer le diagramme de Bode
bode(H, xlim=(1e-1, 1e3), y1lim=(-20, 20), y2lim=(-90, 0))# Système : H(p) = ω₀² / (p² + 2ξω₀p + ω₀²)
w0 = 10 # pulsation propre
xi = 0.3 # coefficient d'amortissement
num = [w0**2]
den = [1, 2*xi*w0, w0**2]
H = Ftransfert(num=num, den=den, gain=1, name="H")
H.info()
bode(H, xlim=(1, 1e3))H = Ftransfert(zeros=[(-2, 0)], poles=[(-5, 0)], gain=1)
# Tracer pour différents gains
bode(H, gains=[0.1, 1, 10],
labels=['K=0.1', 'K=1', 'K=10'],
xlim=(0.1, 100))- Il s'agit d'une version "Born Again" d'un module de 2019-2020, complètement réécrit pour corriger les bugs et améliorer les fonctionnalités
- La bibliothèque supporte trois types de définition de fonctions de transfert : "roots", "polys" et "functions"
- Les tracés TikZ/PGF sont optimisés pour l'intégration dans des documents LaTeX scientifiques
- Le dépliage de phase utilise un algorithme personnalisé de suivi de surface de Riemann
fmv (2025)
Les contributions sont les bienvenues ! N'hésitez pas à ouvrir des issues ou des pull requests.