Фильтрация пространства Фурье

У меня есть действительный векторный временной ряд x длины T и фильтр h длины t << T. h - фильтр в пространстве Фурье, вещественный и симметричный. Это примерно 1 / ф.

Я хотел бы отфильтровать x с помощью h, чтобы получить y.

Предположим, что t == T и БПФ длины T могут вписаться в память (ни одно из которых не соответствует действительности). Чтобы получить мой фильтрованный x в python, я бы сделал:

import numpy as np
from scipy.signal import fft, ifft

y = np.real( np.ifft( np.fft(x) * h ) ) )

Поскольку условия не выполняются, я попробовал следующий взлом:

Выберите размер заполнения P <t / 2, выберите размер блока B так, чтобы B + 2P был хорошим размером FFTМасштаб h с помощью сплайн-интерполяции будет иметь размер B + 2P> t (h_scaled)у = []; Loop:Возьмите блок длиной B + 2P из x (называемый x_b)Выполнить y_b = ifft (fft (x_b) * h_scaled)Отбросьте отступ P с любой стороны y_b и объедините с yВыберите следующее перекрытие x_b с последним на P

Это хорошая стратегия? Как правильно выбрать отступ P? Как правильно это сделать? Я не знаю много обработки сигналов. Это хороший шанс учиться.

Я использую cuFFT для ускорения, поэтому было бы здорово, если бы основная часть операций была FFT. Актуальная проблема - 3D. Также меня не беспокоят артефакты от акаузального фильтра.

Спасибо, Пол.

Ответы на вопрос(1)

Ваш ответ на вопрос