Filtro Lineal Medio Móvil
Filtros FIR, filtros IIR y la ecuación de diferencia de coeficiente constante lineal Filtros de media móvil causal (FIR) Hemos discutido sistemas en los que cada muestra de la salida es una suma ponderada de (cierta de) las muestras de la entrada. Tomemos un sistema de suma ponderada causal, donde causal significa que una muestra de salida dada depende solamente de la muestra de entrada actual y de otros insumos más temprano en la secuencia. Ni los sistemas lineales en general, ni los sistemas finitos de respuesta al impulso en particular, necesitan ser causales. Sin embargo, la causalidad es conveniente para una especie de análisis que se va a explorar en breve. Si simbolizamos las entradas como valores de un vector x. Y las salidas como valores correspondientes de un vector y. Entonces tal sistema se puede escribir como cuando los valores de b son pesos aplicados a las muestras de entrada actuales y anteriores para obtener la muestra de salida actual. Podemos pensar en la expresión como una ecuación, con el signo de igual signo que es igual, o como una instrucción de procedimiento, con el signo de igual signo de asignación. Permite escribir la expresión para cada muestra de salida como un bucle MATLAB de sentencias de asignación, donde x es un vector N-length de muestras de entrada, yb es un vector M-length de pesos. Para tratar el caso especial al principio, incorporaremos x en un vector más largo xhat cuyas primeras muestras M-1 son cero. Escribiremos la suma ponderada para cada y (n) como un producto interno, y haremos algunas manipulaciones de las entradas (como invertir b) para este fin. Este tipo de sistema es a menudo llamado un filtro de media móvil, por razones obvias. De nuestras discusiones anteriores, debe ser obvio que tal sistema es lineal y invariable del turno. Por supuesto, sería mucho más rápido usar la función de convolución de MATLAB conv () en lugar de nuestro mafilt (). En lugar de considerar las primeras muestras M-1 de la entrada como cero, podríamos considerarlas como las mismas que las muestras M-1 pasadas. Esto es lo mismo que tratar la entrada como periódica. Utilice bien cmafilt () como el nombre de la función, una pequeña modificación de la función mafilt () anterior. En la determinación de la respuesta de impulso de un sistema, normalmente no hay diferencia entre estos dos, ya que todas las muestras no iniciales de la entrada son cero: Dado que un sistema de este tipo es lineal y invariable al desplazamiento, sabemos que su efecto en cualquier Sinusoid será sólo a escala y cambiarlo. Aquí es importante que utilicemos la versión circular. La versión circularmente convoluida se desplaza y se escala un poco, mientras que la versión con convolución ordinaria se distorsiona al inicio. Vamos a ver cuál es el escalado y desplazamiento exactos usando fft: Tanto la entrada como la salida tienen amplitud sólo en las frecuencias 1 y -1, que es como debería ser, dado que la entrada era una sinusoide y el sistema era lineal. Los valores de salida son mayores en una relación de 10.6251 / 8 1.3281. Esta es la ganancia del sistema. ¿Qué pasa con la fase? Sólo necesitamos mirar donde la amplitud es distinta de cero: La entrada tiene una fase de pi / 2, como pedimos. La fase de salida se desplaza por 1,0594 adicionales (con signo opuesto para la frecuencia negativa), o alrededor de 1/6 de un ciclo a la derecha, como podemos ver en el gráfico. Ahora vamos a intentar una sinusoide con la misma frecuencia (1), pero en lugar de la amplitud 1 y fase pi / 2, vamos a intentar la amplitud 1,5 y la fase 0. Sabemos que sólo la frecuencia 1 y -1 tendrá una amplitud no nula, Basta con mirarlos: de nuevo la relación de amplitud (15.9377 / 12.0000) es 1.3281 - y en cuanto a la fase se desplaza nuevamente hacia 1.0594. Si estos ejemplos son típicos, podemos predecir el efecto de nuestro sistema (respuesta al impulso .1.2 .3 .4 .5) en cualquier sinusoide con frecuencia 1 - la amplitud se incrementará en un factor de 1,3281 y la fase (frecuencia positiva) se desplazará en 1,0594. Podríamos pasar a calcular el efecto de este sistema sobre sinusoides de otras frecuencias por los mismos métodos. Pero hay una manera mucho más simple, y una que establece el punto general. Dado que la convolución (circular) en el dominio del tiempo significa la multiplicación en el dominio de la frecuencia, de ello se deduce que, en otras palabras, la DFT de la respuesta de impulso es la relación de la DFT de la salida a la DFT de la entrada. En esta relación, los coeficientes DFT son números complejos. Desde abs (c1 / c2) abs (c1) / abs (c2) para todos los números complejos c1, c2, esta ecuación nos dice que el espectro de amplitud de la respuesta de impulso siempre será la relación del espectro de amplitud de la salida a la Del input. En el caso del espectro de fase, ángulo (c1 / c2) ángulo (c1) - ángulo (c2) para todos c1, c2 (con la condición de que las fases que difieren por n2pi se consideran iguales). Por lo tanto, el espectro de fase de la respuesta de impulso siempre será la diferencia entre los espectros de fase de la salida y la entrada (con las correcciones de 2pi que sean necesarias para mantener el resultado entre - pi y pi). Podemos ver los efectos de fase más claramente si desempolvamos la representación de fase, es decir, si añadimos varios múltiplos de 2pi como sea necesario para minimizar los saltos que son producidos por la naturaleza periódica de la función angle (). Aunque la amplitud y la fase se usan generalmente para la presentación gráfica e incluso tabular, ya que son una manera intuitiva de pensar sobre los efectos de un sistema en los diversos componentes de frecuencia de su entrada, los complejos coeficientes de Fourier son más útiles algebraicamente, ya que permiten La expresión simple de la relación El enfoque general que acabamos de ver funcionará con filtros arbitrarios del tipo esbozado, en los que cada muestra de salida es una suma ponderada de algún conjunto de muestras de entrada. Como se mencionó anteriormente, a menudo se les llama filtros de Respuesta de Impulso Finito, ya que la respuesta de impulso es de tamaño finito, oa veces filtros de Promedio Móvil. Podemos determinar las características de respuesta de frecuencia de dicho filtro a partir de la FFT de su respuesta de impulso, y también podemos diseñar nuevos filtros con características deseadas por IFFT a partir de una especificación de la respuesta de frecuencia. Filtros Autoregresivos (IIR) No tendría mucho sentido tener nombres para los filtros FIR a menos que hubiera algún otro tipo de distinción, por lo que aquellos que han estudiado la pragmática no se sorprenderán al saber que hay de hecho otro tipo principal Del filtro lineal tiempo-invariante. Estos filtros a veces se llaman recursivos porque el valor de salidas anteriores (así como entradas anteriores) importa, aunque los algoritmos generalmente se escriben usando construcciones iterativas. También se les llama Filtros de Respuesta a Impulsos Infinitos (IIR), porque en general su respuesta a un impulso permanece para siempre. También a veces se les llama filtros auto-regresivos, porque los coeficientes pueden considerarse como el resultado de hacer una regresión lineal para expresar valores de señal en función de valores de señal anteriores. La relación de los filtros FIR y IIR se puede ver claramente en una ecuación de diferencia de coeficiente constante lineal, es decir, establecer una suma ponderada de salidas igual a una suma ponderada de entradas. Esto es como la ecuación que dimos anteriormente para el filtro FIR causal, excepto que además de la suma ponderada de entradas, también tenemos una suma ponderada de salidas. Si queremos pensar en esto como un procedimiento para generar muestras de salida, necesitamos reorganizar la ecuación para obtener una expresión para la muestra de salida actual y (n), Adoptando la convención de que a (1) 1 (por ejemplo, escalando otra como Y bs), podemos deshacernos del término 1 / a (1): y (n) b (1) x (n) b (2) x (n-1). B (Nb _ {1}) _ {x} (n - nb) - a (2) y (n - 1) -. - a (Na1) y (n-na) Si todos los a (n) distintos de a (1) son cero, esto reduce a nuestro viejo amigo el filtro FIR causal. Este es el caso general de un filtro (causal) LTI, y es implementado por el filtro de función MATLAB. Veamos el caso en que los coeficientes b distintos de b (1) son cero (en lugar del caso FIR, donde a (n) son cero): En este caso, la muestra de salida corriente y (n) se calcula como (N-1), y (n-2), etc. Para tener una idea de lo que sucede con estos filtros, comencemos con el caso en el que: Es decir, la muestra de salida actual es la suma de la muestra de entrada actual y la mitad de la muestra de salida anterior. Bueno, tome un impulso de entrada a través de unos pasos de tiempo, uno a la vez. Debe quedar claro en este punto que podemos escribir fácilmente una expresión para el valor de la muestra n-ésima salida: es justo (si MATLAB contado desde 0, esto sería simplemente .5n). Puesto que lo que estamos calculando es la respuesta de impulso del sistema, hemos demostrado por ejemplo que la respuesta de impulso puede de hecho tener infinitas muestras no cero. Para implementar este filtro trivial de primer orden en MATLAB, podríamos usar filtro. La llamada se verá así: y el resultado es: ¿Es este negocio realmente todavía lineal? Podemos ver esto empíricamente: Para un enfoque más general, considere el valor de una muestra de salida y (n). Por sustitución sucesiva podríamos escribir esto como Esto es como nuestro viejo amigo la forma convolución-suma de un filtro FIR, con la respuesta impulsiva proporcionada por la expresión .5k. Y la longitud de la respuesta de impulso es infinita. Así, los mismos argumentos que utilizamos para demostrar que los filtros FIR eran lineales ahora se aplicarán aquí. Hasta ahora esto puede parecer un montón de alboroto sobre no mucho. ¿Qué es toda esta línea de investigación para bien responder a esta pregunta en etapas, a partir de un ejemplo. No es una gran sorpresa que podamos calcular un exponencial muestreado por multiplicación recursiva. Veamos un filtro recursivo que hace algo menos obvio. Esta vez también lo convierten en un filtro de segundo orden, de modo que la llamada al filtro será de la forma. Permite establecer el segundo coeficiente de salida a2 a -2cos (2pi / 40) y el tercer coeficiente de salida a3 a 1, y mirar La respuesta al impulso. No muy útil como filtro, en realidad, pero genera una onda sinusoidal muestreada (de un impulso) con tres multiplicaciones por muestra. Para entender cómo y por qué lo hace, y cómo se pueden diseñar y analizar los filtros recursivos en El caso más general, tenemos que dar un paso atrás y echar un vistazo a algunas otras propiedades de los números complejos, en el camino a la comprensión de la transformación z. La suavización de datos: Filtros lineales Un conjunto de datos a menudo se modifica por suavizar las fluctuaciones locales . Una vez realizada esta modificación, se analiza el conjunto resultante de datos. Esta forma particular de modificación de los datos se conoce como suavizado de datos. Un método común de suavizado de datos es mediante una transformación lineal conocida como filtro lineal. Asociado con un filtro lineal es una colección de r pesos c 0. C 1. C 2. C r -1 que se utilizan para transformar un conjunto de n valores de datos y 1. Y 2. Y n en n - r 1 promedios ponderados Y r. Y r 1. Y n, donde m r. R 1. n. Tenga en cuenta que este conjunto transformado de datos tiene n - r 1 elementos ya que los primeros valores r - 1 de nuestros datos se pierden para el proceso de suavizado, ya que no pueden ser suavizados por este medio. Contenido en el paquete StatisticsDataSmoothing es una función que aplicará un filtro lineal que tiene ponderaciones de pesos en un conjunto de datos de datos. La función es LinearFilter. Y se utiliza de la siguiente manera Ejemplo 1: Una cantidad de materia contiene un único tipo de isótopo radiactivo. En un intervalo de tiempo de 15 horas, se detecta un porcentaje dado de las partículas que se emiten de la materia, y luego el número registrado cada media hora, al final de la media hora. Consideremos los siguientes valores obtenidos de esta observación: Introducimos estos valores en una lista para que podamos obtener un gráfico de su distribución con respecto al tiempo: Suavizamos los datos generados por esta función mediante el filtro lineal que tiene los pesos. Para ello, primero debemos cargar el paquete apropiado In2:, Out8 - Graphics - Como podemos ver, todos los puntos se han acercado, aunque no tanto como habríamos deseado. Obsérvese también que tenemos un estiramiento vertical de los valores por un factor de alrededor de 0,3 0,2 0,7 0,8 1,8, lo que generalmente no sería un resultado deseado. Si tuviéramos que introducir nuestros pesos en un orden diferente en la función LinearFilter. Entonces la salida resultante también habría sido diferente. Si los pesos en un filtro lineal suman 1, entonces el filtro lineal también se conoce como una media móvil de r - term. Si los pesos son iguales y suman a la unidad, de modo que c 0 c 1 183183183 c r -1 1 / r. Entonces el filtro lineal se conoce como un promedio móvil simple. Mathematica realizará una media móvil r - term simple en el conjunto de datos de datos con el comando Ejemplo 2: Para los puntos de datos del problema anterior, vamos a realizar tanto un promedio móvil de 5-término con los pesos, como un simple 5- Media móvil a largo plazo. Asumiremos que ya hemos cargado el paquete StatisticsDataSmoothing. Y que ya hemos realizado todo el trabajo desde el problema anterior sin eliminar ninguno de nuestros valores generados. Entonces podemos realizar la primera tarea repitiendo el trabajo anterior con los nuevos pesos: In10: newpointsTranspose A continuación, obtenemos un gráfico de este conjunto de puntos modificado: In11: ListPlotnewpoints, PlotRange-, Out11 - Graphics - En este caso, el gráfico tiene No se ha estirado verticalmente, y como resultado, parece más suave. Para obtener un promedio móvil de 5-término simple en los datos, utilizamos la función MovingAverage como sigue: In12: newydataMovingAverageydata, 5 newpointsTranspose Un gráfico de los datos puede ser generado por un comando ListPlot In13: ListPlotnewpoints, PlotRange-, Out13 - Graphics - Un medio adicional de suavizar datos es mediante la transformación de los valores y con una media móvil de r puntos de datos en lugar de los promedios ponderados de r puntos de datos. Esto se conoce como una media móvil más suave del span r. En este caso perdemos valores en los dos extremos de nuestra serie de datos en lugar de en un solo extremo. Esta técnica se puede realizar a través de Mathematica mediante el comando MovingMedian data, r donde los datos son nuestro conjunto de datos yr es el lapso de la media móvil más suave. Ejemplo 3: Suavizamos los datos generados en el primer ejemplo con una media móvil más suave del intervalo 5. Suponiendo que el trabajo de los dos problemas anteriores ya se ha realizado, podemos continuar con este problema. Recuerde que la lista ydata contiene los valores y de nuestros puntos originales. Así, generamos los valores-y suavizados con una media móvil más suave de la amplitud 5 de la siguiente manera: In14: newydataMovingMedianydata, 5 Ahora, 4 valores han sido eliminados de los extremos de nuestra lista de y - data, lo que implica que deberíamos reevaluar Nuestra lista de valores-x: In16: ListPlotnewpoints, PlotRange-, Out16 - Graphics - Tenga en cuenta que hemos ido a un montón de problemas sólo para obtener los gráficos de la derecha mediante la generación de los valores correctos x que corresponden a los suavizado y-Valores. Si al comando ListPlot se le da una lista de valores y y 1. Y 2. Y n, trazar estos valores a lo largo de un conjunto de ejes de coordenadas utilizando los valores x de 1, 2. n. En otras palabras, en realidad se trazarán los puntos y 1), (2, y 2). (N y n). Como resultado, los datos se distribuirán uniformemente, y el eje x será etiquetado correspondiente al dominio de 0, n. Por lo tanto, si no nos importa estas diferencias, entonces podemos ahorrar algo de trabajo de programación haciendo caso omiso de las x-valores y concentrar todos nuestros esfuerzos en el Y-valores solo. Entonces tenemos la siguiente relación: para cada m. Por lo tanto, podemos recuperar uno de estos tres conjuntos de datos suavizados dado los otros dos. Esto es útil en la eliminación artificial de contaminantes a partir de datos, como se ilustra en el siguiente ejemplo. Ejemplo 4: Añadamos algo de ruido a los datos del primer problema, y luego aplicamos un filtro lineal para ver lo bien que podemos recuperar nuestra curva del resultado. Nuestra ruido será suministrado por el programa IN18: ListPlotnpoints, PlotRange-, Out18 - Graphics - para tratar de recuperar una buena representación de los datos originales (sin ruido), tendremos a) suavizar nuestros datos ruidosos, b) tomar una muestra aleatoria de Nuestro ruido y suavizar estos datos, c) tomar la diferencia de los dos conjuntos de datos suavizados, punto. Para suavizar nuestros datos ruidosos, usaremos una media móvil de 5-término simple. Suponiendo que el paquete StatisticsDataSmoothing ya se ha cargado, que suavizar nuestros datos ruidosos como sigue: IN19:. Npoints2Transposenpoints newxndataTablen / 2, yndatanpoints22 newyndataMovingAverageyndata, 5 ListPlotnewnpoints newnpointsTranspose, PlotRange-, Out19 - Graphics - En una situación de laboratorio, se podría obtener un aleatorio Muestra del ruido (de fondo) haciendo mediciones sin la muestra de material presente (haciendo mediciones de nada). Sin embargo, en nuestro caso nos referiremos al programa que se utilizó para generar el ruido, pero con el programa vamos a generar un conjunto diferente de valores. IN21:. Noise2Transposenoise newxnoiseTablen / 2, yndatanoise22 newynoiseMovingAverageyndata, 5 newnoiseTranspose ListPlotnewnoise, PlotRange-, OUT21 - Graphics - luego restamos estos valores suavizados de nuestros datos con ruido suavizadas, produciendo IN22: newydatanewyndata-newynoise ListPlotnewpoints newpointsTranspose, PlotRange-, OUT22 - Graphics - Este resultado se puede comparar con la segunda parte del segundo ejemplo para obtener una idea de cuán efectivo es este método para eliminar el ruido de los datos. Ejercicios Última modificación: Mar Nov 17 de 2001Frequency Respuesta del filtro de media Correr La respuesta en frecuencia de un sistema LTI es la DTFT de la respuesta impulsiva, La respuesta al impulso de un L - ejemplo de media móvil se Puesto que el filtro de media móvil es FIR, la frecuencia Respuesta se reduce a la suma finita Podemos utilizar la identidad muy útil para escribir la respuesta de frecuencia como donde hemos dejado ae menos jomega. N 0 y M L menos 1. Podemos estar interesados en la magnitud de esta función para determinar qué frecuencias pasan a través del filtro sin atenuación y cuáles son atenuadas. A continuación se muestra un gráfico de la magnitud de esta función para L 4 (rojo), 8 (verde) y 16 (azul). El eje horizontal varía de cero a pi radianes por muestra. Observe que en los tres casos, la respuesta de frecuencia tiene una característica de paso bajo. Un componente constante (frecuencia cero) en la entrada pasa a través del filtro sin atenuación. Ciertas frecuencias más altas, como pi / 2, son completamente eliminadas por el filtro. Sin embargo, si la intención era diseñar un filtro de paso bajo, entonces no lo hemos hecho muy bien. Algunas de las frecuencias más altas se atenúan sólo por un factor de 1/10 (para la media móvil de 16 puntos) o 1/3 (para la media móvil de cuatro puntos). Podemos hacer mucho mejor que eso. La gráfica anterior se creó mediante el siguiente código Matlab: omega 0: pi / 400: pi H4 (1/4) (1-exp (-iomega4)) ./ (1-exp (-iomega)) H8 (1/8 (1-exp (-iomega8)) ./ (1-exp (-iomega)) trama (omega) , Abs (H4) abs (H8) abs (H16)) eje (0, pi, 0, 1) Copia Copyright 2000 - Universidad de California, Berkeley
Comments
Post a Comment