Vous êtes sur la page 1sur 4

Département Réseaux et Télécommunications

TP TR-C1 n°1

TP1 : Analyse de filtres numériques RIF

1. ANALYSE DE FILTRES NUMERIQUES SOUS MATLAB

1.1. REPRESENTATION D’UN FILTRE NUMERIQUE SOUS MATLAB


Un filtre numérique en général est représenté par sa fonction de transfert en z. Sous MATLAB, une fonction de
transfert en z est caractérisée par deux vecteurs contenant les coefficients des puissances décroissantes de z -1 , du
numérateur et du dénominateur de la fonction de transfert considérée.
Ex : La fonction de transfert en z suivante :
1 1 −1 0.5 + 0.5z −1
H( z ) = + z =
2 2 1 + 0 z −1
sera représentée sous Matlab par :
»num=[0.5 0.5];
»den=[1 0];

1.2. REPONSES TEMPORELLES ET FREQUENTIELLES


L’analyse d’un filtre peut être effectuée à partir de ses réponses temporelles et fréquentielles. Les divers modes de
représentation sont complémentaires et traduisent de manière différente les caractéristiques d’un filtre.

1.2.1 Réponse impulsionnelle


La réponse impulsionnelle est directement tracée à l’aide de la commande impz :
»impz(num,den)

1.2.2 Réponse à une entrée quelconque


On peut, grâce à la fonction filter, calculer la réponse temporelle d’un filtre numérique à une entrée quelconque. Ainsi,
dans les lignes ci-dessous, on veut tracer la réponse du filtre du 1er ordre à un signal sinusoïdal de pulsation 1000 rads/s sur
2 périodes :
» f0=1000/(2*pi);
» T0=1/f0;
» duree=2*T0;
» t=0:T0/100:duree;
» u=sin(2*pi*f0*t);
» y=filter(num,den,u); % y = sortie du filtre pour l'entrée u
» stem(t,u) % tracé de l’entrée et de la sortie en fonction du temps sur une
» hold on % même figure
» stem(t,y)
» hold off
La fonction stem permet le tracé d’une séquence de valeurs discrète.
On peut ainsi à l’aide de la fonction filter calculer la réponse d’un filtre numérique à une excitation quelconque. Cette
fonction est donc fondamentale lorsque l’on désire réaliser le filtrage numérique d’un signal sous Matlab.

1.2.3 Réponse fréquentielle

La réponse fréquentielle d’un filtre numérique notée H(f) est obtenue à partir de H(z) en posant z = e j2πfTe .

Cette réponse fréquentielle est à valeurs complexes. Elle peut donc s’écrire : H(f) = H(f) e jArg(H(f))

H. Garnier -3- TP 1
La réponse d’un filtre numérique est périodique de « période » fe=1/Te. On tracera cette réponse pour l’intervalle de
fréquence : 0 et fe/2.

Sous Matlab, le module H(f) et l’argument (la phase) φ(f) = Arg(H(f)) peuvent être facilement obtenus à l’aide de la
fonction freqz selon la commande suivante :
[H,f]=freqz(num,den,N,fe)
où N est le nombre de points de calcul de la réponse fréquentielle entre [0 ; fe/2] (N=512 par exemple). La commande
freqz(num,den,N,fe) permet de tracer directement le diagramme de Bode pour la zone utile du filtre (entre 0 et
fe/2).

1.3. TRACE DES REPONSES IMPULSIONNELLES ET FREQUENTIELLES


Réponse impulsionnelle
Créer un fichier texte repimpz.m (Menu File+ New M-File) contenant les lignes suivantes :
[y,t]=impz(num,den,N);
stem(t,y)
title('Réponse impulsionnelle')
Sauvegarder ce fichier (Menu File+ Save as) sous le nom repimpz.m sous votre répertoire. Dans la fenêtre command,
exécuter les lignes suivantes :
»N=10
»num=[0.5 0.5];
»den=[1 0];
»repimpz
Vérifier que le réponse impulsionnelle est finie.
Réponse fréquentielle en amplitude et phase et diagramme de Bode
Créer un fichier texte repfreqz.m (Menu File+ New M-File) contenant les lignes suivantes :
[H,f]=freqz(num,den,512,fe);
amp=abs(H);
phase=unwrap(angle(H));
% Tracé de la réponse fréquentielle en amplitude et phase
figure
subplot(2,1,1)
plot(f,amp),grid
title('Réponse fréquentielle en amplitude et phase pour [0;fe/2]'),
ylabel('Amplitude')
subplot(2,1,2)
plot(f,phase*180/(pi)),grid
ylabel('Phase en °'),
xlabel('fréquence (Hz)')
% Tracé du diagramme de Bode en amplitude et phase
figure
subplot(2,1,1)
plot(f,20*log10(amp)),grid
title('Diagramme de Bode en amplitude et phase pour [0;fe/2]'),
ylabel('Amplitude en dB')
subplot(2,1,2)
plot(f,phase*180/(2*pi)),grid
ylabel('Phase en °'),
xlabel('fréquence (Hz)')

Sauvegarder ce fichier (Menu File+ Save as) sous le nom repfreqz.m sous votre répertoire. Dans la fenêtre command,
exécuter les lignes suivantes :
»fe=1000;
»num=[0.5 0.5];
»den=[1 0];
»repfreqz
Vérifier que le filtrage réalisé est de type passe-bas de fréquence de coupure fe/4 et que la réponse fréquentielle en phase
est linéaire dans la bande passante du filtre.
H. Garnier -4- TP 1
2. ANALYSE DE FILTRES RIF

2.1. ETUDE THEORIQUE


Pour chacun des filtres suivants :
1 1
Filtre n°1 : s n = e n + e n −1
2 2
1 1
Filtre n°2 : s n = − e n + e n −1
2 2
1 1
Filtre n°3 : s n = − e n + e n−2
2 2
1 1
Filtre n°4 : s n = e n + e n−2
2 2
1 1
Filtre n°5 : s n = − e n + e n−4
2 2
1 1 1
Filtre n°6 : s n = e n + e n −1 + e n − 2
4 2 4
Déterminer :
a) le type de filtre (RIF, RII) et son ordre,
b) la fonction de transfert en z,
c) la réponse impulsionnelle,
d) la réponse fréquentielle, en précisant la (ou les) fréquence(s) de coupure et la zone utile. Il faudra par conséquent
calculer la (ou les) fréquence(s) de coupure.
e) le type du filtre (passe-bas, passe-haut, passe-bande, réjecteur,…).

Comparer les filtres passe-bas obtenus entre eux (calculer la ou les fréquence(s) de coupure, observer la raideur des filtres
sur la réponse fréquentielle, relier la raideur à l'ordre, ...).

2.2. ANALYSE EN SIMULATION SOUS MATLAB


Pour chacun des filtres étudiés dans la partie étude théorique, vérifier les réponses impulsionnelle et fréquentielle à l’aide
de vos fichiers créés plus haut : fichiers repimpz, repfreqz. Faire valider les résultats par l’enseignant.

3. IMPLANTATION D’UN FILTRE SOUS MATLAB

Soit un signal e(n) contenant 5 échantillons e=[0 1 1 0 1]. Nous allons filtrer ce signal par le filtre défini par
1 1
l’équation n°1 s n = e n + e n −1 . Calculer la sortie du filtre sur le papier. Utiliser la fonction filter de Matlab pour
2 2
réaliser ce filtrage et vérifier votre calcul.
Ecrire un programme filtre.m qui permet de réaliser le filtrage du signal e défini par le filtre n°1 (comme le réalise
la fonction Matlab filter). On pourra utiliser une boucle for … end. Comparer les résultats fournis par votre fonction
filtre et la fonction Matlab filter. Faire valider par l’enseignant.

4. FILTRAGE DE SONS SOUS MATLAB

4.1. ENREGISTREMENT DE VOTRE VOIX


Télécharger à partir de la page web du module le fichier Enregistre_trace_ta_voix.m.
Exécutez le fichier et enregistrez une phrase courte de 5 secondes.
La variable x contient la phrase échantillonnée à la fréquence d’échantillonnage fe. Pour écouter cette phrase,

H. Garnier -5- TP 1
utilisez la commande sound.
sound(x,fe);
On pourra également utiliser la fonction soundsc plutôt que la fonction sound qui ne fonctionne correctement que si
toutes les valeurs du signal sont comprises dans l’intervalle [-1 ;1].
soundsc(x,fe);
La fonction soundsc (‘sc’ pour scale, c'est-à-dire mise à l’échelle) multiplie et décale automatiquement les
échantillons du son pour que le minimum soit égal à -1 et le maximum à 1. Elle présente l’inconvénient de ne pas
rendre forcément un son débutant ou finissant par une valeur proche de 0, ce qui peut provoquer un « clic » en début ou
fin d’écoute du son. Pour éviter ce désagrément, on peut précéder la fonction sound(x,fe) de la commande suivante :
x=s/max(x) ;
sound(x,fe);

4.2. ANALYSE SPECTRALE DE VOTRE ENREGISTREMENT


La fonction Matlab fft permet de calculer très facilement la transformée de Fourier discrète. Sauvegardez dans un
fichier spectre.m les commandes ci-dessous qui permettent de tracer le spectre d’amplitude d’un signal enregistré à la
fréquence fe sur la bande de fréquences [0 ;fe/2] :
function spectre(y,fe) ;
N=length(y);
if mod(N,2)~=0
y=y(1:end-1);
N=length(y);
end
Yfft=fft(y);
m=(0:(N-1)/2);
f=(m)/N*fe; % tracé du spectre d'amplitude entre [0;fe/2]
plot(f,abs(Yfft(1:N/2)))
xlabel('fréquence (Hz)'),title('Spectre d''amplitude')
Visualisez et analysez le spectre d’amplitude du signal enregistré. Faire valider vos commentaires par l’enseignant.

4.3. FILTRAGE RIF DES AIGUS ET DES GRAVES


Le filtrage d’un morceau de musique correspond par exemple à l’opération que vous effectuez lorsque vous ajustez
le bouton des aigus ou des graves sur votre chaîne audio, ce qui a pour effet de modifier la proportion graves/aigus du
son.
Nous admettrons dans ce TP que les lignes suivantes réalisent un filtrage passe-bas de fréquence de coupure
fc=fn*fe/2 où fn est la fréquence de coupure normalisée comprise entre 0 et 1 (fn=fc/(fe/2)):

fc=2000;
fn=fc/(fn/2));
b1=fir1(100,fe,’low’);
x1=filter(b1,1,x);
soundsc(x1,fe);
spectre(x1,fe);

Faites varier fc varie entre 80 et fe/2. Tracez le spectre du signal filtré x1 et écoutez le résultat (le son doit être
devenir plus grave, le filtre ayant éliminé les aigus).
De même, nous admettrons que les lignes suivantes réalisent un filtrage passe-haut de fréquence de coupure
fc=fn*fe/2 où fn est la fréquence de coupure normalisée comprise entre 0 et 1 :
b2=fir1(100,fn,’high’);
x2=filter(b2,1,x);
soundsc(x2,fe);
spectre(x2,fe);
Faites également varier fc entre 500 et fe/2. Tracez le spectre du signal filtré x2 et écoutez le résultat (le son doit
être devenir plus aigu, le filtre ayant éliminé les graves). Faire valider par l’enseignant.
Enfin, effectuez un filtrage passe-bande de votre choix en consultant l’aide en ligne de la fonction fir1.
Pour en savoir plus, surfez par exemple sur http://www-gmm.insa-toulouse.fr/~guillaum/

H. Garnier -6- TP 1

Vous aimerez peut-être aussi