Enfoque de detección de picos

24

¿Cuáles son los algoritmos de detección de picos existentes? Tengo datos ruidosos y me gustaría implementar la detección de picos para estos datos. Los datos están en reversa, en realidad estoy tratando de determinar el fondo.

Aquí hay una instantánea de los datos en Excel. Me gusta detectar ambos fondos. Pensé en pasar los datos a través de un filtro de paso bajo y posteriormente hacer un promedio móvil donde determino los picos y dentro del promedio móvil hago otra búsqueda. Tengo cero antecedentes DSP; Este es solo un enfoque de sentido común. Me gustaría escuchar lo que recomiendan los expertos.

Ingrese la descripción de la imagen aquí

Ktuncer
fuente
2
¿Cuáles son los dos fondos que quieres detectar? Solo veo uno obvio. ¿Sabes qué tipo de ruido tienes o de dónde viene?
Jason R
Me gustaría saber si desea implementarlo en algún hardware en particular (restricciones de recursos) ya que eso afectará mi estrategia de detección de picos.
anasimtiaz 01 de
@JasonR el morado es obvio. Sin embargo, el borde afilado es un caso atípico. Idealmente, quiero que eso se afeite y luego calcular el punto inferior. (de ahí el filtro LP en mi enfoque) El no obvio en azul claro es el punto mínimo a la derecha del pico púrpura. El púrpura no es realmente una preocupación, pero el azul claro sí. La trama de Excel no hace justicia, pero esto es de un ADC de 12 bits donde 4096 es 2V.
Ktuncer
@anasimtiaz lo creas o no, esto se ejecutará en un iPhone / Android, así que supongo que podemos decir que es como una PC. Sin restricciones de hardware.
Ktuncer
@Ktuncer He agregado algunas imágenes para que las vea usted mismo.
Spacey

Respuestas:

12

Ktuncer, hay varios métodos que puedes usar aquí. Un método que recomendaría es usar una Transformación de Wavelet Discreta (DWT) y, en particular, mirar la Wavelet de Daubechies . Yo elegiría, digamos, Daub-14 / Daub-Tetra.

Básicamente, lo que realmente necesita hacer es 'marcar' su señal y, a partir de ahí, hacer una selección mínima o máxima. Eso eliminará tus valores atípicos. Una transformación de onda daub-14 / daub-tetra puede ayudarlo a hacer esto, y esto ayuda especialmente porque no conoce la naturaleza de su señal. (Usando daub-14, puede representar con precisión señales polinómicas de grado 14/2 = 7, y parece que no necesitará más que eso).

El cálculo de esta transformada wavelet esencialmente 'comprime' su energía en unas pocas indicaciones. Esas indicaciones representan pesos en vectores básicos. El resto de los pesos estarán (idealmente) cerca de cero. Cuando tiene ruido en su señal (como lo hace), esos pesos que normalmente eran cero ahora tienen algunos pesos, pero simplemente puede ponerlos a cero y 'anular' su señal. Una vez que se haya completado, puede hacer una simple detección máxima / mínima.

Hay más detalles involucrados, puede enviarme un correo electrónico si desea discutir cómo implementarlo. He hecho un trabajo similar en esto antes.

EDITAR: Aquí hay algunas imágenes que ilustran Daub-Tetra Denoiser:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Spacey
fuente
1
Me gusta esto ... ¿Hay una biblioteca de referencia para esto en matlab?
Ktuncer
@Ktuncer Envíame un correo electrónico.
Spacey
4

Estoy lejos de ser un experto, pero esto es lo que haría:

Parece que tiene una señal que varía lentamente superpuesta con fluctuaciones. Los picos que busca son algunas fluctuaciones más fuertes, por lo que los detectaría usando eso.

  1. X(T)Y(t)

  2. XYσXY

  3. |(XY)(t)|>α×σα

Se puede detectar específicamente un sobreimpulso o un sobreimpulso eliminando el valor absoluto y utilizando la prueba adecuada. ¿Es esto lo que estás buscando?

Jean-Yves
fuente
1
Enfoque interesante ¿Qué es σ? (¿Std. Dev?) Además, aparte de las matemáticas, ¿cuál es la lógica detrás de esto?
Ktuncer
σ
4σ
@ user4749 Esto lo ayudará a obtener los picos atípicos, aunque no estoy seguro de que obtendrá los picos generales que está buscando (¿estoy asumiendo que está buscando los picos 'amplios'?)
Spacey
1
@ Jean-Yves ¡Hola! :-) ¿Estás asumiendo que el ruido es guassiano aquí por cierto? (Es por eso que podemos umbral estándar). Tengo curiosidad, ¿y si el ruido es de color?
Spacey
4

La detección de picos tiene bastantes aplicaciones, para señales 1D o multidimensionales. Aquí hay algunos ejemplos que muestran cuán variadas pueden ser estas señales y sus interpretaciones de un pico:

  • Los datos 1D del póster original;

  • Transformada de una imagen, cada pico corresponde a una línea en la imagen original; ingrese la descripción de la imagen aquí

  • autocorrelación de una imagen, cada pico corresponde a una frecuencia que revela un "patrón periódico"; ingrese la descripción de la imagen aquí

  • correlación cruzada "generalizada" de una imagen y una plantilla, cada pico corresponde a una aparición de la plantilla en la imagen (podemos estar interesados ​​en detectar solo el mejor pico o varios picos);

ingrese la descripción de la imagen aquí

  • Como resultado de filtrar una imagen para las esquinas de Harris, cada pico corresponde a una esquina de la imagen original.

ingrese la descripción de la imagen aquí

Estas son definiciones y técnicas de detección de picos que he encontrado, ciertamente hay otros que olvidé o no sé, y espero que otras respuestas los cubran.

Las técnicas de preprocesamiento incluyen suavizado y eliminación de ruido. La respuesta de @ Mohammad es sobre wavelets, y puede ver varios usos de ellos en la documentación del WaveletThreshold de Mathematica (por cierto , también tomé mis ejemplos).

Entonces buscas máximos. Dependiendo de su aplicación, solo necesita los máximos globales (p. Ej., Registro de imágenes), algunos máximos locales (p. Ej. Detección de líneas) o muchos máximos locales (detección de puntos clave): esto puede hacerse de forma iterativa, buscando el valor más alto en los datos luego borrando una región alrededor del pico seleccionado, etc. hasta que el valor restante más alto esté por debajo de un umbral. Alternativamente, puede buscar los máximos locales dentro de un determinado tamaño de vecindario y mantener solo los máximos locales cuyos valores están por encima de un umbral; algunos recomiendan mantener los máximos locales en función de su distancia al resto de los máximos locales (cuanto más el mejor). El arsenal también presenta operaciones morfológicas: los máximos extendidos y la transformación de sombrero de copa pueden ser adecuados.

Vea los resultados de tres de estas técnicas en una imagen filtrada para las esquinas de Harris:

ingrese la descripción de la imagen aquí

Además, algunas aplicaciones intentan encontrar picos a una resolución de subpíxeles. La interpolación, que puede ser específica de la aplicación, es útil.

Hasta donde yo sé, no hay una bala de plata, y los datos dirán qué técnicas funcionan mejor.

Será realmente bueno tener más respuestas, especialmente. viniendo de otras disciplinas.

Matthias Odisio
fuente
¿Cómo extrajo los datos del cuerpo de la pregunta para su uso? No puedo encontrarlo en una forma limpia.
Léo Léopold Hertz 준영
1
¿Hice? Usé otros ejemplos. Al volver a ver la pregunta hoy, no veo cómo extraer datos de la pregunta de manera limpia.
Matthias Odisio
-1

Creo que un algoritmo típico de detección de picos es así donde refestá peak(bottom).

for i=1,N   {
       if i=1   {  ref=data(i) }
       else { if data(i)<=ref {ref =data(i) }}
}
fumio ueda
fuente
3
No desestimé tu respuesta, pero creo que fue considerada fuera de tema por aquellos que lo hicieron. Este boceto detecta el mínimo absoluto de una secuencia. El OP está buscando picos, donde uno necesita lidiar con la localidad y el ruido.
Matthias Odisio
Por desgracia, no ha habido ninguna respuesta a la recompensa de la "respuesta canónica". A ese respecto, todas las respuestas son igualmente "irrelevantes"; Le di la recompensa a esta respuesta porque es la más antigua.
Matthias Odisio