Vous êtes sur la page 1sur 19

TP ANALYSE APPLIQUEE Utilisation de Transformes de Fourier sur e Matlab : compte rendu

Xavier Milhaud, Basile Voisin 24 avril 2006

Exercice 1 : Sries de Fourier, tude du phnom`ne de Gibbs e e e e


Question 1
Cherchons la srie de Fourier de f sous la forme a0 + e Ici, f est impaire et 1-priodique, donc : e n N, an = 0 ; et bn = 2 T 2 T f (x) sin(nx)dx T 2 0 = 2 1 sin(2nx)dx + 2 2 2 (1 cos(n)) = n 0 si n est pair = 4 si n est impair n
n=1

an cos(nx) +

n=1 bn sin(nx)

1 2

sin(2nx)dx

On a donc lexpression de la srie de Fourier de f : e

+ n=0

sin (2(2n + 1)x) 2n + 1

Xavier Milhaud, Basile Voisin

Question 2
Le programme traant une approximation de f par sa srie de Fourier tronque scrit facilec e e e ment ` laide dune boucle sur n (cf. annexe 1 ). a Ce programme nous a premis de tracer les courbes suivantes (en utilisant un echantillonage de 100 points) :

trace de la serie de Fourier de f pour N = 10, 100, 1000 1.5

0.5

0.5

1.5 1.5

0.5

0.5

1.5

On constate ici des oscillations autour de la fonction initiale (dues au sinus) qui disparaissent au fur et ` mesure que le nombre de termes de la somme augmente. On peut ici considere qua partir a de 1000 termes, lapproximation de la fonction par sa srie tronque est excellente. e e

Xavier Milhaud, Basile Voisin

Exercice 2 : Calcul des coecients de Fourier en utilisant la FFT


Question 1
Pour calculer les coecients de Fourier on utilise la fonction fft de Matlab en passant en argument le vecteur des s(x). Pour des raisons decacit il sera prfrable de prendre un vecteur dordonnes dont la taille sera e ee e une puissance de 2.

Question 2
Calcul des coecients de Fourier thoriques ck (f ) de la fonction f de lexercice 1 : e ck (f ) = =
1 2 0 1 2
1 2

f (x)e2ikt dt
0
1 2

e2ikt dt + cos(kt) 1 =i k

e2ikt dt

Les coecients de Fouriers thoriques sont donc : ck (f ) = e

si k est pair si k est impair

2 ik

Question 3
Pour calculer les coecients de Fourier approchs de la fonction de lexercice 1, on applique le e mthode de la question 1 ` celle-ci (cf. annexe 2 ) e a (Nous avions utilis galement fft(y,N) mais il fallait que la taille de N et des ordonnes corresee e pondent pour avoir un rsultat prcis.) e e

Question 4
Graphes obtenus en traant les coecients de Fourier thoriques et calculs par la fonction fft c e e de matlab pour direntes valeurs de N : e
Trac des coefficients de Fourier exprimentaux et thoriques N=32 Approches Theoriques 0.6

0.5

0.4

0.3

0.2

0.1

15

10

10

15

Xavier Milhaud, Basile Voisin

Trac des coefficients de Fourier exprimentaux et thoriques N=64 Approches Theoriques 0.6

0.5

0.4

0.3

0.2

0.1

30

20

10

10

20

30

Alors que pour N dirent dune puissance de 2 nous obtenions dassez mauvais rsultats (notame e ment lapproximation des coecients dindice pair pour N impair ntait pas toujours nulle !), nous e obtenons de bons rsultats pour N = 32 ou N = 64. e Pour N = 512, les rsultats sont excellents. Des zooms centrs en 0 et aux extrmits nous e e e e permettent de constater que la prcision du calcul est bien meilleure que pour N = 64 et que les e carts entre la thorie et la pratique ne subsistent que pour indices grands. e e
Trac des coefficients de Fourier exprimentaux et thoriques N=512 Approches Theoriques

0.6

0.5

0.4

0.3

0.2

0.1

0 20 15 10 5 0 5 10 15 20 25

Trac des coefficients de Fourier exprimentaux et thoriques 0.04 0.035 0.03 0.025 0.02 0.015 0.01 0.005 0 0.005 0.01 160 170 180 190 200 210 220 N=512 Approches Theoriques

Xavier Milhaud, Basile Voisin

Question 5
Nous avons calcul et trac la norme l2 de la dirence en utilisant la somme de la formule de e e e Parseval (cf. annexe 3 ) :
Trac de l erreur en fonction de log(N) 2

10

12

14

Ayant tra cette courbe avec un vecteur de puissances de 2 en entre (abscisses), nous remarquons ce e que le logarithme de lerreur est proportionnel au logarithme de N pour une pente de 0, 4. Lerreur 1 est donc de lordre de 0,4 . N

Xavier Milhaud, Basile Voisin

Exercice 3 : Rsolution dune quation direntielle en utilisant la FFT e e e


Question 1
Si les dk sont les coecients de Fourier de la fonction , on peut approcher par les fonctions n .

Question 2
En remplaant par N dans (4) et en en cherchant une solution approche uN , on a la c e relation : uN (x) uN (x) N (x) = 0, x [0, 1]. Or uN (x) =
N +1 2
N 2

N +1 2

N 2

4 2 k 2 ck e2ikt , on a donc :

ck + 4 2 k 2 ck dk e2ikt = 0

Et comme les e2ikt forment une base hilbertienne de L2 ([0, 1]), on a : k = N + 1, , N , ck 1 + 4 2 k 2 = dk 2 2 do` la relation permettant de calculer les ck : u ck = dk 1 + 4 2 k 2

Question 3
Le calcul suivant des uN uN
n N n N
N 2 2ikn N

= =

c e k= N +1 k 2
k= N +1 2
N 2

dk 2ikn e N 1 + 4 2 k 2
1 N N 1 j=0

1 2ikn e N 1 + 4 2 k 2 (avec le calcul approch des coecients de Fourier de N ) e j N N 2ik N 1 n 2 uN N = k= N +1 j=0 e N (nj) 2 N (1 + 4 2 k 2 ) nous permet dcrire un algorithme utilisant fft et ifft. Il faut nanmoins, lors du calcul des ck , e e prendre garde ` lordre des indices k donn par les fonctions de matlab et construire articiellement a e un vecteur dindices pour ce calcul (cf. annexe 4 ). uN
n N

(en utilisant le rsultat prcdent) e e e =


k= N +1 2
N 2

j N

2ikj N

Application : Pour pouvoir par la suite utiliser les algorithmles deja ecrits nous feront les calculs comme si la 1 e e fonction tait 1-priodique (elle est en fait 4 -priodique donc cela ne pose aucun probl`me). e e Expression de la solution exacte du probl`me : e La forme des solutions de lquation homog`ne est : ex + ex e e De plus, la fonction x cos (8x) est une solution vidente de lequation dirnentielle. e e Les solutions de cette quation direntielle sont donc les fonctions x ex + ex + cos (8x). e e Etant donn que nous cherchons une solution 1priodique on prendra = = 0 ce qui donne e e comme solution thorique : cos(8x). e

Xavier Milhaud, Basile Voisin

Avec cette methode, nous obtenons des resultats tr`s satisfaisants. En eet, d`s N = 16, les e e carts entre la courbe thorique et la courbe approche (bien que cette derni`re garde ses coins e e e e anguleux d s au faible nombre de points utiliss) sont minimes : u e
Representation des solutions thoriques et approches de l equation diffrentielle 1 Thorique N=16 N=256

0.8

0.6

0.4

0.2

0.2

0.4

0.6

0.8

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Nous avons tra les erreurs u(x) uN (x) sur le graphe suivant (cf. annexe 5 ) : on remarque ce que mis ` part quand N = 8 o` lerreur est tonnement faible, celle-ci (de lordre de 1013 ) dcroit a u e e rapidement quand N augmente.
2.5 x 10
13

Courbes des erreurs pour differents N N=8 N=16 N=32 N=64 N=128

1.5

0.5

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Xavier Milhaud, Basile Voisin

Exercice 4 : Filtrage dun signal bruit (deuxi`me sance) e e e


Question 1
Representations temporelles et frquentielles des dirents bruits : e e Bruit uniforme :

Reprsentation temporelle d un bruit uniforme 1

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

10

Reprsentation frquentielle d un bruit uniforme 0.7

0.6

0.5

0.4

0.3

0.2

0.1

0 50

40

30

20

10

10

20

30

40

50

Xavier Milhaud, Basile Voisin

Bruit blanc :
Reprsentation temporelle d un bruit uniforme 1

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

10

Reprsentation frquentielle d un bruit blanc 0.2

0.18

0.16

0.14

0.12

0.1

0.08

0.06

0.04

0.02

0 50

40

30

20

10

10

20

30

40

50

On peut remarquer que, contrairement au bruit uniforme dont la representation frquentielle e etait concentre en un pic ` la frquence 0, la representation frquentielle du bruit blanc setale e a e e sur toutes les frquences. e

Xavier Milhaud, Basile Voisin

10

Question 2.1
Representation temporelle dune sinusoide de 60Hz echantillone ` 100Hz noye dans un bruit e a e blanc sur [0, 1] pour dierents rapports signal/bruit :
Sinusoide noye dans un bruit blanc avec alpha=1 4 2 0 0 2 1 4 6 2 0 0.2 0.4 0.6 0.8 1 3 0 0.2 0.4 0.6 0.8 1 Sinusoide noye avec alpha=1/2 3 2 1

Sinusoide noye avec alpha=1/4 2 1.5 1 1 0.5 0 0 0.5 1 1 2 0 0.2 0.4 0.6 0.8 1 1.5 0

Sinusoide noye avec alpha=0.1

0.2

0.4

0.6

0.8

Representation frquentielle : e
Representation sequentielle, alpha = 1 0.8 0.6 0.4 0.2 0 500 Representation sequentielle, alpha = 1/2 0.8 0.6 0.4 0.2 0 500

500

500

Representation sequentielle, alpha = 1/4 0.8 0.6 0.4 0.2 0 500

Representation sequentielle, alpha = 0.1 0.8 0.6 0.4 0.2 0 500

500

500

Cette derniere reprsentation nous permet de voir que le bruit perturbe galement la transe e forme de Fourier mais que lon conserve des pics aux frquences 60 et 60, correspondant ` la e e a frquence de la sinusoide, comme le montre ce zoom ( = 1) : e

Xavier Milhaud, Basile Voisin

11

Zoom sur les frequences de la sinusoide, alpha = 1

0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 100 80 60 40 20 0 20 40 60 80 100

Question 2.2
Dbruitage de la sinusoide bruite ` laide dune fonction porte centre en 0 et couvrant les e e a e frquences fondamentales (de 70 ` +70) : e a Notre fonction porte nous permet de ne selectionner quune partie des frequences du signal bruit, comme le montre la reprsentation squentielle suivante : e e e
Selection des frequences souhaitees a l aide d une fonction porte 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 200 150 100 50 0 50 100 150 200

Xavier Milhaud, Basile Voisin

12

Le dbruitage de la sinusoide pour dierents rapports signal/bruit donnent les rsultats suivants : e e
debruitage porte, alpha = 1 6 4 2 0 2 0 4 debruitage porte, alpha = 1/2

0.5 debruitage porte, alpha = 1/4

0.5 debruitage porte, alpha = 0.1

4 2 0 2

2 1 0 1 0 0.5 1 2 0 0.5 1

Outre des resultats surprenants aux bornes de lintervalle, nous remarquons que le signal dbruite e a bien une forme sinusoidale, mais reste loign du signal pur, comme le montre le zoom suivant : e e
debruitage porte, alpha = 1 1 1 0.5 0.5 0 0.5 1 0.46 0.48 0 0.5 1 0.5 0.52 0.54 0.5 0.52 0.54 0.56 debruitage porte, alpha = 1/2

debruitage porte, alpha = 1/4 1 0.5 0 0.5 1 0.48 0.5 0.52 1 0.5 0 0.5

debruitage porte, alpha = 0.1

1 0.48

0.5

0.52

0.54

Cet agrandissement nous montre galement que le signal dbruit est lg`rement dcal par rapport e e e e e e e au signal original.

Xavier Milhaud, Basile Voisin

13

Debruitage de la sinusoide bruite ` laide dune gaussienne centre en 0 et couvrant les e a e frquences fondamentales (de 70 a +70) : e ` Notre fonction porte nous permet de ne selectionner quune partie des frequences du signal bruit, comme le montre la reprsentation squentielle suivante : e e e
Selection des frequences souhaitees a l aide d une gaussienne 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 500 0 500

Comme pour le dbruitage ` laide de la fonction porte, nous remarquons des explosions du e a signal aux bornes de lintervalle. et un dcalage temporel des deux signaux. De plus, le zoom suivant e nous montre que pour des bruits importants ( 0, 2) le signal reste perturb. Ce phnom`ne e e e peut tre explique par le fait que la gaussien ltre les frquences extr`mes, mais nattnue pas les e e e e frquences proches de 0 alors quon perd de lamplitude pour les frquences qui nous interessent e e (+60 et 60Hz).
debruitage gaussien, alpha = 1 1 0 1 1 0 1 2 0.42 0.44 0.46 0.48 0.5 debruitage gaussien, alpha = 1/4 1 0.5 0 0.5 0.46 0.48 0.5 0.52 0.46 0.48 0.5 0.52 0.54 debruitage gaussien, alpha = 0.1 1 0.5 0 0.5 1 0.48 0.5 0.52 0.54 debruitage porte, alpha = 1/2

Xavier Milhaud, Basile Voisin

14

Ces deux dbruitages nous montrent donc que pour dbruiter une sinusoide de 60Hz, le e trer une plage de frquences allant de 70 a 70Hz nest pas toujours susant. Pour tre ee e cace sans dgrader le signal il faut en eet que le ltrage supprime les bruits avant, entre et e apres les frquences fondamentales sans attnuer celles-ci. Lidal serait donc dutiliser un ltre e e e passedouble-bande capable de ne laisser passer parfaitement que de tr`s petites plages centres e e sur 60 et 60Hz : Dbruitage de la sinusoide ` laide dune fonction double-gaussienne : e a
filtrage doublebande 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 150 100 50 0 50 100 150

Comme prcdemment, on constate un lger dcalage des deux signaux, mais il faut sourtout e e e e remarquer que, mme pour des signaux fortement bruits, la fonction dbruite est parfaitement e e e e sinusoidale :
debruitage doublegaussien, alpha = 1 debruitage doublegaussien, alpha = 1/2 1 0.5 0 0.5 0.46 0.48 0.5 0.52 0.5 0 0.5 1 0.42 0.44 0.46 0.48

debruitage doublegaussien, alpha = 1/4debruitage doublegaussien, alpha = 0.1 1 0.5 0 0.5 1 0.34 0.36 0.38 0.4 0.5 0 0.5 1 0.34 0.36 0.38

Xavier Milhaud, Basile Voisin

15

Question 2.2
La mthode de dbruitage utilise ci-dessus est bien quivalente ` trouver une fonction h telle e e e e a que y(x) = (s h)(x). En eet, en appliquant la transformme de Fourier ` cette galit, on transforme le produit de e a e e convolution en un produit classique et on obtient H = h. De mme, en appliquant la transforme de Fourier inverse au produit de y () = s()H() et en e e notant h la transforme inverse de H, on retrouve le produit de convolution y(x) = (s h)(x). e

Remarque : An de ne pas surcharger le compte-rendu, nous avons dcid de ne pas vous fournir e e en Annexes les commandes qui nous ont servi lors de la deuxi`me partie du TP (les commandes e sont simples).

Conclusion
Ce TP aura donc t loccasion de mettre en pratique nos connaissances thoriques dAnalyse ee e Appliquees gr`ce au logiciel Matlab, et de voir quelques applications concr`tes de la transforme e a e e de Fourier. En eet, le ltrage est tr`s utilis dans le domaine de la physique et du traitement du signal et e e nous avons ainsi pu distinguer concr`tement pourquoi lutilisation de la transforme de Fourrier e e est tr`s pratique. e

Xavier Milhaud, Basile Voisin

16

annexe 1 : programme seritronq


% Prend en arguments le vecteur des points servant a tracer la fonction function z = serietronq(x) Ntermes = input(Entrer le nombre de termes : ) ; z = 0 ; for n = 0:Ntermes z = z+((sin(2*(2*n+1)*pi*x))/(2*n+1)) ; end n = (4/pi)*z ; plot(x,z) ;

annexe 2 : programme coeffourf


% Programme de calcul des coefficients de Fourier function z = coeffourf(N) % calcul du vecteur des images et affichage de C(k) a labscisse k if (mod(N,2) == 0) x = [0:1:(N/2)-1] ; t = [-N/2:1:-1] ; x = [x t] ; y = ones(1,N/2) ; y = [-y y] ; else x = [0:1:(N-1)/2] ; t = [-(N-1)/2:1:-1] ; x = [x t] ; y = ones(1,(N-1)/2) ; y = [-y 0 y] ; end z = abs((1/N)*fft(y)) ; % calcul des coefficients theoriques de Fourrier c = x ; for i = 1:N , if (mod(c(i),2) == 0) c(i) = 0; else c(i) = 2/(pi*abs(c(i))); end end figure(1) ; hold on ; ValN = sprintf(N=%d,N) ; title(Trac\e des coefficients de Fourier exp\erimentaux et th\eoriques) ; axis([-N/2 N/2 0 0.7]);

Xavier Milhaud, Basile Voisin

17

Approches = stem(x,z,r) ; Theoriques = stem(x,c,b) ; legend(ValN,Approches,Theoriques);

annexe 3 : programme erreur


% Programme calculant lerreur commise lors du calcul approch\e des coefficients de Fourier function e = erreur(N) e = zeros(1,length(N)) ; for i = 1:length(N) % calcul du vecteur des images et affichage de C(k) a labscisse k if (mod(N(i),2) == 0) x = [0:1:(N(i)/2)-1] ; t = [-N(i)/2:1:-1] ; x = [x t] ; y = ones(1,N(i)/2) ; y = [-y y] ; else x = [0:1:(N(i)-1)/2] ; t = [-(N(i)-1)/2:1:-1] ; x = [x t] ; y = ones(1,(N(i)-1)/2) ; y = [-y 0 y] ; end z = abs((1/N(i))*fft(y)) ; % calcul des coefficients theoriques de Fourrier c = x ; for j = 1:N(i) , if (mod(c(j),2) == 0) c(j) = 0; else c(j) = 2/(pi*abs(c(j))); end end e(i) = 0 ; for k = 1:N(i) e(i) = e(i) + (c(k)-z(k))^2 ; end e(i) = sqrt(e(i)) ; end plot(log(N),log(e)) ; title(Trac de l erreur en fonction de log(N)) ;

Xavier Milhaud, Basile Voisin

18

annexe 4 : programme eqdiff


% Programme calculant et tracant des solutions approchees de lequation differentielle function u = eqdiff plot(linspace(0,1,1000),cos(8*pi*linspace(0,1,1000)),b) Th = sprintf(Thorique) ; Ap1 = sprintf(N=16) ; Ap2 = sprintf(N=256) ; t = linspace(0,1,2^4+1) ; t = t(1:2^4) ; x = (1+64*pi*pi)*cos(8*pi*t) ; hold on ; plot(t,calcul(x),g) ; t = linspace(0,1,2 \^{} 8+1) ; t = t(1:2^8) ; x = (1+64*pi*pi)*cos(8*pi*t) ; hold on ; plot(t,calcul(x),r) ; axis([0 1 -1 1]) ; title(Representation des solutions thoriques et approches de l equation diffrentielle) ; legend(Th, Ap1,Ap2) ; % Fonction auxiliaire calculant une solution approchee pour des phiN donnes function z = calcul(y) N = length(y) ; % Calcul des dk : z = fft(y) ; % Calcul des ck : if (mod(N,2) == 0) x = [0:1:(N/2)-1] ; t = [-N/2:1:-1] ; x = [x t] ; else x = [0:1:(N-1)/2] ; t = [-(N-1)/2:1:-1] ; x = [x t] ; end z = z./(ones(1,N)+4*pi*pi*x.^2) ; % Calcul des uN(tn) z = ifft(z) ;

Xavier Milhaud, Basile Voisin

19

annexe 5 : programme erreureqdiff


% Programme calculant et tracant lerreur entre la solution approchee % et la solution theorique de lequation differentielle. function u = erreureqdiff colors=[ c y m g b ]; % Differentes couleurs pr les courbes suivant N

for i = 3:7 t = linspace(0,1,2^i+1) ; t = t(1:2^i) ; x = (1+64*pi*pi)*cos(8*pi*t) ; plot(t,abs(cos(8*pi*t)-calcul(x)),colors(i-2)) ; hold on ; end title(Courbes des erreurs pour differents N) ; legend(N=8,N=16,N=32,N=64,N=128) ; function z = calcul(y) N = length(y) ; % Calcul des dk : z = fft(y) ; % Calcul des ck : if (mod(N,2) == 0) x = [0:1:(N/2)-1] ; t = [-N/2:1:-1] ; x = [x t] ; else x = [0:1:(N-1)/2] ; t = [-(N-1)/2:1:-1] ; x = [x t] ; end z = z./(ones(1,N)+4*pi*pi*x^2) ; % Calcul des uN(tn) z = ifft(z) ;

Vous aimerez peut-être aussi