Python - Cómo hallar los picos (máximos) si estos fluctúan mucho?

 
Vista:
sin imagen de perfil
Val: 7
Ha disminuido su posición en 16 puestos en Python (en relación al último mes)
Gráfica de Python

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

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
index
index1
index2
index3
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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 121
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cómo hallar los picos (máximos) si estos fluctúan mucho?

Publicado por Antoni Masana (67 intervenciones) el 08/03/2018 11:27:04
Viendo el segundo gráfico debería darte 5 máximos ( 5 picos ). Pero viendo la última imagen es un peine y salen 50 en cada pico.

La idea es sacar una tabla de picos máximos y a continuación sacar los picos de esta segunda tabla

Te lo explico con un ejemplo:

Esto es tu último gráfico en forma de texto para explicar el que

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.          A                       B                       C                       D
           |                       |                       |                       |
           V                       V                       V                       V
 
           M                       M                       M                       M
         M   M                   M   M                   M   M                   M   M
       M       M               M       M               M       M               M       M
     M      P    M           M      P    M           M      P    M           M      P    M
   M      P   P    M       M      P   P    M       M      P   P    M       M      P   P    M
 M      P       P    M   M      P       P    M   M      P       P    M   M      P       P    M
      P           P    M      P           P    M      P           P    M      P           P    M
    P               P       P               P       P               P       P               P
  P                   P   P                   P   P                   P   P                   P
P                       P                       P                       P

Las M representa los máximos y las P los mínimos.
Cuando haces la pasada te da los valores de las M y solo quieres los mrcados con A, B, C y D.

Bien, si guardas estos valores y haces una grafica veras que el resultado es este:

1
2
3
4
5
6
7
8
9
10
11
.          A                       B                       C                       D
           |                       |                       |                       |
           V                       V                       V                       V
 
           M                       M                       M                       M
         M   M                   M   M                   M   M                   M   M
       M       M               M       M               M       M               M       M
     M           M           M           M           M           M           M           M
   M               M       M               M       M               M       M               M
 M                   M   M                   M   M                   M   M                   M
                       M                       M                       M                       M

Si ahora vuelves a buscar los picos ya tendrás los valores de A, B, C y D.

No lo he probado pero creo que es la forma más simple de hacerlo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar