J'ai une vraie série de vecteurs x de longueur T et un filtre h de longueur t < < T. h est un filtre dans l'espace de Fourier, réel et symétrique. C'est environ 1/f.Filtrage de l'espace de Fourier
Je voudrais filtrer x avec h pour obtenir y. Supposons que t == T et les FFT de longueur T puissent entrer en mémoire (aucune des deux ne sont vraies). Pour obtenir mes filtrés x en python, je le ferais:
import numpy as np
from scipy.signal import fft, ifft
y = np.real(np.ifft(np.fft(x) * h)))
Étant donné que les conditions ne sont pas, j'ai essayé le hack:
- Sélectionnez une taille de remplissage P < t/2, sélectionnez une taille de bloc B telle que B + 2P est une bonne taille FFT
- Échelle h par interpolation spline pour être de taille B + 2P> t (h_scaled)
- y = []; Loop:
- Take bloc de longueur B + 2P de x (appelé X_B)
- Effectuer y_b = IFFT (fft (X_B) * h_scaled)
- goutte rembourrage P de part et d'autre de y_b et concaténer avec y
- Sélectionnez ensuite X_B avec chevauchement dernier par P
Est-ce une bonne stratégie? Comment sélectionner le padding P dans le bon sens? Quelle est la bonne façon de faire cela? Je ne connais pas beaucoup le traitement du signal. C'est une bonne chance d'apprendre. J'utilise CUFFT pour accélérer les choses, donc ce serait génial si la plupart des opérations sont des FFT. Le problème réel est 3D. En outre, je ne suis pas préoccupé par les artefacts d'un filtre acausal.
Merci, Paul.
Merci pour la référence overlap-save. J'avais lu à ce sujet dans Press et al., Recettes numériques, en ce qui concerne le filtrage du domaine temporel et je ne savais pas comment mapper cela au domaine fréquentiel. Je ne suis pas sûr de laisser tomber: 1) pourquoi la deuxième moitié de y_b plutôt que la fin, 2) dans votre autre poste SO, vous laissez tomber la première moitié. – Paul
Mon filtre h est dérivé d'une moyenne sur les données brutes, avec h (f) ~ 1/f et les phases réglées sur 0. Je filtre un signal synthétique avec ce filtre pour lui donner un spectre plus proche de mes données brutes. Je ne suis pas sûr de savoir comment concevoir ce filtre dans le domaine temporel. Une chose que vous avez souligné est que ifft (h) vaut mieux être zéro à une extrémité pour éviter les artefacts de sonnerie. Je vais vérifier cela car il est très probable que non. Existe-t-il un analogue à l'application d'une fenêtre de Hamming dans le domaine temporel à une méthode de fenêtre dans le domaine fréquentiel (votre premier exemple dans votre autre article SO)? – Paul
Yeesh - désolé de visser la question de la 1ère moitié/2ème moitié. J'ai mis à jour avec cette correction, et quelques réflexions sur la génération d'un 'h' bien comporté. – mtrw