este exemplo mostra como estabelecer uma equivalência entre convolução linear e circular.Convolução Linear e circular São operações fundamentalmente diferentes. No entanto, existem condições em que a convolução linear e circular são equivalentes. O estabelecimento desta equivalência tem implicações importantes. Para dois vetores, x
e y
, a convolução circular é igual à transformada de Fourier discreta inversa (DFT) do produto da DFTs dos vetores. Saber as condições sob as quais convolução linear e circular são equivalentes permite que você use o DFT para computar de forma eficiente convoluções lineares.
a convolução linear de um vetor de ponto N, x
, e um vetor de ponto L, y
, tem comprimento N + L-1.
para que a convolução circular de x e y seja equivalente, deve colocar os vectores com zeros no comprimento pelo menos N + L – 1 antes de tomar o DFT. Depois de inverter o produto da DFTs, mantenha apenas os primeiros elementos N + L – 1.
criar dois vetores, x
e y
, e calcular a convolução linear dos dois vetores.
x = ;y = ;clin = conv(x,y);
a saída tem comprimento 4+3-1.
Pad both vectors with zeros to length 4+3-1. Obter o DFT de ambos os vetores, multiplicar os DFT, e obter o DFT inverso do produto.
xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));
A convolução circular do zero-acolchoado vetores, xpad
e ypad
, é equivalente à convolução linear de x
e y
. Você mantém todos os elementos de ccirc
porque a saída tem comprimento 4+3-1.
Plot the output of linear convolution and the inverse of the DFT product to show the equivalence.
subplot(2,1,1)stem(clin,'filled')ylim()title('Linear Convolution of x and y')subplot(2,1,2)stem(ccirc,'filled')ylim()title('Circular Convolution of xpad and ypad')
comprimir os vectores até 12 e obter a convolução circular utilizando a DFT inversa do produto da DFTs. Reter apenas os primeiros 4 + 3-1 elementos para produzir um resultado equivalente à convolução linear.
N = length(x)+length(y)-1;xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));ccirc = ccirc(1:N);
O Processamento de Sinal de Ferramentas de software™ tem uma função, cconv
, que retorna a convolução circular de dois vetores. Você pode obter a convolução linear de x
e y
usando a convolução circular com o seguinte código.
ccirc2 = cconv(x,y,6);
cconv
internamente usa o mesmo DFT baseado no procedimento ilustrado no exemplo anterior.