Vous êtes sur la page 1sur 3

Département ATE / Licence 3 en Electronique On utilisera les commandes :

Semestre 1/ Janvier 2021


Module : Traitement du Signal
TP2 abs(Xk) : qui permet de calculer le module de Xk
clock : permet de donner l’heure actuelle. On l’utilisera pour calculer le
Transformée de Fourier Discrète et temps d’exécution
Applications tic : permet d’initialiser le compteur de temps
But : toc : arrête le compteur de temps
tic % ou t1=clock;
 Implémentation de la TFD et comparaison, en terme de temps d’exécution, avec l’algorithme de FFT for kk=1:N
déjà implémenté sous Matlab Xk(kk)=0;
 Tracer le spectre en magnitude et argument for nn=1:N
 Application de la Transformée de Fourier discrète dans le dé-bruitage, séparation de composantes Xk(kk)=Xk(kk)+x(nn)*exp(-j*2*pi*(nn-1)*(kk-1)/N);
end
spectrales ainsi que la compression
end
temps1=toc % ou temps1=clock-t1 % temps de calcul
FFT : Fast Fourier Transform. C’est un algorithme rapide de calcul de la TFD. Il implémente la TFD tout %% Tracer de la TF
en évitant les nombreuses redondances, permettant ainsi un gain de temps. mag=abs(Xk); % magnitude du spectre (ou de la TFD)
f0=fe/N; % pas d’échantillonnage de la TFD
f=0:f0:(N-1)*f0;
1. Implémentation de la TFD et Comparaison entre les temps d’exécution de la TFD et la FFT k=[0:N-1];
Soit le signal figure,
𝑥(𝑡) = cos(2𝜋. 100. 𝑡) + sin(2𝜋. 150. 𝑡) + sin(2𝜋. 550. 𝑡) subplot(211),plot(f, mag); % en fonction des fréquences
subplot(212),plot(k, mag); % en fonction des indices
échantillonné sur 𝑁 = 512 échantillons à la fréquence 𝑓 = 3𝑘𝐻𝑧.

1. Générer le signal 𝑥(𝑛)  Conventionnellement, le tracé du spectre se fait soit sur 0, (spectre unilatéral) ou sur ,
%% simuler x(n) (spectre bilatéral), on modifie le programme comme suit :
N=512; %nombre d'échantillons de x(n)
fe=3e3; %3kHz
Te=1/fe;
Tracé sur 0, Tracé sur ,
n=[0:N-1]; %vecteur des indices %tracé de la moitié positive du spectre % redistribuer le spectre autour de 0
t=0:Te:(N-1)*Te; % ou t=n*Te avec n=[0:N-1]; f=0:f0:(N/2-1)*f0; f=-fe/2+f0:f0:fe/2;
x=cos(2*pi*100*t)+sin(2*pi*150*t)+sin(2*pi*550*t); k=[0:N/2-1]; k=-N/2+1:N/2;
NN=N/2 ; % pour tracer juste la moitié du signal, sinon mettez NN=N magg=mag(1:N/2); magg=[mag(N/2:N),mag(1:N/2-1)];
subplot(211), plot(t(1:NN),x(1:NN)); title('x(t)'); %%en fonction du temps figure, % on a fait un shiftting pour
subplot(212), stem(n(1:NN),x(1:NN)) ; title('x(n)');% en fonction des indices subplot(211),plot(f, magg); % redistribuer les composantes
% et en forme de raie % pour tracer en fonction des % spectrales autour de f0
% indices remplacer f par k subplot(212),plot(f, magg);
2
x(t)
% pour tracer en fonction des
1.5
% indices remplacer f par k
1

0.5

0
X(f): partie positive
-0.5 250
-1

-1.5
200
-2
0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09

150
x(n)
2
100
1.5

1
50
0.5

-0.5 0
0 500 1000 1500
-1

-1.5 X(f): redistribuée autour de 0


250
-2
0 50 100 150 200 250 300

200

2. Calculer la transformée de Fourier discrète de 𝑥(𝑛) en utilisant l’expression de la TFD 150

100
𝑥(𝑛)| .. ⎯ 𝑋(𝑘)| .. = 𝑥(𝑛). 𝑒
50

0
-1500 -1000 -500 0 500 1000 1500
3. Calculer la transformée de Fourier discrète de 𝑥(𝑛) en utilisant l’algorithme de la FFT implémenté Application de la FFT dans le filtrage d’un signal bruité
sous Matlab.
On utilisera les commandes :
Soit un signal : 𝑥(𝑡) = 𝐴 sin(2𝜋𝑓 𝑡) + 𝐴 sin(2𝜋𝑓 𝑡) + 𝐴 sin 2𝜋𝑓 𝑡 + , perturbé
fft(x) : permet de calculer la FFT d’un signal x(n)
fftshift(X) : permet de redistribuer les composantes spectrales autour de 0 par un bruit blanc de variance 0.5, tel est représenté sur la figure ci-dessous.

%% calcul de la FFT
On désire retrouver le signal original. Pour se faire:
tic ; % ou t2=clock;
Xk=fft(x); 1. On calcule la TFD de 𝑥(𝑡)(au moyen de l’instruction matlab : fft)
temps2=toc % ou temps2=clock-t2 2. Dans le spectre, un bruit est associé aux composantes spectrales (raies) de faibles magnitudes.
figure,
% tracé de la moitié positive du spectre
 Ainsi pour le filtrer, il suffira d’éliminer ses composantes. On admettra un seuil égal à 100 ;
f=0:f0:(N/2-1)*f0; toute composante inférieure à 100 est considérée comme bruit, elle sera éliminée, sinon, elle
mag=abs(Xk);magg=mag(1:N/2); fait partir de l’énergie du signal, et elle sera conservée.
subplot(211),plot(f, magg); title('X(f): partie positive'); 3. Puis on reconstruit le signal à partir du spectre filtré (au moyen de l’instruction matlab : ifft)
% tracé d’un spectre redistribué autour de 0
f=-fe/2+f0:f0:fe/2; (voir le code Matlab en fin du polycopie)
magg=abs(fftshift(Xk)); Données
subplot(212),plot(f, magg); title('X(f): redistribué autour de 0') ;
𝐴 = 1, 𝐴 = −0.8, 𝐴 = 0.5 𝑓 = 50𝐻𝑧, 𝑓 = 150𝐻𝑧 et 𝑓 = 750𝐻𝑧
Vous obtiendrez les mêmes tracés que dans la question 2. Durée du signal = 10 × 𝑇 = 20𝑚𝑠 fréquence d’échantillonnage =

A. Comparer entre les deux temps d’exécution : temps1TFD et temps2FFT Avec 𝑇 = 1/𝑓 , et 𝑇 = 1/𝑓 Tout signal sera tracé et écouté (au moyen de
l’instruction matlab sound).
.................................................................................................................................................................... 4
signal original

2
B. Reprenez les calculs de la TFD et FFT pour 𝑁 = 2 ,2 ,2 .
0
 Soyez patient car le programme nécessitera parfois quelques dizaines de secondes pour être
-2
terminés.
-4
 Noter les temps d’exécution temps1TFD et temps2FFT puis re-comparer : 0 0.005 0.01 0.015 0.02 0.025 0.03 0.035 0.04 0.045 0.05

signal bruité
................................................................................................................................................................... 4

................................................................................................................................................................... 2

................................................................................................................................................................... 0

-2

C. Zoomer sur le graphe, et relever les fréquences des raies contenues dans le spectre. -4
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035 0.04 0.045 0.05
(S’il faut utiliser stem au lieu du plot, pour bien définir l’emplacement des raies spectrales) signal dé-bruité reconstruit à partir du spectre filtré
4
Correspondent –elles aux fréquences des sinusoïdes de l’expression de 𝑥(𝑡) ? 2
................................................................................................................................................................... 0
...................................................................................................................................................................
-2
...................................................................................................................................................................
-4
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035 0.04 0.045 0.05

spectre du signal bruité spectre filtré


600 600

400 400

200 200

0 0
-3000 -2000 -1000 0 1000 2000 3000 -3000 -2000 -1000 0 1000 2000 3000
Code Matlab de la partie : Application de la FFT dans le débruitage
Application de la FFT dans le Filtrage des composantes spectrales d’un signal périodique
But : éliminer certaines composantes fréquentielle close all, clear all
%% Initialisaion
Soit le signal 𝑥(𝑡) = 𝐴 sin(2𝜋𝑓 𝑡) + 𝐴 sin(2𝜋𝑓 𝑡) + 𝐴 sin 2𝜋𝑓 𝑡 + , f1=50; f2=3*f1; f3=5*f2;
A1=1; A2=-0.8; A3=0.5;
Fe=8*f3;%fréquence d'échantillonnage temporel
𝐴 = 1, 𝐴 = −0.8, 𝐴 = 0.5 𝑓 = 50𝐻𝑧, 𝑓 = 150𝐻𝑧 et 𝑓 = 750𝐻𝑧
Te=1/Fe;
On vise à éliminer la composante de fréquence 𝒇𝟐 à partir du spectre de 𝒙(𝒕). Pour se faire : tau=10/f1;
df=1/tau;%fréquence d'échantillonnage fréquentiel
1. On calcule la TFD de 𝑥(𝑡)(au moyen de l’instruction matlab fft) t=0:Te:tau;
%% création de x(t)
2. On cherche la composante fréquentielle (raie) de fréquence 𝑓 , puis on la supprime. On obtient
xt=A1*sin(2*pi*f1*t)+A2*sin(2*pi*f2*t)+A3*sin(2*pi*f3*t+pi/4);
un nouveau spectre sound(xt); % pour écouter longtemps mettre tau=2s
3. Puis on reconstruit le signal à partir du nouveau spectre (au moyen de l’instruction matlab ifft) %% bruitage
var=0.5;% var=0.5; puis 0.1 puis 0.05
(voir le code Matlab en fin du polycopie) Np=length(t);
signal original bt=var*randn(1,Np);
4 yt=xt+bt;
sound(yt); %facultatif
2 %% tracé d’une partie du signal périodique (un quart)
Naf=Np/4;
0 figure(1),
subplot(311),plot(t(1:Naf),xt(1:Naf)); title('signal original');
subplot(312), plot(t(1:Naf),yt(1:Naf)); title('signal bruité');
-2
%% fft
Yf=fft(yt);
-4
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035 0.04 0.045 0.05 f=-Fe/2:df:Fe/2;
figure, stem(f,abs(fftshift(Yf))); % voir comment afficher juste une partie
signal filtré de la composnate f2 %% élimination des raies associées au bruit
2 Yfd=abs(Yf);
[Ybruit, kf]=find(Yfd<100);
1 Yfd(kf)=0;

0 figure(2),
subplot(211), stem(f,abs(fftshift(Yf))); title('spectre du signal bruité');
-1 subplot(212), stem(f,abs(fftshift(Yfd))); title('spectrefiltré');
%% reconstruction du signal débruité
-2 xtrrr=ifft(Yfd);
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035 0.04 0.045 0.05 figure(1), subplot(313), plot(t(1:Naf),xtrrr(1:Naf)); title('signal dé-bruité
reconstruit à partir du spectre filtré');
spectre du signal original
600
Code Matlab : Application de la FFT dans le filtrage des composantes spectrales
400 closeall, clear all
%% Initialisation (la même que le code précédent)
%% création de x(t) (la même que le code précédent)
200 %% tracé juste une partie du signal périodique (idem)
%% fft (idem)
%% recherchde de la raie à la fréquence f2
0 kf(1)=find(f==f2);
-3000 -2000 -1000 0 1000 2000 3000
kf(2)=find(f==-f2);
spectre filtré de la composante f2 Yff=fftshift(Yf);
600 Yff(kf)=0;
Yfd=fftshift(Yff);
figure(2),
400 subplot(211), stem(f,abs(fftshift(Yf))); title('spectre du signal original');
subplot(212), stem(f,abs(fftshift(Yfd))); title('spectre filtré de la
composante f2');
200 %% reconstruction
xtrrr=ifft(Yfd);
figure(1), subplot(212), plot(t(1:Naf),xtrrr(1:Naf)); title('signal filtré de
0 la composnate f2');
-3000 -2000 -1000 0 1000 2000 3000

Vous aimerez peut-être aussi