scipy.signal.
oaconvolve#
- scipy.signal.oaconvolve(in1, in2, mode='full', axes=None)[原始碼]#
使用重疊相加法卷積兩個 N 維陣列。
使用重疊相加法卷積 in1 和 in2,輸出大小由 mode 參數決定。
對於大型陣列 (n > ~500) 來說,這通常比
convolve
快得多,而且當一個陣列比另一個陣列大很多時,通常比fftconvolve
快得多,但當只需要少數輸出值或當陣列形狀非常相似時可能會較慢,並且只能輸出浮點陣列(整數或物件陣列輸入將被轉換為浮點數)。- 參數:
- in1array_like
第一個輸入。
- in2array_like
第二個輸入。應具有與 in1 相同的維度數。
- modestr {‘full’, ‘valid’, ‘same’}, optional
指示輸出大小的字串
full
輸出是輸入的完整離散線性卷積。(預設)
valid
輸出僅包含不依賴零填充的元素。在 ‘valid’ 模式下,in1 或 in2 在每個維度上都必須至少與另一個一樣大。
same
輸出與 in1 的大小相同,相對於 ‘full’ 輸出居中。
- axesint 或 array_like of ints 或 None, optional
計算卷積的軸。預設值為所有軸。
- 返回:
- outarray
一個 N 維陣列,包含 in1 與 in2 的離散線性卷積的子集。
參見
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()