scipy.signal.

convolve#

scipy.signal.convolve(in1, in2, mode='full', method='auto')[source]#

对两个 N 维数组进行卷积运算。

in1in2 进行卷积运算,输出大小由 mode 参数决定。

参数::
in1array_like

第一个输入。

in2array_like

第二个输入。应该与 in1 具有相同的维数。

modestr {‘full’, ‘valid’, ‘same’}, 可选

一个字符串,指示输出的大小

full

输出是输入的完整离散线性卷积。 (默认)

valid

输出仅包含那些不依赖于零填充的元素。 在 ‘valid’ 模式下,in1in2 中的至少一个在每个维度上必须至少与另一个一样大。

same

输出的大小与 in1 相同,相对于 ‘full’ 输出居中。

methodstr {‘auto’, ‘direct’, ‘fft’}, 可选

一个字符串,指示用于计算卷积的方法。

direct

卷积直接由和来确定,即卷积的定义。

fft

使用傅里叶变换通过调用 fftconvolve 来执行卷积。

auto

根据对哪种方法更快进行的估计自动选择直接方法或傅里叶方法(默认)。 有关更多详细信息,请参见注释。

在版本 0.19.0 中添加。

返回::
convolvearray

包含 in1in2 的离散线性卷积的子集的 N 维数组。

警告::
RuntimeWarning

在包含 NAN 或 INF 的输入上使用 FFT 卷积将导致整个输出为 NAN 或 INF。 当输入包含 NAN 或 INF 值时,请使用 method=’direct’。

参见

numpy.polymul

执行多项式乘法(相同操作,但也接受 poly1d 对象)

choose_conv_method

选择最快的适当卷积方法

fftconvolve

始终使用 FFT 方法。

oaconvolve

使用重叠相加方法执行卷积,这在输入数组很大且大小差异很大时通常更快。

注释

默认情况下,convolvecorrelate 使用 method='auto',它调用 choose_conv_method 使用预先计算的值来选择最快的 方法 (choose_conv_method 也可以使用关键字参数测量实际时间)。 因为 fftconvolve 依赖于浮点数,因此有一些限制可能会强制 method=direct(有关更多详细信息,请参见 choose_conv_method 文档字符串)。

示例

使用 Hann 窗口平滑方波脉冲

>>> 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()
../../_images/scipy-signal-convolve-1.png