dette eksemplet viser hvordan man etablerer en ekvivalens mellom lineær og sirkulær konvolusjon.
Lineær og sirkulær konvolusjon er fundamentalt forskjellige operasjoner. Imidlertid er det forhold under hvilke lineær og sirkulær konvolusjon er ekvivalente. Etablering av denne ekvivalensen har viktige implikasjoner. For to vektorer, x
og y
, er den sirkulære konvolusjonen lik den inverse diskrete Fourier-transformasjonen (DFT) av produktet av Vektorens Ddts. Å vite forholdene under hvilke lineær og sirkulær konvolusjon er ekvivalente, lar DEG bruke DFT til effektivt å beregne lineære konvolutter.
den lineære konvolusjonen av En n-punktvektor, x
og En l-punktvektor, y
, har lengde N + L – 1.
for at den sirkulære konvolusjonen av x og y skal være ekvivalent, må du legge vektorene med nuller til lengde Minst N + L – 1 før DU tar DFT. Etter at du har invertert Produktet Av DFTs, behold bare de første n + L – 1-elementene.
Opprett to vektorer, x
og y
, og beregn den lineære konvolusjonen til de to vektorene.
x = ;y = ;clin = conv(x,y);
utgangen har lengde 4 + 3-1.
Pad begge vektorer med nuller til lengde 4 + 3-1. Få DFT av begge vektorer, multipliser Dft, og oppnå den inverse dft av produktet.
xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));
den sirkulære konvolusjonen av nullpolstrede vektorer, xpad
og ypad
, tilsvarer den lineære konvolusjonen av x
og y
. Du beholder alle elementene i ccirc
fordi utgangen har lengde 4 + 3-1.
Plott utgangen av lineær konvolusjon og den inverse AV DFT-produktet for å vise ekvivalensen.
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 vektorene til lengde 12 og oppnå den sirkulære konvolusjonen ved hjelp av den inverse DFT av Produktet Av DFTs. Behold bare de første 4 + 3-1 elementene for å produsere et ekvivalent resultat til lineær konvolusjon.
N = length(x)+length(y)-1;xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));ccirc = ccirc(1:N);
signalbehandlingsverktøyet har en funksjon, cconv
, som returnerer den sirkulære konvolusjonen av to vektorer. Du kan få den lineære konvolusjonen av x
og y
ved hjelp av sirkulær konvolusjon med følgende kode.
ccirc2 = cconv(x,y,6);
cconv
internt bruker den samme DFT – baserte prosedyren illustrert i forrige eksempel.