Cómo hallar los picos (máximos) si estos fluctúan mucho?
Publicado por Carolina (4 intervenciones) el 07/03/2018 17:11:06
Buenas!
Tengo ciertos archivos txt tras realizar un experimento y tienen un comportamiento sinusoidal. Tengo que encontrar los máximos (que pueden ser mas de 50) pero el problema es que en cada máximo fluctúa mucho. Lo que quiero decir es que no es exactamente un seno, y al hacer zoom en los máximos te encontras con muchas fluctuaciones, errores, etc.
Necesitaría que estos puntos se 'unan' y me den únicos máximos.
El codigo que plantie es
Esto me da como 600 máximos. Los conté a ojo y son alrededor de 60.
Claro que hay un error en decir que el máximo sea mas grande que el anterior y que el siguiente, pues hay muchisimos en cada uno; pero por mas que pida el mayor y anterior de 100 puntos sigue siendo un valor muy grande el que da
Adjunto también imágenes de cómo es mi gráfico y qué sucede al ir haciéndole zoom a algún máximo
Esta última imagen es con muchísimo zoom en el máximo, donde puede notarse cómo fluctúa.
Otro intento que quise hacer es suavizar la función tal que tome valores cercanos y los promedie. Haciendo esto
la función se ve medianamente linda, los máximos no fluctuan mucho, pero sigue tirando un resultado muy grande.
Ojalá puedan ayudarme! Saludos.
Tengo ciertos archivos txt tras realizar un experimento y tienen un comportamiento sinusoidal. Tengo que encontrar los máximos (que pueden ser mas de 50) pero el problema es que en cada máximo fluctúa mucho. Lo que quiero decir es que no es exactamente un seno, y al hacer zoom en los máximos te encontras con muchas fluctuaciones, errores, etc.
Necesitaría que estos puntos se 'unan' y me den únicos máximos.
El codigo que plantie es
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
import matplotlib.pyplot as plt
t2, i2=leermd('/home/carolina/Desktop/Labo2/Electromagnetismo/michelson/m2.txt')
plt.plot(t2,i2)
plt.grid(True)
plt.show()
picos2=np.where(i2>55)[0] #como todos los máximos son mayores a 55. Esto me da las posiciones
ipicos2=np.zeros(len(picos2))
for i in range(len(picos2)):
ipicos2[i]=i22[picos2[i]] #le pido que los valores de los máximos a 55 los ubique en el vector de ceros
posicion2=np.zeros(len(ipicos2))
for a in range(len(ipicos2)-1):
if (ipicos2[a+1]<ipicos2[a] and ipicos2[a-1]<ipicos2[a]): #Le pido que el máximo será el que sea mayor al anterior y al siguiente
posicion2[a]=ipicos2[a]
#cantidad de maximos (CA)
CA2=len(np.where(posicion2>1)[0])
print(CA2)
Esto me da como 600 máximos. Los conté a ojo y son alrededor de 60.
Claro que hay un error en decir que el máximo sea mas grande que el anterior y que el siguiente, pues hay muchisimos en cada uno; pero por mas que pida el mayor y anterior de 100 puntos sigue siendo un valor muy grande el que da
Adjunto también imágenes de cómo es mi gráfico y qué sucede al ir haciéndole zoom a algún máximo
Esta última imagen es con muchísimo zoom en el máximo, donde puede notarse cómo fluctúa.
Otro intento que quise hacer es suavizar la función tal que tome valores cercanos y los promedie. Haciendo esto
la función se ve medianamente linda, los máximos no fluctuan mucho, pero sigue tirando un resultado muy grande.
Ojalá puedan ayudarme! Saludos.
Valora esta pregunta
0