ez a példa bemutatja, hogyan lehet egyenértékűséget létrehozni a lineáris és a körkörös konvolúció között.
a lineáris és a körkörös konvolúció alapvetően különböző műveletek. Vannak azonban olyan feltételek, amelyek mellett a lineáris és a körkörös konvolúció egyenértékű. Ennek az egyenértékűségnek a megállapítása fontos következményekkel jár. Két vektor esetében, x
és y
, a kör alakú konvolúció megegyezik a vektorok DFT-jeinek szorzatának inverz diszkrét Fourier-transzformációjával (DFT). A lineáris és körkörös konvolúció egyenértékűségének ismerete lehetővé teszi a DFT használatát a lineáris konvolúciók hatékony kiszámításához.
egy n-pont vektor lineáris konvolúciója, x
és egy L-pont vektor, y
, hossza N + L – 1.
ahhoz, hogy X és y körkörös konvolúciója ekvivalens legyen, a vektorokat nullákkal kell kitölteni legalább N + L – 1 hosszúságúra, mielőtt a DFT-t vesszük. Miután megfordította a DFTs termékét, csak az első N + L – 1 elemeket tartsa meg.
hozzon létre két vektort, x
és y
, és kiszámolja a két vektor lineáris konvolúcióját.
x = ;y = ;clin = conv(x,y);
a kimenet hossza 4 + 3-1.
mindkét vektort nullákkal illessze be a 4+3-1 hosszúságig. Szerezzük be mindkét vektor DFT-jét, szorozzuk meg a DFT-ket, és kapjuk meg a termék inverz DFT-jét.
xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));
a nullapárnázott Vektorok (xpad
és ypad
) kör alakú konvolúciója egyenértékű a x
és y
lineáris konvolúcióval. A ccirc
összes elemét megtartja, mert a kimenet hossza 4 + 3-1.
ábrázoljuk a lineáris konvolúció kimenetét és a DFT-szorzat inverzét az ekvivalencia megjelenítéséhez.
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')
a vektorokat a 12-es hosszra illesztjük, és a DFT-k szorzatának inverz DFT-jével kapjuk meg a kör alakú konvolúciót. Csak az első 4+3-1 elemet tartsa meg, hogy a lineáris konvolúcióval egyenértékű eredményt kapjon.
N = length(x)+length(y)-1;xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));ccirc = ccirc(1:N);
a Signal Processing Toolbox (jelfeldolgozó eszköztár) szoftvernek van egy cconv
funkciója, amely két Vektor kör alakú konvolúcióját adja vissza. A x
és y
lineáris konvolúciót a következő kóddal körkörös konvolúcióval kaphatjuk meg.
ccirc2 = cconv(x,y,6);
cconv
belsőleg ugyanazt a DFT-alapú eljárást használja, amelyet az előző példa szemléltet.