Tengo una serie de datos (matriz única). Si tomo estos datos y los trazo, puedo ver que hay múltiples picos. Sin embargo, si me acerco a una sección de datos, veo que hay un ruido considerable.
Me gusta detectar cuántos picos en los datos con poco tiempo de CPU y energía. Pensé en detectar las pendientes de estos picos (podría ser fuerte o suave al subir o bajar) y mirar el número de pendientes para determinar el número de picos. (2 pendientes positivas y negativas para cada pico)
¿Algún indicador de cómo puedo calcular las pendientes en presencia de ruido?
El código irá a un sistema embebido, la memoria es limitada, así que preferiblemente me gusta implementar algo que no requiera ninguna copia de datos significativa.
peak-detection
Ktuncer
fuente
fuente
Respuestas:
Depende del tipo de ruido y el tipo de señal. Muestra un ejemplo si quieres una buena respuesta. Pero, dicho eso, en general probablemente desee filtrar la señal con paso bajo. Si yo fuera usted, tomaría un espectro de potencia de Fourier para ver si la mayor parte del ruido es de alta frecuencia, y la señal que me interesa principalmente en un rango más bajo. Si se superponen, bueno, así es la vida. Tendría que pensar más en las cosas.
Un filtro de paso bajo que es bueno para la señal ruidosa en muchos casos es el filtro Savitzky-Golay. Se describe en Recetas numéricas, y para Python hay una función en Python Numpy Cookbook. Es simplemente una convolución con un núcleo pequeño. Elija el tamaño de la ventana en función del ancho de los picos u otras características, lo suficientemente ancho como para emitir el ruido, pero no más ancho que las características. Puede ser pequeño, digamos cinco puntos, o más grande como docenas, tal vez cien.
También elige un orden polinomial, generalmente uso 2 o 4. El orden 2 está bien para cuando la ventana es pequeña, <10 puntos o abarca menos de medio ciclo más o menos (si su señal se asemeja a un seno) mientras que el orden 4 es es mejor para combinar formas de pico distorsionadas, pero le gusta tener alrededor de 9 o más puntos. Pero mucho depende de la forma y frecuencia del ruido.
Como otros dicen en los comentarios, encontrar derivados probablemente no sea la mejor estrategia, pero si de todos modos desea encontrar derivados, el filtro Savitzky-Golay puede hacerlo, alisando e informando simultáneamente la derivada en lugar de la señal.
fuente