Vous êtes sur la page 1sur 5

Travaux Pratique

TR-C1 : Traitement du signal Avance


TP 3 : Filtrage
Objectifs :
Le but de ce TP est:
- De synthtiser un filtre numrique sous Matlab
- De filtrer une squence audio.
Manipulations sous SPTools : Utilitaire sous Matlab pour la gnration de filtre
I)

Synthse du filtre

Sous la fentre de commande matlab, taper sptool. Il sagit dune commande matlab qui
permet dexcuter un utilitaire spcialis dans le filtrage de signaux.
De la fentre de dialogue Sptool vous allez pouvoir importer et ou exporter des donnes
depuis/vers des fichiers ou la fentre de commande matlab. Il est possible de visualiser
immdiatement les effets du filtre, visualiser le gabarit et la rponse du filtre synthtis.
1. Dans la fentre SPTool, cliquez sur new design. Une fentre Filter Designer
souvre.
Saisissez le type de filtre, puis le gabarit (Fp, Rp, Fs, Rs, Sampling Frequency) et
cliquez sur apply.
o
o
o
o

Fp bande passante.
Fs bande coupe.
Rp attnuation maximale (en dB) dans la bande passante.
Rs attnuation minimale (en dB) dans la bande coupe.

On souhaite synthtiser un filtre dont le gabarit est le suivant :

100 Hz

1000 Hz

2 dB

20 dB

Nous choisirons dabord un filtre elliptic IIR avec une frquence dchantillonnage
de 8192 Hz.
Slectionnez les bons paramtres, et cliquez sur apply puis sur File/close. Le filtre
synthtis apparat sous le nom filt1, donnez lui un nom par Edit/Name.
2. Construisez un nouveau filtre de Butterworth de frquence de coupure 300 Hz et
dordre 4.
II)

Visualisation du filtre
3. Dans la fentre SPTool, choisissez un filtre puis cliquer sur View. Une fentre
Filter Viewer souvre.
4. Dans la fentre Filter Viewer, slectionnez les rponses que vous voulez observez.
A titre dexemple, nous choisirons la rponse impulsionnelle. Que pouvez vous
dire de la rponse du filtre.
5. Trouver les paramtres du filtre.

III)

Visualisation des signaux.


6. Synthtiser un signal sin et sincard sur une dure de 2 ms et de frquence 500 Hz
que vous sauvegarderez sous les noms sinus et sinus_card
7. Rcuprer lextrait Toons.wav et r-echantillonner le 8192 Hz partir du
logiciel GoldWave.
8. Dans la fentre SPTool, importez ces diffrents signaux sous File/Import.
Choisissez en un ou plusieurs, puis cliquez sur view. Vous devez retrouver
lenveloppe du signal. Vous pouvez aussi jouer la squence sonore

IV)

Filtrage
9. Avec Filter Designer gnrer maintenant un filtre passe bande correspondant la
ligne tlphonique (gain de -3 dB entre 300 Hz 3400 Hz et gain de -40 dB 250
Hz et 3450 Hz).
10. Indiquez le type de filtre utilis et son ordre.
2

Dans la fentre SPTool, slectionnez un signal et un filtre puis cliquez sur apply.
Avec le signal Browser, observer le signal avant et aprs filtrage.
Rduisez la bande du filtre (300 2000 Hz) et recommencez.
V)

Analyse spectrale

Dans la fentre SPTool, slectionnez un signal, puis dans la colonne Spectre, cliquez sur
Create. Dans la fentre Spectrum Viewer, choisissez une mthode danalyse spectrale
puis cliquer sur apply.

Manipulations sous Matlab


Le filtrage du vecteur x par le filtre numrique dfini par a et b est effectu par :
>> y = filter(b,a,x);
o b reprsente le polynme en Z au numrateur et a, le polynme en Z au dnominateur.
Soit le filtre suivant H(z)=(1+z-1)/( 1+z-1+z-2). Lorsquon crit le filtre de cette faon, nous
supposons avoir dj raliser la synthse du filtre.
1. Tracez la rponse frquentielle du filtre par la commande
>>H=freqz(b,a,f,fe)
f sera pris gal 1000 Hz, et fe 8192 Hz
2. Ouvrez un fichier en .wav sous GoldWave,
dchantillonnage 8192 Hz
3. Rcuprez le signal .wav sous Matlab et filtrer le.
4. Ecouter le signal, visualisez son spectre

modifiez

la

frquence

Nous allons maintenant dfinir le gabarit dun filtre et partir de ce dernier, sans en connatre
sa fonction de transfert, gnrer la Transforme en Z du filtre numrique. Il existe plusieurs
mthodes, non exactes sous Matlab, que nous dfinissons ci-aprs.
Synthse des filters RIF
IL existe diffrentes mthodes de synthse de fitres RIF, approchant un filtre idal, la
premire consiste tronquer la rponse impulsionnelle dun filtre :
h=fir1(n,fn,type,windows)
o n est lordre du filtre, les frquences fn sont normalises par rapport aux frquences de
Nyquist, (fn=f/(fe/2))), la chane de caractre prcise le type de filtre (haut, bas) et window le
fentrage utilis (pour la troncature).
H=firls(n,fn,m) est un filtre obtenue par la mthode des moindres carres.
Synthse des filters RII

La mthode utilise est obtenue par transposition des frquences (mthodes dquivalence).
A titre dexemple,
>> [bd,ad]=bilinear(b,a,fe)
Attention, noubliez pas que la transformation bilinaire provoque une deformation des
frquences.. Il est donc ncessaire de pr-dformer le gabarit du filtre analogique.
Sous Matlab, on peut aussi gnrer des filtres de type Butterworth, Tchebyscheff par les
commandes :
[n, fn] = buttord(fp,fs,Rp,Rs) ;
[n, fn] = cheb1ord(fp,fs,Rp,Rs) ;
[n, fn] = ellipord(fp,fs,Rp,Rs) ;
o n reprsente lordre du filtre.
fn frquence propre du filtre numrique. Pour un filtre passe-bas fp et fs sont les frquences
hautes de la bande passante et basse de la bande coupe.
Pour un filtre passe-bande, fp contient les frquences basse et haute de la bande passante et fs
les frquences haute et basse de la bande coupe. Attention, les frquences sont normalises
par rapport la frquence de Nyquist fe/2.
Application : Conception dun filtre FIR passe bas par la mthode des moindres carrs
% Gnration du signal
Fe = 8e3;
N = 512;
t = (0:N-1)/Fe;
x = square(2*pi*Fe*t/50);
% TFD sur [0, Fe]
X = fft(x);
f = (0:N-1)/N*Fe;
% Affichage
subplot(1,2,1); plot(t,x);
xlabel('temps t'), ylabel('x(t)');
subplot(1,2,2); plot(f(1:N/2),abs(X(1:N/2)));
xlabel('frquence f'), ylabel('X(f)');
% Synthese du filtre passe bas
% (RIF moindres carres)
% Bande passante [0, 200 Hz]
% Bande coupe [400Hz, 4000Hz]
% Rponse impulsionnelle
h = firls(39,[0 500 750 Fe/2]/Fe*2,[1 1 0 0]);
% Rponse en frquence
[H, freq] = freqz(h,1,512,Fe);
% Affichage

subplot(1,2,1); plot(h);
xlabel('chantillon'), ylabel('h[n]');
subplot(1,2,2); plot(freq,20*log10(abs(H)));
xlabel('frquence f'), ylabel('H(f)');

% Filtrage du signal
y = filter(h,1,x);
Y = fft(y);
% Affichage
subplot(1,2,1); plot(t,y);
xlabel('temps t'), ylabel('y(t)');
subplot(1,2,2); plot(f(1:N/2),abs(Y(1:N/2)));
xlabel('frquence f'), ylabel('Y(f)');
Rmq : La fonction firls synthtise un filtre RIF approchant au mieux, au sens des moindres
carres (norme L2), la rponse en frquence du filtre analogique idal.
Rcuprer une squence audio que vous sur-chantillonnerez en consquence (avec
GoldWave), appliquer un filtrage du signal et couter le rsultat pour diffrents types de
filtres.
Recommencez avec un filtre FII.en utilisant la mthode bilinaire.