scipy.signal.convolve¶
- scipy.signal.convolve(in1, in2, mode='full', method='auto')[源代码]¶
对两个N维数组进行卷积。
卷积 in1 和 in2 ,输出大小由 mode 论点。
- 参数
- in1array_like
第一次输入。
- in2array_like
第二个输入。应具有与的维度数量相同的维度 in1 。
- modestr{‘完整’,‘有效’,‘相同’},可选
指示输出大小的字符串:
full
输出是输入的全离散线性卷积。(默认)
valid
输出只包含那些不依赖于补零的元素。在“有效”模式下, in1 或 in2 必须在每个维度上至少与其他维度一样大。
same
输出的大小与 in1 ,相对于“完整”输出居中。
- methodstr{‘AUTO’,‘DIRECT’,‘FFT’},可选
一个字符串,指示使用哪种方法计算卷积。
direct
卷积是由和直接确定的,这是卷积的定义。
fft
傅里叶变换用于通过调用
fftconvolve
。auto
根据估计的速度较快(默认)自动选择直接或傅立叶方法。有关更多详细信息,请参见注释。
0.19.0 新版功能.
- 退货
- convolve阵列
包含以下项的离散线性卷积的子集的N维数组 in1 使用 in2 。
参见
numpy.polymul
执行多项式乘法(相同的运算,但也接受Poly1d对象)
choose_conv_method
选择最快、合适的卷积方法
fftconvolve
始终使用FFT方法。
oaconvolve
使用重叠相加方法进行卷积,当输入数组较大且大小差异较大时,此方法通常会更快。
注意事项
默认情况下,
convolve
和correlate
使用method='auto'
,它调用choose_conv_method
使用预计算值选择最快方法的步骤 (choose_conv_method
还可以使用关键字参数测量实际计时)。因为fftconvolve
依赖于浮点数,则某些约束可能会强制 method=direct (更多详细信息请参见choose_conv_method
文档字符串)。示例
使用Hann窗口平滑方形脉冲:
>>> 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()