EE345_TP1_Generalites_et_prise_en_main_de_MATLAB.doc
Ce TP est l'occasion de se familiariser avec le logiciel MATLAB au traitement du
... Y = cos(2*pi*f0*T); %Y est donc un vecteur de N points représentant un ..... un
programme qui génère un signal DTM1 correspondant à l'une des touches.
Part of the document
Jean-Marc DUFOUR
Adil BENNIS |Mars 2007
P2009 | |
EE 345 - Traitement du Signal
TP 1 - Approche du traitement numérique du signal L'objectif de ce travail est d'aborder la manipulation de signaux discrets
en utilisant le logiciel MATLAB.
Sommaire 1. Génération d'un signal numérique 2
2. Transformation de Fourier discrète 3
3. Transformée de Fourier Rapide 4
4. Transformée de Fourier Inverse - Reconstruction 5
5. Théorème de Shannon 5
6. Filtre anti-repliement 7
7. Exercice d'approfondissement 7
8. Pour aller plus loin... 8 Introduction
Ce TP est l'occasion de se familiariser avec le logiciel MATLAB au
traitement du signal via des exemples simples : représentation de signaux
en temps et en fréquence, application des théorèmes de base du traitement
numérique du signal (échantillonnage de Shannon), et exemples concrets
(signaux DTMF et générateur sinusoïdaux). 1. Génération d'un signal numérique Engendrer un signal numérique représentant N échantillons d'une cosinusoïde
de fréquence [pic][pic]= 2 kHz, la fréquence d'échantillonnage étant fixée
à 16 kHz.
Ce signal échantillonné est en fait une suite de N points tous les [pic],
que l'on peut donc stocker dans un vecteur de taille N. f0 = 2000; %La fréquence du signal
fe = 16000; %La fréquence d'échantillonage
N = 2*fe/f0; %Le nombre d'échantillons dépend de ces fréquences
t = [0:1:N-1]; %Nous générons un vecteur normé
T = t / fe; %Vecteur de temps [Te 2*Te 3*Te ... (N-1)*Te]
Y = cos(2*pi*f0*T); %Y est donc un vecteur de N points représentant un
cosinus échantillonné
plot(T, Y, '-+') %On trace la courbe
title('Echantillonnage d''un cosinus')
xlabel('Temps (s)')
ylabel('Amplitude')
E = (Y*Y')/N %Calcul de l'énergie : Somme des carrés des termes
divisée par le nombre d'échantillons
Tracer ce signal en faisant apparaître en abscisse le temps.
Voici le résultat :
[pic]
On retrouve un comportement sinusoïdal. Déterminer l'énergie de ce signal
Pour le calcul de l'énergie, MATLAB trouve 0,5J ce qui est la valeur
trouvée avec le calcul théorique.
Nous avons essayé de faire varier les fréquences et nous trouvons toujours
0,5J ce qui est normal car si l'échantillonnage est bon, le signal peut
être retrouvé et donc il est toujours le même.
Rq : Pour faire le calcul des sommes de carrés, nous utilisons la propriété
du produit scalaire d'un vecteur et de sa transposée : [pic]
2. Transformation de Fourier discrète Calculer la transformée de Fourier discrète (TFD) du signal généré en
utilisant la formule théorique. Noter les difficultés à considérer pour
réaliser l'algorithme.
La formule théorique de la TFD est :
[pic]
Nous l'implémentons sous MATLAB grâce à deux boucles for imbriquées :
TFD=1:N; %On crée un vecteur de N points
TFD=TFD*0; %On initialise tous les points à 0
W=exp(2*pi*j/N); %Il s'agit d'un terme constant que nous calculons à
la puissance kn
for k=1:N %On calcule X(k)
Wk=W^(k-1);
for i=1:N %On fait la somme de 0 à N-1
TFD(k) =TFD(k) + Y(i)*Wk^(-i+1);
end
end
figure
plot((0:N-1)*f0/2,abs(TFD))
title('TFD calculée du cosinus')
xlabel('Fréquence (Hz)')
ylabel('Amplitude') Tracer le module du spectre correspondant en fonction de la fréquence.
Observer et justifier le spectre obtenu. En particulier, préciser
l'incrément fréquentiel et montrer l'influence du nombre de points dans la
déduction de la fréquence du signal.
On obtient ce spectre :
[pic]
On remarque deux pics : l'un à 2000 Hz et l'autre à 14000 Hz. Soit [pic] et
[pic]. C'est le résultat attendu lors de la transformation de Fourier d'un
cosinus échantillonné.
Le spectre d'un cosinus « pur », ne comporte que deux pics : l'un à [pic]
et l'autre à[pic]. Or l'échantillonnage translate la partie négative du
spectre de[pic]. D'où le pic à[pic]. Remarquer et justifier l'amplitude des raies ; déterminer l'énergie de ce
spectre. Conclure.
L'amplitude des raies est de 8 du fait de la conservation d'énergie. Ainsi
l'énergie est : [pic]
La conservation de l'énergie, ainsi que le théorème de Parseval est donc
vérifié. Remarque : La largeur des raies est importante à cause de [pic]. En effet,
nous n'avons pas assez de points (16 sur un intervalle de 16000Hz) et c'est
pour cela que les raies sont larges de 2000Hz. L'incrément fréquentiel est
donc : [pic] 3. Transformée de Fourier Rapide Comparer le résultat précédent avec celui obtenu à l'aide de l'algorithme
de la Transformée de Fourier Rapide (fonction fft() de MATLAB).
Z = fft(Y)
figure
hold on %On va aficher les deux courbes sur la même figure
plot((0:N-1)*f0/2,Z,'-+') %On trace la fft calculée par MATLAB en bleu
plot((0:N-1)*f0/2,abs(TFD),'r') %On trace celle que nous avons calculé
plus haut en bleu
legend('Calcul avec fft()','TFD calculée')
title('Comparaison entre la TFD calculée et le calcul avec fft()')
xlabel('Fréquence (Hz)')
ylabel('Amplitude') Nous obtenons la courbe suivante immédiatement :
[pic]
On voit que les deux courbes sont presque confondues sauf à l'extérieur des
raies où l'on voit que la TFD calculée par MATLAB dévie un peu de 0.
La fonction fft() est donc un peu moins précise que notre algorithme mais
par contre elle est plus rapide au calcul. 4. Transformée de Fourier Inverse - Reconstruction Comparer le signal reconstruit à l'aide de la FFT inverse au signal
original de la question 1.
Nous écrivons un spectre qui va afficher les deux courbes afin de les
comparer :
figure
hold on
plot(T, Y, '-+') %On affiche notre signal échantilloné
plot(T, ifft(TFD), 'r') %On affiche la reconstruction
legend('Signal initial','Calcul avec ifft()')
title('Comparaison entre le signal initial et la reconstitution')
xlabel('Temps (s)')
ylabel('Amplitude') On obtient cette courbe :
[pic]
On remarque encore deux courbes confondues. Les deux signaux sont donc
identiques, en phase, en fréquence, comme en amplitude. La transformation
de Fourier inverse et la transformation de Fourier sont donc bien des
applications réciproques.
5. Théorème de Shannon Tracer les spectres des signaux numériques sinusoïdaux de fréquence : 4 kHz
et 7 kHz. Justifier les résultats obtenus.
Nous rédigeons un script MATLAB qui va nous permettre de comparer les deux
courbes :
f1 = 4000;
f2 = 7000;
fe = 12000;
N1 = 2*fe/f1
N2 = 2*fe/f2
t1 = [0:1:N1-1];
T1 = t1 / fe;
t2 = [0:1:N2-1];
T2 = t2 / fe;
Y1 = sin(2*%pi*f1*T1);
Y2 = sin(2*%pi*f2*T2);
figure
plot((t1)*fe/N1,abs(fft(Y1)))
title('Transformée de Fourrier d''une sinusoïde de fréquence 4kHz')
xlabel('Fréquence (Hz)')
ylabel('Amplitude')
figure
plot((t2)*fe/N2,abs(fft(Y2)), 'r')
title('Transformée de Fourrier d''une sinusoïde de fréquence 7kHz')
xlabel('Fréquence (Hz)')
ylabel('Amplitude')
Nous obtenons les courbes suivantes :
[pic]
On voit bien que le théorème de Shannon n'étant pas respecté dans le
deuxième cas (car la fréquence maximale du signal, 7 kHz, est supérieure à
la moitié de la fréquence d'échantillonnage, 12kHz), le signal est déformé
puisqu'on constate l'apparition de composantes de fréquence différentes que
les fréquences d'origine. En fait, il s'agit de deux raies qui sont
confondues car l'incrément fréquentiel est trop grand. En effet, il est de
4000 Hz donc l'espace entre deux raies n'est pas distinguable.
Il s'agit d'un repliement de spectre.
Pour éviter ce phénomène, il faut veiller à respecter le théorème de
Shannon. Cela revient à augmenter [pic] et donc augmenter le nombre de
points. Dans le premier cas, l'incrément fréquentiel est assez faible pour
identifier les deux raies à [pic] et[pic].
6. Filtre anti-repliement Un filtre anti-repliement est un filtre passe bas ayant pour fréquence de
coupure la moitié de[pic]. Ainsi la fréquence maximale du signal obtenu y
est bien inférieure. Il respecte donc le théorème de Shannon et il n'y a
pas de repliement de spectre.
Ce filtre ne peut pas être numérique, car pour traiter le signal, il faut
d'abord l'échantillonner.
Un filtre anti-repliement est donc obligatoirement analogique.
7. Exercice d'approfondissement Une sinusoïde de fréquence 200kHz est échantillonnée à la fréquence
1000kHz. Quel est le signal obtenu lors dune reconstruction parfaite ?
Le signal obtenu est le signal original. L'échantillonnage respecte le
théorème de Shannon, donc aucune information n'est perdue. La fréquence d'échantillonnage est maintenant de 250kHz.
On a changé la fréquence d'échantillonnage et le théorème de Shannon n'est
plus vérifié. Le signal est donc déformé et les informations sont perdues. Nous allons maintenant afficher les signaux reconstitués dans les deux cas
évoqués précédemment.
Le programme est le suivant :
f0 = 200*10^3;
fe1 = 1000*10^3;
fe2 = 250*10^3
N1 = 10
N2 = 10
t1 = [0:1:N1-1];
T1 = t1 / fe1;
t2 = [0:1:N2-1];
T2 = t2 / fe2;
Y1 = sin(2*pi*f0*T1);
Y2 = sin(2*pi*f0*T2);
hold on
plot(interp(Y1,10),'+')