scipy.signal.

oaconvolve#

scipy.signal.oaconvolve(in1, in2, mode='full', axes=None)[原始碼]#

使用重疊相加法卷積兩個 N 維陣列。

使用重疊相加法卷積 in1in2,輸出大小由 mode 參數決定。

對於大型陣列 (n > ~500) 來說,這通常比 convolve 快得多,而且當一個陣列比另一個陣列大很多時,通常比 fftconvolve 快得多,但當只需要少數輸出值或當陣列形狀非常相似時可能會較慢,並且只能輸出浮點陣列(整數或物件陣列輸入將被轉換為浮點數)。

參數:
in1array_like

第一個輸入。

in2array_like

第二個輸入。應具有與 in1 相同的維度數。

modestr {‘full’, ‘valid’, ‘same’}, optional

指示輸出大小的字串

full

輸出是輸入的完整離散線性卷積。(預設)

valid

輸出僅包含不依賴零填充的元素。在 ‘valid’ 模式下,in1in2 在每個維度上都必須至少與另一個一樣大。

same

輸出與 in1 的大小相同,相對於 ‘full’ 輸出居中。

axesint 或 array_like of ints 或 None, optional

計算卷積的軸。預設值為所有軸。

返回:
outarray

一個 N 維陣列,包含 in1in2 的離散線性卷積的子集。

參見

convolve

根據哪個更快,使用直接卷積或 FFT 卷積演算法。

fftconvolve

使用 FFT 實現卷積。

注意

在版本 1.4.0 中新增。

參考文獻

[1]

Wikipedia, “Overlap-add_method”. https://en.wikipedia.org/wiki/Overlap-add_method

[2]

Richard G. Lyons. Understanding Digital Signal Processing, Third Edition, 2011. Chapter 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