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