Código:
#Imports: librerías que usan todos los bloques
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks
from scipy.optimize import curve_fit
#Señal simulada: una oscilación de 1 Hz con ruido, como la que entrega el sensor
np.random.seed(0)
t = np.linspace(0, 20, 1000)
s = np.sin(2np.pit + 0.2) #+ np.random.randn(len(t))*0.05 + 2
plt.figure(figsize=(10, 4))
plt.plot(t, s)
plt.xlabel(‘Tiempo [s]’); plt.ylabel(‘Fuerza [N]’)
plt.show()
#Búsqueda de picos sin restricciones
peaks, _ = find_peaks(s)
plt.figure(figsize=(10, 4))
plt.plot(t, s)
plt.plot(t[peaks], s[peaks], ‘ro’)
plt.xlabel(‘Tiempo [s]’); plt.ylabel(‘Fuerza [N]’)
plt.show()
Búsqueda de picos pidiendo altura mínima y distancia mínima entre picos (en cantidad de puntos)
peaks, _ = find_peaks(s, height=0.0, distance=40)
plt.figure(figsize=(10, 4))
plt.plot(t, s)
plt.plot(t[peaks], s[peaks], ‘ro’)
plt.xlabel(‘Tiempo [s]’); plt.ylabel(‘Fuerza [N]’)
plt.show()
Período: promedio de las diferencias entre picos consecutivos, con su desviación estándar y el error del promedio
t_picos = t[peaks]
s_picos = s[peaks]
dT = np.diff(t_picos)
T = np.mean(dT)
sT = np.std(dT)
print(‘El tiempo de periodo es T =’, T, ‘y la desviación estándar es’, sT)
print(‘El error del promedio es’, sT/np.sqrt(len(dT)))
