lineární a kruhová konvoluce

tento příklad ukazuje, jak stanovit rovnocennost mezi lineární a kruhovou konvolucí.

lineární a kruhová konvoluce jsou zásadně odlišné operace. Existují však podmínky, za kterých jsou lineární a kruhová konvoluce ekvivalentní. Stanovení této rovnocennosti má důležité důsledky. Pro dva vektory, x a y, je kruhová konvoluce rovna inverzní diskrétní Fourierově transformaci (DFT) součinu DFT vektorů. Znalost podmínek, za kterých jsou lineární a kruhová konvoluce ekvivalentní, vám umožňuje použít DFT k efektivnímu výpočtu lineárních konvolucí.

lineární konvoluce n-bodového vektoru x a vektoru l-bodu y má délku N + L-1 .

aby byla kruhová konvoluce x a y rovnocenná, musíte vektory vložit nulami na délku alespoň N + L-1, než vezmete DFT. Po převrácení produktu DFT si ponechte pouze první prvky N + L – 1.

vytvořte dva vektory, x a y, a vypočítejte lineární konvoluci dvou vektorů.

x = ;y = ;clin = conv(x,y);

výstup má délku 4 + 3-1.

vložte oba vektory s nulami na délku 4 + 3-1. Získejte DFT obou vektorů, vynásobte DFT a získejte inverzní DFT produktu.

xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));

kruhová konvoluce vektorů s nulovým polstrováním xpad a ypad je ekvivalentní lineární konvoluci x a y. Ponecháte si všechny prvky ccirc, protože výstup má délku 4+3-1.

vykreslete výstup lineární konvoluce a inverzní součin DFT, abyste ukázali ekvivalenci.

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')

obrázek obsahuje 2 osy. Osy 1 s názvem Lineární konvoluce x a y obsahuje objekt typu stonku. Osy 2 s nadpisem kruhová konvoluce xpad a ypad obsahuje objekt typu stem.

vložte vektory na délku 12 a získejte kruhovou konvoluci pomocí inverzního DFT produktu DFT. Ponechte pouze první prvky 4 + 3-1, abyste dosáhli ekvivalentního výsledku jako lineární konvoluce.

N = length(x)+length(y)-1;xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));ccirc = ccirc(1:N);

software Signal Processing Toolbox™ má funkci cconv, která vrací kruhovou konvoluci dvou vektorů. Lineární konvoluci x a y můžete získat pomocí kruhové konvoluce s následujícím kódem.

ccirc2 = cconv(x,y,6);

cconv interně používá stejný postup založený na DFT ilustrovaný v předchozím příkladu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.