Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
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
200
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
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