¿Qué es suavizar en términos muy básicos?

17

¿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?

EDITAR: enlace a la pregunta de seguimiento

Comunidad
fuente
para un espectro que probablemente desee promediar juntos (en la dimensión de tiempo) múltiples espectros en lugar de un promedio continuo a lo largo del eje de frecuencia de un solo espectro
endolito
@endolith ambas son técnicas válidas. El promedio en el dominio de la frecuencia (a veces llamado Periodograma de Danielle) es lo mismo que la ventana en el dominio del tiempo. El promedio de periogramas múltiples ("espectros") es un intento de imitar el promedio de conjunto requerido del verdadero Periodograma (esto se llama Periodograma de Welch). Además, como cuestión de semántica, diría que "suavizar" es un filtrado de paso bajo no causal. Consulte el filtrado de Kalman frente al suavizado de Kalman, el filtrado de Wiener v el suavizado de Wiener, etc. Existe una distinción no trivial y depende de la implementación.
Bryan

Respuestas:

23

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:

f'(t) = 0.1*f(t-1) + 0.8*f(t) + 0.1*f(t+1)

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

ingrese la descripción de la imagen aquí

Ejemplos de algunos núcleos:

ingrese la descripción de la imagen aquí

Junuxx
fuente
Entonces, ¿es este un promedio móvil ponderado? ¿Se llama esto tener un tamaño de ventana de 3? ¿Qué pasa con el primer y último elemento? ¿Y cómo se modificaría esto si tengo una matriz de 128 elementos y quiero usar una ventana de 16 o 32 elementos?
@ user13267: Sí, se podría decir que un kernel de suavizado es un promedio móvil ponderado. Si usa un núcleo uniforme (vea la segunda imagen), es solo un promedio móvil simple. Tienes razón sobre el tamaño de la ventana. Para tratar con los bordes, hay tres enfoques básicos: 1) rellenar con ceros sus datos, 2) repetir el último valor, 3) reflejar la señal. En todos los casos, usted hace algunos datos simulados para que su núcleo no se caiga en la nada.
Junuxx
¿No sería cero el relleno como caer en la nada? Al final del proceso de media móvil, mi nuevo conjunto de datos "promediados" debería tener la misma cantidad de datos que el original, ¿no? entonces si pongo cero al principio o al final, o repito los últimos datos, ¿no sesgará el valor promedio en los bordes de la matriz? ¿Y cómo ayudaría la duplicación de la señal en términos de cantidad de términos de datos? ¿Hay algún tutorial simple para esto en alguna parte que muestre cómo se lleva a cabo el proceso para, digamos, 32 puntos de datos y un tamaño de ventana de 4 o 5?
2
Si desea que su conjunto de datos suavizado tenga la misma longitud que el conjunto de datos original, debe "recuperar" los datos en los puntos finales. Cualquier elección que haga sobre cómo crear esos datos sesga el promedio de alguna manera. Tratar los datos fuera de los límites como un espejo del conjunto de datos real (es decir, suponiendo que la muestra N + 1 es la misma que N-1, N + 2 = N-2, etc.) retendrá las características del espectro de frecuencia de partes finales de la señal, mientras que suponiendo que una repetición cero o no cero hará que parezca que todas las frecuencias están rodando en los extremos.
Russell Borogove
8

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
4

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).

hotpaw2
fuente
3

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/

mentalidad
fuente
1

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).

Jonas
fuente