dette eksempel viser, hvordan man etablerer en ækvivalens mellem lineær og cirkulær konvolution.
lineær og cirkulær foldning er fundamentalt forskellige operationer. Der er dog betingelser, under hvilke lineær og cirkulær konvolution er ækvivalente. Etablering af denne ækvivalens har vigtige konsekvenser. For to vektorer, x
og y
, er den cirkulære konvolution lig med den inverse diskrete Fourier-transformation (DFT) af produktet af vektorernes DFT’ er. At kende betingelserne, under hvilke lineær og cirkulær konvolution er ækvivalent, giver dig mulighed for at bruge DFT til effektivt at beregne lineære omviklinger.
den lineære foldning af en n-punkts vektor, x
, og en L-punkts vektor, y
, har Længde N + L – 1.
for at den cirkulære foldning af H og y skal være ækvivalent, skal du pudse vektorerne med nuller til længde mindst N + L – 1, før du tager DFT. Når du har inverteret produktet fra DFTs, skal du kun beholde de første n + L – 1-elementer.
Opret to vektorer, x
og y
, og beregne den lineære foldning af de to vektorer.
x = ;y = ;clin = conv(x,y);
udgangen har Længde 4 + 3-1.
Pad begge vektorer med nuller til længde 4+3-1. Få DFT for begge vektorer, multiplicer DFT ‘ erne og opnå den inverse DFT for produktet.
xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));
den cirkulære foldning af de nulpolstrede vektorer, xpad
og ypad
, svarer til den lineære foldning af x
og y
. Du beholder alle elementerne i ccirc
, fordi output har Længde 4+3-1.
Plot output af lineær konvolution og det inverse af DFT-produktet for at vise ækvivalensen.
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 vektorerne til Længde 12 og opnå den cirkulære foldning ved hjælp af den inverse DFT af produktet af DFT ‘ erne. Behold kun de første 4+3-1 elementer for at producere et ækvivalent resultat til lineær foldning.
N = length(x)+length(y)-1;xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));ccirc = ccirc(1:N);
Signalbehandlingsværktøjskassen har en funktion, cconv
, der returnerer den cirkulære foldning af to vektorer. Du kan få den lineære foldning af x
og y
ved hjælp af cirkulær foldning med følgende kode.
ccirc2 = cconv(x,y,6);
cconv
internt bruger den samme DFT-baserede procedure illustreret i det foregående eksempel.