(1, 10), 1, x) Esto supone que los valores en tiempo negativo (x (0), x (-1), etc.) son todos cero. Así, por ejemplo, el primer valor de y sería x (1) / 10. El viernes, 7 de mayo de 2010 a las 3:33 PM, Tim Rueth lthidden correo electrónico gt escribió: Miré tanto conv () y filter (), pero can39t averiguar cómo hacer una media móvil con ellos. Tal vez no entiendo las funciones de las vars de entrada correctamente. Digamos que tengo una matriz, un rand (1.100). ¿Puede decirme cómo utilizar el conv () y filter () para tomar, digamos el promedio móvil de 10 días de él, con una ponderación de 0,5 gt ----- Mensaje Original ----- gt De: Andy Buckle Mailto: email oculto gt Enviado: jueves, 06 de mayo de 2010 12:06 gt A: email oculto gt Cc: oculto e-mail gt Asunto: Re: media móvil vectorizada gt gt conv es también un archivo m, pero solo tiene unos pocos Ifs en. Entonces gt llama a filtro para hacer el trabajo. Que es un archivo oct. Gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt g Loop Miré el código M gt para movavg () gt gt y utiliza un for-loop, por lo que I39m supongo que probablemente isn39t una manera, gt gt, pero me pareció I39d comprobar. Gracias. Gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt / Andy hebilla / gt Gracias por mostrar cómo usar filter () para hacer una media móvil simple. Implementé su código, y está de acuerdo con movavg (x, 10,10,0), que calcula una media móvil simple de 10 días. Theres sólo una diferencia en los primeros 9 números debido a valores asumidos de tiempo negativo (movavg calcula un período de rodaje). Como puede recordar, estoy tratando de usar filter () para evitar movavg () s for-loop. Ahora, lo que estoy tratando de hacer es un promedio móvil ponderado, idéntico al parámetro alfa de movavg (). Cuando alpha0, es un promedio móvil simple, y está de acuerdo con filter (). Si cambio alfa a 1, Im supongo que para obtener un MA lineal. Heres el código en movavg. m que hace la ponderación (plomo es el número de días a la media, igual a 10 en el caso anterior): plomo (1: plomo).alpha Ajustar los pesos a igual 1 lead lead / sum (lead ) Por lo tanto, para un 10 días de media lineal ponderada (plomo 10, alfa 1). Los 9 días anteriores y el día actual deben ponderarse de la siguiente manera: 1/55, 2/55, 3/55. 10/55, con el mayor peso (10/55) aplicado al día actual. Por lo tanto, he intentado un caso de prueba simple con sólo un MA de 2 días en un vector de 6 elementos. (A, madays, alfa) Calcula MA usando filter () barrido (1: madays).phpha normsweep barrido / suma (barrido) ) F filter (normsweep, 1, a) Los resultados de movavg () y filter () son similares, pero no iguales. Supongo que no tengo los argumentos para el filtro () correcto, pero no puedo entender lo que hice mal. En particular, no estoy seguro de lo que el segundo argumento de filter () se supone que hacer. Ayuda No estoy seguro de lo que quieres decir con una ponderación de 0,5, pero para hacer un simple promedio de 10 días, itd ser y filtro (1 / 10ones (1, 10), 1, x) Esto supone que los valores en tiempo negativo (x (0), x (-1), etc) son todos cero. Así, por ejemplo, el primer valor de y sería x (1) / 10. El viernes, 7 de mayo 2010 a las 3:33 PM, Tim Rueth lthidden correo electrónico gt escribió: Miré tanto conv () y filter (), pero no puedo entender cómo hacer una media móvil con ellos. Tal vez Im no entender las funciones de la entrada vars correctamente. Digamos que tengo una matriz, un rand (1,100). ¿Puede decirme cómo utilizar conv () y filter () para tomar, digamos la media móvil de 10 días de la misma, con una ponderación de 0,5 gt ----- Mensaje Original ----- gt De: Andy Buckle Mailto: email oculto gt Enviado: jueves, 06 de mayo de 2010 12:06 gt A: email oculto gt Cc: oculto e-mail gt Asunto: Re: media móvil vectorizada gt gt conv es también un archivo m, pero solo tiene unos pocos Ifs en. Entonces gt llama a filtro para hacer el trabajo. Que es un archivo oct. Gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt - Lo busqué en el código M gt para movavg () gt gt y utiliza un for-loop, por lo que estoy suponiendo que probablemente no es una forma, gt gt, pero pensé Id comprobar. Gracias. Gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt / Andy hebilla / gt gtTu código de filtro abajo funciona muy bien cuando se compara con lo que había estado gtdoing, a excepción de un número de días iniciales, debido a qué valores se supone gtin tiempo negativo. Yo había estado usando el siguiente código: gt gt quotndaysquot es el número de días que se utilizarán al calcular el promedio exponencial gtmoving de quotdataquot (los datos son un vector de columna) gt data repmat (data (1), ndays, 1) data repeat data (1) ndays veces en gt el comienzo de los datos para valores de tiempo negativos gt alfa 2 / (ndays1) gt n longitud (datos) gt avg zeros (n, 1) gt avg (1) datos (1) Necesidad de quotinventquot past memoria para valores negativos. Usted debe hacer lo mismo para la función de filtro, pero no podría decir cómo hacerlo de improviso. Gt para i gt para i gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt trim ) No entiendo la instrucción antedicha. ¿Qué es longma gt? Para valores pequeños de ndays, el número de días iniciales donde hay una gtdiscrepancy con su implementación filter () es mínima, pero para valores gt mayores de ndays, el número de días iniciales de discrepancia crece (obviamente, gtdue a la naturaleza de Una MA exponencial que tiene una memoria de cola larga). Tenga en cuenta, gtadd valores de tiempo negativos similares a la parte frontal del vector al utilizar gtfilter () también. Im apenas no seguro cuál es la convención cuando viene a calcular los promedios móviles exponenciales para los puntos en quotdataquot donde quotndaysquot gtreaches de nuevo en tiempo negativo. Gracias de nuevo. - Francesco Potort (ricercatore) Voz: 39 050 315 3058 (op.2111) ISTI - Área della ricerca CNR Fax: 39 050 315 2040 vía G. Moruzzi 1, I-56124 Pisa Email: , Sala C71) Web: fly. isti. cnr. it/ Ayuda-octava mailing list email oculto www-old. cae. wisc. edu/mailman/listinfo/help-octave No puedo comprobarlo actualmente, pero si lo recuerdo bien, El argumento 4 a filtrar es condiciones iniciales. Por lo tanto, algo como si desea que su condición inicial para ser el primer valor de los datos, creo que el comando sería: b alfa a 1, alpha-1 s filtro (b, a, x, x (1)) Sólo necesita Para ser un elemento en este caso porque la única condición inicial que necesita es s0. El jueves, 13 de mayo de 2010 a las 2:21, Francesco Potort lthidden correo electrónico gt escribió: gtYour código de filtro a continuación funciona muy bien cuando se compara con lo que había estado gtdoing, a excepción de un número de días iniciales, debido a qué valores se asumen Gtin tiempo negativo. Yo había estado usando el siguiente código: gt gt quotndaysquot es el número de días que se utilizarán al calcular el promedio exponencial gtmoving de quotdataquot (los datos son un vector de columna) gt data repmat (data (1), ndays, 1) data repeat data (1) ndays veces en gt el comienzo de los datos para valores de tiempo negativos gt alfa 2 / (ndays1) gt n longitud (datos) gt avg zeros (n, 1) gt avg (1) datos (1) Necesidad de quotinventquot past memoria para valores negativos. Usted debe hacer lo mismo para la función de filtro, pero no podría decir cómo hacerlo de improviso. Gt para i gt para i gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt trim ) No entiendo la instrucción anterior. ¿Qué es longma gt? Para valores pequeños de ndays, el número de días iniciales donde hay una gtdiscrepancy con su implementación filter () es mínimo, pero para valores gt más grandes de ndays, el número de días iniciales de discrepancia crece (obviamente, gtdue a la naturaleza de Una MA exponencial que tiene una memoria de cola larga). Tenga en cuenta, gtadd valores de tiempo negativos similares a la parte frontal del vector al utilizar gtfilter () también. No estoy seguro de cuál es la convención cuando se trata de calcular medias móviles exponenciales para puntos en quotdataquot donde quotndaysquot gtreaches vuelve a tiempo negativo. Gracias de nuevo. - Francesco Potort (ricercatore) Voz: 39 050 315 3058 (op.2111) ISTI - Área della ricerca CNR Fax: 39 050 315 2040 vía G. Moruzzi 1, I-56124 Pisa Email: , Sala C71) Web: fly. isti. cnr. it/ En respuesta a este post de Francesco Potort La última instrucción con quotlongmaquot debería haber sido: quotavg avg (n1. End) quot que efectivamente elimina los valores calculados de tiempo negativo. Pero, como usted dice, parece que no necesito hacer esto porque el historial está completamente capturado en los datos de avg (1) (1), así que no hay necesidad de calcular un tiempo de consulta de quotrun. Gracias Francesco. Sherman había encontrado que puedo establecer la condición inicial especificando un parámetro 4 en filter () igual al primer punto de datos. Intenté esto y obtuve resultados muy similares (pero no exactamente exactos) en comparación con el bucle for de abajo sin valores de tiempo negativos. Pero esta pequeña diferencia se disipó dentro de quotndaysquot y no es una gran cosa. Gracias Sherman. En resumen, para calcular el promedio móvil exponencial de quotdataquot para quotndaysquot, el siguiente código: alpha 2 / (ndays1) n longitud (datos) avg zeros (n, 1) avg (1) data (1) for i 2. n ao Alfa (datos (i) - ao) endfor está cerca, pero no es exactamente igual a: alpha 2 / (ndays1) avg filtro (alfa, 1 alfa-1, datos, datos 1)) para aproximadamente los primeros ndays de la media. Gt ----- Mensaje Original ----- gt De: Francesco Potort mailto: correo electrónico oculto gt Enviado: miércoles, 12 de mayo de 2010 23:22 gt A: correo electrónico oculto cc: Octave-ML James Sherman Jr. Gt Sujeto: Re: media móvil vectorizada gt gt gtEl código de filtro siguiente funciona muy bien cuando se compara con lo que gt había estado gt gtdoing, a excepción de un número de días iniciales, debido a qué valores se gt ggtassumed en tiempo negativo. He estado usando el siguiente código: gt gt gt gt quotndaysquot es el número de días que se utilizarán al calcular el gt gtexponencial promedio móvil de quotdataquot (los datos son un vector de columna) gt gt datos repmat (data (1), ndays, 1 ) Datos gt datos (1) ndays veces en gt gt inicio de datos para valores negativos de tiempo gt 2 / (ndays1) n gt gt longitud (datos) avg ceros (n, 1) gt gt avg (1) datos (1) ) Gt gt La instrucción anterior es todo lo que necesita para incluir memoria pasada gt para valores negativos. Deberías hacer lo mismo con la función de filtro gt, pero no podría decir cómo hacerlo de improviso. Gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt Longma longma (lmadays1. End) gt gt No entiendo la instrucción anterior. ¿Qué es longma gt gt gtPara los pequeños valores de ndays, el número de días iniciales donde gt hay una gt gtdiscrepancy con su aplicación filter () es mínima, pero para gt gtlarger valores de ndays, el número de días iniciales de gt discrepancia crece gt gt (Obviamente, debido a la naturaleza de una MA exponencial que tiene una gt gtmemory gt de cola larga). Tenga en cuenta que agrego valores de tiempo negativos similares al frente gt del gtvector gt al usar gt gtfilter () también. Im apenas no seguro cuál es la convención cuando gt gtcomes a calcular promedios móviles exponenciales para los puntos gt en quotdataquot donde quotndaysquot gt gtreaches de nuevo en tiempo negativo. Gracias de nuevo. Gt gt - gt Francesco Potter (ricercatore) Voz: 39 050 315 gt 3058 (op.2111) gt ISTI - Área della ricerca CNR Fax: 39 050 315 2040 gt vía G. Moruzzi 1, I-56124 Pisa Gt (entrada 20, 1er piso, habitación C71) Web: fly. isti. cnr. it/ gt Por lo tanto, esto me molestó, así que miré un poco a la función de filtro, y creo que encontré donde estaba el error en mi inicial sugerencia. El vector de condición inicial tiene que ver con los estados internos del filtro no con las salidas de tiempo negativo del filtro (al menos no directamente), por lo que para obtener lo que creo que es exactamente lo que su código con el bucle for, la línea de filtro debe ser Es un poco intuitivo por qué el término 1-alfa necesita estar ahí, y no sé si hay mucho interés en él, pero No debería ser tan difícil (probablemente sólo necesito abrir mis señales y el libro de sistemas) para escribir una función para calcular las condiciones iniciales que la función de filtro espera simplemente dar las salidas y entradas de tiempo negativo. La última instrucción con quotlongmaquot debería haber sido: quotavg avg (n1: end) quot que efectivamente elimina los valores calculados a partir del tiempo negativo. Pero, como usted dice, parece que no necesito hacer esto porque la historia está completamente capturada en los datos de avg (1) (1), por lo que no es necesario calcular un tiempo de interrogación de quotrun. Gracias Francesco. Sherman había encontrado que puedo establecer la condición inicial especificando un parámetro 4 en filter () igual al primer punto de datos. Intenté esto y obtuve resultados muy similares (pero no exactamente exactos) en comparación con el bucle for de abajo sin valores de tiempo negativos. Pero esta pequeña diferencia se disipó dentro de quotndaysquot y isn39t una gran cosa. Gracias Sherman. En resumen, para calcular el promedio móvil exponencial de quotdataquot para quotndaysquot, el siguiente código: alpha 2 / (ndays1) n longitud (datos) avg zeros (n, 1) avg (1) data (1) for i 2. n ao Alfa (datos (i) - ao) está cerca, pero no es exactamente igual a: alpha 2 / (ndays1) avg filtro (alfa, 1 alfa-1, datos, datos (1 )) Para aproximadamente los primeros ndays de avg. Gt ----- Mensaje Original ----- gt De: Francesco Potort mailto: correo electrónico oculto gt Enviado: miércoles, 12 de mayo de 2010 23:22 gt A: correo electrónico oculto cc: 39Octave-ML39 39James Sherman Jr. 39 gt Sujeto: Re: media móvil vectorizada gt gt gtEl código de filtro siguiente funciona muy bien cuando se compara con lo que gt había estado gt gtdoing, a excepción de un número de días iniciales, debido a qué valores son gt gtassumed en tiempo negativo. He estado usando el siguiente código: gt gt gt gt quotndaysquot es el número de días que se utilizarán al calcular el gt gtexponencial promedio móvil de quotdataquot (los datos son un vector de columna) gt gt datos repmat (data (1), ndays, 1 ) Datos gt datos (1) ndays veces en gt gt inicio de datos para valores negativos de tiempo gt 2 / (ndays1) n gt gt longitud (datos) avg ceros (n, 1) gt gt avg (1) datos (1) ) Gt gt La instrucción anterior es todo lo que necesita para incluir memoria pasada gt para valores negativos. Deberías hacer lo mismo con la función de filtro gt, pero no podría decir cómo hacerlo de improviso. Gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt Longma longma (lmadays1. End) gt gt No entiendo la instrucción anterior. Qué es longma gt gt gtPara los valores pequeños de ndays, el número de días iniciales donde gt hay una gt gtdiscrepancy con su implementación filter () es mínima, pero para gt gtlarger valores de ndays, el número de días iniciales de gt discrepancia crece gt gt (Obviamente, debido a la naturaleza de una MA exponencial que tiene una gt gtmemory gt de cola larga). Tenga en cuenta que agrego valores de tiempo negativos similares al frente gt del gtvector gt al usar gt gtfilter () también. No estoy seguro de cuál es la convención cuando gt gtcomes a calcular promedios móviles exponenciales para puntos gt en quotdataquot donde quotndaysquot gt gtreaches de nuevo en tiempo negativo. Gracias de nuevo. Gt gt - gt Francesco Potter (ricercatore) Voz: 39 050 315 gt 3058 (op.2111) gt ISTI - Área della ricerca CNR Fax: 39 050 315 2040 gt vía G. Moruzzi 1, I-56124 Pisa Gt (entrada 20, 1er piso, habitación C71) Web: fly. isti. cnr. it/ gt Por lo tanto, esto me molestó, así que miré un poco a la función de filtro, y creo que encontré donde estaba el error en mi inicial sugerencia. El vector de condición inicial tiene que ver con los estados internos del filtro no con las salidas de tiempo negativo del filtro (al menos no directamente), por lo que para obtener lo que creo que es exactamente lo que su código con el bucle for, la línea de filtro debe ser Es un poco intuitivo por qué el término 1-alfa necesita estar ahí, y no sé si hay mucho interés en él, pero No debería ser tan difícil (probablemente sólo tengo que abrir mis señales y el libro de sistemas) para escribir una función para calcular las condiciones iniciales que la función de filtro espera sólo dando las salidas y entradas de tiempo negativo. La última instrucción con longma debería haber sido: avg avg (n1: end) que efectivamente reduce los valores calculados desde el tiempo negativo. Pero, como usted dice, parece que no necesito hacer esto porque el historial está completamente capturado en los datos de avg (1) (1), por lo que no es necesario calcular un tiempo de ejecución. Gracias Francesco. Sherman había encontrado que puedo establecer la condición inicial especificando un parámetro 4 en filter () igual al primer punto de datos. Intenté esto y obtuve resultados muy similares (pero no exactamente exactos) en comparación con el bucle for de abajo sin valores de tiempo negativos. Pero esta pequeña diferencia se disipó dentro de ndays y no es un gran problema. Gracias Sherman. En resumen, para calcular el promedio móvil exponencial de datos para ndays, el siguiente código: alpha 2 / (ndays1) n longitud (datos) avg zeros (n, 1) avg (1) data (1) for i 2. n ao Alfa (datos (i) - ao) está cerca, pero no es exactamente igual a: alpha 2 / (ndays1) avg filtro (alfa, 1 alfa-1, datos, datos (1 ) En aproximadamente los primeros nd de avg. Suavizado En muchos experimentos en ciencia, las verdaderas amplitudes de señal (valores del eje y) cambian bastante suavemente en función de los valores del eje x, mientras que muchos tipos de ruido se ven como rápidos, Cambios aleatorios en la amplitud de un punto a otro dentro de la señal. En esta última situación, puede ser útil en algunos casos intentar reducir el ruido mediante un proceso llamado suavizado. En el alisado, los puntos de datos de una señal se modifican de modo que se reducen los puntos individuales que son más altos que los puntos inmediatamente adyacentes (presumiblemente debido al ruido) y se incrementan los puntos que son más bajos que los puntos adyacentes. Esto conduce naturalmente a una señal más lisa (y una respuesta más lenta del paso a los cambios de la señal). Mientras la señal subyacente verdadera sea realmente lisa, entonces la señal verdadera no será distorsionada mucho por suavizar, pero el ruido será reducido. En términos de los componentes de frecuencia de una señal, una operación de suavizado actúa como un filtro de paso bajo. Reduciendo los componentes de alta frecuencia y pasando los componentes de baja frecuencia con pocos cambios. Algoritmos de suavizado. La mayoría de los algoritmos de suavizado se basan en la técnica de cambio y multiplicación, en la que un grupo de puntos adyacentes en los datos originales se multiplican punto por punto por un conjunto de números (coeficientes) que definen la forma suave, los productos se suman y Dividido por la suma de los coeficientes, que se convierte en un punto de datos suavizados, entonces el conjunto de coeficientes se desplaza un punto por debajo de los datos originales y se repite el proceso. El algoritmo de suavizado más simple es el carrocería rectangular o la media deslizante no ponderada suave que simplemente reemplaza cada punto de la señal con la media de m puntos adyacentes, donde m es un entero positivo llamado el ancho liso. Por ejemplo, para un punto liso de 3 puntos (m 3): para j 2 a n-1, donde S j el j-ésimo punto en la señal suavizada, Y j el j-ésimo punto en la señal original, yn es el total Número de puntos en la señal. Pueden construirse operaciones lisas similares para cualquier anchura lisa deseada, m. Usualmente m es un número impar. Si el ruido en los datos es ruido blanco (es decir, distribuido uniformemente en todas las frecuencias) y su desviación estándar es s. Entonces la desviación estándar del ruido que queda en la señal después de la primera pasada de un liso promedio no deslizante no ponderado será aproximadamente s sobre la raíz cuadrada de m (s / sqrt (m)), donde m es el ancho liso. A pesar de su simplicidad, este suave es realmente óptimo para el problema común de reducir el ruido blanco, manteniendo la respuesta de paso más nítida. La respuesta a un cambio de escalón es de hecho lineal. Por lo que este filtro tiene la ventaja de responder completamente sin efecto residual con su tiempo de respuesta. Que es igual al ancho liso dividido por la tasa de muestreo. La lisa triangular es como la lisa rectangular, arriba, excepto que implementa una función de suavizado ponderada. Para un 5-punto liso (m 5): para j 3 a n-2, y similarmente para otras anchuras suaves (vea la hoja de cálculo UnitGainSmooths. xls). En ambos casos, el número entero en el denominador es la suma de los coeficientes en el numerador, lo que da como resultado una unidad de ganancia lisa que no tiene efecto sobre la señal cuando es una línea recta y que preserva el área bajo picos. A menudo es útil aplicar una operación de suavizado más de una vez, es decir, suavizar una señal ya suavizada, para construir láminas más largas y complicadas. Por ejemplo, el triangular de 5 puntos lisos arriba es equivalente a dos pasadas de un liso rectangular de 3 puntos. Tres pasadas de un resultado liso rectangular de 3 puntos en un pseudo-gaussiano de 7 puntos o un pajar liso, para el cual los coeficientes están en la proporción 1: 3: 6: 7: 6: 3: 1. La regla general es que n pasos de un w-smooth de ancho da lugar a un ancho liso combinado de n w - n 1. Por ejemplo, 3 pasos de un 17-punto liso da lugar a un 49-punto liso. Estos lisos de múltiples pasadas son más eficaces para reducir el ruido de alta frecuencia en la señal que un liso rectangular pero presentan una respuesta de paso más lenta. En todas estas suavidades, se elige la anchura del m liso para que sea un entero impar, de modo que los coeficientes lisos están equilibrados simétricamente alrededor del punto central, lo cual es importante porque preserva la posición del eje x de los picos y otras características en el señal. (Esto es especialmente crítico para aplicaciones analíticas y espectroscópicas porque las posiciones máximas son a menudo objetivos de medición importantes). Obsérvese que suponemos aquí que los intervalos del eje x de la señal son uniformes, es decir, que la diferencia entre los valores del eje x de los puntos adyacentes es la misma a lo largo de la señal. Esto también se asume en muchas de las otras técnicas de procesamiento de señal descritas en este ensayo, y es una característica muy común (pero no necesaria) de señales que son adquiridas por equipos automatizados y computarizados. El Savitzky-Golay liso se basa en el ajuste de cuadrados mínimos de polinomios a segmentos de los datos. El algoritmo se discute en www. wire. tu-bs. de/OLDWEB/mameyer/cmr/savgol. pdf. Comparado con las suavidades de media deslizante, el Savitzky-Golay liso es menos eficaz en la reducción del ruido, pero más eficaz en retener la forma de la señal original. Es capaz de diferenciación, así como suavizado. El algoritmo es más complejo y los tiempos computacionales son mayores que los tipos suaves discutidos anteriormente, pero con computadoras modernas la diferencia no es significativa y el código en varios idiomas está ampliamente disponible en línea. Consulte Comparación de suavizado. La forma de cualquier algoritmo de suavizado se puede determinar aplicando esa función suave a delta. Una señal que consiste en todos los ceros a excepción de un punto, como lo demuestra el simple script de Matlab / Octava DeltaTest. m. Reducción de ruido . Suavizado por lo general reduce el ruido en una señal. Si el ruido es blanco (es decir, uniformemente distribuido en todas las frecuencias) y su desviación estándar es s. Entonces la desviación típica del ruido que queda en la señal después de un paso de un liso rectangular será aproximadamente s / sqrt (m), donde m es el ancho liso. Si se utiliza una lisa triangular, el ruido será ligeramente menor, alrededor de 0,8 / sqrt (m). Las operaciones de suavizado se pueden aplicar más de una vez: es decir, una señal previamente suavizada se puede suavizar de nuevo. En algunos casos esto puede ser útil si hay una gran cantidad de ruido de alta frecuencia en la señal. Sin embargo, la reducción de ruido para el ruido blanco es menor en cada sucesivo suave. Por ejemplo, tres pasadas de un liso rectangular reducen el ruido blanco por un factor de aproximadamente 0,7 / sqrt (m), sólo una ligera mejoría en dos pasadas. La distribución de frecuencia del ruido, designada por el color de ruido. Afecta sustancialmente la capacidad de suavizado para reducir el ruido. La función Matlab / Octave NoiseColorTest. m compara el efecto de un vehículo frigorífico de 100 puntos (promedio deslizante no ponderado) sobre la desviación estándar del ruido blanco, rosa y azul, todos los cuales tienen una desviación estándar sin pulir original de 1,0. Como el suavizado es un proceso de filtro de paso bajo, produce menos ruido de baja frecuencia (rosa) y ruido de alta frecuencia (azul) más que el ruido blanco. Efectos finales y el problema de los puntos perdidos. Obsérvese en las ecuaciones anteriores que el punto 3 rectangular liso está definido sólo para j 2 a n-1. No hay suficientes datos en la señal para definir un liso completo de 3 puntos para el primer punto de la señal (j 1) o para el último punto (j n). Porque no hay puntos de datos antes del primer punto o después del último punto. (Del mismo modo, un 5-punto suave se define sólo para j 3 a n-2, y por lo tanto un suave no se puede calcular para los dos primeros puntos o para los dos últimos puntos). En general, para una m-anchura lisa, habrá (m -1) / 2 puntos al principio de la señal y (m -1) / 2 puntos al final de la señal para los cuales una m completa - width smooth No se puede calcular. Qué hacer Hay dos enfoques. Una es aceptar la pérdida de puntos y recortar esos puntos o reemplazarlos con ceros en la señal suave. (Ese es el enfoque adoptado en la mayoría de las figuras en este documento). El otro enfoque consiste en utilizar lisos progresivamente más pequeños en los extremos de la señal, por ejemplo para usar 2, 3, 5, 7. puntos lisos para los puntos de señal 1, 2, 3 y 4. y para los puntos n, n-1 , N - 2, n - 3. respectivamente. La aproximación posterior puede ser preferible si los bordes de la señal contienen información crítica, pero aumenta el tiempo de ejecución. La función fastsmooth descrita a continuación puede utilizar cualquiera de estos dos métodos. Ejemplos de suavizado. Un ejemplo simple de suavizado se muestra en la Figura 4. La mitad izquierda de esta señal es un pico ruidoso. La mitad derecha es el mismo pico después de someterse a un algoritmo de suavizado triangular. El ruido se reduce considerablemente mientras que el pico en sí mismo apenas cambia. El suavizado aumenta la relación señal-ruido y permite que las características de la señal (posición de pico, altura, anchura, área, etc.) se midan con mayor precisión mediante inspección visual. Figura 4. La mitad izquierda de esta señal es un pico ruidoso. La mitad derecha es el mismo pico después de someterse a un algoritmo de suavizado. El ruido se reduce considerablemente, mientras que el pico en sí mismo apenas cambia, lo que facilita la medición de la posición del pico, la altura y el ancho directamente por estimación gráfica o visual (pero no mejora las mediciones hechas por los métodos de mínimos cuadrados ver más abajo). Cuanto mayor sea el ancho liso, mayor será la reducción del ruido, pero también mayor será la posibilidad de que la señal sea distorsionada por la operación de suavizado. La elección óptima del ancho liso depende de la anchura y forma de la señal y del intervalo de digitalización. Para señales de tipo pico, el factor crítico es la relación de suavizado. La relación entre la anchura l suave y el número de puntos en la media anchura del pico. En general, el aumento de la relación de suavizado mejora la relación señal-ruido, pero provoca una reducción de la amplitud y un aumento en el ancho de banda del pico. Las figuras anteriores muestran ejemplos del efecto de tres anchos lisos diferentes sobre picos ruidosos de forma gaussiana. En la figura de la izquierda, el pico tiene una (verdadera) altura de 2,0 y hay 80 puntos en la media anchura del pico. La línea roja es el pico sin pulir original. Las tres líneas verdes superpuestas son el resultado de suavizar este pico con una anchura triangular (de arriba a abajo) de 7, 25 y 51 puntos. Debido a que la anchura del pico es de 80 puntos, las relaciones lisas de estos tres lisos son 7/80 0,09, 25/80 0,31 y 51/80 0,64, respectivamente. A medida que aumenta la anchura suave, el ruido se reduce progresivamente, pero la altura del pico también se reduce ligeramente. Para el mayor liso, el ancho del pico se incrementa ligeramente. En la figura de la derecha, el pico original (en rojo) tiene una altura real de 1,0 y un ancho medio de 33 puntos. (También es menos ruidoso que el ejemplo de la izquierda.) Las tres líneas verdes superpuestas son los resultados de las mismas tres lisas triangulares de ancho (de arriba a abajo) 7, 25 y 51 puntos. Pero como el ancho de pico en este caso es de sólo 33 puntos, las relaciones lisas de estos tres lisos son mayores - 0,21, 0,76 y 1,55, respectivamente. Se puede ver que el efecto de distorsión de pico (reducción de la altura del pico y aumento del ancho del pico) es mayor para el pico más estrecho porque las relaciones lisas son más altas. Razones suaves de más de 1,0 se utilizan raramente debido a la distorsión de pico excesiva. Obsérvese que incluso en el peor de los casos, las posiciones de los picos no se efectúan (suponiendo que los picos originales eran simétricos y no superpuestos por otros picos). Si conservar la forma del pico es más importante que optimizar la relación señal-ruido, el Savitzky-Golay tiene la ventaja sobre las superficies lisas de deslizamiento. En todos los casos, el área total bajo el pico permanece sin cambios. El problema con el suavizado es que a menudo es menos beneficioso de lo que podría pensar. Es muy importante señalar que los resultados de alisado como se ilustra en la figura anterior pueden ser engañosamente impresionantes porque emplean una sola muestra de una señal ruidosa que se suaviza a diferentes grados. Esto hace que el espectador subestime la contribución del ruido de baja frecuencia, que es difícil de estimar visualmente porque hay tan pocos ciclos de baja frecuencia en el registro de señal. Este problema se puede visualizar registrando un número de muestras independientes de una señal ruidosa consistente en un único pico, como se ilustra en las dos figuras siguientes. Estas figuras muestran diez parcelas superpuestas con el mismo pico pero con ruido blanco independiente, cada una trazada con un color de línea diferente, sin pulir a la izquierda y alisada a la derecha. La inspección de las señales suavizadas a la derecha muestra claramente la variación en la posición de pico, altura y anchura entre las 10 muestras causadas por el ruido de baja frecuencia que queda en las señales suavizadas. Sólo porque una señal parece suave no significa que no hay ruido. El ruido de baja frecuencia que permanece en las señales después de suavizar aún interferirá con la medición precisa de la posición, altura y ancho del pico. Debe quedar claro que el suavizado rara vez puede eliminar completamente el ruido, ya que la mayor parte del ruido se extiende sobre una amplia gama de frecuencias, y el suavizado simplemente reduce el ruido en parte de su rango de frecuencia. Only for some very specific types of noise (e. g. discrete frequency noise or single-point spikes) is there hope of anything close to complete noise elimination. The figure on the right below is another example signal that illustrates some of these principles. The signal consists of two Gaussian peaks, one located at x50 and the second at x150. Both peaks have a peak height of 1.0 and a peak half-width of 10, and a normally-distributed random white noise with a standard deviation of 0.1 has been added to the entire signal. The x-axis sampling interval, however, is different for the two peaks its 0.1 for the first peak (from x0 to 100) and 1.0 for the second peak (from x100 to 200). This means that the first peak is characterized by ten times more points that the second peak. It may look like the first peak is noisier than the second, but thats just an illusion the signal-to-noise ratio for both peaks is 10. The second peak looks less noisy only because there are fewer noise samples there and we tend to underestimate the dispersion of small samples. The result of this is that when the signal is smoothed, the second peak is much more likely to be distorted by the smooth (it becomes shorter and wider) than the first peak. The first peak can tolerate a much wider smooth width, resulting in a greater degree of noise reduction. (Similarly, if both peaks are measured with the least-squares curve fitting method, the fit of the first peak is more stable with the noise and the measured parameters of that peak will be about 3 times more accurate than the second peak, because there are 10 times more data points in that peak, and the measurement precision improves roughly with the square root of the number of data points if the noise is white). You can download the data file udx in TXT format or in Matlab MAT format. Optimization of smoothing. As smoothing ratio increases, noise is reduced quickly at first, then more slowly, and the peak height is also reduced, slowly at first, then more quickly. The result is that the signal-to-noise increases quickly at first, then reaches a maximum. This is illustrated in the figure on the left for a Gaussian peak with white noise (produced by the Matlab/Octave script SmoothWidthTest. m ). Which is the best smooth ratio It depends on the purpose of the peak measurement. If the objective of the measurement is to measure the true peak height and width, then smooth ratios below 0.2 should be used and the Savitzky-Golay smooth is preferred. Measuring the height of noisy peaks is much better done by curve fitting the unsmoothed data rather than by taking the maximum of the smoothed data (see CurveFittingCSmoothing ). But if the objective of the measuremen t is to measure the peak position (x-axis value of the peak), much larger smooth ratios can be employed if desired, because smoothing has little effect on the peak position (unless peak is asymmetrical or the increase in peak width is so much that it causes adjacent peaks to overlap). In quantitative analysis applications based on calibration by standard samples, the peak height reduction caused by smoothing is not so important. If the same signal processing operations are applied to the samples and to the standards, the peak height reduction of the standard signals will be exactly the same as that of the sample signals and the effect will cancel out exactly. In such cases smooth widths from 0.5 to 1.0 can be used if necessary to further improve the signal-to-noise ratio, as shown in the figure on the left (for a simple sliding-average rectangular smooth). In practical analytical chemistry, absolute peak height measurements are seldom required calibration against standard solutions is the rule. (Remember: the objective of quantitative analysis is not to measure a signal but rather to measure the concentration of the analyte.) It is very important, however, to apply exactly the same signal processing steps to the standard signals as to the sample signals, otherwise a large systematic error may result. For a more detailed comparison of all four smoothing types considered above, see SmoothingComparison . (a) for cosmetic reasons, to prepare a nicer-looking or more dramatic graphic of a signal for visual inspection or publications, specifically in order to emphasize long-term behavior over short-term . or (b) if the signal will be subsequently analyzed by a method that would be degraded by the presence of too much high-frequency noise in the signal, for example if the heights of peaks are to be determined visually or graphically or by using the MAX function, or if the location of maxima, minima, or inflection points in the signal is to be determined automatically by detecting zero-crossings in derivatives of the signal. Optimization of the amount and type of smoothing is very important in these cases (see DifferentiationSmoothing ). But generally, if a computer is available to make quantitative measurements, its better to use least-squares methods on the unsmoothed data, rather than graphical estimates on smoothed data. If a commercial instrument has the option to smooth the data for you, its best to disable smoothing that and record the unsmoothed data you can always smooth it later yourself for visual presentation and it will be better to use the unsmoothed data for an least-squares fitting or other processing that you may want to do later. Smoothing can be used to locate peaks but it should not be used to measure peaks . Care must be used in the design of algorithms that employ smoothing. For example, in a popular technique for peak finding and measurement. peaks are located by detecting downward zero-crossings in the smoothed first derivative. but the position, height, and width of each peak is determined by least-squares curve-fitting of a segment of original unsmoothed data in the vicinity of the zero-crossing. That way, even if heavy smoothing is necessary to provide reliable discrimination against noise peaks, the peak parameters extracted by curve fitting are not distorted by the smoothing. (a) smoothing will not significantly improve the accuracy of parameter measurement by least-squares measurements between separate independent signal samples, (b) all smoothing algorithms are at least slightly lossy, entailing at least some change in signal shape and amplitude, (c) it is harder to evaluate the fit by inspecting the residuals if the data are smoothed, because smoothed noise may be mistaken for an actual signal. and (d) smoothing the signal will seriously underestimate the parameters errors predicted by propagation-of-error calculations and the bootstrap method . Dealing with spikes and outliers. Sometimes signals are contaminated with very tall, narrow spikes or outliers occurring at random intervals and with random amplitudes, but with widths of only one or a few points. It not only looks ugly, but it also upsets the assumptions of least-squares computations because it is not normally-distributed random noise. This type of interference is difficult to eliminate using the above smoothing methods without distorting the signal. However, a median filter, which replaces each point in the signal with the median (rather than the average) of m adjacent points, can completely eliminate narrow spikes with little change in the signal, if the width of the spikes is only one or a few points and equal to or less than m . See en. wikipedia. org/wiki/Medianfilter. The killspikes. m function is another spike-removing function that uses a different approach, which locates and eliminates the spikes and patches over them using linear interpolation from the signal before and after. Unlike conventional smooths, these functions can be profitably applied prior to least-squares fitting functions. (On the other hand, if its the spikes that are actually the signal of interest, and other components of the signal are interfering with their measurement, see CaseStudiesG ). An alternative to smoothing to reduce noise in the above set of unsmoothed signals is ensemble averaging. which can be performed in this case very simply by the Matlab/Octave code plot(x, mean(y)) the result shows a reduction in white noise by about sqrt(10)3.2. This is enough to judge that there is a single peak with Gaussian shape, which can best be measured by curve fitting (covered in a later section ) using the Matlab/Octave code peakfit(xmean(y),0,0,1) , with the result showing excellent agreement with the position, height, and width of the Gaussian peak created in the third line of the generating script (above left). Condensing oversampled signals . Sometimes signals are recorded more densely (that is, with smaller x-axis intervals) than really necessary to capture all the important features of the signal. This results in larger-than-necessary data sizes, which slows down signal processing procedures and may tax storage capacity. To correct this, oversampled signals can be reduced in size either by eliminating data points (say, dropping every other point or every third point) or by replacing groups of adjacent points by their averages. The later approach has the advantage of using rather than discarding extraneous data points, and it acts like smoothing to provide some measure of noise reduction. (If the noise in the original signal is white, and the signal is condensed by averaging every n points, the noise is reduced in the condensed signal by the square root of n. but with no change in frequency distribution of the noise). Video Demonstration. This 18-second, 3 MByte video (Smooth3.wmv ) demonstrates the effect of triangular smoothing on a single Gaussian peak with a peak height of 1.0 and peak width of 200. The initial white noise amplitude is 0.3, giving an initial signal-to-noise ratio of about 3.3. An attempt to measure the peak amplitude and peak width of the noisy signal, shown at the bottom of the video, are initially seriously inaccurate because of the noise. As the smooth width is increased, however, the signal-to-noise ratio improves and the accuracy of the measurements of peak amplitude and peak width are improved. However, above a smooth width of about 40 (smooth ratio 0.2), the smoothing causes the peak to be shorter than 1.0 and wider than 200, even though the signal-to-noise ratio continues to improve as the smooth width is increased. (This demonstration was created in Matlab 6.5. SPECTRUM, the freeware Macintosh signal-processing application, includes rectangular and triangular smoothing functions for any number of points. Spreadsheets. Smoothing can be done in spreadsheets using the shift and multiply technique described above. In the spreadsheets smoothing. ods and smoothing. xls the set of multiplying coefficients is contained in the formulas that calculate the values of each cell of the smoothed data in columns C and E. Column C performs a 7-point rectangular smooth (1 1 1 1 1 1 1) and column E does a 7-point triangular smooth (1 2 3 4 3 2 1), applied to the data in column A. You can type in (or Copy and Paste) any data you like into column A, and you can extend the spreadsheet to longer columns of data by dragging the last row of columns A, C, and E down as needed. But to change the smooth width, you would have to change the equations in columns C or E and copy the changes down the entire column. Its common practice to divide the results by the sum of the coefficients so that the net gain is unity and the area under the curve of the smoothed signal is preserved. The spreadsheets UnitGainSmooths. xls and UnitGainSmooths. ods contain a collection of unit-gain convolution coefficients for rectangular, triangular, and Gaussian smooths of width 3 to 29 in both vertical (column) and horizontal (row) format. You can Copy and Paste these into your own spreadsheets. The spreadsheets MultipleSmoothing. xls and MultipleSmoothing. ods demonstrate a more flexible method in which the coefficients are contained in a group of 17 adjacent cells (in row 5, columns I through Y), making it easier to change the smooth shape and width (up to a maximum of 17). In this spreadsheet, the smooth is applied three times in succession, resulting in an effective smooth width of 49 points applied to column G. Compared to Matlab/Octave, spreadsheets are much slower, less flexible, and less easily automated. For example, in these spreadsheets, to change the signal or the number of points in the signal, or to change the smooth width or type, you have to modify the spreadsheet in several spaces, whereas to do the same using the Matlab/Octave fastsmooth function (below), you need only change in input arguments of a single line of code. And combining several different techniques into one spreadsheet is more complicated than writing a Matlab/Octave script that does the same thing. Smoothing in Matlab and Octave . The custom function fastsmooth implements shift and multiply type smooths using a recursive algorithm. (Click on this link to inspect the code, or right-click to download for use within Matlab). Fastsmooth is a Matlab function of the form sfastsmooth(a, w, type, edge) . The argument a is the input signal vector w is the smooth width (a positive integer) type determines the smooth type: type1 gives a rectangular (sliding-average or boxcar) smooth type2 gives a triangular smooth, equivalent to two passes of a sliding average type3 gives a pseudo-Gaussian smooth, equivalent to three passes of a sliding average. (See SmoothingComparison for a comparison of these smoothing modes). The argument edge controls how the edges of the signal (the first w/2 points and the last w/2 points) are handled. If edge0, the edges are zero. (In this mode the elapsed time is independent of the smooth width. This gives the fastest execution time). If edge1, the edges are smoothed with progressively smaller smooths the closer to the end. (In this mode the execution time increases with increasing smooth widths). The smoothed signal is returned as the vector s. (You can leave off the last two input arguments: fastsmooth(Y, w,type) smooths with edge0 and fastsmooth(Y, w) smooths with type1 and edge0). Compared to convolution-based smooth algorithms, fastsmooth uses a simple recursive algorithm that typically gives much faster execution times, especially for large smooth widths it can smooth a 1,000,000 point signal with a 1,000 point sliding average in less than 0.1 second. Heres a simple example of fastsmooth demonstrating the effect on white noise (graphic ). SmoothWidthTest. m is a simple script that uses the fastsmooth function to demonstrate the effect of smoothing on peak height, noise, and signal-to-noise ratio of a peak. You can change the peak shape in line 7, the smooth type in line 8, and the noise in line 9. A typical result for a Gaussian peak with white noise smoothed with a pseudo-Gaussian smooth is shown on the left. Here, as it is for most peak shapes, the optimal signal-to-noise ratio occurs at a smooth ratio of about 0.8. However, that optimum corresponds to a significant reduction in the peak height . which could be a serious problem. A smooth width about half the width of the original unsmoothed peak produces less distortion of the peak but still achieves a reasonable noise reduction. This effect is explored more completely by the text below, which shows an experiment in Matlab or Octave that creates a Gaussian peak, smooths it, compares the smoothed and unsmoothed version, then uses the peakfit. m function (version 3.4 or later) to show that smoothing reduces the peak height (from 1 to 0.786) and increases the peak width (from 1.66 to 2.12), but has no effect on the total peak area (as long as you measure the total area under the broadened peak). Smoothing is useful if the signal is contaminated by non-normal noise such as sharp spikes or if the peak height, position, or width are measured by simple methods, but there is no need to smooth the data if the noise is white and the peak parameters are measured by least-squares methods, because the results obtained on the unsmoothed data will be more accurate (see CurveFittingCSmoothing ). gtgt FitResults, FitErrorpeakfit(x y) FitResults Peak Position Height Width Area 1 5 1 1.6651 1.7725 FitError 3.817e-005 gtgt FitResults, FitErrorpeakfit(x ysmoothed) FitResults 1 5 0.78608 2.1224 1.7759 FitError 0.13409 The Matlab/Octave user-defined function condense. m. condense(y, n). returns a condensed version of y in which each group of n points is replaced by its average, reducing the length of y by the factor n. (For x, y data sets, use this function on both independent variable x and dependent variable y so that the features of y will appear at the same x values). The Matlab/Octave user-defined function medianfilter. m. medianfilter(y, w). performs a median-based filter operation that replaces each value of y with the median of w adjacent points (which must be a positive integer). ProcessSignal is a Matlab/Octave command-line function that performs smoothing and differentiation on the time-series data set x, y (column or row vectors). It can employ all the types of smoothing described above. Type help ProcessSignal. Returns the processed signal as a vector that has the same shape as x, regardless of the shape of y. The syntax is ProcessedProcessSignal(x, y, DerivativeMode, w, type, ends, Sharpen, factor1, factor2, SlewRate, MedianWidth) iSignal is an interactive function for Matlab that performs smoothing for time-series signals using all the algorithms discussed above, including the Savitzky-Golay smooth, a median filter, and a condense function, with keystrokes that allow you to adjust the smoothing parameters continuously while observing the effect on your signal instantly, making it easy to observe how different types and amounts of smoothing effect noise and signal (such as the height, width, and areas of peaks). Other functions include differentiation, peak sharpening, interpolation, least-squares peak measurement, and a frequency spectrum mode that shows how smoothing and other functions can change the frequency spectrum of your signals. The simple script iSignalDeltaTest demonstrates the frequency response of iSignals smoothing functions by applying them to a single-point spike. allowing you to change the smooth type and the smooth width to see how the the frequency response changes. View the code here or download the ZIP file with sample data for testing. iSignal for Matlab. Click to view larger figures. Note: you can right-click on any of the m-file links on this site and select Save Link As. to download them to your computer for use within Matlab. Unfortunately, iSignal does not currently work in Octave.
Comments
Post a Comment