Sunday 26 November 2017

Filtro Recursivo Medio Móvil


El científico y los ingenieros Guía para el procesamiento de señales digitales Por Steven W. Smith, Ph. D. Una tremenda ventaja del filtro de media móvil es que se puede implementar con un algoritmo que es muy rápido. Para entender este algoritmo, imagine pasar una señal de entrada, x, a través de un filtro de media móvil de siete puntos para formar una señal de salida, y. Ahora veamos cómo se calculan dos puntos de salida adyacentes, y 50 e y 51: Estos son casi los mismos puntos de cálculo x 48 a x 53 para y 50, y de nuevo para y 51. Si y 50 ya ha sido calculado , La forma más eficiente de calcular y 51 es: Una vez que se ha encontrado y 51 usando y 50, entonces y 52 se puede calcular a partir de la muestra y 51, y así sucesivamente. Después de que el primer punto se calcula en y, todos los otros puntos se pueden encontrar con sólo una sola suma y resta por punto. Esto se puede expresar en la ecuación: Observe que esta ecuación utiliza dos fuentes de datos para calcular cada punto en la salida: puntos de la entrada y puntos previamente calculados de la salida. Esto se llama una ecuación recursiva, lo que significa que el resultado de un cálculo se utiliza en los cálculos futuros. (El término recursivo también tiene otros significados, especialmente en informática). En el capítulo 19 se analizan más detalladamente diversos filtros recursivos. Tenga en cuenta que el filtro recursivo de media móvil es muy diferente de los filtros recursivos típicos. En particular, la mayoría de los filtros recursivos tienen una respuesta de impulso infinitamente larga (IIR), compuesta de sinusoides y exponenciales. La respuesta de impulso de la media móvil es un pulso rectangular (respuesta de impulso finito, o FIR). Este algoritmo es más rápido que otros filtros digitales por varias razones. En primer lugar, sólo hay dos cálculos por punto, independientemente de la longitud del núcleo del filtro. En segundo lugar, la suma y la resta son las únicas operaciones matemáticas necesarias, mientras que la mayoría de los filtros digitales requieren una multiplicación que consume tiempo. En tercer lugar, el esquema de indexación es muy simple. Cada índice de la ecuación 15-3 se encuentra añadiendo o restando constantes enteras que se pueden calcular antes de que comience el filtrado (es decir, p y q). Por último, todo el algoritmo puede realizarse con representación entera. Dependiendo del hardware utilizado, los enteros pueden ser más de un orden de magnitud más rápido que el punto flotante. Sorprendentemente, la representación entera funciona mejor que el punto flotante con este algoritmo, además de ser más rápido. El error de redondeo de aritmética de punto flotante puede producir resultados inesperados si no tiene cuidado. Por ejemplo, imagine una señal de muestra de 10.000 que se filtra con este método. La última muestra en la señal filtrada contiene el error acumulado de 10.000 adiciones y 10.000 sustracciones. Esto aparece en la señal de salida como un desplazamiento a la deriva. Los enteros no tienen este problema porque no hay error de redondeo en la aritmética. Si debe utilizar el punto flotante con este algoritmo, el programa de la Tabla 15-2 muestra cómo usar un acumulador de doble precisión para eliminar esta deriva. No estoy seguro de la solución correcta, ya que sumando el promedio de cada muestra se introduciría una cantidad justa De error de redondeo. Hmm. Me pregunto si separar la parte fraccionaria de la parte entera ayudaría. Divida la parte entera de cada número por el recuento. Mantenga tres cantidades corrientes: 1) El promedio de las partes enteras, 2) El resto de cada división, y 3) La parte fraccional de cada número. Cada vez que se divide la parte entera de un número, el resultado de la parte entera se añade a la suma corriente de funcionamiento y el resto se añade a la suma corriente restante. Cuando la suma corriente restante obtiene un valor mayor o igual que el recuento, se divide por el recuento con el resultado de la parte entera añadido a la suma corriente de funcionamiento y el resto se añade a la suma corriente restante. Además, en cada cálculo, la parte fraccionaria se añade a la suma de ejecución fraccionaria. Cuando se termina el promedio, la suma corriente restante se divide por el recuento y el resultado se añade a la suma corriente de ejecución como un número flotante. Por ejemplo: Ahora qué hacer con la suma de ejecución fraccionaria. El peligro de desbordamiento es mucho menos probable aquí, aunque todavía es posible, así que una manera de manejarlo sería dividir la suma de ejecución fraccional por el recuento al final y agregarlo a nuestro resultado: Una alternativa sería comprobar el funcionamiento fraccionario Suma en cada cálculo para ver si es mayor o igual que count. Cuando eso sucede, haz lo mismo que hacemos con la suma restante. Excelente Jomit Vaghela 6-Mar-07 21:00 Me gustó lo que dijiste que los pequeños trabajos rápidamente se convierten en grandes puestos de trabajo. Pensar en la optimización mientras que la codificación es una buena práctica. Gran esfuerzo y explicación, gracias Mike DiRenzo 5-Mar-07 16:26 Esta es la primera vez que he respondido a uno de sus artículos. Sin embargo, soy un lector muy ávido. Mientras que en la universidad, tuve que calcular medias móviles ponderadas y simples también. Heck, incluso tuve que crear algunos de mis propios algoritmos de media móvil en una aplicación de ERP personalizado hace un tiempo basado en algunas de las mismas fórmulas que aprendí en las operaciones 101. Pero esta aplicación, utilizando Generics, supera con creces cualquier cosa en términos de optimización, Sencillez y frescura a la derecha. Muchas gracias por esto. Uno de tus muchos fans, En silencio y silencio, la verdad queda clara. Ewma gobgob 5-Mar-07 5:30 Si su intento para calcular una media móvil simple, usted tiene que mantener una colección, que es bastante compleja para una tarea tan simple. ¿Cómo sobre el uso de un ewma Sus 2 líneas de código, mucho más simple. Alfa exp (-elapsedTimeSinceLastValue) ewma alfa ewma (1-alfa) newValue Re: ewma Marc Clifton 5-Mar-07 5:47 ¿Qué tal si usas un ewma? Para los lectores que no saben lo que es un ewma, es un exponente Weighted media móvil. La gente es notoriamente imposible. --DavidCrow No hay excusa para no comentar su código. - John Simmons / programador proscrito Las personas que dicen que refactorizarán su código más tarde para que sea bueno no entienden la refactorización, ni el arte y el arte de la programación. - Josh Smith Re: ewma pwasser 5-Mar-07 13:21 Una estimación del promedio móvil si el tamaño bin para el promedio móvil es n puede obtenerse mediante: NewAverage (((n-1) OldAverage) newValue) / n Esto funciona una vez que el contenedor está lleno (número de muestra n). El contenedor parcialmente lleno a menudo se trata utilizando un valor de semilla para el promedio móvil inicial (OldAverage) y luego utilizando este cálculo. Esto supone una distribución normal de los valores, etc. Usted ha estado ocupado Colin Angus Mackay 4-Mar-07 12:37 Publicando dos artículos esta noche. Gran trabajo No sé cómo lo haces. Ive consiguió cerca de 4 o 5 artículos mitad terminado y yo apenas nunca parecen encontrar el tiempo para terminarlos. Bien. Tal vez si me quedaba fuera de la sala Id manejarlo. Re: Youve sido ocupado Marc Clifton 4-Mar-07 14:25 Colin Angus Mackay escribió: Publicar dos artículos esta noche. Gran trabajo Gracias realmente estaba escribiendo el artículo sobre el promedio de ejecución y se dio cuenta de que la lista circular sería realmente un artículo auténtico muy bueno. Además, son artículos ligeros. Puedo ponerlos en marcha muy rápido. Su apenas difícil de pensar de la materia útil pero simple. Resulta que necesitaba estas dos clases de todos modos. La gente es notoriamente imposible. --DavidCrow No hay excusa para no comentar su código. - John Simmons / programador proscrito Las personas que dicen que refactorizarán su código más tarde para que sea bueno no entienden la refactorización, ni el arte y el arte de la programación. - Josh Smith Re: Youve sido ocupado JeffPClark 8-Mar-07 1:07 De lo que he leído de Marc, que probablemente tiene un programa que puede examinar un pedazo de código y explicar los detalles intrincados, a continuación, publicar directamente a Code Project . Jeff Clark Architecto de sistemas JP Clark, INC. Columbus, Ohio Última actualización: 21-Nov-16 14:47 Noticias generales Sugerencia Pregunta Bug Respuesta Joke Praise Rant Admin Utilice CtrlLeft / Right para cambiar (0) 0 bull 2 ​​160160160160 El filtro de media móvil es un filtro FIR de longitud N con todos los toques establecidos igual a (1 / N) .160 Se conoce por la separación de frecuencia pésima, pero la respuesta de tiempo excelente - en ese sentido, fuera-Bessels un filtro de Bessel.160 Puede implementarlo con SigmaStudios FIR bloque como se describe aquí: Cuanto más largo el filtro, - pero el algoritmo de filtro FIR estándar utiliza muchas instrucciones para los filtros enormes, porque tiene que multiplicar los coeficientes para cada toque.160 Esto es un desperdicio cuando todos los coeficientes son los mismos.160 Como el capítulo 15 de Steven W. Smiths, Se puede hacer un filtro de media móvil con una técnica recursiva que tiene un toque antes y después de un retardo de tamaño (N-1). Este filtro aparece a continuación como parte de un circuito de prueba con fuente de señal y un filtro de Bessel para comparación : 160160160160 Los coeficientes se extraen al bloque de ganancia simple en la entrada.160 El presente ejemplo se suma a la salida cuando entra en el retardo, la muestra retrasada resta de la salida a medida que sale.160 El sumador con la retroalimentación acumula estas adiciones y Sustracciones para formar la salida - esto hace algo que es trivial en C, pero de lo contrario es un dolor en la GUI.160 Aunque se utiliza una técnica recursiva, el filtro sigue siendo un verdadero filtro FIR - la longitud de su respuesta al impulso se establece sólo por Su retraso. 160160160160 Mi entrada de prueba es una onda cuadrada con ruido añadido.160 Los resultados filtrados aparecen como el trazo superior en ambas fotos - Primero el filtro de media móvil: El filtro de Bessel: 160160160160 El filtro de media móvil permite más ruido, pero conserva mejor el La forma de las ondas cuadradas - no gira alrededor de las esquinas, y las pendientes ascendentes y descendentes son simétricas (su fase lineal) .160 Escuchar los dos modos de onda con auriculares muestra un resultado similar - más ruido con el filtro de media móvil, pero la característica El sonido de una onda cuadrada viene a través.

No comments:

Post a Comment