Tengo una serie de tiempo vector real 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.Filtrado de espacio de Fourier
Me gustaría filtrar x con h para obtener y.
Supongamos que t == T y FFT de longitud T pueden caber en la memoria (ninguno de los cuales es verdadero). Para conseguir mis x filtrados en Python, lo haría:
import numpy as np
from scipy.signal import fft, ifft
y = np.real(np.ifft(np.fft(x) * h)))
Dado que las condiciones no se cumplen, he intentado este truco:
- seleccionar un tamaño de relleno P < t/2, seleccione un tamaño de bloque B tal que B + 2P es un buen tamaño de FFT
- Escala h mediante la interpolación de spline para ser del tamaño B + 2P> t (h_scaled)
- y = []; Loop: bloque
- Take de longitud B + 2P de x (llamado x_b)
- Realizar y_b = IFFT (FFT (x_b) * h_scaled)
- gota relleno P desde cualquier lado de y_b y concatenar con Y
- Seleccionar junto con la superposición de x_b pasado 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 3D. Además, no me preocupan los artefactos de un filtro acausal.
Gracias, Paul.
Gracias por la referencia de superposición y guardado. Había leído sobre esto en Press et al., Numerical Recipes, con respecto al filtrado del dominio del tiempo y no estaba seguro de cómo asignar esto al dominio de la frecuencia. No estoy seguro de descartar: 1) por qué la segunda mitad de y_b en lugar de los extremos, 2) en su otra publicación de SO, se cae la primera mitad. – Paul
Mi filtro h se deriva de un promedio de datos sin procesar, con h (f) ~ 1/fy fases establecidas en 0. Estoy filtrando una señal sintética con este filtro para darle un espectro más parecido a mis datos brutos. No estoy seguro de cómo diseñar este filtro en el dominio del tiempo. Una cosa que señaló es que ifft (h) mejor sería cero en un extremo para evitar el sonido de artefactos. Voy a comprobar esto, ya que es muy probable que no. ¿Existe una analogía para aplicar una ventana de Hamming en el dominio del tiempo a algún método de ventana en el dominio de la frecuencia (su primer ejemplo en su otra publicación SO)? – Paul
Yeesh - perdón por arruinar el problema de la 1ra mitad/2da mitad. Actualicé con esa corrección y algunos pensamientos sobre generar una 'h' bien conducida. – mtrw