Filtrado del espacio de Fourier

Tengo una serie temporal de vectores reales x de longitud T y un filtro h de longitud t << T. h es un filtro en el espacio de Fourier, real y simétrico. Es aproximadamente 1 / f.

Me gustaría filtrar x con h para obtener y.

Supongamos que t == T y los FFT de longitud T podrían caber en la memoria (ninguno de los cuales es cierto). Para obtener mi x filtrada en python, haría:

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

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

Como las condiciones no se cumplen, probé el siguiente truco:

Seleccione un tamaño de relleno P <t / 2, seleccione un tamaño de bloque B tal que B + 2P sea un buen tamaño FFTEscale h mediante interpolación spline para que sea de tamaño B + 2P> t (h_scaled)y = []; Lazo:Tome un bloque de longitud B + 2P de x (llamado x_b)Realice y_b = ifft (fft (x_b) * h_scaled)Suelte el relleno P a cada lado de y_b y concatene con ySeleccione la siguiente x_b superpuesta con la última por P

¿Es esta una buena estrategia? ¿Cómo selecciono el relleno P de una buena manera? ¿Cuál es la forma apropiada de hacer esto? No sé mucho procesamiento de señal. Esta es una buena oportunidad para aprender.

Estoy usando cuFFT para acelerar las cosas, por lo que sería genial si la mayor parte de las operaciones son FFT. El problema real es el 3D. Además, no me preocupan los artefactos de un filtro acausal.

Gracias Paul.

Respuestas a la pregunta(1)

Su respuesta a la pregunta