Tuesday 14 November 2017

Implementación Recursiva Media Móvil


El promedio móvil como filtro El promedio móvil se utiliza a menudo para suavizar los datos en presencia de ruido. La media móvil simple no siempre se reconoce como el filtro de respuesta de impulso finito (FIR) que es, mientras que es realmente uno de los filtros más comunes en el procesamiento de señales. Tratarlo como un filtro permite compararlo con, por ejemplo, filtros de sinc de ventana (véanse los artículos sobre filtros de paso bajo, paso alto, paso de banda y rechazo de banda para ejemplos de los mismos). La principal diferencia con estos filtros es que el promedio móvil es adecuado para señales para las cuales la información útil está contenida en el dominio del tiempo. De las cuales las mediciones de suavizado por promediado son un excelente ejemplo. Sin embargo, los filtros windowed-sinc son fuertes en el dominio de la frecuencia. Con la ecualización en el procesamiento de audio como un ejemplo típico. Hay una comparación más detallada de ambos tipos de filtros en el dominio del tiempo frente al rendimiento de los dominios de frecuencia de los filtros. Si tiene datos para los que tanto el tiempo como el dominio de frecuencia son importantes, entonces puede que desee echar un vistazo a Variaciones en el promedio móvil. Que presenta una serie de versiones ponderadas de la media móvil que son mejores en eso. El promedio móvil de longitud (N) puede definirse como escrito tal como se implementa típicamente, con la muestra de salida actual como el promedio de las muestras (N) anteriores. Visto como un filtro, el promedio móvil realiza una convolución de la secuencia de entrada (xn) con un pulso rectangular de longitud (N) y altura (1 / N) (para hacer el área del pulso y, por tanto, la ganancia de El filtro, uno). En la práctica, es mejor tomar (N) impar. Aunque un promedio móvil también puede calcularse usando un número par de muestras, usar un valor impar para (N) tiene la ventaja de que el retardo del filtro será un número entero de muestras, ya que el retardo de un filtro con (N) Muestras es exactamente ((N-1) / 2). El promedio móvil puede entonces alinearse exactamente con los datos originales desplazándolo por un número entero de muestras. Dominio de tiempo Dado que el promedio móvil es una convolución con un pulso rectangular, su respuesta de frecuencia es una función sinc. Esto hace que sea algo así como el dual del filtro windowed-sinc, ya que es una convolución con un pulso sinc que da como resultado una respuesta de frecuencia rectangular. Es esta respuesta de frecuencia de sinc que hace que el promedio móvil sea un pobre intérprete en el dominio de la frecuencia. Sin embargo, funciona muy bien en el dominio del tiempo. Por lo tanto, es perfecto para suavizar los datos para eliminar el ruido, mientras que al mismo tiempo sigue manteniendo una respuesta de paso rápido (Figura 1). Para el ruido gaussiano blanco aditivo típico (AWGN) que se asume a menudo, las muestras del promedio (N) tienen el efecto de aumentar el SNR por un factor de (sqrt N). Dado que el ruido para las muestras individuales no está correlacionado, no hay razón para tratar cada muestra de manera diferente. Por lo tanto, el promedio móvil, que da a cada muestra el mismo peso, eliminará la cantidad máxima de ruido para una nitidez de respuesta dada. Implementación Debido a que es un filtro FIR, el promedio móvil puede implementarse a través de la convolución. Entonces tendrá la misma eficiencia (o falta de ella) como cualquier otro filtro FIR. Sin embargo, también se puede implementar recursivamente, de una manera muy eficiente. Se deduce directamente de la definición que esta fórmula es el resultado de las expresiones para (yn) y (yn1), es decir, donde observamos que el cambio entre (yn1) y (yn) es que un término extra (xn1 / N) Aparece al final, mientras que el término (xn-N1 / N) se elimina desde el principio. En aplicaciones prácticas, a menudo es posible omitir la división por (N) para cada término, compensando la ganancia resultante de (N) en otro lugar. Esta implementación recursiva será mucho más rápida que la convolución. Cada nuevo valor de (y) se puede calcular con sólo dos adiciones, en lugar de las (N) adiciones que serían necesarias para una implementación directa de la definición. Una cosa a tener en cuenta con una implementación recursiva es que se acumularán errores de redondeo. Esto puede o no ser un problema para su aplicación, pero también implica que esta implementación recursiva funcionará mejor con una implementación entera que con números de coma flotante. Esto es bastante inusual, ya que una implementación en coma flotante suele ser más simple. La conclusión de todo esto debe ser que usted nunca debe subestimar la utilidad del filtro de media móvil simple en aplicaciones de procesamiento de señales. Herramienta de diseño de filtros Este artículo se complementa con una herramienta de diseño de filtros. Experimente con diferentes valores para (N) y visualice los filtros resultantes. Pruébalo ahora Estoy implementando un filtro de media móvil de paso múltiple 80-72-64-48 para un sistema embebido en C y en punto fijo. La implementación es un buffer circular donde im mantiene una suma corriente y calcula yn yn-1 xn-xn-M donde M es la longitud de un filtro. Esto se hace para cada subfiltro con la salida de una porción como entrada para otra. Im escalando mis coeficientes por 2 que me da coeficientes de longitud 2 o 2 dependiendo de la longitud del filtro. Entonces el resultado es reducido de nuevo por 2 para obtener la salida correcta. Ahora, todo se ve bien en escalas de tiempo corto, pero durante largos períodos me da una deriva. El motivo de la implementación recursiva es guardar cálculos en un procesador incorporado. He incluido la imagen de algunos de los internos de mi filtro, esto es cuando se aplica una respuesta de paso y podemos ver las funciones de transferencia de los filtros tomando forma, cuadrado, triángulo, y luego aproximándose a un gaussiano para que el filtro funcione como se esperaba. ¿Hay alguna manera de arreglar esto, y donde es la fuente más probable de esto. Es esta deriva debido a un poco perderse en el cambio o algo más. La deriva no está presente para las entradas de CC, pero para las señales de CA se desplaza lentamente. SOLUCIÓN: El problema estaba en el acumulador como sugirió Robert en los comentarios. La cuestión era que un elemento del cálculo había pasado por un desplazamiento hacia arriba y hacia abajo extra en comparación con el resto, lo que creó una compensación redonda que se acumuló. Pidió 27 de abril a las 21:12 es su acumulador yn redondeado o cuantificado de cualquier manera que debe asegurarse de que el xn-M que se resta es exactamente el mismo valor que xn que se añadió M muestras hace. Así que realmente quieres hacer una suma móvil. En lugar de una media móvil y escala la salida de su suma móvil (con 1 / M) para obtener el promedio. Esto es bastante factible y aún mejor hecho en punto fijo en lugar de punto flotante. Ndash robert bristow-johnson Apr 27 15 at 22:52 quotScaling los coeficientesquot Supongo que dividir por M después de cada etapa y que es el coeficiente que se escala Que es probablemente la causa de la compensación. Mejor que dividir por prod Mi al final de todos los filtros. Es necesario mantener un registro de las amplitudes internas aunque como eventualmente desbordar los acumuladores. Sin embargo, esto se resuelve fácilmente a través de la aritmética de módulo (de la cual el complemento de dos dimensiones es un caso especial). Ndash Oscar Apr 28 15 at 7:00 Oscar, este es un filtro de punto fijo. Lo que significa que sólo hacer aritmética entero. Para un promedio móvil de longitud gt 1 con ganancia 1, las constantes de filtro serán una fracción que no es representable en números enteros. Por lo tanto, los coeficientes se escalan para hacerlos enteros por desplazamiento hacia la izquierda x muchos bits. Debido a esto la salida final tiene que ser desplazada también a la derecha por tantos bits. No puedo mantener una suma corriente a través de los 4 filtros sin restaurar la salida entre, la señal de entrada es de 16 bits y con el coeficiente de escala y longitudes Un solo filtro utiliza mi espacio entero de acumulador de ndash de 32 pedacitos user70614 Apr 28 15 at 8: 20The Scientist and Engineers Guide to Digital Signal Processing 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 ya 50 ha sido calculado , La forma más eficiente de calcular y 51 es: Una vez que se ha encontrado y 51 utilizando 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 sustracción 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 comments:

Post a Comment