Dieses Beispiel zeigt, wie eine Äquivalenz zwischen linearer und kreisförmiger Faltung hergestellt wird.
Lineare und zirkuläre Faltung sind grundsätzlich verschiedene Operationen. Es gibt jedoch Bedingungen, unter denen lineare und kreisförmige Faltung äquivalent sind. Die Feststellung dieser Äquivalenz hat wichtige Auswirkungen. Für zwei Vektoren, x
und y
, ist die zirkuläre Faltung gleich der inversen diskreten Fourier-Transformation (DFT) des Produkts der DFTs der Vektoren. Wenn Sie die Bedingungen kennen, unter denen lineare und kreisförmige Faltungen äquivalent sind, können Sie die DFT verwenden, um lineare Faltungen effizient zu berechnen.
Die lineare Faltung eines N-Punkt-Vektors x
und eines L-Punkt-Vektors y
hat die Länge N + L – 1.
Damit die kreisförmige Faltung von x und y äquivalent ist, müssen Sie die Vektoren mit Nullen auf eine Länge von mindestens N + L – 1 auffüllen, bevor Sie die DFT nehmen. Nachdem Sie das Produkt der DFTs invertiert haben, behalten Sie nur die ersten N + L – 1-Elemente bei.
Erstellen Sie zwei Vektoren, x
und y
, und berechnen Sie die lineare Faltung der beiden Vektoren.
x = ;y = ;clin = conv(x,y);
Der Ausgang hat die Länge 4 +3-1.
Pad beide Vektoren mit Nullen auf Länge 4 +3-1. Erhalten Sie die DFT beider Vektoren, multiplizieren Sie die DFTs und erhalten Sie die inverse DFT des Produkts.
xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));
Die kreisförmige Faltung der nullgefüllten Vektoren xpad
und ypad
entspricht der linearen Faltung von x
und y
. Sie behalten alle Elemente von ccirc
da die Ausgabe die Länge 4+3-1 hat.
Zeichnen Sie die Ausgabe der linearen Faltung und die Umkehrung des DFT-Produkts, um die Äquivalenz anzuzeigen.
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')
Füllen Sie die Vektoren mit der Länge 12 auf und erhalten Sie die kreisförmige Faltung unter Verwendung der inversen DFT des Produkts der DFTs. Behalten Sie nur die ersten 4 + 3-1 Elemente bei, um ein äquivalentes Ergebnis zur linearen Faltung zu erzielen.
N = length(x)+length(y)-1;xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));ccirc = ccirc(1:N);
Die Signal Processing Toolbox ™ -Software verfügt über eine Funktion cconv
, die die kreisförmige Faltung zweier Vektoren zurückgibt. Sie können die lineare Faltung von x
und y
mithilfe der kreisförmigen Faltung mit dem folgenden Code erhalten.
ccirc2 = cconv(x,y,6);
cconv
verwendet intern das gleiche DFT-basierte Verfahren, das im vorherigen Beispiel veranschaulicht wurde.