¿Qué es una explicación intuitiva para la convolución?

Algunas buenas respuestas aquí. Pensé que mostrar un ejemplo simple para usarlo en un contexto de procesamiento de señales sería más fácil de entender. He incluido el código y algunas parcelas, en caso de que quiera jugar con él.

No explicaré ninguna de las definiciones o detalles de convolución, ya que Sridhar dio una explicación realmente super intuitiva de eso, también lo hizo David. La respuesta de Mark ofrece algunas áreas de aplicación realmente interesantes que son mucho más interesantes que mi ejemplo, pero creo que comenzar con una señal simple es más fácil.

Primero, defina alguna función:

[matemáticas] F (x) = \ sin (2 \ pi f_1 x) + \ sin (2 \ pi f_2 x) / 3 [/ matemáticas]

  ff1 = 10
 ff2 = 13
 f = lambda f1, f2, x: np.sin (2 * np.pi * f1 * x) + np.sin (2 * np.pi * f2 * x) /3.0
 x = np.arange (0,1,1. / 150)
 y = f (ff1, ff2, x)

Y luego agrega un poco de ruido gaussiano,

  dy = 0.5 + 1.e-1 * np.random.random (forma y)
 ruido = np.random.normal (0, dy)
 ynoisy = y + ruido

Trace esos dos muy rápido:

Está bien. Ahora defina una función de suavizado que tome la convolución entre nuestra función ruidosa y alguna “ventana” (ver: Función de ventana):

  def smooth (x, window_len = 11, window = 'hanning'):
     si x.size <window_len:
         raise ValueError, "El vector de entrada debe ser más grande que el tamaño de la ventana".
     si window_len <3:
         volver x
     s = np.r_ [x [window_len-1: 0: -1], x, x [-1: -window_len: -1]]
     if window == 'flat': # promedio móvil                                                 
         w = np.ones (window_len, 'd')
     más:
         w = eval ('np.' + ventana + '(window_len)')
     y = np.convolve (w / w.sum (), s, mode = 'valid')
     return y [(window_len / 2) :-( window_len / 2)]

Y luego pruebe un par de tipos de ventanas, como la ventana de Hamming

[matemáticas] W_ {hamming} (x) = 0.54 – 0.46 \ cos \ left (\ frac {2 \ pi x} {M – 1} \ right) [/ math]

donde [math] M [/ math] es el tamaño de la ventana en la dirección x (que es el segundo argumento para suavizar ()), que se ve así:

y la ventana plana

[matemática] W_ {plana} (x) = 1 [/ matemática]

y sabes cómo se ve eso (por cierto, los verdaderos geeks podrían notar que la ventana de Hamming no es exactamente apropiada para usar aquí, pero es solo un ejemplo aleatorio).

  # Obtenga una función suavizada
 ys_ham = suave (y, window_len = 5, window = 'hamming')
 ys_flat = smooth (y, window_len = 5 window = 'flat')

Y ahora trama todo:

¡Frio! La ventana plana no funciona tan bien porque es solo una caja, pero la ventana de Hamming parece un poco gaussiana, por lo que esperamos que funcione decentemente bien y lo hace. Si observa la función ruidosa original por sí misma, es casi sorprendente que una herramienta matemática tan simple pueda extraer una representación casi perfecta de la función generadora subyacente.

Pero para el suavizado general de la señal, nos gusta usar una función gaussiana para nuestra ventana. Por supuesto, cuando uso una ventana gaussiana, el resultado se superpone exactamente con [math] F (x) [/ math]:

Para su información, no puede ingresar ‘gaussian’ como argumento para smooth (), tuve que agregar un elif para smooth (), aquí está la línea:

w = sp.signal.gaussian(window_len, 0.1)

y usted podría decir que estoy haciendo trampa aquí, y lo estoy, porque sé exactamente cuál era la variación del ruido y el hecho de que era gaussiano (para aclarar, el ruido está en la dirección y, así que estoy sin decir que está invirtiendo esto). Si hace que la varianza sea más grande, verá que comienza a desviarse (de hecho, si la hace lo suficientemente grande, verá que pierde uno de los términos en la función original).

Y finalmente, aquí hay un ejemplo con datos del mundo real (es la temperatura del agua durante una semana más o menos):

Aquí es más difícil decir qué funciona mejor porque no tenemos la verdad básica. Mirar el espectro de frecuencia de sus datos puede ayudar a decidir, pero, por supuesto, todo depende de lo que esté tratando de hacer.

De todos modos, aquí está el código en un solo lugar (nota: necesita numpy, scipy y matplotlib / pylab):

  importar numpy como np
 importar scipy como sp
 importar pylab como plt
 de señal de importación scipy

 # Primero defina una función
 ff1 = 10
 ff2 = 13
 f = lambda f1, f2, x: np.sin (2 * np.pi * f1 * x) + np.sin (2 * np.pi * f2 * x) /3.0
 x = np.arange (0,1,1. / 150)
 y = f (ff1, ff2, x)

 # Añadir algo de ruido
 dy = 0.5 + 1.e-1 * np.random.random (forma y)
 ruido = np.random.normal (0, dy)
 ynoisy = y + ruido

 # Definir la función de suavizado
 def smooth (x, window_len = 11, window = 'hanning', var = 0.1):
     "" "
     Tomado del libro de cocina scipy:
     http://wiki.scipy.org/Cookbook/SignalSmooth
     "" "
     si x.size <window_len:
         raise ValueError, "El vector de entrada debe ser más grande que el tamaño de la ventana".
     si window_len <3:
         volver x
     s = np.r_ [x [window_len-1: 0: -1], x, x [-1: -window_len: -1]]
     if window == 'flat': # promedio móvil
         w = np.ones (window_len, 'd')
     ventana elif == 'gaussiano':
         w = sp.signal.gaussian (window_len, var)
     más:
         w = eval ('np.' + ventana + '(window_len)')
     y = np.convolve (w / w.sum (), s, mode = 'valid')
     return y [(window_len / 2) :-( window_len / 2)]

 # Obtenga una función suavizada
 wlen = 5
 ys_ham = suave (y, window_len = wlen, window = 'hamming')
 ys_flat = smooth (y, window_len = wlen, window = 'flat')
 ys_gauss = suave (y, window_len = wlen, ventana = 'gaussiano', var = 0.1)

 # Mostrar algunas parcelas
 plt.plot (x, y, 'k', ancho de línea = 3, etiqueta = "f (x)")
 plt.plot (x, ynoisy, 'g:', linewidth = 2, label = "Gaussian noise + f (x)")
 plt.plot (x, ys_ham, 'r', linewidth = 1, label = "Hamming window * f (x)")
 plt.plot (x, ys_flat, 'b', linewidth = 1, label = "Ventana plana * f (x)")
 plt.plot (x, ys_gauss, 'c--', linewidth = 3, label = "Ventana gaussiana * f (x)")
 plt.legend ()
 plt.show ()

Por lo general, ver cómo implementar las matemáticas algorítmicamente me ayuda a comprenderlo mejor, así que si tiene curiosidad acerca de cómo se implementa la convolución, consulte el código fuente de Numpy en Github: https://github.com/numpy/numpy/ b …, aunque es cierto que este parece bastante críptico. Trataría de ayudar más con esto, pero dejaré que el detective trabaje contigo. Lo real para recordar es que está trabajando en un dominio discreto, así que simplemente extienda su dominio a la línea real (acotada) y reemplace la suma con una integral.

Supongamos que tiene un puntero láser especial que forma una estrella en la pared. Pega un montón de estos punteros láser en forma de cuadrado. El patrón en la pared ahora es la convolución de una estrella con un cuadrado.

Convolution tiene muchas aplicaciones en física de pregrado, ingeniería eléctrica y procesamiento de señales. En lugar de las dos dimensiones de un muro, tome la única dimensión del tiempo. Tienes un objeto en un resorte que, cuando le das una patada, comienza a balancearse un poco hacia adelante y hacia atrás. Bajo ciertas suposiciones, el sistema es “lineal”, lo que significa que si le das una segunda patada, el comportamiento resultante del objeto se puede encontrar sumando la respuesta a la primera patada sola y la respuesta a la segunda patada sola. Si está siguiendo la coordenada x del objeto en función del tiempo a medida que se balancea hacia adelante y hacia atrás, puede representar gráficamente la respuesta a una patada (una fuerza instantánea) como una función x = f (t). De hecho, hay una sola función f (t) que representa la “respuesta de impulso” del sistema, y ​​puede calcular la respuesta del sistema a cualquier serie de patadas sumando copias escaladas del mismo. Si expresa la “fuerza de patada” en función del tiempo, k (t), entonces el comportamiento del objeto es la convolución de f (t) con k (t). La función de patada k podría ser una serie de impulsos, o podría ser en sí misma una función continua. El objeto podría estar en un campo magnético, por ejemplo, o conectado a algo que tira de él con fuerza variable.

No fue hasta el examen final de mi curso de Ecuaciones Diferenciales que finalmente “entendí” lo que estaba sucediendo con estas circunvoluciones (que había estado trabajando como problemas de cálculo durante todo el trimestre). Comencé a imaginar un número infinito de copias de una función, escaladas en diferentes cantidades, todas sumadas, a medida que cada instante iniciaba una nueva respuesta en el sistema que se agregaría a su comportamiento por el resto del tiempo.

Los voltajes y corrientes en circuitos con resistencias, condensadores, etc. son lineales, por lo que existe un gran universo de aplicabilidad de este tipo de análisis.

Usaré gráficos interactivos para ilustrar la convolución.

Abra esto en su navegador, ahora: Ilustración de convolución
Es un gráfico interactivo simple que puede usar inmediatamente en línea.

En primer lugar, la definición de convolución para x real:

[matemáticas] (f \ ast g) (t) = \ displaystyle \ int _ {- \ infty} ^ {+ \ infty} f (x) g (tx) \, dx [/ math]

Si [math] f (x) [/ math] y [math] g (x) [/ math] es cero para todos [math] x <0 [/ math], los límites de integración pueden truncarse (no es necesario tener en cuenta las razones ahora):

[matemáticas] (f \ ast g) (t) = \ displaystyle \ int_ {0} ^ {t} f (x) g (tx) \, dx [/ math]

Esto es lo que ilustraremos.

Tenemos dos funciones: [matemáticas] f (t) [/ matemáticas] en naranja y [matemáticas] g (t) [/ matemáticas] en verde. En nuestro estudio de caso, todos los valores de [matemática] f (t) [/ matemática] y [matemática] g (t) [/ matemática] fuera de [matemática] 0 \ leq t \ leq 10 [/ matemática] es cero. Vamos a calcular la convolución de [matemáticas] f (t) [/ matemáticas] y [matemáticas] g (t) [/ matemáticas], que es [matemáticas] (f \ ast g) (t) [/ matemáticas] .

Debido a cómo se define la convolución, estamos interesados ​​en [matemática] f (x) [/ matemática] y [matemática] g (tx) [/ matemática], en cierta [matemática] t [/ matemática].

Calcularemos [math] (f \ ast g) (t) [/ math] comenzando con [math] t = 0 [/ math]. Esto es [matemática] f (x) [/ matemática] y [matemática] g (tx) [/ matemática] cuando [matemática] t = 0 [/ matemática].

La función [matemáticas] f (x) g (tx) [/ matemáticas] también se traza, que es la línea punteada azul. [matemática] f (x) [/ matemática] y [matemática] g (tx) [/ matemática] está relacionada por multiplicación: para calcular [matemática] f (x) g (tx) [/ matemática] para alguna [matemática] x [/ math] ([math] t [/ math] es una constante), multiplica [math] f (x) [/ math] por [math] g (tx) [/ math]. Sin embargo, cuando [math] t = 0 [/ math], [math] f (x) g (tx) [/ math] es casi cero para todos [math] x [/ math], y el área que subtiende es cero . Por lo tanto, [math] (f \ ast g) (t) [/ math] es cero.

A medida que [math] t [/ math] aumenta, la joroba verde se mueve hacia la derecha. En este momento, las jorobas aún no se han tocado, por lo tanto, [matemáticas] f (x) g (tx) [/ matemáticas] sigue siendo casi cero para todas [matemáticas] x [/ matemáticas]. Así [matemáticas] (f \ ast g) (6.5) \ aproximadamente 0 [/ matemáticas].

Movimos la joroba verde hacia la derecha y ahora [math] t = 8.7 [/ math], y se cruza con la joroba naranja. La línea de puntos verde [matemática] f (x) g (tx) [/ matemática] ya no se encuentra en el eje [matemática] x [/ matemática].

Recuerde cómo se obtiene [matemáticas] f (x) g (tx) [/ matemáticas]. Multiplica los valores [matemática] f (x) [/ matemática] y [matemática] g (tx) [/ matemática], y hazlo por cada [matemática] x [/ matemática] en el dominio. Tomando [matemática] x = 4 [/ matemática] por ejemplo, [matemática] f (4) = 0.736 [/ matemática], [matemática] g (8.7–4) = 1.5 [/ matemática], [matemática] f (x ) g (tx) = 1.104 [/ matemáticas]. Hazlo para todos los demás [math] x [/ math] y obtendrás la curva azul. Estamos interesados ​​en el área bajo la curva azul, que es [matemática] 1.66 [/ matemática] unidades. Eso es [matemáticas] (f \ ast g) (8.7) [/ matemáticas].

Ahora alineamos la joroba verde y la joroba naranja, en [math] t = 10 [/ math]. La cantidad de “intersección” es máxima. El área debajo del gráfico de la curva azul [matemática] f (x) g (tx) [/ matemática] está al máximo en [matemática] t = 10 [/ matemática], y también lo es [matemática] (f \ ast g ) (t) [/ matemáticas].

Observe que hemos agregado una curva. Es [matemáticas] (f \ ast g) (t) [/ matemáticas]. Tenga en cuenta que [math] (f \ ast g) (t) [/ math] se traza contra [math] t [/ math], mientras que las otras curvas se trazan contra [math] x [/ math] – una variable intermedia en La integral. Puede ver los valores anteriores de [math] (f \ ast g) (t) [/ math], y que [math] (f \ ast g) (t) [/ math] está al máximo en [math] t = 10 [/ matemáticas].

Empujando la joroba verde ligeramente hacia la derecha [matemáticas] t = 10.4 [/ matemáticas] produce esto:

Después de alejar la joroba verde de la joroba naranja, en [matemática] t = 13 [/ matemática], ya no hay superposición. [matemática] (f \ ast g) (t) [/ matemática] es casi cero para [matemática] t> 13 [/ matemática].

Es suficiente calcular [matemáticas] (f \ ast g) (x) [/ matemáticas] hasta [matemáticas] x = 20 [/ matemáticas]. Porque para nuestro estudio de caso hemos definido [matemática] f (x) [/ matemática] y [matemática] g (x) [/ matemática] es cero fuera de [matemática] 0 \ leq x \ leq 10 [/ matemática]. Por lo tanto, la función [matemática] f (t) g (xt) [/ matemática] es cero para todos [matemática] x [/ matemática] cuando [matemática] t [/ matemática] está fuera de [matemática] 0 \ leq x \ leq 20 [/ math] – [math] (f \ ast g) (t) [/ math] también es cero fuera del dominio también.

Para llevar a cabo una convolución para funciones que tienen valores distintos de cero para [matemática] x <0 [/ matemática], puede traducir la función a la derecha de modo que los valores antes del eje y sean cero o casi cero. Una vez realizada la convolución, traslade la salida a la izquierda.

También considere cómo se verá afectada la convolución si la señal de entrada [matemática] f (x) [/ matemática] o [matemática] g (x) [/ matemática] tiene valores negativos. Puede probar su hipótesis cambiando la función [matemáticas] f_0 (x) [/ matemáticas] y [matemáticas] g_0 (x) [/ matemáticas] en el gráfico interactivo.

Esperemos que esto ayude en su visualización de la convolución de funciones continuas.

Saca un bolígrafo y papel y dime, ¿qué es [matemáticas] (5x ^ 2 + 3x – 9) \ veces (4x + 1) [/ matemáticas]?

Muy bien: es [matemática] 20x ^ 3 + 17x ^ 2 – 33x – 9 [/ matemática].

¡Acabas de realizar una convolución! Convolución es solo una palabra elegante para la operación que convierte los coeficientes de polinomios en los coeficientes de su producto. La regla básica es que [matemáticas] x ^ i \ veces x ^ j = x ^ {i + j} [/ matemáticas], y [matemáticas] \ veces [/ matemáticas] es lineal en cada argumento. Todo lo demás se sigue de eso.

[Podemos generalizar al caso en el que se permite que los polinomios tengan términos negativos o fraccionarios o que tengan exponentes, pero todo sigue funcionando de la misma manera. El coeficiente de grado d del polinomio de salida viene dado por la suma de los productos de todos los coeficientes de los polinomios de entrada sobre los grados que suman d.]

Matemáticamente hablando, es un promedio ponderado con una función (discreta o analógica) que constituye los pesos y otra la función a promediar .

Aquí , x (k) o h (n) pueden ser la función de ponderación.

************************************************** ******************
Desde el punto de vista de la teoría de sistemas lineales , la intuición es la siguiente:

Sabemos que todos los sistemas lineales se adhieren al principio de superposición , es decir, la salida de un sistema lineal a una serie de entradas es la suma de la respuesta del sistema a cada entrada individual.

Ahora con un sistema invariante en el tiempo , también tenemos el resultado, que la salida tiene el mismo retraso que la entrada.

Ambos principios (de superposición e invariancia en el tiempo) conducen a la suma de convolución. Ver imágenes a continuación:



En la figura de arriba, la imagen de la izquierda representa la señal de entrada representada en términos de impulsos.

Cada impulso individualmente produce una respuesta que se retrasa en la misma cantidad que el impulso de entrada, que se muestra a la derecha.

La salida neta es la suma de cada una de las respuestas individuales. Esta es la suma de convolución.

En caso de funciones continuas, la suma se convierte en una integral.

Dependiendo de cómo se elijan los pesos, puede realizar muchas operaciones en la función, desde acentuar los efectos a corto plazo (filtro de paso alto) hasta acentuar los efectos a largo plazo (filtro de paso bajo) y rechazar ciertos efectos (filtro de banda). aceptando ciertos efectos (filtro de paso de banda).

Ese es un tema para otra respuesta!

Daré dos respuestas. En conjunto creo que construyen una intuición decente.

  1. El primero es algorítmico. Pienso en la convolución de dos listas a ⃗ ∗ b ⃗ en contraste con el producto de punto a ⃗ ⋅ b ⃗. De hecho, la convolución es cómo yo y otros estudiantes intuitivamente quisimos describir la multiplicación de vectores en mi primer intento de cálculo multivariable. El producto de puntos asigna listas largas a una cosa unidimensional pero [matemática] \ ast: K ^ N \ veces K ^ N \ a K ^ N [/ matemática], la misma longitud que las cosas que están enredadas. De lo contrario, son similares en que multiplican pares aibi . Pero donde el producto escalar reduce la dimensionalidad sumando ∑ i sobre las entradas, la convolución deja los productos en su lugar ( a 1⋅ b 1, …, aNbN ). En otras palabras, la convolución es la multiplicación de entrada que sus alumnos de álgebra lineal querían hacer cuando les preguntó por primera vez cómo deberían multiplicar dos matrices (excepto en los vectores).
  2. El segundo es visual. Imagen de una curva entrecortada, por ejemplo
    . Para suavizar eso, involucraría la larga serie de datos en una lista mucho más corta. Para obtener el promedio móvil semanal, lo convolucionaría contra 15⋅ [1 1 1 1 1] (ceros implícitos a la izquierda y a la derecha; esto es convolucional contra una función Rect). Para obtener el promedio móvil mensual que serían 25 unidades. Si desea convolucionarse contra algo más suave que Rect, podría convolucionarse contra un gaussiano. El desenfoque gaussiano en 2D se ve así:
    . Ahora estoy saliendo de mi área de conocimiento, pero creo que el desenfoque de cuadro es la palabra de procesamiento de imágenes para convolucionar contra una función Rect 2D, tal vez solo significando con ancho = tres unos:
    . Tal vez con un poco de conocimiento de la computadora pueda codificar de manera más uniforme con los datos que elija.

Como post-script para esta respuesta, creo que la convolución gaussiana vs rectangular es en realidad un buen ejemplo para explicar a los no matemáticos cómo los matemáticos piensan acerca de la “fealdad”. Hay algo intuitivamente estúpido, incluso para un no matemático, acerca de integrarse contra algo como
[matemáticas] \ begin {bmatrix} 0 y 0 y 0 y 0 y 0 \\ 0 y 0 y 1 y 0 y 0 \\ 0 y 1 y 1 y 1 y 0 \\ 0 y 0 y 1 y 0 y 0 \\ 0 & 0 & 0 & 0 & 0 \ end {bmatrix} [/ math]
cuando un círculo o elipse sería una forma más lógica. También hay algo estúpido, feo, inútil o extraño en la integración contra [0 ⋯ 0 0 1 1 1 0 0 ⋯ 0]
, pero ¿cuál es la forma correcta de bajar “suavemente” o “lógicamente” en ambos lados?
Discusión de referencia sobre [matemáticas] \ matemáticas {F} (\ exp (- x ^ 2/2)) = \ exp (- x ^ 2/2) [/ matemáticas] …

Las otras respuestas han hecho un gran trabajo dando intuición para la convolución continua de dos funciones. La convolución también se puede hacer en funciones discretas, y resulta que la convolución discreta tiene muchas aplicaciones útiles específicamente en los campos de procesamiento de imágenes y visión por computadora.

Comenzaremos con el procesamiento de imágenes. Con fines demostrativos, utilizaremos la siguiente imagen:

Entonces, digamos que queríamos desenfocar esta imagen. Esto implicaría promediar píxeles juntos en un área pequeña alrededor de cada punto de la imagen. Pero, ¿y si quisiéramos que este desenfoque fuera gaussiano? es decir, en lugar de dar a cada píxel local la misma “representación” en el proceso de promediación cerca de un punto en particular, usaríamos alguna función gaussiana para “ponderar” cada píxel local en función de la distancia desde el punto. Hacer esto tiene el beneficio adicional de hacer que el desenfoque se vea un poco más suave y menos distorsionado.

Si pensamos en la imagen como una función continua (por ahora) de dos variables reales, digamos [math] f (x, y) [/ math], entonces la imagen borrosa resultante es solo la convolución de esta función con una bidimensional Función gaussiana [matemáticas] \ sigma (x, y): [/ matemáticas]

(El pico y la disminución gradual de la función gaussiana se pueden usar para crear un desenfoque suave)

(Un Grothendieck borroso)

Esta convolución bidimensional (la imagen borrosa) puede estar dada por la integral doble:

[matemáticas] f (x, y) * \ sigma (x, y) = \ displaystyle \ int ^ \ infty _ {- \ infty} \ int ^ \ infty _ {- \ infty} f (\ tau, \ lambda) \ sigma (x- \ tau, y- \ lambda) d \ tau d \ lambda \ tag * {} [/ math]

(Leer algunas de las otras respuestas debería dar una intuición de por qué esta integral da la convolución de las dos funciones)

Sin embargo, las imágenes no son funciones continuas; son matrices de valores de color. Por lo tanto, presentamos una versión discreta de esta integral:

[matemáticas] f [x, y] * \ sigma [x, y] = \ displaystyle \ sum ^ \ infty_ {i = – \ infty} \ sum ^ \ infty_ {j = – \ infty} f [i, j] \ sigma [xi, yj] \ tag * {} [/ math]

Esto todavía supone que nuestra imagen y función gaussiana tienen un dominio infinito. Representando tanto la imagen [matemática] F [/ matemática] como la función gaussiana [matemática] S [/ matemática] como una matriz, obtenemos la suma:

[matemáticas] (F * S) _ {x, y} = \ displaystyle \ sum ^ w_ {i = -w} \ sum ^ w_ {j = -w} F_ {i, j} S_ {xi, yj} \ etiqueta * {} [/ math]

donde el tamaño de [math] S [/ math] es [math] (2w + 1) \ times (2w + 1) [/ math].

En general, podemos elegir cualquier matriz [matemática] S [/ matemática] (esto se llama núcleo), y podemos obtener una amplia gama de imágenes resultantes.

Aquí hay unos ejemplos:

[matemáticas] S = \ begin {bmatrix} -2 & -1 & 0 \\ -1 & 1 & 1 \\ 0 & 1 & 2 \ end {bmatrix} \ tag * {} [/ math]

[matemática] S = \ begin {bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \ end {bmatrix} \ tag * {} [/ math]

[matemática] S = \ begin {bmatrix} -1 & -1 & -1 \\ -1 & 8 & -1 \\ -1 & -1 & -1 \ end {bmatrix} \ tag * {} [/ math ]

Esto proporciona una forma eficiente de detectar bordes, desenfoque, nitidez de imágenes y muchos más efectos, todo con la misma ecuación.

Si pateas a una persona, llora de cierta manera durante 10 segundos. Cuanto más fuerte patees, su volumen de llanto será mayor. Digamos que pateas de nuevo a los 5 segundos. ¿Lo que pasa? Parecería que una persona está llorando junto con otra persona que comenzó en t = 5 segundos de la misma manera. Ahora escuchas ambos sonidos sumados. Tu patada es la entrada. El grito es la respuesta. Ahora mira a continuación las patadas que das a intervalos regulares. Y escuchas el grito correspondiente a cada patada. Todo necesita ser agregado lógicamente ¿verdad?

Creo que Sridhar y David tienen buenas respuestas. Hablaré sobre los contextos en los que personalmente me he topado con convoluciones de la forma [matemáticas] A ^ * B (x) \ equiv \ int _ {- \ infty} ^ \ infty \ mathrm {d} y A (y ) B (xy) [/ matemáticas]

Primero echemos un vistazo a la fórmula. [matemáticas] A [/ matemáticas] y [matemáticas] B [/ matemáticas] son ​​solo funciones. Piense en ellos como una especie de bulto.

En la integral, [math] y [/ math] es solo una variable ficticia. Así que vamos a correr a lo largo de la línea real y en cada punto, veamos el valor de [math] A [/ math].

[matemáticas] B (xy) [/ matemáticas] es la función [matemáticas] B [/ matemáticas] traducida a [matemáticas] y [/ matemáticas]. Entonces, esencialmente, lo que la integral dice que hacer es mirar cada punto a lo largo de la línea real, hacer una copia de [matemáticas] B [/ matemáticas], multiplicar su altura por [matemáticas] A [/ matemáticas] en el punto y golpear el punto copiar centrado en ese punto. Luego sume todas esas copias de [math] B [/ math] en toda la recta numérica, y tendrá la convolución de [math] A [/ math] y [math] B [/ math].

Aquí hay algunos lugares que le gustaría hacer eso:

Probabilidad

Supongamos que tira un dado de 20 lados (dado [matemático] A [/ matemático]) y un dado de 6 lados (dado [matemático] B [/ matemático]) y agrega los resultados. ¿Cuál es la distribución de probabilidad para esta suma?

Para resolver esto, considere algún resultado en particular, por ejemplo, 14. Puede obtener esto tirando 13 y 1, 12 y 2, 11 y 3, etc. En general, para obtener un resultado de [matemáticas] n [/ matemáticas], puede obtener [math] m [/ math] y [math] nm [/ math] para cualquier número [math] m [/ math]. Debe tomar la probabilidad de cada uno de esos eventos y agregarlos. La formula es

[matemáticas] P_ {A + B} (n) = \ sum_ {m = 1} ^ {20} P_A (m) P_B (nm) [/ matemáticas]

Esta es la convolución de [matemáticas] P_A [/ matemáticas] y [matemáticas] P_B [/ matemáticas].

En general, si [math] P_A [/ math] y [math] P_B [/ math] son ​​distribuciones de probabilidad arbitrarias, la distribución si realiza un muestreo aleatorio de cada uno y agrega los resultados es

[matemáticas] P_ {A + B} (x) = \ int_ {y = – \ infty} ^ \ infty \ mathrm {d} y P_A (y) P_B (xy) [/ math]

Esta es la fórmula de convolución. Dice que nos encontramos con todas las posibilidades para la primera variable, tomamos eso como un cambio para la distribución de la segunda variable y sumamos todas las posibilidades cambiadas.

Estructura cristalina

Ahora suponga que tiene una estructura de cristal como esta:

La ubicación de todos los átomos es una convolución de un solo par Na-Cl con una cuadrícula de puntos, uno en el centro de cada Cl. El patrón Na-Cl es nuestra [matemática] B [/ matemática], y la cuadrícula de puntos es nuestra [matemática] A [/ matemática], y colocamos una copia de [matemática] B [/ matemática] en cada punto en [matemáticas] A [/ matemáticas]. Tenga en cuenta que ahora estamos tratando con dos dimensiones, por lo que [math] x [/ math] se ha convertido en un vector.

Esta es una forma útil de describir las ubicaciones de los átomos porque si queremos calcular el patrón de difracción a partir de la dispersión de electrones de este cristal, el teorema de Convolución nos permite decir que el patrón de difracción es solo el múltiplo del patrón de difracción para un solo Na -Cl celda con el patrón para la cuadrícula de puntos.

Del mismo modo, si hacemos brillar un láser en un par de rendijas para un experimento de doble rendija, las rendijas son una convolución de una sola rendija con dos puntos, uno en el centro de cada rendija. El patrón de difracción de dos puntos es solo una serie de barras verticales (en una intensidad [matemática] \ sin ^ 2 [/ matemática]). Podemos simplemente multiplicar estas barras verticales en un patrón de una sola rendija (que es una función [math] \ mathrm {sinc} ^ 2 [/ math]) para obtener el patrón de difracción final de nuestras rendijas dobles.

Observación astronómica

Debido a que la óptica nunca es perfecta, los telescopios no pueden enfocar la luz desde un solo punto en el cielo a un solo punto en su detector. En cambio, esa fuente de luz de un solo punto se extenderá en algún tipo de patrón característico llamado “función de dispersión de punto”.

Si tiene dos puntos de luz en el cielo, sus imágenes en su detector serán dos funciones de dispersión agregadas una encima de la otra. Si está mirando algún tipo de objeto extendido como una nebulosa, la luz en su detector es una convolución de la función de dispersión puntual con la fuente real de luz. La función de dispersión de puntos es nuestra función [matemática] B [/ matemática] y la luz de la nebulosa es la función [matemática] A [/ matemática].

Detectando Radiación

Supongamos que una muestra está experimentando una desintegración radiactiva aleatoria. Cada vez que se emite un ion, su detector hace que una señal de voltaje característica atraviese su electrónica. Entonces, el voltaje en función del tiempo es la convolución de la función que describe cuándo ocurren las desintegraciones con la señal de voltaje característica.

Ejercicio

Como un ejemplo tonto para ilustrar aún más la idea, suponga que cada día mide la temperatura a las 9 am. Luego, por cada grado que esté afuera, haces una flexión y dos abdominales. Entonces el ejercicio que haces es la convolución de la temperatura con la función (una flexión + 2 abdominales).

Aquí hay algunos ejemplos para probarse:

  • En 2D, la convolución de un segmento de línea horizontal con un segmento de línea vertical es un rectángulo
  • En 1D, la convolución de dos protuberancias cuadradas individuales entre sí es una protuberancia triangular simétrica tan ancha como alta
  • [matemáticas] A ^ * B = B ^ * A [/ matemáticas]
  • La convolución de una función par con una función impar es impar. La convolución de dos funciones impares o dos funciones pares es par.
  • varios ejemplos en el artículo de wikipedia Convolución

Y recuerde, si está explorando la base de un río y se encuentra con el fundador de la electrodinámica cuántica, no le pida que convierta algo a un idioma diferente. Saldrá confuso porque la traducción es solo una convolución con un delta de Dirac.

TL; DR : Imagina que tienes dos formas en el avión. Puede deslizarlos libremente pero no puede rotarlos. Una vez que los arregle de alguna manera, puede medir el área de superposición. Si creamos una función que nos dice qué tan grande es la superposición para cualquier posible arreglo, básicamente estamos calculando una convolución “juguete” de las dos formas. Al generalizar esto para que funcione no solo con objetos claros sino también con cosas borrosas (y volteando una de las formas), obtenemos una convolución “real”. Aunque generalmente se introduce en una dimensión, creo que es más fácil de imaginar en dos.

Detalles

Construyamos algunas matemáticas para modelar lo que acabamos de hablar. Vamos a representar una forma F como una función f que asigna un valor a cada ubicación x en un marco de referencia adjunto a la forma. Si x está en la forma, entonces f (x) = 1, de lo contrario f (x) = 0. En otras palabras, f es la función del indicador del conjunto de puntos F.

Entonces tenemos dos formas F y G, con funciones representativas f y g. Si seleccionamos cualquier punto p en el plano, tiene una ubicación en ambos marcos de referencia. Llamemos su ubicación en el marco de referencia de F x, y su ubicación en el marco de referencia de G y. Tenga en cuenta que el desplazamiento D = x – y depende solo de la disposición de F y G, y es independiente de la elección de p. De ahora en adelante podemos escribir x – D en lugar de y.

Ahora p está en la parte superpuesta de F y G precisamente cuando tanto f (x) como g (y) son 1, lo que se puede expresar de manera más compacta al decir que f (x) * g (y) = 1, o equivalentemente, f (x) * g (x – D) = 1. Para medir el área de la superposición para la disposición dada por el desplazamiento D, solo necesitamos integrar ese producto en todas las ubicaciones x:
[math] \ mathrm {superposición} (D) = \ underset {x \ in \ mathbb {R} ^ 2} {\ int} f (x) \ cdot g (x – D) \ dx [/ math]

La convolución “real” voltea una de las formas antes de calcular la función de superposición. Además, no restringe los valores de las funciones fyg al conjunto {0, 1}, por lo que debe considerarse que representan formas borrosas que no tienen límites bien definidos.

La convolución es correlación con el filtro invertido [matemática] 180 ^ {\ circ} [/ matemática].
¿Qué es la correlación?
Desplaza el cuadro de filtro a los siguientes datos y lo aplica, paso a paso, para construir el conjunto de datos transformado.

Voltee el filtro por [matemática] 180 ^ {\ circ} [/ matemática] y estará convolucionando en lugar de correlacionar.
Aquí el filtro es [matemático] (\ frac {1} {3}, \ frac {1} {3}, \ frac {1} {3}) [/ matemático] simétrico. como filtros lapalcianos o gaussianos. Por lo tanto, la correlación da la misma transformación que convolucionar, como
[matemática] 180 ^ {\ circ} [/ matemática] voltear no hace la diferencia.
Pero con los filtros que carecen de tal simetría, la convolución transformará un conjunto de datos de manera diferente que la correlación.
Tenga en cuenta que la convolución es asociativa, en contraste con la correlación.
(cf: las multiplicaciones correspondientes en el dominio f, la multiplicación con conjugado complejo no es asociativa).
Ejemplos:
1] ¿Cuál es la caminata es al azar?
Resulta que ese movimiento browniano fraccional ([matemática] H \ in (o, 1) [/ matemática]), que no es un proceso de Markov ni un semi-martingala, pero es una convolución de browniano ([matemática] H = \ frac {1} {2} [/ math]) se incrementa con un kernel de power-law [1] y ~ 0 el comportamiento del kernel conduce al arbitraje. [Lo que lo hace candidato para el proceso de precio logarítmico]

2] Un proceso de regresión automática de orden 1, es ruido blanco convolucionado con el núcleo [math] \ phi ^ k [/ math] (para la ecuación obtenida al continuar el proceso k veces)

[1] otro vector o función más

Ver también la respuesta de Gregory Schoenmakers a Si x1 y x2 se distribuyen uniformemente en el intervalo [-1,1], ¿cuál será la densidad de probabilidad de x1 + x2?

Todas las respuestas aquí son geniales.
Permítanme agregar 3 puntos más prácticos.

1. La convolución es solo un método en el cual, la señal_1 se suma a las versiones desplazadas de sí misma al atenuarse / amplificarse dependiendo de que la señal_2 actúe como coeficiente de atenuación o amplificación.
Y la propiedad más fascinante de la declaración anterior es que proporciona el mismo resultado incluso cuando la señal_1 y la señal_2 se intercambian. Es decir (declaración obvia) a través de las matemáticas “la propiedad de convolución es conmutativa”

2. Vemos “Convolución” en nuestra vida diaria, cada capa física de la comunicación tiene la convolución, pero la llamamos con diferentes nombres en diferentes circunstancias.

En la comunicación inalámbrica, nos encontramos con un término llamado “reflexión”, que en realidad es básicamente la “convolución”.

Reflexión: trayectoria de la línea de visión de la señal desde el punto A a B +
[suma sobre N superficies / medios reflectantes de la señal reflejada por esas N superficies / medios desde el punto A a B]

= x (t) + R

donde x (t) es señal enviada, R es el conjunto reflejado de señales, y (t) se compone del canal y los parámetros de reflexión. es la diferencia de tiempo entre el alcance de la señal reflejada considerada y la señal LOS.

Escenario:
Resultado de la imagen de Google para http://3.bp.blogspot.com/-9ClEZfQNtUE/Ul3DOOm_UxI/AAAAAAAAAAs/CEbqSvG32jc/s1600/fig0.jpg

Entonces, desde el punto 1 podemos ver cómo se relacionan los términos Reflexión en comunicación inalámbrica y Convolución.

3. Vemos “Convolución” en otra situación, cuya explicación es similar a la del punto 2, pero también podemos experimentarla con nuestros oídos humanos (¡no es intrigante!).

Todos hemos oído hablar del término “Eco”, que es parte del estudio acústico.

Eco = Sonido que llega directamente del punto A al B sin perturbaciones +
[suma sobre N superficies / medios reflectantes del sonido reflejado por esas N superficies / medios desde el punto A a B]

La demostración matemática se realiza de la misma manera que en el punto 2.
Pero el eco tiene 1 propiedad especial sobre sus coeficientes y (t), que es la coagulación del canal y los medios reflectores, de que la magnitud de los coeficientes siempre disminuye monotónicamente wrt al tiempo / distancia.
Los coeficientes disminuyen de manera aleatoria, para comprender el propósito, podría seguir a exp (-t), 1 / t, o cualquiera de esas funciones monotónicamente decrecientes.


Entonces eso es todo. Agradezco cualquier cambio requerido en mis respuestas a través de comentarios.

PD: Esta es mi primera respuesta intuitiva en Quora 😀

Permítanme explicar la convolución con respecto a un problema del mundo real. Considere la desintegración radiactiva, ya que sería fácil de comprender inicialmente. f (t) será una función del tiempo que representa el vertido de desechos radiactivos (tasa de vertido), mientras que w (t) es una función de peso que explica la tasa de crecimiento o descomposición de los residuos radiactivos. La ecuación de gobierno es

[matemáticas] \ frac {dx} {dt} = f (t) -a \ cdot x [/ matemáticas]

Aquí según la ecuación

[matemáticas] w (t) = -a \ cdot x [/ matemáticas]

La convolución de [matemática] f (t) [/ matemática] y [matemática] w (t) [/ matemática] en este ejemplo es la cantidad de material radiactivo presente en cualquier momento [matemática] t [/ matemática].

La cantidad de material radiactivo presente en cualquier momento [matemática] t [/ matemática] viene dada por

[matemáticas] f (t) * w (t) = \ int_0 ^ tf (u) \ cdot w (tu) \, du = \ int_0 ^ tf (u) \ cdot e ^ {tu} \, du [/ math ]

que no es más que la expresión de convolución. En otras palabras, una de las varias formas de ver la convolución es que representan la acumulación de la función de entrada f (t) con el tiempo, mientras que la acumulación se ve afectada por la función de peso w (t) .

Como caso especial considere [math] w (t) = 1 [/ math], luego

[matemáticas] f (t) * 1 = \ int_0 ^ tf (u) \ cdot 1 \, du = \ int_0 ^ tf (u) \, du [/ math]

que representa explícitamente la acumulación del material pero como [matemática] w (t) = 1 [/ matemática], el material no crece ni se desintegra por sí mismo y la acumulación solo se debe al vertido de material que está matemáticamente representado por f ( t) (y así, la cantidad de material presente en el tiempo [matemática] t [/ matemática] sería solo la integral de [matemática] f (t) [/ matemática] de cero a [matemática] t) [/ matemática]

La descomposición de la contaminación en un río
Suponga que su pueblo (1,000 habitantes) contamina un río con desechos biológicamente degradables, con una tasa de 1 unidad por persona / por día. Suponga que el río limpia esto (bacterias, algas) para que cada milla aguas abajo se limpie el 50%. Esto puede describirse mediante una función exponencial que comienza en 1 (uno) en su aldea y luego desciende lentamente a cero. Llamemos a esto la “Función de propagación de la contaminación” (PSF).
Desafortunadamente, el agua que fluye hacia su pueblo ya está contaminada por otros dos pueblos río arriba; uno situado a dos millas aguas arriba (12,000 habitantes), y el otro situado a cinco millas aguas arriba (40,000 personas). Para calcular el nivel de contaminación total (en unidades) en su aldea, contribuido por las otras dos aldeas, podemos usar el PSF invertido, que apunta hacia el lado aguas arriba de su aldea (la línea discontinua a la izquierda).
This flipped PSF has a height of 0.5^2 in the nearest village, showing that 25% of the there produced pollution arrives at your village. The pollution of the village at 5 miles upstream has decayed with 0.5^5 when the water arrives at your village.
If we multiply this flipped PSF with the population curve along the river, we can calculate that the total pollution of these two villages is 0.5^2 *12,000 + 0.5^5 * 40,000 = 4,250 units

Instead of only calculating this for your village, we also can calculate
the pollution profile over the complete course of the river. We then slide the flipped PSF over the rivers population curve, while at each point this PSF is multiplied with the population curve. By summing (integrating) this multiplication of these curves, we obtain for each point of the river the pollution level.

We first meet convolution in junior high school . Let me remind you of your mathematics learning that time!

Actually, different people in different domain have different perspectives. I am DSP guy. The most rewarding experience is the 2014 Spring semester when I took my advisor, Michael Orchard’s ELEC 431 (Digital Signal Processing) class, which tells me a way to figure out the intuition of convolution that we first met in Junior High School.

In order to understand smoothly, let me first show you some background information.

1. DSP is about processing discrete sequences.
2. An easy way for us to represent discrete sequences is polynomials.

Let’s say we have a sequence [math]x(n)=\{100,99,102, 99, 80, \dots \} [/math]starting from zero location.(The sequence we have sampled starts from time 0.)

We then can represent this sequence via,

[math]X(z) =100+99z+102z^2+99z^3+80z^4+\dots[/math]

The coefficients of the polynomials corresponds to the numbers in the sequence. The zero-order coefficient of the polynomial(100) relates to the zero-location coefficient,100, of the sequence.

============================

The preliminary knowledge of the DSP and sequence states as above.
Now, as to convolution, we need another sequence [math]h(n)[/math] with certain properties(smoothing, sharpening) to convolve with the initial sequence [math]x(n)[/math].

Let’s express for example [math]h(n)=\{0.2,0.2,0.2,0.2,0.2\}[/math] also as the polynomial expression,
[math] H(z) =1+z+z^2+z^3 [/math].

What is the result of convolution? Well, in order to get the result. Let’s get the product of [math] X(z) [/math] and [math] H(z) [/math] first.

We get [math] Y(z) = X(z)H(z) [/math] (consider the only the [math] 5 [/math] elements of [math] x(n) [/math] )

[math] Y(z) = 20 + 39.8 z + 60.2 z^2 + 80 z^3 [/math]

[math] +96 z^4 +76 z^5 [/math]

[math] + 56.2 z^6 + 35.8 z^7 + 16 z^8 [/math]

For every coefficients, we can conclude the result as,

[math]y(n)=\sum_0^nx(i)h(Ni)[/math]

This is the expression of the convolution actually. It computes, actually, from the simply polynomial multiplication.

Convolution in the time domain, equals the multiplication in the frequency domain.

I would try to use a real life example: an ambulance siren in an urban environment.

In a relatively open street with no high-rise buildings around, the ambulance sound is clear enough and one can figure out where the vehicle is. This is because, mainly, that siren’s sound comes straight to one’s ear.

In the presence of high rises, the siren sound bounces off multiple buildings and the sound is quite different to hear, since multiple echoes combine to give a very different sound, even though it is the same ambulance making the same sound.

Convolution is the same: adding the same signal again and again with different weighting and delays. In the limit, an infinite number of weights and delays.

I can’t improve on the more quantitative answers given here, but at a very high level, I think of convolution as “smearing out” the value of a function at a given point onto neighboring points, with the “smearing” specified by the kernel function. In slightly more quantitative terms, I prefer to think of it as a weighted average (which generalizes nicely to discrete convolution). The value of the convolution at a given point is in some sense a weighted average of the convolved function over “nearby” points (ie points where the support of the kernel is nonzero), with the weighting determined by the shape of the kernel.

This is how I convince myself.

Lets say there is a vertical shelf in the kitchen. You see a cookie jar on one of those rows at certain height ( taller than your height) and you want to take help of your sister to reach it. Your sibling needs convincing that this can be done (because your mom is expected any minute and she has to assess the risk)

How do you convince? Just like any typical sibling does. Use math.

You tell her all the ways you can achieve it. For example, you could cover first rows of jar height and then the rest can be covered by your sibling by climbing on your top. Or you could cover first three rows of height and then the rest by your sibling. And so on….

More the number of ways you could find like this, more the chance of you and your sister to reach a certain height.

So, if f(x) is your ability and g(x) is your sisters’ ability to reach cookie jar at certain height x, your combined chances are f*g(x) = sum(f(y)*g(xy)) for all possible y.

Hello there, as a Ph.D. student in signal processing, I would like to recommend the explanation from the monograph “The Scientist and Engineer’s Guide to Digital Signal Processing” written by Ph.D Steven W. Smith (Convolution). I am very much impressed by the two views there, and I hope to add one line to the flip manipulation of the impulse response of a system in this way (for discrete signal and system):

The flip comes from the offset between the interested output sample and the relevant contributive input sample, which resembles the effect of continuation of the impulse response of the system.

Divide-and-Conquer!

If one did not know of the concept of convolution, one could have come up with it as the answer to the following natural question (that could have arisen from trying to solve ODE for instance) : What is the inverse Fourier transform of the product of Fourier transforms of two functions?