Sunteți pe pagina 1din 8

% correction TP TS Jean-Luc DION

clear all
close all
clc
disp('Correction TP 2 : Representation frequentille par "fft"');
n=0:7;
k=0:7;
x1=zeros(8,1);
x1(1)=1;
disp('Question 1 :')
disp(' i=n+1');% decallage d'indice : matlab ne prend que des indice strictemen
t positif
% D'un point de vue general, la notion d'abscisse et d'indice doivent etre
% dissocies.
X1=fft(x1);
subplot(311)
stem(n,x1);
title('Question 1 : representation temporelle')
subplot(312)
stem(k,abs(X1));
title('representation frequentielle')
legend('module')
subplot(313)
stem(k,unwrap(angle(X1))*180/pi);
title('representation frequentielle')
legend('phase en ')
pause % calcul faisable a la main ou par programation de la TFD - propriete du d
irac vue en cours
x2=zeros(8,1);
x2(4)=1;
disp('Question 2 :')
X2=fft(x2);
subplot(311)
stem(n,x2);
title('Question 2 : representation temporelle')
subplot(312)
stem(k,abs(X2));
title('representation frequentielle')
legend('module')
subplot(313)
stem(k,unwrap(angle(X2))*180/pi);
title('representation frequentielle')
legend('phase en ')
disp ('
remarque : retard temporel = phase lineaire (cf. cours)' )
pause
x3=ones(8,1);
X3=fft(x3);
subplot(311)
stem(n,x3);
title('Question 3 : representation temporelle')
subplot(312)
stem(k,abs(X3));
title('representation frequentielle')
legend('module')

subplot(313)
stem(k,unwrap(angle(X3))*180/pi);
title('representation frequentielle')
legend('phase en ')
% TFD d'une fonction constante discrete rappel des fonctions calssiques
% vues en cours
pause
x0=3; % composante statique
x1=5; % amplitude du signal sinusoidal
f0=7; % frequence du signal sinusoidal
T=1/f0; % duree d'acquisition
N=21;
Fe=N/T; % frequence d'echantillonnage
phi=30*pi/180; % phase
dt=1/Fe;% pas d'echantillonnage
t4=0:dt:T-dt;

% vecteur temps

k=0:N-1;
x4=x0+x1*cos(2*pi*f0*t4+phi); % signal
X4=fft(x4);
subplot(311)
stem(t4,x4);
title('Question 4 : representation temporelle')
xlabel('temps (s)');
subplot(312)
stem(k,abs(X4));
title('representation frequentielle')
legend('module')
subplot(313)
stem(k,angle(X4)*180/pi);
title('representation frequentielle')
legend('phase en ')
hold on
stem([1 N-1],[phi*180/pi -phi*180/pi],'r')
hold off
% Equivalence avec une decomposition en serie de fourier
% Phase ininterpretable en dehors des raies frequentielles d'amplitude non nulle
pause
Np=3 ; % nombre de periode
T=Np/f0; % duree d'acquisition
Fe=N/T; % frequence d'echantillonnage
dt=1/Fe;% pas d'echantillonnage
t5=0:dt:T-dt;

% vecteur temps

x5=x0+x1*cos(2*pi*f0*t5+phi); % signal
X5=fft(x5);
subplot(311)
stem(t5,x5);
title('Question 5 : representation temporelle')
xlabel('temps (s)');
subplot(312)
stem(k,abs(X5));
title('representation frequentielle')

legend('module')
subplot(313)
stem(k,angle(X5)*180/pi);
title('representation frequentielle')
legend('phase en ')
hold on
stem([Np N-Np],[phi*180/pi -phi*180/pi],'r')
hold off
% Equivalence avec une decomposition en serie de fourier
pause
Np=3.1 ; % nombre de periode
T=Np/f0; % duree d'acquisition
Fe=N/T; % frequence d'echantillonnage
dt=1/Fe;% pas d'echantillonnage
t6=0:dt:T-dt;

% vecteur temps

x6=x0+x1*cos(2*pi*f0*t6+phi); % signal
X6=fft(x6);
subplot(311)
stem(t6,x6);
title('Question 6 : representation temporelle')
xlabel('temps (s)');
subplot(312)
stem(k,abs(X6));
title('representation frequentielle')
legend('module')
subplot(313)
stem(k,angle(X6)*180/pi);
title('representation frequentielle')
legend('phase en ')
% Remarque : biais de resolution , effet palissade, fuite spectrale, dispersion
energetique
% due c une FFT sur un nombre non entier de periodes
pause
Np=16 ; % nombre de periode
Npp=64; % nombre de points par periode
N=Np*Npp; % nombre de points total
T=Np/f0; % duree d'acquisition
Fe=N/T; % frequence d'echantillonnage
dt=1/Fe;% pas d'echantillonnage
t7=0:dt:T-dt;
k=0:N-1;

% vecteur temps

x7=x0+x1*cos(2*pi*f0*t7+phi); % signal
X7=fft(x7);
subplot(311)
plot(t7,x7);
title('Question 7 : representation temporelle')
xlabel('temps (s)');
subplot(312)
stem(k,abs(X7));
title('representation frequentielle')
legend('module')

subplot(313)
plot(k,angle(X7)*180/pi);
title('representation frequentielle')
legend('phase en ')
hold on
stem([Np N-Np],[phi*180/pi -phi*180/pi],'r')
hold off
% Question 8
% TFD vue comme la generalisation des series de fourier sur des supports
% temporels quelconques et non limites a une periode
% probleme de biais de resolution et fuite spectrale lorsque le signal n'est pa
s numerise sur
% un nombre entier de periode
% interpretation de la phase a partir de l'axe reel (= cos)
% interpretation de la phase uniquement pour les frequences dont les
% modules sont non nuls.
% lorsque les signaux DISCRETS sur representes avec un grand nombre de points,
% la representation graphique peut etre continue pour des raisons de
% lisibilite des graphes mais il s'agit bien de representer une
% distribution et non une fonction. Il n'y a pas d'existance entre 2 points
% ... meme si il sont relies pour des raisons de simplicite.
pause
% question 9
df=1/T; % resolution spectrale
f=0:df:Fe-df; % creation de l'abscisse frequentiel
% passage du resultat brut FFT au spectre unilateral (cf Transformee de
% Hilbert)
G7=X7/N*2;
G7(1)=G7(1)/2;
G7(N/2+1:N)=0;
% Remarque : La transformee de Fourier de Matlab produit un resultat qui
% depend du nombre de point de numerisation : le resultat est a ponderer
% par N pour etablir la correspondance avec les amplitudes temporelles
% Ensuite la representation unilaterale du spectre (Gx au lieu de Sx :
% voir cours) reviens realiser une transformation de hilbert du signal
% d'origine puis a en faire la FFT ...). Cette methode conserve l'energie.
% Les amplitudes dynamiques sont multipliees par deux, pas la composante
% statique (cf cours sur TF de sin, cos et exp)
% quelques commentaires sur les unites :
% temporel=V
% TF frequentiel=V.dt=V/Fe=V/(N.df)=V.T/N ==> en V/Hz ou V.s
% TFD frequentiel=V (cf definition TFD)=x[n]=xa
% xe(t)=V/s (integrale dirac = 1)
% TF {xe(t)}=V.s/s=V
subplot(311)
plot(t7,x7);
title('Question 9 : representation temporelle')
xlabel('temps (s)');
subplot(312)
stem(f,abs(G7));
title('representation frequentielle')
legend('module')
xlabel('frequence (Hz)')
ylabel('amplitude (V)')

subplot(313)
plot(f,angle(G7)*180/pi);
title('representation frequentielle')
legend('phase')
xlabel('frequence (Hz)')
ylabel('phase ()')
hold on
stem(f(Np+1),phi*180/pi,'r')
hold off
pause

%question 10
f0=441;
x10=x0+x1*cos(2*pi*f0*t7+phi); % signal
X10=fft(x10);
G10=X10/N*2;
G10(1)=G10(1)/2;
G10(N/2+1:N)=0;
subplot(311)
plot(t7,x10);
title('Question 10 : representation temporelle')
xlabel('temps (s)');
subplot(312)
stem(f,abs(G10));
title('representation frequentielle')
legend('module')
xlabel('frequence (Hz)')
ylabel('amplitude (V)')
subplot(313)
plot(f,angle(G10)*180/pi);
title('representation frequentielle')
legend('phase')
xlabel('frequence (Hz)')
ylabel('phase ()')
hold on
stem(f(Np+1),phi*180/pi,'r')
hold off
% cas de repliement spectrale : Shannon n'est pas respecte :f0>Fe/2.
% Le resultat obtenu est identique a celui de la question precedante alors que l
a
% frequence du signal est passee de 7 Hz a 441 Hz : il y a apparition d'une
% raie fantome a Fe-f0 = 448-441 = 7 Hz dans le domaine d'interpretation = {0-Fe
/2}
% Remarque : il est strictement impossible de s'afranchir de tous
% repliement spectrale apres numerisation : le filtre anti-repliement est ANALOG
IQUE et ne
% peut etre qu'ANALOGIQUE
% Remarque (hors programme) : les systemes d'acquisition contemporains pratiquen
t des techniques
% de filtrage anti repliement composees d'un filtre analogique a frequence de co
upure fixe (unique)
% (adapte a la frequence d'echantilonnage max du systeme)
% et complete ensuite par un filtre numerique adapte a la frequence d'echantillo
nnage
% choisie par l'utilisateur ...et procede ensuite a la decimation correspondante
( sous echantillonnage))

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%
clear all
close all
clc
disp('Correction TP 3 : Fenetres d''apodisation');
N=1024;
n=0:N-1; % indice temporel
k=-N/2:N/2-1; % indice frquentiel
N1=16;
N2=31;
N3=61;
w1=[ones(N1,1) ; zeros(N-N1,1)];
w2=[ones(N2,1) ; zeros(N-N2,1)];
w3=[ones(N3,1) ; zeros(N-N3,1)];
W1=fft(w1)/N1;
W2=fft(w2)/N2;
W3=fft(w3)/N3;
W1=fftshift(W1);
W2=fftshift(W2);
W3=fftshift(W3);
subplot (311)
plot(n,w1,n,w2,n,w3)
title('reprsentation temporelle de fenetres rectangulaires de tailles diffrentes')
legend ('avec 16 points','avec 31 points','avec 61 points')
subplot (312)
plot(k,abs(W1),k,abs(W2),k,abs(W3))
title('reprsentation frquentielle de fenetres rectangulaires de tailles diffrentes'
)
legend ('avec 16 points','avec 31 points','avec 61 points')
ylabel ('chelle lin')
subplot (313)
semilogy(k,abs(W1),k,abs(W2),k,abs(W3))
title('reprsentation frquentielle de fenetres rectangulaires de tailles diffrentes'
)
legend ('avec 16 points','avec 31 points','avec 61 points')
ylabel ('chelle log')
% largeur du lobe principal, largeur lobe secondaire, remonte de lobe
% secondaire : voir cours sur sinc, fonction porte et fenetrage ...

pause
wn=hanning(N2);wn(1024)=0;
wm=hamming(N2);wm(1024)=0;
Wn=fft(wn)/N2;
Wm=fft(wm)/N2;
Wn=fftshift(Wn);
Wm=fftshift(Wm);
subplot (221)
plot(n,w2,n,wn,n,wm)
title('reprsentation temporelle de diffrentes fenetres')
legend ('rectangulaire','hanning','hamming')
subplot (223)
plot(k,abs(W2),k,abs(Wn),k,abs(Wm))
title('reprsentation frquentielle de diffrentes fenetres')
legend ('rectangulaire','hanning','hamming')
ylabel ('chelle lin')
subplot (122)
semilogy(k,abs(W2),k,abs(Wn),k,abs(Wm))
title('reprsentation frquentielle de diffrentes fenetres')
legend ('rectangulaire','hanning','hamming')
ylabel ('chelle log')
% largeur du lobe principal, largeur lobe secondaire, remonte de lobe
% secondaire, pouvoir de dtection, pouvoir sparateur : voir cours sur fenetrage ..
.
pause
% Question 3
A1=[1 1 1 1];
A2=[1 1 1E-3 1E-10];
f1=[13 13.1 13.1 13.25];
f2=[13.5 15.1 21.9 21.75];
T=4;
df=1/T;
Fe=256;
dt=1/Fe;
t=0:dt:T-dt;
f=0:df:Fe-df;
for m=1:4;
x=A1(m)*cos(2*pi*f1(m)*t)+A2(m)*cos(2*pi*f2(m)*t);
xn=x.*hanning(N)';
X=fft(x);
G=X/N*2;
G(1)=G(1)/2;
G(N/2+1:N)=0;
Xn=fft(xn);
Gn=Xn/sum(hanning(N))*2; % correction d'amplitude valable uniquement pour un
nombre de composante fini. (pas les signaux bande troite)

Gn(1)=Gn(1)/2;
Gn(N/2+1:N)=0;
subplot(211);
plot(t,x,t,hanning(N),t,xn)
title (['reprsentation temporelle : cas N' num2str(m)])
legend('signal', 'fenetre', 'signal fentr')
xlabel ('temps (s)')
ylabel ('amplitude (V)')
subplot(212);
semilogy(f,abs(G),f,abs(Gn));
title ('reprsentation frquentielle')
legend('avec fenetre rectangulaire (= pas de fenetre)','avec fenetre de hann
ing')
xlabel ('frquence (Hz)')
ylabel ('amplitude (V)')
pause
end
% Observation :
% cas 1 :
% la fenetre de hanning ne distingue pas les deux frquence voisinne
% contrarement la fenetre rectangulaire qui a un meilleur pouvoir
% sparateur (largeur du lobe principal)
% cas 2 :
% la dtection est assure par les deux fenetres mais avec des problmes
% de biais de rsolution et de fuite spectrale importants (les frquence
% ne sont pas des multiples de la rsolution spectrale
% cas 3 :
% dans ce cas la fenetre de hanning a un meilleur pouvoir de dtection
% que la fenetre rectangulaire : la frquence f1 n'est pas un multiple de
% la rsoution spectrale, les raies frquentielles se trouvent sur les
% lobes secondaires. La remonte des lobe secondaires de la fenetre
% rectangulaire empeche de dtecter la prsence d'une 2me frquence dans
% le signal
% cas 4 :
% dans ce cas la fenetre de rectangulaire a un meilleur pouvoir de dtection
% que la fenetre de haning : les frquences qui composent le sugnal sont des m
ultiple de
% la rsoution spectrale, les raies frquentielles se trouvent entre les
% lobes secondaires (au pied=0). La remonte des lobe secondaires de la fenetre
% de hanning (bien que faible) empeche de dtecter la prsence d'une 2me frquence da
ns
% le signal (1E-10 !!)
% conclusion :
% lorsque les composantes frquentielles d'un signal sont
% parfaitement connues et multiples de la rsolution spectrale (exemple :
% signaux priodiques des GBF) la fenetre rectangulaire est
% particulirement recommande.
% lorsque les composantes frquentielles d'un signal ne sont
% parfaitement connues ou ne sont pas ncessairement multiples de la rsolution spec
trale (exemple :
% signaux priodiques des machines tournantes, moteurs asynchrones ... ) la fenetr
e de hanning est
% particulirement recommende.

S-ar putea să vă placă și