Transformation de Fourier, FFT, et filtrage dans le domaine fréquentiel

La transformation de Fourier discrète (finie en fait) peut s'effectuer via l'algorithme de FFT. L'instruction MATLAB fft permet d'effectuer une transformation de Fourier directe, et l'instruction ifft effectue des transformations de Fourier inverses.

L'instruction fftshift permet de transformer la sortie de fft de sorte à replacer les fréquences négatives avant les fréquences positives. Elle est surtout utile pour visualiser une transformée de Fourier, mais d'un usage plus complexe à l'intérieur de calculs. On pourra par exemple essayer la suite d'instructions suivante

    $ >\!>$ x = randn(256,1);
    $ >\!>$ xchap = fft(x);
    $ >\!>$ plot(abs(xchap));
    $ >\!>$ axis tight; grid;
    $ >\!>$ plot(fftshift(abs(xchap)));
    $ >\!>$ axis tight; grid;
qui produit un résultat du type de celui représenté en figure 1.

Figure 1: Transformée de Fourier d'un signal pseudo-aléatoire, sans et avec fftshift.
Image fft1
Image fft2


  1. Ecrire une fonction prenant en entrée un signal numérique, calculant sa transformée de Fourier et son spectre (le module carré de la transformée de Fourier) et représentant celui-ci graphiquement.
  2. Ecrire une fonction passebas.m effectuant un filtrage passe-bas idéal (par multiplication point par point par l'indicatrice du domaine fréquentiel considéré). La fonction prendra en entrée le signal, et la fréquence de coupure, et retournera en sortie le signal filtré.
  3. Utiliser la fonction précédente pour écrire une fonction passehaut.m qui effectue un filtrage passe-haut idéal.
Attention: si le signal d'entrée est à valeurs réelles, le signal filtré doit être à valeurs réelles lui aussi. Vérifier.

Bruno Torresani 2009-02-18