dit voorbeeld laat zien hoe een equivalentie tussen lineaire en cirkelconvolutie kan worden vastgesteld.
lineaire en cirkelvormige convolutie zijn fundamenteel verschillende operaties. Er zijn echter omstandigheden waarin lineaire en cirkelvormige convolutie gelijkwaardig zijn. Het vaststellen van deze gelijkwaardigheid heeft belangrijke implicaties. Voor twee vectoren x
en y
is de cirkelconvolutie gelijk aan de inverse discrete fouriertransformatie (DFT) van het product van de DFTs van de vectoren. Als u weet onder welke omstandigheden lineaire en cirkelvormige convolutie gelijkwaardig zijn, kunt u de DFT gebruiken om lineaire convoluties efficiënt te berekenen.
de lineaire convolutie van een n-puntvector x
en een L-puntvector y
heeft Lengte N + L-1.
om de cirkelconvolutie van x en y gelijk te laten zijn, moet u de vectoren met nullen op ten minste N + L – 1 tot lengte opvullen voordat u de DFT neemt. Nadat u het product van de DFTs hebt omgedraaid, behoudt u alleen de eerste n + L – 1 elementen.
Creëer twee vectoren, x
en y
, en bereken de lineaire convolutie van de twee vectoren.
x = ;y = ;clin = conv(x,y);
de uitgang heeft Lengte 4 + 3-1.
Pad beide vectoren met nullen tot lengte 4 + 3-1. Verkrijg de DFT van beide vectoren, vermenigvuldig de DFT ‘ s en verkrijg de inverse DFT van het product.
xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));
de cirkelconvolutie van de nul-opgevulde vectoren, xpad
en ypad
, komt overeen met de lineaire convolutie van x
en y
. U behoudt alle elementen van ccirc
omdat de uitvoer lengte 4+3-1 heeft.
Plot de output van lineaire convolutie en de inverse van het DFT-product om de equivalentie weer te geven.
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')
Pad de vectoren tot Lengte 12 en verkrijg de cirkelvormige convolutie met behulp van de inverse DFT van het product van de DFTs. Behoud alleen de eerste 4 + 3-1 elementen om een equivalent resultaat te produceren met lineaire convolutie.
N = length(x)+length(y)-1;xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));ccirc = ccirc(1:N);
de Signal Processing Toolbox™ software heeft een functie, cconv
, die de cirkelvormige convolutie van twee vectoren retourneert. U kunt de lineaire convolutie van x
en y
verkrijgen met behulp van cirkelvormige convolutie met de volgende code.
ccirc2 = cconv(x,y,6);
cconv
intern gebruikt dezelfde DFT-gebaseerde procedure zoals geïllustreerd in het vorige voorbeeld.