Convolución lineal y circular
Este ejemplo muestra cómo establecer una equivalencia entre convolución lineal y circular.
La convolución lineal y circular son, fundamentalmente, operaciones distintas. Sin embargo, existen condiciones en las que la convolución lineal y circular son equivalentes. Establecer esta equivalencia tiene implicaciones importantes. Para dos vectores, x e y, la convolución circular es igual a la transformada de Fourier discreta inversa (DFT) del producto de las DFT de los vectores. Conocer las condiciones en las que la convolución lineal y circular son equivalentes le permite utilizar la DFT para calcular de forma eficiente las convoluciones lineales.
La convolución lineal de un vector de N puntos, x, y un vector de L puntos, y, tiene una longitud de N + L - 1.
Para que la convolución circular de x e y sea equivalente, debe rellenar los vectores con ceros hasta la longitud N + L - 1 como mínimo antes de tomar la DFT. Después de invertir el producto de las DFT, conserve solo los primeros elementos N + L - 1.
Cree dos vectores, x e y, y calcule la convolución lineal de ambos.
x = [2 1 2 1]; y = [1 2 3]; clin = conv(x,y);
El resultado tiene una longitud de 4+3-1.
Rellene ambos vectores con ceros hasta la longitud 4+3-1. Obtenga la DFT de ambos vectores, multiplique las DFT y obtenga la DFT inversa del producto.
xpad = [x zeros(1,6-length(x))]; ypad = [y zeros(1,6-length(y))]; ccirc = ifft(fft(xpad).*fft(ypad));
La convolución circular de los vectores rellenados con ceros, xpad e ypad, equivale a la convolución lineal de x e y. Conserva todos los elementos de ccirc porque el resultado tiene una longitud de 4+3-1.
Represente el resultado de la convolución lineal y la inversa del producto de la DFT para mostrar la equivalencia.
subplot(2,1,1) stem(clin,'filled') ylim([0 11]) title('Linear Convolution of x and y') subplot(2,1,2) stem(ccirc,'filled') ylim([0 11]) title('Circular Convolution of xpad and ypad')

Rellene los vectores hasta la longitud 12 y obtenga la convolución circular utilizando la DFT inversa del producto de las DFT. Conserve solo los primeros elementos 4+3-1 para producir un resultado equivalente a la convolución lineal.
N = length(x)+length(y)-1; xpad = [x zeros(1,12-length(x))]; ypad = [y zeros(1,12-length(y))]; ccirc = ifft(fft(xpad).*fft(ypad)); ccirc = ccirc(1:N);
El software Signal Processing Toolbox™ tiene una función, cconv, que devuelve la convolución circular de dos vectores. Puede obtener la convolución lineal de x e y utilizando la convolución circular con el siguiente código.
ccirc2 = cconv(x,y,6);
cconv utiliza internamente el mismo procedimiento basado en la DFT que se ilustra en el ejemplo anterior.