¿Qué algoritmo está detrás de la convolución en MATLAB?

¿Qué es la convolución?

La convolución de dos funciones [matemática] f (t) [/ matemática] y [matemática] g (t) [/ matemática] da una tercera función [matemática] f (t) * g (t) [/ matemática] que es el integral de la multiplicación puntual de las dos funciones.

[matemáticas] f (t) * g (t) = \ displaystyle \ int _ {- \ infty} ^ {\ infty} f (\ tau) g (t- \ tau) \, \ text {d} \ tau [/ matemáticas]

La convolución es conmutativa, lo que significa [matemáticas] f (t) * g (t) = g (t) * f (t) [/ matemáticas].

(Fuente: Convolución – Wikipedia)

Convolución en MATLAB

[La convolución bidimensional generalizada usando la función ‘conv2’ de MATLAB se analiza a continuación. Lo mismo puede extenderse a las funciones ‘conv’ y ‘convn’ usadas para arreglos vectoriales y n-dimensionales.]

En MATLAB, una convolución se realiza mediante la implementación directa de la ecuación de convolución bidimensional discreta utilizando la función incorporada ‘conv2’. Si [matemática] A [/ matemática] y [matemática] B [/ matemática] son ​​funciones de dos variables discretas, [matemática] m [/ matemática] y [matemática] n [/ matemática], entonces la fórmula para las dos- convolución dimensional [matemática] A * B [/ matemática] es

[matemáticas] C (m, n) = \ displaystyle \ sum_ {i = 1} ^ {p} \ sum_ {j = 1} ^ {p} A (i, j) B (m-i + 1, n- j + 1) [/ matemáticas]

donde, [math] A [/ math] es una matriz de tamaño [math] p \ times p [/ math]. La matriz [matemática] B [/ matemática] también se denomina matriz o núcleo de convolución .

La matriz resultante [matemática] C [/ matemática] puede visualizarse como resultado de barrer el núcleo [matemática] B [/ matemática] a través de la matriz [matemática] A [/ matemática] y calcular la suma ponderada y sabia de elemento de productos entre cada elemento en el núcleo y donde toca en la matriz.

Ejemplo: esta visualización se puede simplificar aún más si consideramos un ejemplo simple.

  A = remodelar (1: 9,3,3) '.
 B = [1 1;  1 1]
 C = conv2 (A, B)

Salida:

  A =
      [1 2 3]
      [4 5 6]
      [7 8 9]

 B =
      [1 1]
      [1 1]

 C =
     [1 3 5 3]
     [5 12 16 9]
     [11 24 28 15]
     [7 15 17 9]

Los elementos de convolución [matemática] C [/ matemática] se obtienen barriendo [matemática] B [/ matemática] incrementalmente a través de la matriz [matemática] A [/ matemática]. Por ejemplo, comenzamos con [matemática] C (1,1) [/ matemática] que se obtiene cuando la parte inferior derecha de [matemática] B [/ matemática] toca la parte superior izquierda de [matemática] A [/ matemática] como:

  [1 1]
 [1 [1 * 1] 2 3]
      [4 5 6]
      [7 8 9]

que da, [matemáticas] C (1,1) = 1 [/ matemáticas]. Del mismo modo, [matemáticas] C (2,3) [/ matemáticas] se representa como:

  [1 [1 * 2] [1 * 3]]
 [4 [1 * 5] [1 * 6]]
 [7 8 9]

lo que da, [matemáticas] C (2,3) = 2 + 3 + 5 + 6 = 16 [/ matemáticas]. Este barrido puede continuar para obtener la matriz completa [matemáticas] C [/ matemáticas].

Convolución 2-D rápida alternativa

Hay alternativas más rápidas disponibles para la función incorporada ‘conv2’ en MATLAB (Fuente).

  • El método FFT (convolución 2-D usando FFT – Intercambio de archivos – MATLAB Central) se puede usar si las dos matrices a convolucionar tienen un tamaño similar, o
  • La descomposición de valores singulares (convolución 2D rápida – Intercambio de archivos – MATLAB Central) se puede usar si una matriz es mucho más pequeña que la otra.