Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Convolución lineal y circular

Este ejemplo muestra cómo establecer una equivalencia entre la convolución lineal y circular.

La convolución lineal y circular son operaciones fundamentalmente diferentes. Sin embargo, hay condiciones en las que la convolución lineal y circular es equivalente. Establecer esta equivalencia tiene implicaciones importantes. Para dos vectores, y , la convolución circular es igual a la transformación de Fourier discreta inversa (DFT) del producto de los DDF de los vectores.xy Conocer las condiciones en las que la convolución lineal y circular es equivalente le permite utilizar el DFT para calcular eficientemente las convoluciones lineales.

La convolución lineal de un vector de punto, , y un vector -point, , tiene longitud + - 1.NxLyNL

Para que la convolución circular de y para ser equivalente, debe rellenar los vectores con ceros a la longitud al menos + - 1 antes de tomar el DFT.xyNL Después de invertir el producto de los DFT, conserve sólo los primeros + - 1 elementos.NL

Cree dos vectores y , y calcule la convolución lineal de los dos vectores.xy

x = [2 1 2 1]; y = [1 2 3]; clin = conv(x,y);

La salida tiene longitud 4+3-1.

Rellena ambos vectores con ceros a longitud 4+3-1. Obtenga el DFT de ambos vectores, multiplique los DFT y obtenga el DFT inverso 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 de acolchado cero, y , es equivalente a la convolución lineal de y .xpadypadxy Conserva todos los elementos de porque la salida tiene longitud 4+3-1.ccirc

Trazar la salida de la convolución lineal y la inversa del producto 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')

Rellenar los vectores a la longitud 12 y obtener la convolución circular utilizando el DFT inverso del producto de los 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 de la caja de herramientas de procesamiento de señales™ tiene una función, , que devuelve la convolución circular de dos vectores.cconv Puede obtener la convolución lineal y el uso de la convolución circular con el código siguiente.xy

ccirc2 = cconv(x,y,6);

internamente utiliza el mismo procedimiento basado en DFT ilustrado en el ejemplo anterior.cconv