scipy.signal.

oaconvolve#

scipy.signal.oaconvolve(in1, in2, mode='full', axes=None)[源代码][源代码]#

使用重叠相加法卷积两个N维数组。

使用重叠相加法对 in1in2 进行卷积,输出大小由 mode 参数决定。

这通常比 convolve 处理大型数组(n > ~500)时快得多,并且在其中一个数组远大于另一个数组时通常比 fftconvolve 快得多,但在只需要几个输出值或数组形状非常相似时可能会更慢,并且只能输出浮点数组(整数或对象数组输入将被转换为浮点数)。

参数:
在1array_like

第一个输入。

in2array_like

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

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

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

full

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

valid

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

same

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

int 或 int 类型的数组,或 None,可选

计算卷积的轴。默认是所有轴。

返回:
数组

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

参见

convolve

根据速度选择直接卷积或FFT卷积算法。

fftconvolve

使用FFT实现卷积。

注释

Added in version 1.4.0.

参考文献

[1]

Wikipedia, “重叠相加法”。https://en.wikipedia.org/wiki/Overlap-add_method

[2]

Richard G. Lyons. 理解数字信号处理,第三版,2011年。第13.10章。ISBN 13: 978-0137-02741-5

示例

将一个100,000个样本的信号与一个512个样本的滤波器进行卷积。

>>> import numpy as np
>>> from scipy import signal
>>> rng = np.random.default_rng()
>>> sig = rng.standard_normal(100000)
>>> filt = signal.firwin(512, 0.01)
>>> fsig = signal.oaconvolve(sig, filt)
>>> import matplotlib.pyplot as plt
>>> fig, (ax_orig, ax_mag) = plt.subplots(2, 1)
>>> ax_orig.plot(sig)
>>> ax_orig.set_title('White noise')
>>> ax_mag.plot(fsig)
>>> ax_mag.set_title('Filtered noise')
>>> fig.tight_layout()
>>> fig.show()
../../_images/scipy-signal-oaconvolve-1.png