convolve#
- scipy.signal.convolve(in1, in2, mode='full', method='auto')[Quelle]#
Führen Sie die Faltung von zwei N-dimensionalen Arrays durch.
Falten Sie in1 und in2, wobei die Ausgabegröße durch das Argument mode bestimmt wird.
- Parameter:
- in1array_like
Erster Input.
- in2array_like
Zweiter Input. Sollte dieselbe Anzahl von Dimensionen wie in1 haben.
- modestr {‘full’, ‘valid’, ‘same’}, optional
Ein String, der die Größe der Ausgabe angibt
fullDie Ausgabe ist die vollständige diskrete lineare Faltung der Eingaben. (Standard)
validDie Ausgabe besteht nur aus den Elementen, die nicht von der Null-Pufferung abhängen. Im Modus 'valid' muss entweder in1 oder in2 in jeder Dimension mindestens so groß sein wie der andere.
sameDie Ausgabe hat die gleiche Größe wie in1 und ist zentriert bezüglich der 'full'-Ausgabe.
- methodstr {‘auto’, ‘direct’, ‘fft’}, optional
Eine Zeichenkette, die angibt, welche Methode zur Berechnung der Faltung verwendet werden soll.
directDie Faltung wird direkt aus Summen bestimmt, der Definition der Faltung.
fftDie Fourier-Transformation wird verwendet, um die Faltung durch Aufruf von
fftconvolvedurchzuführen.autoWählt automatisch die direkte oder die Fourier-Methode basierend auf einer Schätzung, welche schneller ist (Standard). Siehe Hinweise für weitere Details.
Hinzugefügt in Version 0.19.0.
- Rückgabe:
- convolvearray
Ein N-dimensionales Array, das einen Teil der diskreten linearen Faltung von in1 mit in2 enthält.
- Warnungen:
- RuntimeWarning
Die Verwendung der FFT-Faltung für Eingaben, die NAN oder INF enthalten, führt dazu, dass die gesamte Ausgabe NAN oder INF ist. Verwenden Sie method='direct', wenn Ihre Eingabe NAN- oder INF-Werte enthält.
Siehe auch
numpy.polymulführt Polynommultiplikation durch (gleiche Operation, akzeptiert aber auch poly1d-Objekte)
choose_conv_methodwählt die schnellste geeignete Faltungsmethode aus
fftconvolveVerwendet immer die FFT-Methode.
oaconvolveVerwendet die Overlap-Add-Methode zur Faltung, die im Allgemeinen schneller ist, wenn die Eingabearrays groß und signifikant unterschiedlich in der Größe sind.
Hinweise
Standardmäßig verwenden
convolveundcorrelatemethod='auto', waschoose_conv_methodaufruft, um die schnellste Methode anhand vorab berechneter Werte auszuwählen (choose_conv_methodkann auch reale Zeitmessungen mit einem Schlüsselwortargument durchführen). Dafftconvolveauf Gleitkommazahlen angewiesen ist, gibt es bestimmte Einschränkungen, diemethod='direct'erzwingen können (mehr Details in der Dokumentation vonchoose_conv_method).Beispiele
Glatten eines Rechteckimpulses mit einem Hann-Fenster
>>> import numpy as np >>> from scipy import signal >>> sig = np.repeat([0., 1., 0.], 100) >>> win = signal.windows.hann(50) >>> filtered = signal.convolve(sig, win, mode='same') / sum(win)
>>> import matplotlib.pyplot as plt >>> fig, (ax_orig, ax_win, ax_filt) = plt.subplots(3, 1, sharex=True) >>> ax_orig.plot(sig) >>> ax_orig.set_title('Original pulse') >>> ax_orig.margins(0, 0.1) >>> ax_win.plot(win) >>> ax_win.set_title('Filter impulse response') >>> ax_win.margins(0, 0.1) >>> ax_filt.plot(filtered) >>> ax_filt.set_title('Filtered signal') >>> ax_filt.margins(0, 0.1) >>> fig.tight_layout() >>> fig.show()