detta exempel visar hur man etablerar en ekvivalens mellan linjär och cirkulär faltning.
linjär och cirkulär faltning är fundamentalt olika operationer. Det finns emellertid förhållanden under vilka linjär och cirkulär faltning är ekvivalenta. Att fastställa denna ekvivalens har viktiga konsekvenser. För två vektorer, x
och y
, är den cirkulära konvolutionen lika med den inversa diskreta Fouriertransformen (DFT) av produkten av vektorernas DFT. Att känna till förhållandena under vilka linjär och cirkulär faltning är ekvivalenta gör att du kan använda DFT för att effektivt beräkna linjära svängningar.
den linjära faltningen av en n-punkt vektor, x
, och en L-punkt vektor, y
, har Längd N + L – 1.
för att den cirkulära faltningen av x och y ska vara ekvivalent måste du padda vektorerna med nollor till längden minst N + L – 1 Innan du tar DFT. När du inverterar produkten från DFT: erna behåller du bara de första N + L – 1-elementen.
skapa två vektorer, x
och y
, och beräkna den linjära faltningen av de två vektorerna.
x = ;y = ;clin = conv(x,y);
utgången har Längd 4 + 3-1.
Pad båda vektorerna med nollor till Längd 4+3-1. Skaffa DFT av båda vektorerna, multiplicera DFT och få den inversa DFT av produkten.
xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));
den cirkulära faltningen av de nollpolstrade vektorerna, xpad
och ypad
, motsvarar den linjära faltningen av x
och y
. Du behåller alla element i ccirc
eftersom utgången har Längd 4 + 3-1.
plotta utmatningen av linjär faltning och inversen av DFT-produkten för att visa 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 vektorerna till Längd 12 och erhålla den cirkulära faltning med användning av den inversa DFT av produkten av DFT. Behåll endast de första 4 + 3-1 elementen för att ge ett ekvivalent resultat till linjär faltning.
N = length(x)+length(y)-1;xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));ccirc = ccirc(1:N);
signal Processing Toolbox har en funktion, cconv
, som returnerar den cirkulära faltningen av två vektorer. Du kan få den linjära faltningen av x
och y
med cirkulär faltning med följande kod.
ccirc2 = cconv(x,y,6);
cconv
internt använder samma DFT-baserade procedur som illustreras i föregående exempel.