Вы находитесь на странице: 1из 4

Dpartement Rseaux et Tlcommunications

TP TR-C1 n1

TP1 : Analyse de filtres numriques RIF

1. ANALYSE DE FILTRES NUMERIQUES SOUS MATLAB

1.1. REPRESENTATION DUN FILTRE NUMERIQUE SOUS MATLAB


Un filtre numrique en gnral est reprsent par sa fonction de transfert en z. Sous MATLAB, une fonction de
transfert en z est caractrise par deux vecteurs contenant les coefficients des puissances dcroissantes de z -1 , du
numrateur et du dnominateur de la fonction de transfert considre.
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 reprsente sous Matlab par :
num=[0.5 0.5];
den=[1 0];

1.2. REPONSES TEMPORELLES ET FREQUENTIELLES


Lanalyse dun filtre peut tre effectue partir de ses rponses temporelles et frquentielles. Les divers modes de
reprsentation sont complmentaires et traduisent de manire diffrente les caractristiques dun filtre.

1.2.1 Rponse impulsionnelle


La rponse impulsionnelle est directement trace laide de la commande impz :
impz(num,den)

1.2.2 Rponse une entre quelconque


On peut, grce la fonction filter, calculer la rponse temporelle dun filtre numrique une entre quelconque. Ainsi,
dans les lignes ci-dessous, on veut tracer la rponse du filtre du 1er ordre un signal sinusodal de pulsation 1000 rads/s sur
2 priodes :
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'entre u
stem(t,u) % trac de lentre et de la sortie en fonction du temps sur une
hold on % mme figure
stem(t,y)
hold off
La fonction stem permet le trac dune squence de valeurs discrte.
On peut ainsi laide de la fonction filter calculer la rponse dun filtre numrique une excitation quelconque. Cette
fonction est donc fondamentale lorsque lon dsire raliser le filtrage numrique dun signal sous Matlab.

1.2.3 Rponse frquentielle

La rponse frquentielle dun filtre numrique note H(f) est obtenue partir de H(z) en posant z = e j2fTe .

Cette rponse frquentielle est valeurs complexes. Elle peut donc scrire : H(f) = H(f) e jArg(H(f))

H. Garnier -3- TP 1
La rponse dun filtre numrique est priodique de priode fe=1/Te. On tracera cette rponse pour lintervalle de
frquence : 0 et fe/2.

Sous Matlab, le module H(f) et largument (la phase) (f) = Arg(H(f)) peuvent tre facilement obtenus laide 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 rponse frquentielle 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


Rponse impulsionnelle
Crer un fichier texte repimpz.m (Menu File+ New M-File) contenant les lignes suivantes :
[y,t]=impz(num,den,N);
stem(t,y)
title('Rponse impulsionnelle')
Sauvegarder ce fichier (Menu File+ Save as) sous le nom repimpz.m sous votre rpertoire. Dans la fentre command,
excuter les lignes suivantes :
N=10
num=[0.5 0.5];
den=[1 0];
repimpz
Vrifier que le rponse impulsionnelle est finie.
Rponse frquentielle en amplitude et phase et diagramme de Bode
Crer 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 rponse frquentielle en amplitude et phase
figure
subplot(2,1,1)
plot(f,amp),grid
title('Rponse frquentielle en amplitude et phase pour [0;fe/2]'),
ylabel('Amplitude')
subplot(2,1,2)
plot(f,phase*180/(pi)),grid
ylabel('Phase en '),
xlabel('frquence (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('frquence (Hz)')

Sauvegarder ce fichier (Menu File+ Save as) sous le nom repfreqz.m sous votre rpertoire. Dans la fentre command,
excuter les lignes suivantes :
fe=1000;
num=[0.5 0.5];
den=[1 0];
repfreqz
Vrifier que le filtrage ralis est de type passe-bas de frquence de coupure fe/4 et que la rponse frquentielle en phase
est linaire 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 n1 : s n = e n + e n 1
2 2
1 1
Filtre n2 : s n = e n + e n 1
2 2
1 1
Filtre n3 : s n = e n + e n2
2 2
1 1
Filtre n4 : s n = e n + e n2
2 2
1 1
Filtre n5 : s n = e n + e n4
2 2
1 1 1
Filtre n6 : s n = e n + e n 1 + e n 2
4 2 4
Dterminer :
a) le type de filtre (RIF, RII) et son ordre,
b) la fonction de transfert en z,
c) la rponse impulsionnelle,
d) la rponse frquentielle, en prcisant la (ou les) frquence(s) de coupure et la zone utile. Il faudra par consquent
calculer la (ou les) frquence(s) de coupure.
e) le type du filtre (passe-bas, passe-haut, passe-bande, rjecteur,).

Comparer les filtres passe-bas obtenus entre eux (calculer la ou les frquence(s) de coupure, observer la raideur des filtres
sur la rponse frquentielle, relier la raideur l'ordre, ...).

2.2. ANALYSE EN SIMULATION SOUS MATLAB


Pour chacun des filtres tudis dans la partie tude thorique, vrifier les rponses impulsionnelle et frquentielle laide
de vos fichiers crs plus haut : fichiers repimpz, repfreqz. Faire valider les rsultats par lenseignant.

3. IMPLANTATION DUN 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 dfini par
1 1
lquation n1 s n = e n + e n 1 . Calculer la sortie du filtre sur le papier. Utiliser la fonction filter de Matlab pour
2 2
raliser ce filtrage et vrifier votre calcul.
Ecrire un programme filtre.m qui permet de raliser le filtrage du signal e dfini par le filtre n1 (comme le ralise
la fonction Matlab filter). On pourra utiliser une boucle for end. Comparer les rsultats fournis par votre fonction
filtre et la fonction Matlab filter. Faire valider par lenseignant.

4. FILTRAGE DE SONS SOUS MATLAB

4.1. ENREGISTREMENT DE VOTRE VOIX


Tlcharger partir de la page web du module le fichier Enregistre_trace_ta_voix.m.
Excutez le fichier et enregistrez une phrase courte de 5 secondes.
La variable x contient la phrase chantillonne la frquence dchantillonnage fe. Pour couter cette phrase,

H. Garnier -5- TP 1
utilisez la commande sound.
sound(x,fe);
On pourra galement utiliser la fonction soundsc plutt que la fonction sound qui ne fonctionne correctement que si
toutes les valeurs du signal sont comprises dans lintervalle [-1 ;1].
soundsc(x,fe);
La fonction soundsc (sc pour scale, c'est--dire mise lchelle) multiplie et dcale automatiquement les
chantillons du son pour que le minimum soit gal -1 et le maximum 1. Elle prsente linconvnient de ne pas
rendre forcment un son dbutant ou finissant par une valeur proche de 0, ce qui peut provoquer un clic en dbut ou
fin dcoute du son. Pour viter ce dsagrment, on peut prcder 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 trs facilement la transforme de Fourier discrte. Sauvegardez dans un
fichier spectre.m les commandes ci-dessous qui permettent de tracer le spectre damplitude dun signal enregistr la
frquence fe sur la bande de frquences [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('frquence (Hz)'),title('Spectre d''amplitude')
Visualisez et analysez le spectre damplitude du signal enregistr. Faire valider vos commentaires par lenseignant.

4.3. FILTRAGE RIF DES AIGUS ET DES GRAVES


Le filtrage dun morceau de musique correspond par exemple lopration que vous effectuez lorsque vous ajustez
le bouton des aigus ou des graves sur votre chane audio, ce qui a pour effet de modifier la proportion graves/aigus du
son.
Nous admettrons dans ce TP que les lignes suivantes ralisent un filtrage passe-bas de frquence de coupure
fc=fn*fe/2 o fn est la frquence de coupure normalise 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 rsultat (le son doit tre
devenir plus grave, le filtre ayant limin les aigus).
De mme, nous admettrons que les lignes suivantes ralisent un filtrage passe-haut de frquence de coupure
fc=fn*fe/2 o fn est la frquence de coupure normalise 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 rsultat (le son doit
tre devenir plus aigu, le filtre ayant limin les graves). Faire valider par lenseignant.
Enfin, effectuez un filtrage passe-bande de votre choix en consultant laide 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

Вам также может понравиться