Vous êtes sur la page 1sur 3

Traitement du Signal

La FFT dans Matlab


Benjamin Labb, Rmi Flamary
ASI, INSA de Rouen
2009-11-13

0.1 Problmatique
Que sest il pass lors du TP sur le filtrage analogique ? Pour tout le monde, les rsultats du flitrage taient
un peu perturbants !!
Comment le filtrage dun signal rel x(t) par un filtre rel h(t) a pu donner un signal de sortie y(t) = h(t)x(t)
complexe ? Ce rsultat nest pas consistants avec le principe de la convolution relle.
Lors du TP, nous avons calcul le filtrage dans lespace des frquences par utilisation du thorme de
Plancherel. La dualit de la convolution temporelle et de la multiplication frquentielle nous indique que le
rsultat y(t) devait tre un signal rel. Un filtre rel passe bas appliqu sur une somme de sinus rels doit
donner une restitution quasiment parfaite des sinus rels de frquences basses.
Les rsultats obtenus au TP filtrage analogique ne sont pas cohrents avec le principe de filtre rel. La
sortie y(t) doit tre relle. La stratgie de secours employe est souvent la visualisation du module de y(t) pour
constater lattnuation effective des frquences hautes, mais il reste toujours un mysre.
Mais alors que sest-il pass ?
... . . . Cest la faute de fftshift !!!!!

0.2 Lestimation de spectre avec lalgorithme Fast-Fourier-Transformation


Le mystre de fftshift
On dispose dun signal x(t) echantillon sur une suite dinstants dacquisition t = [10s, 10s] avec un pas
dchantillonage de T e = 0.01s (soit n chantillons). (cf x(t) sur la fig1, en haut). On souhaite estimer le spectre
X(f ) de x(t). (cf X(f ) sur la fig1, en bas).
Lalgorithme FFT de Matlab appliqu x(t) propose directement un chantillonage du spectre X(f ) au
pas de frquence Fne = T e1 n . Les n puissances spectrales estimes par FFT correspondent aux frquences
f = [0, F e]. Cette estimation de puissance spectrale par FFT est calcule par periodisation du signal x(t) et
cela se traduit par un spectre periodique galement.
Le spectre estim est donc est periodique (de periode F e), cela signifie que les puissances spectrales estimes
entre F e/2 et F e sont quivalentes aux frquences ngatives entre F e/2 et 0 Hz du signal x(t).
La reprsentation du spectre X(f ) sur lchantillonage de frquence f = [0, F e] est parfaitement correcte.
Seulement, la lecture du spectre X(f ) sur un graphe est difficilement lisible avec un tel chantillonage de
frquence.

. . . et Matlab cra fftshift


Pour faciliter la lecture du spectre, monsieur Matlab a invent fftshift. Cette fonction permet de retourner
le vecteur des puissances spectrales pour lafficher sur un chantillonage [F e/2 + Fne , . . . F e, 0, . . . F e/2], soit
par quivalence sur lchantillonage [F e/2 + Fne , F e/2]
Il faut bien comprendre que la fonction fftshift sert au dpart pour faciliter la lecture des graphiques dans
lespace des frquences (cf X(f ) fig1, en bas).

Application dun filtre dans lespace des frquences


ventuelement on peut travailler dans lespace des frquences [F e/2 + Fne , F e/2] pour crer des filtres
H(f ) dont on a la dfinition uniquement en frquence. Mais attention, la dfinition dun filtre passe bas nest
pas identique selon que lon travail sur [0, F e] ou [F e/2 + Fne , F e/2].

1
Si on choisit de travailler sur [F e/2 + Fne , F e/2], on pourra crer un filtre passe bas idal autour de la
frquence nulle : H(f ) = 1 si f [F c/2, F c/2] , 0 sinon. (cf fig1, en bas).
Si on choisit de travailler sur [0, F e], le filtre est strictement non nul pour les frquences infrieures
F c/2 et pour les frquences suprieures F e F c/2. (cf fig 2, en bas).

2
x(t)
partie reelle de y(t)
1 valeur absolue de y(t)
Amplitude

2
2 1.5 1 0.5 0 0.5 1 1.5 2
Temps en seconde

12
X(f)
10 H(f) filtre passe bas
Puissance spectrale

2
50 40 30 20 10 0 10 20 30 40 50
frequences en Hz

Figure 1: En utilisant FFTshift

Quelque soit la reprsentation frquentielle, on peut appliquer le filtrage idale pour couper les frquences
hautes. Y (f ) = H(f ) X(f ).
Selon le thorme de Placherel, on a donc une estimation du spectre Y (f ) du signal y(t) en sortie du filtre
h(t). Il va falloir repasser du frquentiel au temporel pour visualiser y(t).

Retour dans le temporel


Pour linstant, on avait tout juste, tout ce passait comme on lattendait, les graphes ressemblaient ce que
lon voulait. Mais cest maintenant quil faut faire attention.
Selon la reprsentation frquentielle que lon a choisit ([F e/2+ Fne , F e/2] ou [0, F e]) le retour en temporel
ne se fait de la mme faon.
Si on a choisit [0, F e], iFFT interprte les puissances spectrales de Y (f ) directement et revient une
estimation de y(t) correcte.
Si on a choisit de travailler sur [F e/2 + Fne , F e/2], alors les puissances spectrales de Y (f ) sont inverses
et il faut utiliser la fonction ifftshift pour replacer les lments de Y (f ) en face des frquences [0, F e].
Attention, ifftshift et fftshift ne sont pas quivalentes; elles sont complmentatires, tout comme FFT
et iFFT. Linversions dans un sens et dans lautre des lments dun vecteur de puissances spectrales ne se fera
pas de la mme faon selon que le nombre dchantillon n est pair ou impair.
Dans le cas o on a choisit la reprsentation [F e/2 + Fne , F e/2], il faut donc travailler comme suit:

2
2
x(t)
partie reelle de y(t)
1 valeur absolue de y(t)
Amplitude

2
2 1.5 1 0.5 0 0.5 1 1.5 2
Temps en seconde

12
X(f)
10 H(f) filtre passe bas
Puissance spectrale

2
0 10 20 30 40 50 60 70 80 90 100
frequences en Hz

Figure 2: Sans utiliser FFTshift

X = fftshift( fft(x) )
f = [-Fe/2 : Fe/n : Fe]
H = abs(f)<Fc/2
Y = H.*X
y = ifft( ifftshift(Y) )
Si on a effectu les commandes Matlab comme indiques prcdement, alors le signal y(t) a une partie relle
reprenant exactement la frquence basse de x(t) (la puissance du sinus de basse frquence de x(t) est conserve).
La partie imaginaire de y(t) est alors ngligeable ( < 1015 ). Il ny a pas besoin dobserver le module de y(t)
pour observer la composante de frqence basse.

Que sest il passe pendant le TP alors ?


Lerreur commune qui est arrive pendant le TP, a t de confondre les deux reprsentations frquentielles.
On a donc oubli dappliquer ifftshift au moment de revenir de Y (f ) y(t).
iFFT a donc mal interprt les frquence comprises dans Y (f ). Il a considr 2 pics de frquences moyennes
(aux environs de F e/2 F2c et F e/2 + F2c ). On a obtenu un rsultat incohrent. Cest bien fait :-P

Vous aimerez peut-être aussi