Ho una serie temporale vettoriale reale x di lunghezza T e un filtro h di lunghezza t < < T. h è un filtro nello spazio di Fourier, reale e simmetrico. È approssimativamente 1/f.Filtro spaziale Fourier
Mi piacerebbe filtrare x con h per ottenere y.
Supponiamo che t == T e FFT di lunghezza T potrebbero essere inseriti nella memoria (nessuno dei quali è vero). Per ottenere le mie x filtrati in pitone, lo farei:
import numpy as np
from scipy.signal import fft, ifft
y = np.real(np.ifft(np.fft(x) * h)))
Dal momento che le condizioni non sono titolari, ho provato il seguente trucco:
- Selezionare una dimensione imbottitura P < t/2, selezionare una dimensione di blocco B tale che B + 2P sia una buona dimensione FFT
- Scala h tramite interpolazione spline per essere di dimensione B + 2P> t (h_scaled)
- y = []; Ciclo: blocco
- asporto di lunghezza B + 2P da x (chiamato x_b)
- Eseguire y_b = IFFT (FFT (x_b) * h_scaled)
- goccia imbottitura P da entrambi i lati di y_b e concatenare con y
- Seleziona accanto x_b sovrapposizione con l'ultimo da P
Si tratta di una buona strategia? Come faccio a selezionare il padding P in un buon modo? Qual è il modo corretto per farlo? Non conosco molta elaborazione del segnale. Questa è una buona occasione per imparare.
Sto usando cuFFT per velocizzare le cose, quindi sarebbe bello se la maggior parte delle operazioni fossero FFT. Il vero problema è il 3D. Inoltre, non sono preoccupato per gli artefatti da un filtro acausale.
Grazie, Paul.
Grazie per il riferimento di sovrapposizione. Ne avevo letto su Press et al., Numerical Recipes, per quanto riguarda il filtraggio del dominio del tempo e non ero sicuro di come mapparlo al dominio della frequenza. Non sono sicuro di lasciar perdere: 1) perché la seconda metà di y_b piuttosto che le estremità, 2) nel tuo altro post SO, si rilascia la prima metà. – Paul
Il mio filtro h è derivato da una media su dati non elaborati, con h (f) ~ 1/f e fasi impostate su 0. Sto filtrando un segnale sintetico con questo filtro per conferirgli uno spettro più simile ai miei dati grezzi. Non sono sicuro di come progettare questo filtro nel dominio del tempo. Una cosa che hai sottolineato è che ifft (h) meglio essere zero ad una estremità per evitare artefatti che suonano. Lo controllerò perché è molto probabile che no. Esiste un analogo all'applicazione di una finestra di Hamming nel dominio del tempo a qualche metodo di finestra nel dominio della frequenza (il tuo primo esempio nel tuo altro post SO)? – Paul
Yeesh - mi dispiace per aver rovinato la prima metà/seconda metà del numero. Ho aggiornato con quella correzione e alcuni pensieri su come generare un 'h' ben educato. – mtrw