Filtragem de espaço de Fourier
Eu tenho uma série temporal real de vetores x de comprimento T e um filtro h de comprimento t << T. h é um filtro no espaço de quatro, real e simétrico. É aproximadamente 1 / f.
Eu gostaria de filtrar x com h para obter y.
Suponha que t == T e FFTs de comprimento T possam caber na memória (nenhum dos quais é verdadeiro). Para obter meu x filtrado em python, eu faria:
import numpy as np
from scipy.signal import fft, ifft
y = np.real( np.ifft( np.fft(x) * h ) ) )
Como as condições não se mantêm, tentei o seguinte hack:
Selecione um tamanho de preenchimento P <t / 2, selecione um tamanho de bloco B para que B + 2P seja um bom tamanho de FFTEscale h via interpolação de spline para ser do tamanho B + 2P> t (h_scaled)y = []; Ciclo:Pegue o bloco de comprimento B + 2P de x (chamado x_b)Execute y_b = ifft (fft (x_b) * h_scaled)Solte o preenchimento P de ambos os lados de y_b e concatene com ySelecione o próximo x_b sobreposto com o último por PEssa é uma boa estratégia? Como seleciono o preenchimento P de uma maneira adequada? Qual é a maneira correta de fazer isso? Eu não sei muito processamento de sinal. Esta é uma boa chance de aprender.
Estou usando o cuFFT para acelerar as coisas, então seria ótimo se a maior parte das operações fosse de FFTs. O problema real é 3D. Além disso, não estou preocupado com artefatos de um filtro acausal.
Obrigado Paul.