filtre_fft
Création d'un filtre dans le domaine fréquentiel (technique OLA / OverLap-and-Add).
Espace de nom : tsd::fourier
Prototype
tuple<sptr<Filtre<cfloat, cfloat, FiltreFFTConfig>>, entier> filtre_fft(const FiltreFFTConfig &config)
Paramètres
config | La structure de configuration (FiltreFFTConfig) doit préciser la dimension \(N_e\) des blocs temporels, le nombre minimum de zéros à insérer avant chaque bloc et avant de passer dans le domaine fréquentiel, ainsi qu'une callback permettant à l'appelant de modifier le signal dans le domaine fréquentiel. |
Retourne
Un tuple de deux éléments :
- le filtre OLA,
- un entier indiquant la dimension \(N\) des FFT (c'est-à-dire la dimension des vecteurs qui seront passés à la callback)
Description
Pour différentes raisons, il peut être plus intéressant de filtrer dans le domaine fréquentiel que temporel, par exemple pour alléger la charge de calcul (les convolutions dans le domaine temporel deviennent de simples produits termes à termes en fréquentiel). Par filtrage fréquentiel, on entends le fait de pouvoir modifier terme par terme les composantes de la transformée de Fourier d'un signal, puis de pouvoir restituer un signal temporel.
Afin de travailler dans le domaine fréquentiel, les données sont regroupées par blocs de \(N_e\) échantillons, et pour chacun de ces blocs les opérations suivantes sont effectuées :
- Fenêtrage et recouvrement (optionnel) : Afin de lisser les traitements d'un blocs à l'autre, une fenêtre d'apodisation peut être appliquée (par défaut, une fenêtre de Hann avec un recouvrement de 50 %, de manière à avoir une reconstruction parfaite).
- Zéro-padding : De manière à avoir pouvoir calculer efficacement les FFT, des zéros sont ajoutés afin d'avoir des blocs dont la dimension est une puissance de 2. Après zéro-padding, la dimension des blocs vaut \(N=2^k\geq N_e\).
- Transformée de Fourier : via une FFT.
- Traitement dans le domaine fréquentiel : à faire par l'utilisateur (callback passée en paramètre, voir ci-dessous).
- Transformée de Fourier inverse : via une FFT inverse.
- Recomposition des blocs temporels : par OLA (OverLap-and-Add).
Exemple : Filtrage passe-bas

Voir aussi
filtre_rif_fft(), filtre_rfft(), ola_complexité(), ola_complexité_optimise()