scipy.signal.

oaconvolve#

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

使用重叠加法对两个 N 维数组进行卷积。

根据 mode 参数确定的输出大小对 in1in2 使用重叠加法进行卷积。

对于大数组 (n > ~500),这通常比 convolve 快得多,对于一个数组远大于另一个数组时通常比 fftconvolve 快得多,但在仅需要几个输出值或两个数组的形状非常相似时会较慢,并且只能输出浮点数组(int 或对象数组输入会被强制转换为浮点)。

参数:
in1array_like

第一个输入。

in2array_like

第二个输入。维度数应与 in1 相同。

modestr {'full', 'valid', 'same'}, 可选

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

full

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

valid

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

same

输出与 in1 大小相同,与“full”输出居中。

axes整数或整数或 None 的阵列类似物,可选

计算卷积的轴。默认情况下,遍历所有轴。

返回:
outarray

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

另见

convolve

根据哪种更快,使用直接卷积或 FFT 卷积算法。

fftconvolve

使用 FFT 实现卷积。

注释

1.4.0 版中已添加。

参考

[1]

维基百科,“重叠加法”。https://en.wikipedia.org/wiki/Overlap-add_method

[2]

理查德·G·莱昂斯。了解数字信号处理,第三版,2011 年。第 13.10 章。ISBN 13: 978-0137-02741-5

示例

用一个 512 样本滤波器卷积一个 100,000 样本信号。

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