¿Cómo encontrar estimaciones suavizadas de la derivada y la segunda derivada de una señal?

10

Tengo una señal muestreada en Δt : fi(ti=iΔt) donde i=0,,n1 . Quiero encontrar la primera y segunda derivada de la señal: f(t) y f(t) .

Mi primer pensamiento fue estimar los derivados por diferencias centrales:

f(ti)=f(ti+1)f(ti1)2Δtf(ti)=f(ti+1)2f(ti)+f(ti1)(Δt)2

Sin embargo, la señal puede tener mucho ruido de alta frecuencia que puede causar fluctuaciones rápidas en f y f .

¿Cuál sería la mejor manera de encontrar estimaciones "suavizadas" de f y f ?

Andy
fuente

Respuestas:

6

Probablemente depende más de sus datos. Solo sepa que, dado que la diferenciación es una operación lineal, si elige cualquier filtro lineal para suavizar f 'yf' ', es equivalente a suavizar f usando ese mismo filtro y luego tomar sus derivados.

¿Puedes publicar algunas fotos o más información sobre la señal que deseas diferenciar? Probablemente lo que está buscando es algún tipo de filtro de paso bajo para suavizar la señal. Un par de opciones realmente simples incluyen un filtro recursivo unipolar como , o un filtro Hann, que solo involucra señal con una ventana de Hann. La opción de filtro Hann es buena porque es de fase lineal. Si conoce el rango de frecuencia que le interesa, puede diseñar un filtro de paso bajo adecuado en el dominio de frecuencia.y(n)=ax(n)+(1a)y(n1)

schnarf
fuente
Gracias schnarf! Entonces, dado que el suavizado seguido por la diferenciación es igual a la diferenciación seguida por el suavizado; También podría suavizar la señal original convolucionando, por ejemplo, con la ventana de Hann. ¿Qué tal el enfoque más simple de usar una diferencia finita en un lapso mayor: f '(t) ~ = [f (t + 10 * Dt) -f (t-10 * Dt)] / (20 * Dt), esto dar una estimación bastante buena de un derivado suavizado?
Andy
4

El filtro Savitzky-Golay proporciona estimaciones suaves de la señal y las primeras pocas derivadas.

Una implementación de MATLAB se puede encontrar aquí .

eglaser
fuente