Vous êtes sur la page 1sur 23

Master : traitement numérique du signal janvier /2024 Chalabi Z

TP1

I- Rappel sur les notions de MATLAB (polycopié)


II- Matlab et le traitement du signal
1- Représentation des signaux et systèmes
1-1 Représentation temporelle
Un signal numérique échantillonné à la fréquence f e se présente naturellement dans Matlab,
comme un vecteur de N éléments (signal de durée N/f e). Le vecteur des temps qui lui est
associé est :
>> t = (0 :N-1)/ fe ;
Solution
Exemple sur la Représentation temporel :
Script de Matlab :
% Paramètres
fe = 1000; % Fréquence d'échantillonnage (ex: 1000 Hz)
N = 100; % Nombre d'échantillons (ex: 100)

% Vecteur des temps


t = (0:N-1) / fe;

% Génération d'un signal exemple (ex: sinusoïde)


x = sin(2 * pi * 5 * t); % sinusoïde de fréquence 5 Hz

% Affichage
figure;
plot(t, x);
title('Représentation temporelle du signal');
xlabel('Temps (s)');
ylabel('Amplitude');

1-2 Autocorrélation
L’estimation de l’autocorrélation d’un signal ou de l’intercorrélation de deux signaux de
longueur N peut être effectuée avec la fonction xcorr :
>> Cxy = xcorr(x,y,option) ;
Master : traitement numérique du signal janvier /2024 Chalabi Z

C’est un vecteur de longueur 2N-1 tel que


Solution
Exemple sur l’autocorrélation :
Script de Matlab :
% Signal (x) déjà défini dans la partie précédente
% Pour l'autocorrélation, utilisez le même signal pour x et y
y = x;

% Calcul de l'autocorrélation
Cxy = xcorr(x, y, 'biased'); % 'biased' pour une estimation normalisée

% Affichage
figure;
plot(Cxy);
title('Autocorrélation du signal');
xlabel('Décalage');
ylabel('Amplitude');

Remarque :
Ces scripts MATLAB nous permet de visualiser la représentation temporelle d'un signal
numérique et de calculer ainsi que d'afficher son autocorrélation. nous pouvons modifier les
paramètres comme la fréquence d'échantillonnage fe, le nombre d'échantillons N, et la forme
du signal x pour répondre à nos besoins spécifiques.
TP 2

I- Analyse du théorème d’échantillonnage et reconstruction

1-On échantillonne une sinusoïde de fréquence 200hz, à la fréquence Fe =500hz. Quel signal
obtient-on lors d’une reconstruction parfaite ?
2- On échantillonne une sinusoïde de fréquence 200hz, à la fréquence Fe=250hz. Quel signal
obtient-on lors d’une reconstruction parfaite ?
Master : traitement numérique du signal janvier /2024 Chalabi Z

Solution
1 et 2. Échantillonnage de la Sinusoïde à 500 Hz et 250 Hz
Script de Matlab :
% Paramètres
fs = 200; % Fréquence du signal
Fe = [500, 250]; % Fréquences d'échantillonnage pour les deux cas
T = 1; % Durée du signal en secondes

for fe = Fe
% Échantillonnage
t = 0:1/fe:T;
x = sin(2*pi*fs*t);

% Reconstruction
t_interp = 0:1/(10*fe):T;
x_interp = interp1(t, x, t_interp, 'spline');

% Affichage
figure;
plot(t, x, 'o', t_interp, x_interp, '-');
title(['Sinusoïde de 200 Hz échantillonnée à ', num2str(fe), ' Hz et reconstruite']);
xlabel('Temps (s)');
ylabel('Amplitude');
end
Master : traitement numérique du signal janvier /2024 Chalabi Z

3- Ecrire un programme qui :


- affiche une sinusoïde de fréquence 200hz
- affiche 10 de ses éléments prélevés à la fréquence Fe
- affiche le signal reconstruit : utiliser la fonction interp(x,N) ;
- vérifie les résultats des questions 1 et 2.

I- Question 3 de I.
Taper :
Te = 10 ; fs =200Hz ; % nombre de points et fréquence du signal
Fe = input (‘fréquence d’échantillonnage en Hz (fs =200hz) =’) ;
K = 40 ; % facteur de sur échantillonnage pour affichage
Tc= k*Te ; fg = K*Fe ; tg= (0 :Tc-1)/fg;
Te = (1:K:Tc-1)/fg ; xte = cos(2*pi*te*fs); % un point sur K
Xt = cos(2*pi*tg*fs) ;¨% signal à temps quasi continu
Xti = inter(xte,K) ; % interpolation
Plot (tg,xt, te,xte,’o’,tg,xti,’ :’) ; %affichage des signaux.
Solution
3. Programme pour Afficher et Vérifier l'Échantillonnage et la Reconstruction
Script de Matlab :
Master : traitement numérique du signal janvier /2024 Chalabi Z

Te = 10; % Nombre de points


fs = 200; % Fréquence du signal
Fe = input('fréquence d’échantillonnage en Hz (fs =200hz) = '); % Fréquence
d'échantillonnage
K = 40; % Facteur de sur-échantillonnage pour affichage
Tc = K * Te;
fg = K * Fe;
tg = (0:Tc-1) / fg;

te = (1:K:Tc-1) / fg;
xte = cos(2*pi*te*fs); % Un point sur K
xt = cos(2*pi*tg*fs); % Signal à temps quasi continu
xti = interp1(te, xte, tg, 'spline'); % Interpolation

% Affichage des signaux


plot(tg, xt, te, xte, 'o', tg, xti, ':');
title('Échantillonnage et Reconstruction d''une Sinusoïde');
xlabel('Temps (s)');
ylabel('Amplitude');
legend('Signal original', 'Points échantillonnés', 'Signal reconstruit');

on prendre un exemple de Fe=250hz

on prendre un exemple de Fe=500hz


Master : traitement numérique du signal janvier /2024 Chalabi Z

TP 3

II- Système linéaire discret


1- Ecrire un programme qui montre que l’opération de filtrage est une opération de
convolution. On considère le signal d’entrée x(n) = [1 -2 3 -4 3 2 1]. Le système est
caractérisé par sa réponse impulsionnelle finie h(n) = [3 2 1 -2 1 0 -4 0 3].
Pour cela, si y(n) est la réponse du système à l’excitation x(n), on suggère de calculer et
représenter le signal y(n) par convolution de x(n)*h(n) et de le comparer au résultat obtenu,
par filtrage, de x(n) à travers h(n). Utiliser les instructions y = con(h,x) et y1 = filter(h,1,x).
Afficher les deux signaux y (n) et y1(n). Pour plus d’information consulter le « help ».
Solution
1. Démonstration que le Filtrage est une Convolution
Script MATLAB :
% Données
x = [1 -2 3 -4 3 2 1]; % Signal d'entrée
h = [3 2 1 -2 1 0 -4 0 3]; % Réponse impulsionnelle

% Calcul de la sortie du système par convolution


y = conv(h, x);

% Calcul de la sortie du système par filtrage


y1 = filter(h, 1, x);
Master : traitement numérique du signal janvier /2024 Chalabi Z

% Affichage des deux signaux


figure;
subplot(2,1,1);
stem(y);
title('Sortie par Convolution');
xlabel('n');
ylabel('y(n)');

subplot(2,1,2);
stem(y1);
title('Sortie par Filtrage');
xlabel('n');
ylabel('y1(n)');

2- En déduire la fonction de correlation entre x(n) et h(n) de façon directe par « xcorr ».
Afficher le résultat. Quelle remarque faite vous ?
Solution
2. Fonction de Corrélation entre x(n) et h(n)
Script MATLAB :
% Calcul de la corrélation entre x et h
correlation = xcorr(x, h);

% Affichage de la corrélation
Master : traitement numérique du signal janvier /2024 Chalabi Z

figure;
stem(correlation);
title('Corrélation entre x(n) et h(n)');
xlabel('Décalage');
ylabel('Amplitude');

CONCLUSION :
Après En exécutant ces scripts dans MATLAB, nous pourrons observer que le résultat de la
convolution de x(n) et h(n) est similaire au résultat obtenu par filtrage, démontrant ainsi que le
filtrage est une forme de convolution. De plus, la fonction de corrélation entre x(n) et h(n)
nous donnera une idée de la relation linéaire entre ces deux signaux. nous pouvons observer la
forme et les caractéristiques de la corrélation pour mieux comprendre leur interaction.

TP 4
Analyse spectrale TFD

I- Convolution rapide ou circulaire : reprendre l’exercice de la du TD.

II- Observation d’une sinusoïde complexe (l’objectif est la précision et la résolution spectrale)
Considérons la suite x(n) obtenue par échantillonnage de la sinusoïde complexe exp(j2π F0t) à
la cadence Fe = 1/T. En posant f0= F0/Fe <1, on a x(n) = exp(j2πf0n).
1- Déterminer l’expression de la TFtd de la suite x(n) = exp(j2πf0n) où f0 = 7/32 et n =
[0,…,31]
SOULUTION
1. Expression de la TFD de x(n) = exp(j2πf0n) avec f0 = 7/32
Script MATLAB :
Master : traitement numérique du signal janvier /2024 Chalabi Z

% Paramètres
f0 = 7/32;
N = 32;
n = 0:N-1;

% Sinusoïde complexe
x = exp(1j * 2 * pi * f0 * n);

% Calcul de la TFD
X = fft(x);

% Affichage du module de la TFD


figure;
stem(0:N-1, abs(X));
title('Module de la TFD de x(n) pour f0 = 7/32');
xlabel('Fréquence (k/32)');
ylabel('Amplitude');

2- En déduire la valeur de la TFtd aux points de fréquences f= k/32, pour k= [0,…,31].


SOULUTION
2. Valeur de la TFD aux points de fréquences f = k/32 pour k = [0,…,31]
Dans le script ci-dessus, la valeur de la TFD aux points de fréquences f = k/32 est donnée par
les éléments du vecteur X. Chaque élément X(k+1) correspond à la fréquence f = k/32.

3- En utilisant le fft, afficher le module de la TFD de x(n).


Master : traitement numérique du signal janvier /2024 Chalabi Z

4- Soit à présent f0= 0.2. Afficher le module de la TFD de x(n). Comment expliquer vous les
résultats obtenus. On sait en fait que la TF de exp(j2πF0t) est δ(f-F0). On pourrait donc
s’attendre à retrouver un résultat analogue pour la TFD au point de fréquence f0.
3. Module de la TFD de x(n) pour f0 = 0.2
Script MATLAB
% Paramètres pour f0 = 0.2
f0 = 0.2;

% Sinusoïde complexe
x = exp(1j * 2 * pi * f0 * n);

% Calcul de la TFD
X = fft(x);

% Affichage du module de la TFD


figure;
stem(0:N-1, abs(X));
title('Module de la TFD de x(n) pour f0 = 0.2');
xlabel('Fréquence (k/32)');
ylabel('Amplitude');

4. Explication des Résultats


Pour f0 = 7/32, la TFD montre un pic clair à la fréquence correspondante car 7/32 est un
multiple entier de l'inverse de la période d'échantillonnage (1/32). Cependant, pour f0 = 0.2,
qui n'est pas un multiple entier de 1/32, la TFD montre une distribution d'énergie sur plusieurs
Master : traitement numérique du signal janvier /2024 Chalabi Z

fréquences. Cela est dû au phénomène de fuite spectrale, où l'énergie d'une fréquence se


"répand" sur les fréquences voisines, car la fréquence du signal n'est pas un multiple entier de
la fréquence de base de la TFD.

Ces scripts vous permettent d'observer visuellement le module de la TFD pour différentes
fréquences et d'analyser l'impact de la fréquence du signal sur sa représentation spectrale.

Remarque : Il est conseillé de faire une étude théorique pour commencer


n’importe quels travaux pratiques pour justifier et comparer vos résultats.

- TP

Exercice 1
Engendrer un signal numérique : fonction triangulaire, défini par :

Solution :

La fenêtre triangulaire peut être obtenue par convolution de deux fenêtres rectangulaires, en
utilisant l’instruction conv par matlab.
Solution :
Script Matlab
% Paramètres
N = 100; % Longueur du signal
rect = ones(1, N/2); % Fenêtre rectangulaire

% Convolution pour obtenir une fenêtre triangulaire


triangle = conv(rect, rect);

% Affichage
figure;
plot(triangle);
title('Fenêtre triangulaire');
xlabel('Échantillons');
ylabel('Amplitude');
Master : traitement numérique du signal janvier /2024 Chalabi Z

Rappèl :
- un signal numérique échantillonné à la fréquence Fe est un vecteur (dans Matlab) de n
éléments (de durée N/Fe ou NTe), le vecteur temps associé est :
>> t = (0 : N-1)/Fe ;
- La TfD d’un signal de N points est calculée par FFT :
>> X = fft(x) ; % c’est un signal périodique (période = Fe) de N points échantillonné à la
fréquence N/Fe, le vecteur des fréquences qui lui est associé est :
>> f = (0 : N-1)/N*Fe
- X peut être représenté sur l’intervalle [-Fe/2, +Fe/2] grâce à la fréquence fftshift (qui ne
fait qu’un décalage de vecteur sans calcul de fft) :
>> Y = fftshift(X) ;
Le vecteur de fréquence associé est alors :
>> f = (0 : N-1)/N*Fe - Fe/2

Exercice 2
Ecrire l’instruction qui engendre une séquence de valeurs correspondant à un échantillonnage
à la fréquence Fe = 1000hz, d’une sinusoïde réelle de fréquence 80hz et d’amplitude 3,
pendant une durée de 30ms:

Tapez : whos.
Matlab affiche:
Name Size Total Complexe
S 1 by 31 31 No
Grand total is (31*8) = 248 bytes.
Matlab indique que la matrice s possède 1 ligne et 31 colonnes, soit au total 31 valeurs réelles.

>> plot (s,’x’)


Master : traitement numérique du signal janvier /2024 Chalabi Z

Affiche le signal s, mais l’axe des abscisses représente, dans ce cas, les indices de s.

Si l’on veut que l’axe des abscisses porte l’échelle des temps en seconde, il faut taper :
>> plot((0 : 30)/1000, s,’x’)
Qui affiche les 31 valeurs allant de l’instant 0 à l’instant 30ms par pas de 1 ms.

Si on tape
>> plot ((0 : 30)/1000, s, ’x’, (0:30)/1000, s)
On obtient la superposition des deux.
Figure :
Solution :
Script Matlab
% Paramètres
Fe = 1000; % Fréquence d'échantillonnage
f = 80; % Fréquence de la sinusoïde
A = 3; % Amplitude
T = 0.03; % Durée en secondes
t = 0:1/Fe:T-1/Fe; % Vecteur de temps

% Sinusoïde
s = A * sin(2 * pi * f * t);

% Affichage
figure;
plot(t, s);
title('Sinusoïde échantillonnée');
xlabel('Temps (s)');
ylabel('Amplitude');
Master : traitement numérique du signal janvier /2024 Chalabi Z

Exercice 3
Tracer le signal numérique résultant de l’échantillonnage avec Te =1 de la fonction à temps
continu cos(2πft) dont la fréquence varie avec le temps selon la loi f = 0.01t. On effectuera le
tracé sur une centaine de points. Le signal continu n’est pas ici périodique mais on constatera
que la représentation du signal échantillonné parait cependant l’être.

Solution :

Solution :
Script Matlab
% Paramètres
Te = 1; % Intervalle d'échantillonnage
N = 100; % Nombre de points
t = 0:Te:(N-1)*Te; % Vecteur de temps
f_t = 0.01 * t; % Fréquence variable

% Signal
s = cos(2 * pi * f_t .* t);

% Affichage
figure;
plot(t, s);
Master : traitement numérique du signal janvier /2024 Chalabi Z

title('Signal numérique avec fréquence variable');


xlabel('Temps');
ylabel('Amplitude');

Exercice 4

En reprenant la fenêtre triangulaire de l’exercice, vérifier les propriétés de symétrie


hermitienne en traçant :
1- le module et la phase de sa TFtd en utilisant la fonction fft(s,1024), qui calcule 1024
points de TFtd uniformément répartie sur (0,1).
2- Les parties réelle et imaginaire de sa TFtd obtenues de la même façon.

Solution :
%Spectre de la fonction triangulaire de l’exo 1.

Solution :
Script Matlab

% Utiliser la fenêtre triangulaire de l'Exercice 1


% triangle = ...
Master : traitement numérique du signal janvier /2024 Chalabi Z

% Calcul de la TFD
X = fft(triangle, 1024);

% Affichage du module, de la phase, et des parties réelle et imaginaire


figure;
subplot(4,1,1);
plot(abs(X));
title('Module');

subplot(4,1,2);
plot(angle(X));
title('Phase');

subplot(4,1,3);
plot(real(X));
title('Partie Réelle');

subplot(4,1,4);
plot(imag(X));
title('Partie Imaginaire');
Master : traitement numérique du signal janvier /2024 Chalabi Z

TP 7
Transformée de Fourier discrète

I- Transformée d Fourier d’une fenêtre rectangulaire discrète


1- Générer une fenêtre rectangulaire de longueur P = 5 échantillons ; (P = ones (1,5);)
2- Calculer la TFD de la fenêtre sur N points fréquentielles. (Pf=fft(P,1000))
3- Afficher le module de la transformée de Fourier (TFD). (plot(abs(Pf)).
4- Le résultat contient la TFD du signal qui, comme on l’a vu, est l’échantillonnage des
valeurs de la TF à temps discret (TFTD) aux points fk =k/N pour 0≤ k ≤N+1. A quelle
fréquence fk correspondent les valeurs d’indices 1, 500 et 1000 ?
5- A quoi est due la symétrie que l’on observe ?
6- Quelle est la largueur df du lobe principal ? (utiliser ginput).
7- Afficher le module de la TF en décibels, entre 0 et 15dB. Utiliser la fonction ‘ log10’.
Pour afficher un graphique en décibels avec les échelles xmin,xmax,ymin,ymax utiliser
‘axis([xmin, xmax, ymin, ymax])’.
Vérifier que l’on a bien environ 13dB entre le max du lobe principal et le max du lobe
secondaire. Vérifier que pour une fenêtre de largeur p= 50 échantillons, on a toujours 13dB.

II- TFD d’une sinusoïde

Calculer la transformée discrète d’une exponentielle complexe.


1- Générer 100 échantillons d’une exponentielle de fréquence f0 = 1600 Hz
échantillonnée à Fe = 8khz. Afficher la partie réelle du résultat (fonction real).
2- Calculer X la TFD des P= 50 premiers échantillons du signal sur N= 50 points (utiliser
fft(x(1 :P),N)), et vérifier le module (utiliser plot(abs(X),’*’) pour voir chaque point
séparément).
3- Choisir maintenant une fréquence de 1680 Hz et refaire le calcul.
4- Pour f0 = 1680 Hz, afficher la TFD calculée sur N= 1000 points fréquentiels.
5- Pourquoi lorsque f0 = 1600 Hz toutes les valeurs de la TFD sont elles nulles sauf une ?
Qu’observe- t- on lorsque f0 = 1680 Hz et N= 50 ? Le résultat ressemble t-il à un sinus
cardinal en temps discret ? Et lorsque N= 1000.

SOLUTION
1. Générer une Fenêtre Rectangulaire
Script Matlab
P = ones(1, 5); % Fenêtre rectangulaire de longueur 5 échantillons
2. Calculer la TFD de la Fenêtre sur N Points
Script Matlab
N = 1000;
Pf = fft(P, N); % TFD de P sur N = 1000 points
3. Afficher le Module de la TFD
Script Matlab
figure;
plot(abs(Pf));
title('Module de la TFD de la Fenêtre Rectangulaire');
xlabel('Fréquence (k/N)');
ylabel('Amplitude');
Master : traitement numérique du signal janvier /2024 Chalabi Z

4. Fréquences Correspondant aux Indices 1, 500 et 1000


Les fréquences correspondantes sont Fk=k/N pour k=1,500,1000
5. Symétrie Observée
La symétrie est due à la propriété de la TFD qui est symétrique hermitienne pour un signal réel.
6. Largeur du Lobe Principal
Script Matlab

figure;
plot(abs(Pf));
title('Largueur du Lobe Principal');
xlabel('Fréquence (k/N)');
ylabel('Amplitude');
[gx, ~] = ginput(2); % Utiliser la souris pour sélectionner les points
df = abs(gx(2) - gx(1)); % Largeur du lobe principal
Master : traitement numérique du signal janvier /2024 Chalabi Z

7. Module de la TF en Décibels
Script Matlab
figure;
plot(20 * log10(abs(Pf)/max(abs(Pf))));
title('TF en Décibels');
xlabel('Fréquence (k/N)');
ylabel('Amplitude (dB)');
axis([0, N, 0, 15]);
Master : traitement numérique du signal janvier /2024 Chalabi Z

II. TFD d'une Sinusoïde


1. Générer 100 Échantillons d'une Exponentielle
Script Matlab
Fe = 8000; % Fréquence d'échantillonnage
f0 = 1600; % Fréquence de la sinusoïde
n = 0:99; % 100 échantillons
x = exp(1j * 2 * pi * f0 * n / Fe);

% Affichage de la partie réelle


figure;
plot(real(x));
title('Partie Réelle de l''Exponentielle Complex');
xlabel('Échantillons');
ylabel('Amplitude');
Master : traitement numérique du signal janvier /2024 Chalabi Z

2. Calculer la TFD pour f0 = 1600 Hz


Script Matlab
P = 50;
X = fft(x(1:P), P);

figure;
plot(abs(X), '*');
title('Module de la TFD pour f0 = 1600 Hz');
xlabel('Fréquence (k/P)');
ylabel('Amplitude');
Master : traitement numérique du signal janvier /2024 Chalabi Z

3. Calculer la TFD pour f0 = 1680 Hz


Script Matlab

f0 = 1680;
x = exp(1j * 2 * pi * f0 * n / Fe);
X = fft(x(1:P), P);

figure;
plot(abs(X), '*');
title('Module de la TFD pour f0 = 1680 Hz');
xlabel('Fréquence (k/P)');
ylabel('Amplitude');
Master : traitement numérique du signal janvier /2024 Chalabi Z

5. Explication des Résultats


Pour f0 = 1600 Hz, toutes les valeurs de la TFD sont nulles sauf une car la fréquence du signal est un
multiple entier de la fréquence de base de la TFD. Pour f0 = 1680 Hz, on observe une répartition de
l'amplitude sur plusieurs fréquences, ce qui ressemble à un sinus cardinal en temps discret, surtout
visible lorsque N = 1000.

~ Bonne chance ~

Vous aimerez peut-être aussi