acest exemplu arată cum se stabilește o echivalență între convoluție liniară și circulară.
convoluția liniară și circulară sunt operații fundamental diferite. Cu toate acestea, există condiții în care convoluția liniară și circulară sunt echivalente. Stabilirea acestei echivalențe are implicații importante. Pentru doi vectori, x
și y
, convoluția circulară este egală cu transformata Fourier discretă inversă (DFT) a produsului DFT-urilor vectorilor. Cunoașterea condițiilor în care convoluția liniară și circulară sunt echivalente vă permite să utilizați DFT pentru a calcula eficient convoluțiile liniare.
convoluția liniară a unui vector punct N, x
și a unui vector punct l, y
, are lungimea N + L-1.
pentru ca convoluția circulară a lui x și y să fie echivalentă, trebuie să tamponați vectorii cu zerouri la lungime cel puțin N + L – 1 înainte de a lua DFT. După ce inversați produsul DFTs, păstrați numai primele elemente N + L – 1.
creați doi vectori, x
și y
și calculați convoluția liniară a celor doi vectori.
x = ;y = ;clin = conv(x,y);
ieșirea are lungimea 4 + 3-1.
Pad ambii vectori cu zerouri la lungimea 4+3-1. Obțineți DFT-ul ambilor vectori, înmulțiți DFT-urile și obțineți DFT-ul invers al produsului.
xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));
convoluția circulară a vectorilor căptușiți cu zero, xpad
și ypad
, este echivalentă cu convoluția liniară a x
și y
. Păstrați toate elementele ccirc
deoarece ieșirea are lungimea 4 + 3-1.
trasați rezultatul convoluției liniare și inversul produsului DFT pentru a arăta echivalența.
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')
împingeți vectorii la lungimea 12 și obțineți convoluția circulară folosind DFT invers al produsului DFT. Păstrați doar primele 4 + 3-1 elemente pentru a produce un rezultat echivalent cu convoluția liniară.
N = length(x)+length(y)-1;xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));ccirc = ccirc(1:N);
software-ul de procesare a semnalelor de procesare a semnalului are o funcție, cconv
, care returnează convoluția circulară a doi vectori. Puteți obține convoluția liniară a x
și y
folosind convoluția circulară cu următorul cod.
ccirc2 = cconv(x,y,6);
cconv
utilizează intern aceeași procedură bazată pe DFT ilustrată în exemplul anterior.