Générer des rampes périodiques en Python avec UliEngineering
UliEngineering inclut un module UliEngineering.SignalProcessing.Ramp qui peut être utilisé pour générer des rampes avec des profils d’accélération et de décélération définis, ainsi que la possibilité de générer des traces continues C².
Exemple d’utilisation minimal :
generate_ramp.py
from UliEngineering.SignalProcessing.Ramp import periodic_ramp
# Générer le signal
y = periodic_ramp(
frequency = 2.0,
samplerate=1000,
amplitude=10,
rise_time=0.1,
fall_time=0.2,
high_time=0.1,
acceleration=4000,
length=1.0,
)Script de tracé d’exemple détaillé
généré avec ce code Python
plot_ramp.py
#!/usr/bin/env python3
"""
Script d'exemple pour générer et tracer un signal de rampe périodique
à l'aide de `UliEngineering.SignalProcessing.Ramp.periodic_ramp`.
Utilisation :
python3 examples/ramp_example.py
Les options permettent d'ajuster la fréquence d'échantillonnage, la fréquence,
l'amplitude, les temps de montée/descente, l'accélération (coude), le nombre
de périodes et le nom du fichier de sortie.
"""
import argparse
import numpy as np
import matplotlib.pyplot as plt
from UliEngineering.SignalProcessing.Ramp import periodic_ramp
plt.style.use("ggplot")
def main():
p = argparse.ArgumentParser(description="Générer et tracer un signal de rampe périodique")
p.add_argument('--samplerate', '-r', type=float, default=1.0, help='Échantillons par seconde')
p.add_argument('--frequency', '-f', type=float, default=1.0/15000.0, help='Fréquence du signal en Hz')
p.add_argument('--amplitude', '-a', type=float, default=1.05e8, help='Amplitude crête à crête')
p.add_argument('--rise', type=float, default=3500.0, help='Temps de montée (secondes)')
p.add_argument('--fall', type=float, default=3500.0, help='Temps de descente (secondes)')
p.add_argument('--high', type=float, default=4000.0, help='Temps de maintien haut (secondes)')
p.add_argument('--acceleration', '-A', type=float, default=50.0, help='Accélération du flanc (unités/s^2)')
p.add_argument('--periods', type=int, default=2, help='Nombre de périodes à générer')
p.add_argument('--outfile', '-o', default='ramp.svg', help='Nom du fichier pour sauvegarder le tracé')
args = p.parse_args()
# Calculer la longueur totale nécessaire pour générer le nombre de périodes demandé
period = 1.0 / args.frequency
length = args.periods * period
# Générer le signal
y = periodic_ramp(
args.frequency,
args.samplerate,
amplitude=args.amplitude,
rise_time=args.rise,
fall_time=args.fall,
high_time=args.high,
acceleration=args.acceleration,
length=length,
)
# Axe temporel
t = np.arange(y.size) / args.samplerate
# Tracer
plt.figure(figsize=(10, 4))
plt.plot(t, y, color='tab:red', linewidth=1.0)
plt.xlabel('Temps [s]')
plt.ylabel('Amplitude')
plt.title(f'Rampe périodique (f={args.frequency:.6g} Hz, A={args.amplitude:g})')
plt.grid(True)
plt.tight_layout()
plt.savefig(args.outfile, dpi=150)
print(f"Tracé sauvegardé dans {args.outfile}")
# Afficher interactivement (si disponible)
try:
plt.show()
except Exception:
pass
if __name__ == '__main__':
main()Consultez les articles similaires par catégorie :
Python, UliEngineering, Data Science
Si cet article vous a aidé, pensez à m'offrir un café ou à faire un don via PayPal pour soutenir la recherche et la publication de nouveaux articles sur TechOverflow