Scipy Convolve

Scipy Convolve
Das grundlegende Konzept der Verwirrung besteht darin, zwei Signale mithilfe einer mathematischen Funktion zu kombinieren, um das dritte Signal zu erstellen. Es ist die am häufigsten verwendete digitale Signalverarbeitungstechnik. Die Faltung von zwei Signalen wird als Integral des einen Signal -Signals angesehen, der sich auf ein anderes Signal befindet. Dies geschieht, während sie an jedem Punkt der überlappenden Vektoren mit dem Skalarprodukt multipliziert werden.

Das gleiche Konzept der Verwirrung wird in Python verwendet. Das Array wird als ein Signal angesehen, das in der scipy Convolve-Funktion verwendet wird, um Faltung über mehrere eindimensionale Arrays durchzuführen. Das Scipy Convolve ist ein n-dimensionales Array. Es sind normalerweise zwei oder mehr 1-D-Sequenzen. In diesem Artikel werden wir die scipy Convolve -Funktion im Detail diskutieren und versuchen, die Verwendung der Convolve -Funktion mit Hilfe von Beispielen zu erlernen.

Scipy Convolve -Nutzung und seine Syntax

Das Scipy Convolve wird verwendet, um zwei n-dimensionale Arrays zu verflechten. Hier ist die Syntax der Scipy Convolve -Funktion:

# Scipy.Signal.Convolve (INP1, INP2, Modus = 'full', method = 'auto')

Das 'INP1' ist das erste Eingangsarray, 'INP2' ist das zweite Eingangsarray, und es sollte die gleiche Anzahl von Dimensionen wie der Parameter "INP1" haben. Der Parameter "Modus" ist ein String -Parameter, der die Ausgangsgröße bestimmt. Es wird durch drei Optionen definiert, gleichen, gültigen oder vollständigen Optionen. Es ist ein optionaler Parameter.

Der "vollständige" Modus zeigt an, dass die vollständige diskrete lineare Faltung der Eingänge bereitgestellt werden sollte und der Standardmodus ist. Wenn kein Modus bereitgestellt wird, wird der „vollständige“ Modus als Standard angesehen. Der "gleiche" Modus gibt die Ausgabe als Größe als "INP1" -Parameter zurück, zentriert nach der "vollständigen" Ausgabe.

Der letzte Modus, auch ein "gültiger" Modus, gibt Elemente zurück, die nicht nur auf der Nullpaddierung beruhen. Der Parameter "Methode" ist ein weiterer optionaler Parameter. Es ist ein String -Parameter, der angibt, welche Methode für die Faltung verwendet werden soll. Es braucht auch eines der drei Argumente; Auto, FFT und direkt. Das 'FFT' ist die Fourier-Transform.

Das "direkte" Argument repräsentiert die direkte Faltung, die die grundlegende Definition der Faltung darstellt. Und schließlich wird das "automatische" Argument vorgelegt, bei dem die automatische Auswahl entweder "direkter" oder "FFT" -Argument erforderlich ist, je nachdem, was schneller ist. Das "automatische" Argument ist der Standard; Wenn nichts vorgesehen ist, wird "Auto" als Standardargument angesehen.

Die Ausgabe der Convolve -Funktion ist die Teilmenge der diskreten linearen Faltung von INP1 mit INP2. Lassen Sie uns die folgenden Beispiele sehen, um zu verstehen, wie Scipy Convolve implementiert werden kann.

Beispiel 1:

Dies ist das allererste Beispiel für diesen Artikel, der die Gedanken über die theoretischen Informationen, die wir oben erwähnt haben.

In diesem Beispiel zeichnen wir einen glatten Puls in einer quadratischen Form mit einem Hann -Fenster auf. Der Programmcode verwendet ein NP -Array (angegeben als sig_one), um die Kurve und das Signal zu zeichnen.Convolve () wird verwendet, um die Signale zu entfalten.

Siehe den unten beigefügten vollständigen Code. Hier haben wir zuerst die erforderlichen Bibliotheken importiert und das Array deklariert. Nach dem Aufrufen der Konvolup -Funktion haben wir den Puls aufgetragen. Im restlichen Code können Sie feststellen, dass wir die Ränder festgelegt und die ursprüngliche sowie filtrierte Impulsantwort und das gefilterte Signal auf dem Diagramm angezeigt haben.

vom Scipy -Importsignal
Numph als p importieren
Matplotlib importieren.Pyplot als MTP
Sig_one = p.wiederholen ([1., 0., 1.], 100)
window_one = Signal.Fenster.Hann (65)
filtered_res = Signal.Convolve (sig_one, window_one, modus = 'gleich') / sum (window_one)
Abbildung_one, (axis_orig, axis_win, axis_filt) = mtp.Nebenhandlungen (3, 1, Sharex = true)
axis_orig.Diagramm (sig_one)
axis_orig.set_title ('Hier ist der ursprüngliche Puls')
axis_orig.Ränder (0, 0.1)
axis_win.Diagramm (Window_one)
axis_win.set_title ('Hier ist die Filterimpulsantwort')
axis_win.Ränder (0, 0.1)
axis_filt.Diagramm (filtered_res)
axis_filt.set_title ('Hier ist das gefilterte Signal')
axis_filt.Ränder (0, 0.1)
Abbildung_one.eng_layout ()
Abbildung_one.zeigen()

Beachten Sie, dass der Code in der Google -Zusammenarbeit ausgeführt wird. Das Google Collaboratory ist ein Open-Source-Tool, das zur Implementierung von Python-Codes verwendet wird. Es ist ein kostenloses Tool, das über Google oder einen anderen Browser leicht zugänglich ist.

Nachdem Sie den Code ausgeführt haben, können Sie die Wellen sehen. Siehe das angehängte Bild unten.

Beispiel 2:

Dies ist das zweite Beispiel dieses Artikels und hier werden wir die NDIMage -Methode verwenden, um die Funktionalität der Konvolve -Funktion zu demonstrieren.

In diesem Beispiel nimmt der Parameter "Modus" von NDIMage eines der fünf Argumente; Wickeln, Spiegel, nächstgelegen, konstant und reflektieren. Das Argument "Reflect" reflektiert die halbe Stichprobe symmetrisch, die durch Erinnerung an die Kante erweitert wird. Die "Konstante" wird verwendet, um alle Werte darzustellen, die jenseits der Kante liegen, jedoch mit dem gleichen Konstantwert.

Das 'nächste' repräsentiert einen bestimmten Wert, der durch Replikation des endgültigen Pixels erweitert wird. Der "Spiegel" repräsentiert die Mitte des letzten Pixels, und das Argument "Wrap" repräsentiert die Umwicklung an die gegenüberliegende Kante. Siehe den unten angegebenen Code:

vom Scipy Import ndimage
Numph als p importieren
One_arr = p.Array ([[1, 0, 2],
[1, 1, 0],
[100]])
Two_arr = p.Array ([[0, 1, 0],
[1, 1, 0],
[0, 1, 0],
[0, 1, 1],
[0, 1, 0]])
drucken (ndimage.convolve (One_arr, Two_arr, modus = 'nächstes'))

Hier ist die Ausgabe des obigen Codes, das das verworrene Array ist, wie Sie sehen können.

Beispiel 3:

Das folgende Beispiel zeigt eine 2D -Convolve -Funktion. Die zwei zweidimensionalen Arrays werden mit der Convolve2D-Funktion gebunden. Der Convolve2D verwendet zwei zusätzliche optionale Parameter "FillValue" und "Grenze".

Der Parameter "Grenze" nimmt eines von drei Argumenten; füllen, wickeln und symm. Das Argument "Füll" ist der Standardwert- und Pad -Eingangsarrays mit FillValue. Das Argument "Wrap" repräsentiert die kreisförmigen Randbedingungen. Das Argument "Symm" repräsentiert die symmetrischen Randbedingungen.

Das 'FillValue' wird durch einen skalaren Wert dargestellt, der zum Füllen des Pad -Eingangsarrays verwendet wird, und sein Standardwert beträgt 0, 0. Im beigefügten Code berechnen wir den Gradienten eines Bildes.

vom Scipy -Importsignal
vom Scipy Import Misc
Numph als p importieren
Matplotlib importieren.Pyplot als MTB
ASCent_one = misc.Aufstieg()
Scharr_one = p.Array ([[-3-3j, 0-10J, +3 -3j],
[-6 +0J, 1+ 0J, +6 +0J],
[-2 +2j, 0 +6j, +3 +2j]]))
Grad_one = Signal.convolve2d (aScent_one, scharr_one, boundary = 'symm', modus = 'gleich'))
Fig_one, (axis_orig, axis_mag, axis_ang) = mtb.Nebenhandlungen (3, 1, AbbSize = (7, 16))
axis_orig.IMshow (ASCENT_ONE, CMAP = 'GRAY')
axis_orig.set_title ('original')
axis_orig.set_axis_off ()
axis_mag.IMshow (p.Absolute (Grad_one), cmap = 'Gray')
axis_mag.SET_TITLE ('Ergebnis der Gradientengröße')
axis_mag.set_axis_off ()
axis_ang.IMshow (p.Winkel (Grad_one), CMAP = 'HSV')
axis_ang.set_title ('Gradientenorientierungsergebnis')
axis_ang.set_axis_off ()
Fig_one.zeigen()

Hier ist die Ausgabe des oben angegebenen Code:

Abschluss

In diesem Artikel haben wir die Scipy Convolve -Funktion mit Hilfe von Beispielen gelernt. Erstens haben wir das grundlegende Konzept der Convolve -Funktion diskutiert und dann die Syntax der Konvolup -Funktion erfahren und später drei verschiedene Beispiele untersucht, um die Verwendung der scipy Convolve -Funktion auf ganz andere Weise zu sehen.