5 votos

Aplicación sencilla de un filtro digital de paso bajo para un muestreo no uniforme?

Tengo un sistema que muestrea una entrada analógica y quiero filtrar ese valor utilizando un filtro sencillo de primer orden. EG algo de la forma:

Yn = A\*Xn + B\*Yn-1

Sin embargo, no tengo ningún control sobre el proceso subyacente y el período de muestreo no es uniforme, y varía (aleatoriamente) en algún lugar entre 25ms y 29ms. Además quiero usar una constante de tiempo de 30 minutos, y no puedo mantener un buffer de 72.000 valores de muestra.

Dado que la implementación de un filtro típico requiere un periodo de muestreo uniforme, ¿existe algún algoritmo sencillo que tenga en cuenta la diferencia de tiempo entre Yn-1 y Xn? (que supongo que en realidad significa una versión variable en el tiempo de mis "constantes" A y B)


Tenga en cuenta que estoy inclinado a simplemente tomar el tiempo de muestreo promedio durante un período prolongado y el uso que para calcular mis constantes, sin embargo, también existe la posibilidad de que el sistema final no se ejecuta en la misma tasa promedio como mi sistema de prueba, así que quiero llegar a una solución que es algo adaptable.


responder a las preguntas

  1. La señal filtrada se utiliza como parte de un sistema de control de vibraciones en algunos equipos industriales. Se utilizará más con fines cualitativos que cuantitativos.
  2. Los requisitos del cliente son una media móvil de 30 minutos para los datos.
  3. Tengo cero control sobre la frecuencia de muestreo.
  4. Y la frecuencia de muestreo varía cada segundo
  5. Y la frecuencia de muestreo define la velocidad a la que se ejecuta mi código
  6. El sistema final debería funcionar más o menos a la misma velocidad que mi sistema de prueba, aunque podría ser algo más lento, tal vez hasta una velocidad de 35 ms.

5voto

ianb Puntos 659

Dices que no tienes control sobre la frecuencia de muestreo de entrada. Eso se entiende, pero no estás considerando el hecho de que puedes remuestrear una vez dentro de tu sistema digital Y, estoy suponiendo que sí tienes control sobre eso, de lo contrario ¿por qué estarías haciendo esta pregunta? Entonces, remuestrea tus datos digitales así: -

enter image description here

Ahora, la "muestra real" 1 tardó 25 ms y la "muestra real" 2 tardó 29 ms, pero ¿a quién le importa si remuestreas internamente esos datos? Sí, tienes que procesar a una velocidad mucho mayor, pero no es como si tuvieras que hacer grandes recálculos cada vez porque AXn está estática durante 25 a 29 muestras.

3voto

FranckTheMiner Puntos 18

Consideremos el filtro de tiempo continuo de primer orden dy(t)dt=ky(t)+kx(t)

Una de las muchas opciones para discretizar el filtro anterior es

y(t)y(tTs)Ts=ky(tTs)+kx(t) y(t)=kTsx(t)+(1kTs)y(tTs)

A y B que debe utilizarse para cada muestra puede hallarse a partir de la expresión anterior.

Lo anterior es sólo un método ad hoc. Puede haber algoritmos adecuados para el filtrado de frecuencia de muestreo variable disponibles en lierature con propiedades matemáticas bien definidas.

Una sugerencia de From DSP.SE

Recuerda que los filtros son sistemas dinámicos y resuelve la ecuación diferencial ordinaria (EDO) correspondiente. En el segundo método, básicamente se utiliza el paso temporal recuperado como paso temporal en el solucionador de la EDO. Suponiendo que tienes un sistema de segundo orden:

0voto

Andrew Puntos 327

Hay formas de hacer exactamente lo que pides... pero en realidad no necesitas hacerlo. Una media de 30 minutos corriendo borrará todo tu duro trabajo.

Empiece convirtiendo a una frecuencia de muestreo normal de 1 segundo simplemente tomando la media de todos los valores de muestreo dentro de cada segundo.

A continuación, aplique métodos de muestreo regular al resultado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X