¿Qué es suavizar y cómo puedo hacerlo?
Tengo una matriz en Matlab que es el espectro de magnitud de una señal de voz (la magnitud de 128 puntos de FFT). ¿Cómo suavizo esto usando una media móvil? Por lo que entiendo, debería tomar un tamaño de ventana de un cierto número de elementos, tomar el promedio, y este se convierte en el nuevo primer elemento. Luego desplace la ventana hacia la derecha por un elemento, tome el promedio que se convierte en el segundo elemento, y así sucesivamente. ¿Es realmente así como funciona? No estoy seguro de mí mismo, ya que si hago eso, en mi resultado final tendré menos de 128 elementos. Entonces, ¿cómo funciona y cómo ayuda a suavizar los puntos de datos? ¿O hay alguna otra forma de suavizar los datos?
matlab
image-processing
Comunidad
fuente
fuente
Respuestas:
El suavizado se puede hacer de muchas maneras, pero en términos muy básicos y generales significa que iguala una señal, mezclando sus elementos con sus vecinos. Usted mancha / desenfoca un poco la señal para deshacerse del ruido. Por ejemplo, una técnica de suavizado muy simple sería recalcular cada elemento de señal
f(t)
como 0,8 del valor original, más 0,1 de cada uno de sus vecinos:Observe cómo los factores de multiplicación, o los pesos, suman uno. Entonces, si la señal es bastante constante, el suavizado no la cambia mucho. Pero si la señal contenía un cambio brusco repentino, entonces la contribución de sus vecinos ayudará a aclarar un poco ese ruido.
Los pesos que usa en esta función de recálculo pueden llamarse kernel . Una función gaussiana unidimensional o cualquier otro núcleo básico debería hacer en su caso.
Buen ejemplo de un tipo particular de suavizado:
Arriba: señal no
suavizada Abajo: señal suavizada
Ejemplos de algunos núcleos:
fuente
Además de la buena respuesta de Junuxx, me gustaría dejar caer algunas notas.
El suavizado está relacionado con el filtrado (desafortunadamente, un artículo de Wikipedia bastante vago ): debe elegir el suavizador en función de sus propiedades.
Uno de mis favoritos es el filtro mediano . Este es un ejemplo de un filtro no lineal. Tiene algunas propiedades interesantes, conserva los "bordes" y es bastante robusto bajo mucho ruido.
Si tiene un modelo de cómo se comporta su señal, vale la pena echarle un vistazo al filtro Kalman . Su suavizado es en realidad una estimación bayesiana de máxima probabilidad de la señal basada en observaciones.
fuente
El suavizado implica el uso de información de muestras vecinas para cambiar la relación entre muestras vecinas. Para vectores finitos, en los extremos, no hay información contigua a un lado. Sus opciones son: no suavizar / filtrar los extremos, aceptar un vector suavizado resultante más corto, componer datos y suavizar con eso (depende de la precisión / utilidad de cualquier predicción en los extremos), o tal vez usar diferentes núcleos de suavizado asimétricos en los extremos (que termina acortando el contenido de información en la señal de todos modos).
fuente
Puede encontrar todo el código matlab para suavizar el filtro de promedio móvil para diferentes longitudes de grifos. www.gaussianwaves.com/2010/11/moving-average-filter-ma-filter-2/
fuente
Otros han mencionado cómo suaviza, me gustaría mencionar por qué funciona el suavizado.
Si sobremuestrea correctamente su señal, variará relativamente poco de una muestra a la siguiente (muestra = puntos de tiempo, píxeles, etc.), y se espera que tenga una apariencia general suave. En otras palabras, su señal contiene pocas frecuencias altas, es decir, componentes de señal que varían a una frecuencia similar a su frecuencia de muestreo.
Sin embargo, las mediciones a menudo están corrompidas por el ruido. En una primera aproximación, generalmente consideramos que el ruido sigue una distribución gaussiana con media cero y una cierta desviación estándar que simplemente se agrega en la parte superior de la señal.
Para reducir el ruido en nuestra señal, comúnmente hacemos los siguientes cuatro supuestos: el ruido es aleatorio, no está correlacionado entre las muestras, tiene una media de cero y la señal está suficientemente sobremuestreada. Con estos supuestos, podemos usar un filtro promedio deslizante.
Considere, por ejemplo, tres muestras consecutivas. Dado que la señal está muy sobremuestreada, se puede considerar que la señal subyacente cambia linealmente, lo que significa que el promedio de la señal en las tres muestras sería igual a la señal verdadera en la muestra central. En contraste, el ruido tiene una media de cero y no está correlacionado, lo que significa que su promedio debería tender a cero. Por lo tanto, podemos aplicar un filtro de promedio deslizante de tres muestras, donde reemplazamos cada muestra con el promedio entre sí y sus dos vecinos adyacentes.
Por supuesto, cuanto más grande sea la ventana, más promediará el ruido a cero, pero menor será nuestra suposición de linealidad de la señal real. Por lo tanto, tenemos que hacer una compensación. Una forma de intentar obtener lo mejor de ambos mundos es usar un promedio ponderado, donde damos muestras más lejanas a pesos más pequeños, de modo que promediamos los efectos de ruido de rangos más grandes, sin ponderar demasiado la señal verdadera donde se desvía de nuestra linealidad. suposición.
La forma en que debe poner los pesos depende del ruido, la señal y la eficiencia computacional, y, por supuesto, la compensación entre deshacerse del ruido y cortar la señal.
Tenga en cuenta que se ha realizado mucho trabajo en los últimos años para permitirnos relajar algunos de los cuatro supuestos, por ejemplo, diseñando esquemas de suavizado con ventanas de filtro variable (difusión anisotrópica), o esquemas que realmente no usan ventanas en absoluto (medios no locales).
fuente