Filière Ingénieur : Génie Mécatronique &
Systèmes intelligents
Travaux pratiques sous
Matlab
Encadré par : M. Ben Alla
Réalisé par : Gnadi Hanane
Introduction
MATLAB (Matrix Laboratory) est un environnement de programmation
puissant largement utilisé pour le traitement du signal et les applications
connexes. Conçu pour le calcul scientifique et l'analyse des données, MATLAB
propose une riche collection d'outils et de fonctions spécialement dédiées à
l’analyse, la transformation et la manipulation des signaux numériques. Il est
devenu un choix privilégié pour les chercheurs, les ingénieurs et les
développeurs dans ce domaine.
Le traitement de signal dans MATLAB repose sur des fonctionnalités avancées,
telles que :
Acquisition et manipulation des signaux : Importer des signaux à partir
de diverses sources, les visualiser et les prétraiter pour une analyse
ultérieure.
Filtrage et suppression du bruit : Appliquer des filtres passe-bas, passe-
haut, ou adaptatifs pour améliorer la qualité des signaux.
Analyse fréquentielle : Effectuer des transformations comme la FFT
(Transformée de Fourier rapide) pour explorer le contenu spectral des
signaux.
Modulation et démodulation : Simuler et analyser des systèmes de
télécommunication pour le traitement de signaux modulés.
Analyse temporelle et transformation : Étudier les propriétés des
signaux dans le domaine temporel et appliquer des transformations
avancées comme la transformée de ondelettes.
Traitement de signal : TP 1 sous Matlab
Exercice 1 : Généralisations des signaux
1) Ecrire un programme
Matlab permettant de
générer:
1) a-l'impulsion de Dirac :
x=0:0.01:4*pi;
y=2*sin(x);
plot(x,y,'r','Linewidth',3);
grid on;
title('La fonction y=2*sin(x)');
xlabel('x');
ylabel('sin(x)');
legend('y=sin(x)');
axis([0 4*pi -2.5 2,5])
b-impulsion de Dirac retarder
t=-10:10;
dirac=t==-2; %decalage de 2
figure;
subplot(3,2,1);
stem(t,dirac,'Linewidth',3);
title('Dirac decalé');
2) Echelon unitaire
t=-10:0.01:10;
echelon=t>=0;
subplot(3,2,2);
plot(t,echelon,'Linewidth',3);
title('Echlon unitaire');
3) Fonction Expo(-0.2*t). u(t)
% la fonction expentielle
subplot(3,2,3);
t=-10:0.01:10;
expon=exp(-0.2*t).*echelon;
plot(t,expon,'Linewidth',3);
4 ) Impulsion rectangulaire de durée
T=0,08s et A=2V
% impulsion rectangulaire
t=-10:0.01:10;
T=0.08;
A=2;
impl_rec=A*(t>=-T/2 & t<=T/2);
subplot(3,2,4);
plot(t,impl_rec,'Linewidth',3);
axis([-0.5 0.5 0 2]);
title('impulsion rectangulaire')
5) Impulsion triangulaire de durée
T=0,04s et A=3V
%impulsion triangulaire
t=-10:0.01:10;
T=0.08;
A=2;
impl_rec=A*tripuls(t,T);
subplot(3,2,5);
plot(t,impl_rec,'Linewidth',3);
axis([-0.5 0.5 0 2])
6) Le signal de sinus :
%sin cardinal
t=-10:0.01:10;
sin_car=sinc(t);
subplot(3,2,6);
plot(t,sin_car,'Linewidth',3);
axis([-10 10 -1 1]);
Exercice 2 : Convolution et Corrélation
clear all;
close all;
clc;
t=linspace(-1,1,100);
y1=rectpuls(t,1);
y2=tripuls(t,0.5,-1);
subplot(2,2,1);
plot(t,y1,'color','blue','Linewidth',3);
axis([-1 1 -0.2 1.1]);
grid on;
xlabel('t');
ylabel('y1(t)');
title('signal rectangulaire')
subplot(2,2,2)
plot(t,y2,'color','blue','Linewidth',3);
axis([-1 1 -0.2 1.1]);
grid on;
xlabel('t');
ylabel('y2(t)');
title('signal triangulaire ');
%convolution
convolution=conv(y1,y2,'same');
correlation=xcorr(y1,y2);
subplot(2,2,3);
plot(t,convolution,'color','red','Linewidth',3);
grid on;
xlabel('Amplitude');
title('produit de convolution')
subplot(2,2,4);
plot(correlation,'color','red','Linewidth',3);
grid on;
xlabel('t')
ylabel('amplitude');
title('produit de correlation')
Exercice 3 :Synthèse d’un signal sinusoïdal
clear all; close all; clc;
% 1) representer le signal x(t)
t=linspace(0,200);
T0=100
f0=1/T0;
A=10;
x=A*sin(2*pi*f0*t);
subplot(3,1,1)
plot(t,x,'Linewidth',3);
%2)echantilloner x(t)
te=linspace(0,200,200);% 1hz
xe=A*sin(2*pi*f0*te);
subplot(3,1,2)
%plot(t,x,'.','Linewidth',3)
stem(te,xe,'Linewidth',3);
Fe=0.05;
te2=0:1/Fe:200;%1hz
xe=A*sin(2*pi*f0*te2);
subplot(3,1,3)
plot(te2,xe,'Linewidth',3)
Exercice 4 : Synthèse de Fourier
clc; close all; clear all;
t=linspace(-4,4,1000);
T0=2; %2S
A=2;%2VOLTS
x=rectpuls(t,T0);
subplot(2,1,1)
plot(t,x,'Linewidth',3)
% serie de fourier
subplot(2,1,2)
F0=2; %valeur moyenne
n=input('donner le nombre Harmonique:')
f0=1/T0; % FREQUENCE FONDAMENTALE
somme=0;
for i=1:n
f=(F0/2)+sinc(i/2)*cos(i*2*pi*f0*t);
somme=f+somme;
plot(t,somme,'Linewidth',3)
title(['Nombre Harmonique est :',num2str(i)]);
pause(1);
end
pour n=6 :
pour n =50 :
Travail à faire : Convolution/Intercorrélation/Autocorrélation
close all; clear all; clc;
t=-30:0.01:30;
A1=2 ;
y1=A1*rectpuls(t,20);
subplot(3,2,1)
plot(t,y1,'LineWidth',1,'color','blue’) ;
grid,
xlabel('temps') ;
ylabel('ampli') ;
title('y1') ;
A2=3;
y2=A2*rectpuls(t,40) ;
subplot(3,2,2)
plot(t,y2,'LineWidth',2,'color','green') ;
grid,
xlabel('temps');
ylabel('ampli') ;
title('y2') ;
%calcule de convolution
res_conv=conv(y1,y2);
res_corr=xcorr(y1,y2);
subplot(3,2,3:4)
plot(res_conv,'LineWidth',2,'color','red') ;
grid ;
xlabel('temps') ;
ylabel('ampli');
title('convolution ');
subplot(3,2,5:6)
plot(res_corr,'LineWidth',3,'color','black');
grid,xlabel('temps');
ylabel('ampli');
title('intercorrelation');
Traitement de signal : TP 2 sous Matlab
Exercice 1 : Transformee de Fourier
clc;close all ;clear all;
A=5; %amplitude
f0=10; %10hz
fe=1000; %frequence echantillonage
t=0:1/fe:1; %linspace(0,1,fe)
x=A*plot(2*pi*f0*t);
subplot(3,1,1)
plot(t,x,'Linewidth',3);
%transformé de fourier
f=linspace(-fe/2,fe/2,length(t));
TFx=fftshift(fft(x))/fe;
subplot(3,1,2);
stem(f,TFx,'Linewidth',3);
axis([-20 20 -1 6]);
%trans de fourier inverse
TFxinv=ifft(ifftshift(TFx))*fe;
subplot(3,1,3)
plot(t,TFxinv,'Linewidth',3);
Exercice 2 : Filtrage linéaire
clc; clear all; close all;
fe=1000 ; f0=10; te=1/fe; t=0:te:1;
x=cos(2*pi*f0*t);
subplot(3,1,1)
plot(t,x,'Linewidth',3)
title('signal original')
%ajouter un bruit gaussien
variance =0.3;
bruit=sqrt(variance).*randn(size(t));
x_bruit=x+bruit;
subplot(3,1,2)
plot(t,x_bruit,'Linewidt',3)
title('signal original+bruit')
%Filtage du signal bruité
ordre=6;
fn=fe/2;%freq de Nyquist
fc=30;
[b,a]=butter(ordre,fc/fn);
x_filtre=filter(b,a,x_bruit);
subplot(3,1,3)
plot(t,x_filtre,'Linewidth',3);
title('signal filtre');
figure;
fft_bruite=abs(fft(x_bruit));
f= linspace(0,fn,length(t)/2);
plot(f,fft_bruite(1:length(f)))
title('spectre de frequence duu signal bruité')
xlabel('frequence (hz)');
ylabel('Amplitude')
grid on;
Exercice 3 : Codage PCM
clc,clear all;close all
A=2;
f0=2;
fe=20*f0;
t=0:1/fe:1;
x=A*cos(2*pi*f0*t);
subplot(3,1,1)
plot(t,x,'Linewidth',3)
title('signal sinusoidal')
xlabel('tempps(s)');
ylabel('Amplitude');
subplot(3,1,2)
stem(t,x,'Linewidth',3)
title('signal sinusoidal')
xlabel('tempps(s)');
ylabel('Amplitude');
hold on;
plot(t,x,'-')
hold off;
%quantification
subplot(3,1,3)
n=3;
x=x+A;
xn=x/(2*A);
Level=-1+2^n;% nombre de niveaux
x=xn*Level;
xr=round(x);
%plot(t,xn,'Linewidth',3)
stem(t,x,'Linewidth',3)
hold on;
stem(t,xr,'Linewidth',3)
legend('signal quantifié','signal quantifié arroundi')
hold off;
%codage en binaire
y=[];% matrice vide
for i=1:length(xr)
d=de2bi(xr(i),3,'left-msb');
y=[y d];
end
figure(2)
stairs(y,'Linewidth',3);
axis([0 length(y) -1 2]);
%Reconstruction de signal (CNA)
figure(3)
s=bi2de(reshape(y,n,length(y)/n)','left-msb');
s=s/Level;
s=s*(2*A);
s=s-A;
plot(s);
hold on
x=A*cos(2*pi*f0*t);
plot(x);
Travail à faire : Transformée de Fourier
clear all; close all; clc;
A=5; f0=10; f1=20; f2=25; fe=1000;
t=0:1/fe:1; % definition de l'axe temporel
y=A*cos(2*pi*f0*t)+10*cos(2*pi*f1*t)+10*cos(2*pi*f2*t);
subplot(3,1,1)
plot(t,y,'LineWidth',3),xlabel('temps','FontSize',15,'color','green'),ylabel('Amplitude','FontSize',15) ;
title('signal origine')
%%TF du signal origine
% %definir l'axe frequentielle
f=linspace(-fe/2,fe/2,length(t));
Y=fftshift(fft(y/fe));
subplot(3,1,2)
stem(f,Y,'LineWidth',3)
axis([-25 25 -1 4])
% %%TF inverse
y_inv=ifft(ifftshift(Y)*fe);
subplot(3,1,3)
plot(t,y_inv,'LineWidth',3)
axis ([0 1 -20 30])
Travail à rendre : Réaliser le codage PCM en utilisant Simulink
Traitement de signal : TP 3 sous Matlab
Partie 1 : analyse de RIF
L'analyse des Réponses Impulsionnelles Finies (RIF) est une étape cruciale
dans le domaine du traitement du signal, particulièrement pour la conception
et l'étude des filtres numériques. Un filtre RIF est caractérisé par une réponse
impulsionnelle de durée finie, ce qui signifie que sa sortie devient nulle après
un certain nombre d’échantillons en réponse à une impulsion unitaire. Les
filtres RIF présentent plusieurs avantages, notamment leur stabilité
inconditionnelle, car ils ne contiennent que des pôles à l'origine.
1) Définir les vecteurs a et b comprenant les paramètres, respectivement,
récursive et non récursive du filtre.
y(n) = 1,19*y(n-1) - 0,5*y(n-2) + 0,08*x(n) + 0,16*x(n-1) + 0,08*x(n-2) En
appliquant la transformee en z, on trouve
Y(z) = 1,19*z^(-1)*Y(z) - 0,5*z^(-2)*Y(z) + 0,08*X(z) + 0,16*z^(-1)*X(z) +
0,08*z^(-2)*X(z) On sait bien
que H(z)=Y(z)/X(z), Donc H(z) =
(0,08 + 0,16*z^(-1) + 0,08*z^(-
2)) / (1 - 1,19*z^(-1) + 0,5*z^(-
2)) Les coefficients de la
fonction de transfert H(z)
peuvent être extraits pour
déterminer les vecteurs a et b :
a = [1, -1.19, 0.5]
b = [0.08, 0.16, 0.08]
close all; clear all; clc;
b=[0.08 0.16 0.08];
a=[1 -1.19 0.5];
zero=roots(b)
disp('les zeros sont');
disp(zero)
poles=roots(a);
disp('les poles sont');
disp(poles)
zplane(b,a);
figure (1)
FIGURE 1
%la reponse impulsionnelle
dirac--h(n)
figure (2)
N=32;%nombre de points longueur
n=0:N-1;
dirac=[1,zeros(1,(N-1))];
subplot(2,1,1)
stem(n,dirac,'LineWidth',3)
h=filter(b,a,dirac);
subplot(2,1,2)
stem(n,h,'LineWidth',3)
%la reponse indicielle echelon--
reponse ind
FIGURE 2
figure(3)
N=32;
rep_ind=ones([1,N]);
subplot(2,1,1)
stem(n,rep_ind,'LineWidth',3)
title('Echelon')
h_ind=filter(b,a,rep_ind);
subplot(2,1,2)
stem(n,h_ind,'LineWidth',3)
title('la reponse indicielle')
%la reponse frequentielle
longueur=256;
FIGURE 3
fe=1;
[H,f]=freqz(b,a,longueur,fe);%permet de
retourner le H et l'axe f
figure(4)
subplot(3,1,1)
plot(f,abs(H),'LineWidth',3)
title('le module de H(f)')
subplot(3,1,2)
plot(f,angle(H),'LineWidth',3)
title('la phase de H(f)')
%le retard de groupe
[retard,f]=grpdelay(b,a,longueur)
subplot(3,1,3)
plot(f,retard,'LineWidth',3)
title('le retard de groupe')
FIGURE 4
3-Étudier la stabilité du filtre :
Le filtre est stable car tous les pôles sont situés à l'intérieur du cercle unité dans
le plan z.
4- Rôle du filtre :
Le rôle du filtre dépend de sa conception. En général, ce filtre semble être un
filtre numérique RII (Réponse Impulsionnelle Infinie) avec des coefficients
spécifiques.c’est un filtre passe-bas.
5- Changer la valeur de b pour avoir un filtre passe-haut :
b= [0.08 -0.16 0.08]
6- Modifier les valeurs de a pour avoir une réponse impulsionnelle
divergente :
Pour avoir une réponse impulsionnelle divergente, il faut ajuster sur les
coefficients de manière à ce que les pôles soient situés à l'extérieur du cercle
unité. Cependant cela renderait le filtre instable.
Partie 2 :Analyse d'un filtre numérique RIF
Questions :
Considérons un filtre, dont les conditions initiales sont nulles, défini par
l'équation récurrente suivante :
y(n)=0.5 x(n)-0.5 x(n-1)
1) Déterminer h(n), les pôles et zéros et esquisser H(f). Vérifier ces réponses
par Matlab.
Pour un filtre défini par l’équation récurrente y(n) = 0.5*x(n) - 0.5*x(n-1), la
réponse impulsionnelle h(n) est simplement les coefficients du filtre
appliqués à une impulsion de dirac
h(n)=0.5 *ẟ(n)-0.5 *ẟ(n-1)
-Les pôles sont : 0
-Les zeros sont :1
-La réponse impulsionnelle H(f) est la transformée de Fourier de h(n)
On a TF(ẟ(n-1))=exp(-2*pi*j*f)
Ce qui implique :
H(f)= 0.5(1-exp(-2*pi*j*f))
% Définition des paramètres
n = 0:10; % Index temporel pour la réponse impulsionnelle
delta = [1, zeros(1, 10)]; % Impulsion de Dirac ?(n)
% Calcul de la réponse impulsionnelle h(n)
h = 0.5 * delta - 0.5 * [0, delta(1:end-1)]; % h(n) = 0.5*?(n) - 0.5*?(n-1)
% Affichage de la réponse impulsionnelle
figure;
stem(n, h, 'filled');
title('Réponse impulsionnelle h(n)');
xlabel('n');
ylabel('h(n)');
grid on;
% Calcul de la réponse en fréquence H(f)
f = linspace(-0.5, 0.5, 1000); % Fréquence normalisée (-0.5 à 0.5)
H = 0.5 * (1 - exp(-1j * 2 * pi * f)); % H(f) = 0.5 * (1 - exp(-2*pi*j*f))
% Affichage du module de la réponse en fréquence
figure;
plot(f, abs(H));
title('Réponse en fréquence |H(f)|');
xlabel('Fréquence normalisée f');
ylabel('|H(f)|');
grid on;
% Diagramme des pôles et zéros
figure;
zplane([0.5, -0.5], [1]); % Zéros : [0.5, -0.5], Pôles : [1]
title('Diagramme des pôles et des zéros');
grid on;
Pôle et Zéros
Réponse impulsionnelle h(n) :
Réponse fréquentielle :
2. Le filtre est stable car il n’a pas de pôles.
3. Programme qui affiche un signal compose de deux signaux
sinusoïdes de fréquence 0.1 et 0.4 puis observer le signal avant et
après filtrage :
close all; clear all; clc;
b = [0.08 0.16 0.08];
b = [0.08 -0.16 0.08]; %POUR ETRE PASSE HAUTE
a = [1 -1.19 1.5];% POUR ET RE PAS STABLE
% Définir une plage de valeurs pour t
t = 0:0.01:10;
% Calculer le signal
x = sin(2*pi*0.1*t) + sin(2*pi*0.4*t);
% Filtrer le signal
y = filter(b,a,x);
% Afficher le signal avant et après filtrage
figure;
subplot(2,1,1);
plot(t,x,'LineWidth',2,'Color','red');
title('Signal avant filtrage');
xlabel('Temps (s)');
ylabel('Amplitude');
subplot(2,1,2);
plot(t, y,'LineWidth',2,'Color','green');
title('Signal après filtrage');
xlabel('Temps (s)');
ylabel('Amplitude');