scipy.signal.

卷积#

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

卷积两个 N 维数组。

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

参数:
在1array_like

第一个输入。

in2array_like

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

模式str {‘full’, ‘valid’, ‘same’}, 可选

一个表示输出大小的字符串:

full

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

valid

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

same

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

方法str {‘auto’, ‘direct’, ‘fft’}, 可选

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

direct

卷积是通过求和直接确定的,这是卷积的定义。

fft

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

auto

根据估计哪种方法更快,自动选择直接法或傅里叶法(默认)。更多详情请参见注释。

Added in version 0.19.0.

返回:
卷积数组

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

警告:
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 的文档字符串)。

示例

使用汉宁窗平滑方波:

>>> 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