Cálculo derivado

9

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.

Ktuncer
fuente
1
Suenas como en una tienda pidiendo algo que necesitas
2
Si el ruido es relativamente alto en frecuencia, entonces podría filtrar los datos de paso bajo
Paul R
44
¿Puedes publicar una o más parcelas de ejemplo de tus datos? Eso nos ayudará a ver cómo se ve. La detección de picos generalmente no se realiza a través de la estimación derivada, ya que el cálculo de la derivada de una señal es muy sensible al ruido (es una operación de paso alto). Puede haber características de la señal de interés que puede explotar. Además, siempre hay una compensación entre la probabilidad de detectar correctamente un pico y la probabilidad de declarar falsamente un pico que realmente no es de interés. ¿Qué es más importante para tu aplicación?
Jason R
2
Si puede producir una trama, sería útil.
Jason R
1
Si desea detectar picos, puede buscar la detección de picos (consulte dsp.stackexchange.com/questions/1302/peak-detection-approach ).
Geerten

Respuestas:

1

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.

DarenW
fuente