EIGSICA
Promotion 2027 Pr K.Benkirane
TP 2
TRAITEMENT DU SIGNAL
Les travaux pratiques proposés ici sont à réaliser sous le logiciel de simulation et de calcul
Matlab.
Le but de ce TP est de simuler la représentation fréquentielle des signaux, mettre en
évidence l’effet de la troncation (fenêtrage) dans le temps d’un signal sur son spectre. On
observera, après l’importance de la fréquence d’échantillonnage sur la représentation
spectrale.
La dernière partie concernera l’analyse de filtres analogiques et numériques à réponses
impulsionnelles finies et infinies à l’aide du logiciel Matlab.
Instructions :
Il est très important pour compréhension d'illustrer vos graphiques par :
les titres des graphes par : title(...)
les étiquettes des axes des graphes par : xlabel(...), ylabel(...) et pour la 3D zlabel(...)
les légendes: legend(...)
Un Commentaire de chaque ligne du programme en utilisant %
un paragraphe de texte explicitant et commentant chaque section de ce TP.
Vos noms doivent figurer sur chaque graphique
NB : Les comptes rendus doivent être rendus à la fin de la séance
*Représentation fréquentielle des signaux
*Echantillonnage
*Fenêtrage
*Filtrage analogique
*Filtrage numérique
NB : Il faut faire le calcul théorique avant d’effectuer ce TP.
1
I- Représentation fréquentielle des signaux
Programmes 1 : Transformée de Fourier du signal sinusoïdal
La transformée de fourier s’accomplit sous matlab en utilisant la commande : fft
Script 1
1) Calcul théorique à faire :
a) Calculer la transformée de Fourier du signal :
b) Tracer le spectre d’amplitude du signal : x(t)
2) Taper le script suivant, en exécutant et en commentant toutes les lignes
% spectre du sinus
Fs = 150; % Sampling frequency
t = 0:1/Fs:1; % Time vector of 1 second
f = 5; % Create a sine wave of 5 Hz.
x = 5*sin(2* pi*t*f);
nfft = 4096; % Length of FFT
% Take fft, padding with zeros so that length(X)
%is equal to nfft
X = fft(x,nfft);
%FFT is symmetric, throw away second half
X = (2/Fs)*X(1:nfft/2);
% Take the magnitude of fft of x
mx = abs(X);
% Frequency vector
f = (0:nfft/2-1)*Fs/nfft;
% Generate the plot, title and labels.
figure(1);
plot(t,x);
figure(2);
plot(f,mx);
Commenter le spectre obtenu
2
Script 2
3) Calcul théorique à faire :
a) Calculer la transformée de Fourier des signaux suivants :
b) Implémenter sous matlab, temporellement ces trois signaux sur une plage de 4 ms.
Chaque signal sera échantillonné en utilisant une fréquence d’échantillonnage
Hz, (période ou pas d’échantillonnage
On utilisera la commande subplot pour visualiser les 3 signaux en un seul graphe.
Vérifier la fréquence et l’amplitude de chaque signal
c) En utilisant la commande fft, implémenter le script donnant le spectre relatif à
chacun de ces trois signaux
On utilisera la commande subplot pour visualiser les 3 spectres en un seul graphe.
Commenter les spectres
Programme 2 : Spectre du signal rectangulaire périodique
On considère le signal y suivant :
avec F = 5 Hz
a) Calculer la transformée de Fourier réelle de y(t).
b) Ecrire, simuler un programme qui permet de donner le signal y ainsi que son spectre
On prendra une fréquence d’échantillonnage Fs de 30 Hz d'une durée de 1 seconde, et un
nombre de points de la fft de 8192.
Vérifier l’amplitude et la fréquence de y
Commenter le spectre de y.
Programme 3 : Spectres des signaux apériodiques : rectangulaire et triangulaire
On considère le signal z(t) suivant :
a) Calculer la transformée de Fourier de z. Tracer théoriquement le spectre de z(t).
b) Ecrire, simuler un programme qui permet de donner le spectre du signa zl
3
Commenter le spectre de z
On prendra une fréquence d’échantillonnage Fs de 5 Hz d'une durée entre – 5 et 5 secondes, et
un nombre de points de la fft de 8192.
Est-ce que le résultat vérifie la théorie?
Programme 4 : Spectre d’une Modulation d’amplitude AM
On considère le signal AM : s(t) où le signal porteur est p(t) et le message est m(t) :
Avec
a) Calculer la transformée de Fourier de m, p et s
b) Ecrire et simuler un programme qui permet de tracer les 3 signaux, et ce
temporellement et fréquentiellement.
Programme 5 : La commande fftshift
Exécuter le programme suivant :
fs = 100; % sampling frequency
t = 0:(1/fs):(10-1/fs); % time vector
S = cos(2*pi*15*t);
n = length(S);
X = fft(S);
f = (0:n-1)*(fs/n); %frequency range
power = abs(X).^2/n; %power
figure
plot(f,power)
Y = fftshift(X);
fshift = (-n/2:n/2-1)*(fs/n); % zero-centered frequency range
powershift = abs(Y).^2/n; % zero-centered power
figure
plot(fshift,powershift)
Comparer les deux figures
A quoi sert la fonction fftshift ?
4
Programme 6 : Echantillonnage Fs
L’échantillonnage consiste à prélever des échantillons du signal à temps continu s (t) par ses
valeurs s (nTe) à des instant multiples de Te, Te étant la période d’échantillonnage. La
condition de Shannon permet d’échantillonner un signal sans perte d’information aucune
perte d’information si la fréquence d’échantillonnage Fs (1/ Te) est au moins 2 fois
supérieure à la plus grande fréquence intervenant dans le spectre (répartition de la
puissance du signal en fonction des fréquences) du signal. Si cette condition n’est pas
respectée on observe un “repliement de spectre”
Condition de Shannon Fs ≥ 2.Fmax (signal)
A faire
On considère les signaux suivants :
S1 = cos(2*pi*45*t);
S2 =5*cos(2*pi*30*t);
Ecrire et simuler un programme qui permet de tracer les spectres de chaque signal, dans un
seul graphe, en utilisant la commande fft et fftshift, et ce pour les cas suivants :
a) Fs = 100
b) Fs = 200
c) Fs = 80
Mesurer les positions des raies, commenter.
Programme 7 : Echantillonnage pour des signaux audios
Générer 3 signaux sinusoïdaux d'amplitude 5, fréquence 1 000 Hz échantillonnés à la
fréquence Fs, avec une durée de 3 secondes
a) 20 000 Hz
b) 5 000 Hz
c) 1 500 Hz
Les représenter dans le même graphe. Les entendre successivement, avec la fonction
"sound".
sound(x,Fs) % Joue le son brut
soundsc(x,Fs) % Joue le son après renormalisation % (renormalise toutes les valeurs du
vecteur entre -1 et 1)
Commenter
5
Programme 8 : Résolution spectrale
Influence de la durée d'observation, fenêtre rectangulaire, résolution
Le fait de ne travailler qu'avec des signaux de durée limitée introduit une distorsion en sinc
dans les raies du signal à analyser. Cette "perte" d'information est d'autant plus grande que
la fenêtre d'observation est petite.
A faire
Simuler un signal sinusoïdal de fréquence 1 000 Hz, d'amplitude 1, échantillonné à 20 000
Hz. Dans une même figure, représenter :
a) ce signal sur une durée de 2 ms et en dessous sa FFT à 2048 points
b) le même signal mais sur une durée de 24 ms et en dessous sa FFT à 2048 points.
Interpréter les résultats, notamment la largeur des raies.
c) Modifier le script en ajoutant une composante à 1 200 Hz. Conséquences sur la
résolution (capacité à discerner des fréquences distinctes dans un même signal).
Programme 9 : Filtrage analogique
La fonction de transfert d’un filtre analogique s’écrit :
Expliquer les fonctions des commandes de matlab suivantes :
freqs
tf
bode
*Exécuter le script suivant :
%vecteur de fréquences
w=0:0.1:10;
%Fonction de transfert H(s)=2/(3s+4)
num=[2];
den=[3 4];
H=freqs(num,den,w)
plot(w,H)
Commenter
6
*Exécuter le script suivant :
%Fonction de transfert H(s)=2/(3s+4)
num=[2];
den=[3 4];
bode(num,den)
Commenter
A faire
Appliquer les commandes : freqs, bode et tf sur :
*Un filtre passe-haut
*Un filtre passe-bande
% Filtre de Butterworth
clear all;
clc;
N=6;
wc=0.7032;
[b a]=butter(N,wc/pi);
figure(1);
freqz(b,a)
axis([0 1 -30 0]);
%Filtre de Chebyshev
Clear all;clc ;
N=6;
wc=0.6498;
[b2,a2] = cheby1(4,0.50885,wc/pi);
figure(3);
freqz(b2,a2);
axis([0 1 -30 0])
7
Exécuter
f0=1;
A=1;
n=25;
dt=1/(50*n*f0);
t=(0:dt:8/f0);
A0=A/2;
e=A0;
B=0.16;
bruit=B*randn(size(t));
for i=1:n
an=A*sinc(i/2);
% Fréquence du fondamental
% Amplitude du signal
% Nombre d'harmonique pour la synthèse du créneau
% Incrément temporel
% Création du temps sur 8 périodes du signal par incrément de dt
% Valeur moyenne du signal
xn=an*cos(2*pi*f0*i*t);
e=xn+e;
end
e=e+bruit
figure(1)
subplot(2,1,1)
plot(t,e)
xlabel('temps')
ylabel('e(t)')
title('signal d entrée du filtre')
fn=1/(2*dt)
% Moitié de la fréquence d'échantillonnage=Freq de Nyquist
fc=input('entrer la fréquence de coupure du filtre');
% Fréquence de coupure du filtre
ordre=input('entrer l ordre du filtre'); % Ordre du filtre
[CB,CA]=butter(ordre,fc/fn);
% Détermination des coef du filtre numérique
% correspondant au Passe Bas d'ordre n de
% fréquence de coupure fc
[H,f]=freqz(CB,CA,15000,1/dt);
figure(2)
semilogx(f,20*log10(abs(H)))
axis([0.1 10*fc -120 0])
grid
title('gabarit du filtre de Butterworth')
xlabel('fréquence')
ylabel('Gain en dB')
ef=filter(CB,CA,e);
figure(1)
8
subplot(2,1,2)
plot(t,ef)
title('signal filtré')
xlabel('temps')
ylabel('signal filtré')
Commenter
Programme 10 : Transformée en z
Rappel de la transformée en z
La transformée en z est l’équivalent dans le domaine discret de la transformée de Laplace
dans le domaine continu.
La transformée en z s’applique sur les suites numériques ; C’est un outil pour traiter les
signaux et systèmes numériques.
Soit une suite de nombres appelée séquence et notée x(n) ou xn
La transformée en z de cette séquence est donnée par la relation :
Cette suite de nombre peut être issue de l’échantillonnage d’un signal analogique x(t) :
L’opérateur z −n représente un délai de n échantillons.
Exemple 1
Calculer les transformées en z des signaux suivants, en précisant leur domaine de
convergence :
Domaine de convergence est l’ensemble complexe
Exemple 2
9
C’est une suite numérique de raison
Exemple 3
Calculer la transformée en z du signal suivant :
Le signal est une suite infinie de chiffres non-nuls :
x[n] = {1 ; 0.5 ; 0.5 2 ; 0.5 3 ; . . . ; 0.5 n ; . . .}
La transformée en z est :
X(z) = 1 + 0.5z −1 + 0.5 2 z −2 + 0.5 3 z −3 + . . . + 0.5 n z –n
Script 1
Calculer la TZ des systèmes suivants utilisant les instructions Matlab « syms » et « ztrans ».
syms z n;
ztrans(n),
ans =
z/(z - 1)^2
-------------
Script 2
syms n
f = sin(n);
ztrans(f)
ans =
10
(z*sin(1))/(z^2 - 2*cos(1)*z + 1)
-----------------------
Script 3
syms n z
ztrans(heaviside(n-3),n,z)
ans =
(1/(z - 1) + 1/2)/z^3
Script 4
Calculer la TZI des systèmes suivants utilisant les instructions Matlab « syms » et « iztrans
».
%TZI:
syms z n;
iztrans(2*z/(2*z-1)),
Programme 11 : Filtrage numérique
Filtre numérique
Un filtre numérique F est un algorithme de calcul par lequel une séquence de
nombres {x(n)}, dite séquence d’entrée, est transformée en une autre séquence de nombre
{y(n)}, dite séquence de sortie.
Les x(n) sont les valeurs discrétisées tous les nTe d’un signal analogique x(t).
Le filtrage numérique se pratique sur un système numérique tel qu’un ordinateur (utilisation
de logiciels, programmation C/C++.), un Processeur de Traitement de Signal (DSP) ou autre
composant numérique (microcontrôleur, FPGA, etc…
Formule générale
La fonction générale de filtrage numérique (quelque soit sa structure), c’est à dire de
calcul de l’échantillon yk de sortie, répond à l’équation générale dite « de différence » :
11
Si : un coefficient bj ou plusieurs sont non nuls, FILTRE RECURSIF
Si : les coefficients bj sont tous nuls, FILTRE NON RECURSIF
Les filtres non récursifs sont dits à réponse impulsionnelle finie ou filtre R.I.F. Ces
filtres sont toujours stables.
Fonction de transfert en z d’un filtre numérique :
Y(z) et X(z) représentent respectivement les transformée en z de y(n) et x(n)
H(z) sera représentée sous Matlab par :
𝑁𝑚 = [𝑏0 𝑏1 𝑏2 ⋯ 𝑏N-1] ; 𝐷𝑛 = [1 𝑎1 𝑎2 ⋯ 𝑎M-1]
12
Exemple :
Un filtre RIF de fonction de transfert en z H(z) donnée par :
sera représentée sous Matlab par :
𝑁𝑚 = [𝑏0 𝑏1 𝑏2 ⋯ 𝑏N-1] ; 𝐷𝑛 = [1 0 0 ⋯ 0]
La commande impz permet de calculer la réponse impulsionnelle h du filtre :
[ℎ, 𝑛] = 𝑖𝑚𝑝𝑧(𝑁𝑚 , 𝐷𝑛)
La commande filter permet de calculer la réponse temporelle yn du filtre à une entrée
quelconque xn :
𝑦𝑛 = 𝑓𝑖𝑙𝑡𝑒𝑟(𝑁𝑚 ,𝐷𝑛, 𝑥𝑛)
La commande freqz permet de calculer la réponse fréquentielle H du filtre, représenter sa
fonction de transfert et sa phase :
[𝐻, 𝑓] = 𝑓𝑟𝑒𝑞𝑧(𝑁𝑚 , 𝐷𝑛, 𝑁, 𝐹s)
Où 𝐹s est la fréquence d’échantillonnage et N est le nombre de points de calcul de la
réponse fréquentielle entre [0, 𝐹s /2 ].
La réponse fréquentielle d’un filtre numérique notée 𝐻(𝑗𝜔) est obtenue à partir de 𝐻(𝑍) en
posant : 𝑧 = 𝑒 𝑗𝜔 = ej2.pi.f
Script 1
Un système FIR est donné par : coefficients numérateur : b = [0,2 0,3 0,2], et coefficients
dénominateur : a=1.
Déterminer sa fonction de transfert H(z).
Déterminer son équation aux différences y(n).
Déterminer la réponse en fréquentielle du filtre.
Exécuter
Num=[0.2 0.3 0.2];
Den=1;
impz(Num,Den,6)
13
Script 2
Exécuter
fe=8000 ; N=512;
freqz([0.2, 0.3 ,0.2], 1, N , fe)
Commenter les résultats obtenus : type de filtre, réponse fréquentielle (passe bas, passe
haut, …), phase du filtre, …
Filtres à Réponse Impulsionnelle Infinie (RII ou IIR)
Exécuter :
N=512;
fe=8000;
b = [0.5 0.5];
a = [1 -0.25];
figure
impz(b,a,10)
figure
freqz(b,a,N,fe)
A faire
Script 3
La fonction de transfert H(z) d’un filtre IIR est donné ci-dessous :
H(z) =
Coefficients numérateur :
b = [0.5 0.5];
Coefficients du dénominateur :
a = [ ?];
Tracer la réponse impulsionnelle, et la réponse fréquentielle de ce filtre.
Script 4
On considère la fonction de transfert en z suivante :
H(z)=(1+z-1)/( 1+z-1+z-2).
Calculer son équation de différence
Tracer sa réponse impulsionnelle, ainsi que sa réponse fréquentielle
14
Commenter
Programme 11 : Filtrage numérique 2
Script 1
On désire filtrer la somme des deux signaux suivants : s1 et s2
S1 = cos(2*pi*45*t);
S2 =5*cos(2*pi*30*t);
1) Pour cela, générer la somme de s1 avec s2 pendant 1 seconde en utilisant une
fréquence d’échantillonnage de 8 KHz :
2) Ecrire le programme MATLAB à l’aide de la fonction MATLAB filter() pour les deux
systèmes FIR et IIR utilisés lors du script précédent.
3) Effectuer un filtrage numérique à l’aide de chacun des programmes développés et
tracer le spectre du signal d’entrée et le spectre du signal de sortie en utilisant la
résolution de fréquence de 1 Hz.
4) Écouter et comparer le signal d’entrée et le signal de sortie de chaque filtre,
respectivement.
5) Discuter les résultats obtenus.
6) Quelle(s composante(s) fréquentielle(s) (emplacement(s) de(s) fréquence(s) du ou
des pics spectraux) est/sont indiquées dans le spectre de sortie ?
Script 2
Système IIR 1 :
Coefficients du numérateur :
bBP = [0.0201 0.0000 -0.0402 0.0000 0.0201 ];
Coefficients du dénominateur :
aBP = [1.0000 -2.1192 2.6952 -1.6924 0.6414 ];
Système IIR 2 :
Coefficients du numérateur :
bHP =[ 0.0938 -0.3753 0.5630 -0.3753 0.0938 ]
Coefficients du dénominateur :
aHP =[ 1.0000 0.0784 0.8267 0.2597 0.1960 ]
15
a) Déterminer la fonction de transfert à l’aide de la transformation z pour le premier système
IIR.
b) Tracer la réponse en fréquences à l’aide de la fonction MATLAB freqz() pour chacune des
fonctions de transfert en Z.
fe = 8000; N=512; freqz(bBP,aBP,N,fe); axis([0 4000 -40 1]);
Commenter
Fonctions utiles
Voici la liste des fonctions Matlab les plus courantes pour le traitement fréquentiel
des signaux :
Notes fft :
1. fft(X,N) est la transformée de Fourier discrète sur N points du vecteur X, complété
avec des zéros si X a moins de N points et tronqué si X a plus de N points.
2. La commande Xf=fft(X,N) codant les fréquences négatives entre N/2+1 et N
valeurs du signal Xf, la commande fftshift(Xf) permet de centrer le spectre sur les
fréquences nulles (entre –1/(2 Te) et 1/(2 Te).
3. Pour approximer la Transformée de Fourier continue X(f) d’un signal x(t),
représenté suivant un pas Te, on utilise la commande : Xf= fftshift(Te * fft(x)) ;
4. La transformée de Fourier Inverse s’obtient par la commande xt=abs(ifft(Xf)/Te).
Notez qu’il est nécessaire de considérer le module de la TF inverse , car la TF et la TF
inverse sont des opérateurs à valeurs complexes.
fftshift : changement de référentiel : place la composante continue au centre de
l’image (pratique pour l’affichage).
16
17
SYSTEME LINEAIRE CONTINU/ SYSTEME LINEAIRE DISCRET
Un système peut être vu comme une boite noire qui transforme un certain nombre de signaux
d’entrée en un certain nombre de signaux de sortie.
- But : modéliser un processus.
- Domaines d’application : biologie, chimie, électricité, mécanique, finance, . . .
Un signal continu en entrée donne un signal continu en sortie
Un système continu linéaire invariant dans le temps(SLIT) est caractérisé par :
Un signal discret en entrée donne un signal discret en sortie.
Un système discret linéaire invariant (SLID) est caractérisé par :
18