1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| ## Repérage des différents poles et calcul des angles entre chaque
# En régime permanent, la vitesse est constante, la durée entre deux poles n'est pas exactement la même
# On importe le fichier texte contenant les intervalles de temps en microsecondes entre 2 ticks
# On prend la moyenne des intervalles sur n tours consécutifs en partant de la fin
# On en déduit une succession d'intervalles angulaires pour faire un tour
# On calcule la vitesse en prenant angle calculé/durée mesurée
import numpy as np
import matplotlib.pyplot as plt
poles = 6 # fronts par voie (paires de poles)
voies = 2 # voies codeur
nbtours = 1 # nb de tours sur lesquels est calculée la moyenne
cycle = poles*voies # nb de fronts sur un tour
fichier = open("essai.csv","r",encoding="utf8")
# temps en millisecondes entre deux fronts
temps = [float(x) for x in fichier.read().split()]
# vitesse en tours par seconde, sachant qu'un tour est fait en "cycle"s fronts
# en supposant que l'écart angulaire entre 2 fronts est absolument régulier
vitesse = np.array([1000/(t*cycle) for t in temps])
# Echelle des temps
T=np.array([sum(temps[:i]) for i in range(len(temps))])/1000
# Ici, on a exclu le dernier tour (ralentissement) du fichier csv
def moyenne(temps) :
""" Moyenne des périodes de chaque "pole", à vitesse supposée constante, appliquée à un fichier 'propre', sans valeur exceptionnelle en fin de colonne"""
temps_sum = temps[-cycle:] # somme des valeurs en vue d'une moyenne, initialisation
for i in range(nbtours-1) :
for j in range(cycle) :
temps_sum[j] += temps[-(2*(i+1)*cycle)+j]
return np.array(temps_sum)/nbtours # Calcul et renvoi de la moyenne
DeltaT_moy = moyenne(temps) # Période moyenne de chaque "pole" en ms
Theta_moy = DeltaT_moy/sum(DeltaT_moy) # angle moyen entre chaque pole (en fraction de tour)
def vitesse_corr(temps) :
""" Vitesse corrigée des variations angulaires des poles"""
i0 = cycle - len(temps)%cycle
return np.array([Theta_moy[(i0+j)%cycle]*1000/temps[j] for j in range(len(temps))])
vitesse2 = vitesse_corr(temps)
plt.plot(T,vitesse,label = "vitesse brute (tr/s)")
plt.plot(T,vitesse2,label = "vitesse corrigee (tr/s)")
plt.legend()
plt.show() |
Partager