scipy.signal.

oaconvolve#

scipy.signal.oaconvolve(in1, in2, mode='full', оси=None)[источник]#

Свернуть два N-мерных массива с использованием метода перекрытия с накоплением.

Свертка in1 и in2 используя метод overlap-add, с размером выхода, определяемым mode аргумент.

Обычно это намного быстрее, чем convolve для больших массивов (n > ~500), и обычно намного быстрее, чем fftconvolve когда один массив значительно больше другого, но может быть медленнее, когда требуется только несколько выходных значений или когда массивы очень похожи по форме, и может выводить только массивы с плавающей точкой (входные данные int или object будут приведены к float).

Параметры:
in1array_like

Первый вход.

in2array_like

Второй вход. Должен иметь то же количество измерений, что и in1.

modestr {‘full’, ‘valid’, ‘same’}, необязательный

Строка, указывающая размер вывода:

full

Выходные данные — полная дискретная линейная свёртка входных данных. (По умолчанию)

valid

Выходные данные состоят только из тех элементов, которые не зависят от дополнения нулями. В режиме 'valid' либо in1 или in2 должен быть как минимум таким же большим, как другой, по каждому измерению.

same

Выходные данные имеют тот же размер, что и in1, центрированный относительно вывода 'full'.

осиint или array_like из ints или None, опционально

Оси, по которым вычисляется свертка. По умолчанию — по всем осям.

Возвращает:
выходмассив

N-мерный массив, содержащий подмножество дискретной линейной свертки in1 с in2.

Смотрите также

convolve

Использует алгоритм прямой свертки или свертки БПФ в зависимости от того, какой быстрее.

fftconvolve

Реализация свёртки с использованием БПФ.

Примечания

Добавлено в версии 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