Vous êtes sur la page 1sur 19

Universitatea POLITEHNICA Bucureşti

FILS - Facultatea de Inginerie în Limbi Străine - Filiera Francofonă

TRAITEMENT NUMÉRIQUE DU SIGNAL


FILTRE PASSE-HAUT
- Projet MATLAB -

Étudiant: Bărbuţă Mihail-Gabriel [1231F]


Coordonateur: prof. Micea R ăducanu
Juin 2010

TNS-FIR-FPH -1/19- Bărbuţă Mihail-Gabriel


1. Énonce du projet

Projeter un filtre numérique RIF (Réponse Impulsionnelle Finie) a longueur N=123, de type
FPH (Filtre Passe-Haut) par la méthode de fenêtres avec la fréquence de coupure de 0.25
(domaine de 0 a 0.5). On utilisera les méthodes suivantes:
• fenêtre rectangulaire
• fenêtre triangulaires (Barttllet)
• fenêtre Hamming
• fenêtre Hanning
• fenêtre Blackmann
• fenêtres Kaiser (paramétré β = 1:10)

La bande de passage du filtre est de (0,-3dB), la bande de transition est (-3dB,-40dB) et la


bande de coupure est (-40dB,-inf). La fréquence de bande de passage doit être proche de
0.25

Si -40dB est plus bas que les lobes, on prend une ligne imaginaire du maximum du lobe
secondaire et on fait l'intersection avec le lobe principale trouvant la fréquence de coupure. Si
c'est le cas, on prends l'amplitude (dB) de cette valeur et on l'include dans un tableau contient
aussi la fréquence de coupure pour chaque type de filtre.

Pour cet projet on va utiliser le logiciel Mathworks MATLAB 7.

TNS-FIR-FPH -2/19- Bărbuţă Mihail-Gabriel


2. Filtres a Réponse Impulsionnelle Finie (FIR)

Le filtre à réponse impulsionnelle finie ou filtre RIF est un filtre numérique qui est
caractérisé par une réponse uniquement basée sur les valeurs du signal d'entrée. Par
conséquent, quel que soit le filtre, sa réponse impulsionnelle sera stable et de durée finie
dépendante du nombre de coefficients du filtre. Il peut aussi être nommé filtre non récursif ou
encore filtre à moyenne mobile. Cette dernière appellation prend son sens du fait que le filtre
à réponse impulsionnelle finie n'est qu'une moyenne pondérée des termes du signal d'entrée.

Ce filtre est l'un des deux types de filtre numérique linéaire. L'autre type possible est le filtre
à réponse impulsionnelle infinie (filtre RII). Contrairement au filtre RIF le filtre RII peut avoir
une réponse impulsionnelle de durée infinie et sa réponse dépend à la fois des valeurs de
l'entrée et des valeurs passées de la réponse.

Un filtre digital est un système discret, utilisé dans le but de modifier le spectre d’amplitude
et/ou de phase d’un signal. La réponse dans le domaine du temps d’un SDLIT est donnée par
le produit de convolution entre le signal d’entrée x[n] et la réponse impulsionnelle du système,
notée avec h[n], nommée fonction de poids:

y[n] = x[n] ∗ h[n] = ∑
k= − ∞
h[k ] ⋅ x[n − k ]

L’application de la transformée en Z sur les deux membres de la relation ci-dessus permet


d’établir la liaison entre les transformées en Z des signaux d'entrée et de sortie:
Y(z)=H(z)X(z)

ou H(z) représente la fonction de transfert du SDLIT. La possibilité de réalisation physique du


SDLIT nécessite qu’il soit stable et causal, ce qui implique:

h[n] = 0 pour n < 0 ; ∑
n= 0
h[n] < ∞

Le système est décrit dans le domaine temps par l’équation à différences finies:
M N
y[n] = ∑
i= 0
bi x[n − i ] − ∑
i= 1
ai y[n − i ]

Pour SDLIT (les filtres) avec la fonction de transfert rationnelle, le filtrage (l’évaluation de
chaque échantillon du réponse) peut être effectué par un nombre fini d’opérations
arithmétiques – condition nécessaire pour qu’il soit réalisable physiquement. On ne peut pas
utiliser le produit de convolution, avec la limite inférieure particularisée à 0, comme base pour
l’implémentation soft ou hard de l’opération de filtrage réalisée par un SDLIT causal et stable,
si la réponse est du durée infinie.
Les filtres à réponse impulsionnelle finie (RIF) ont la fonction de poids h[n] non nulle pour
n∈{0,1,…,N-1}. On dit que N représente la longueur impulsionnelle de la réponse. Pour ces
filtres, l’implémentation de l’opération de filtrage a comme base le produit de convolution
convenablement particularisé:
N−1
y[n] = x[n] ∗ h[n] = ∑
k= 0
h[ k ] ⋅ x[n − k ]

TNS-FIR-FPH -3/19- Bărbuţă Mihail-Gabriel


3. Projet MATLAB - Liste des commandes

1 clear all
2 close all
3 %================= Parametres de travail ================
4 N=123;
5 h=ones(1,N-1);
6 hn=h/sum(h);
7 fs=2*0.25;
8 resolution=2048;
9 f=linspace(-0.5,0.5,resolution);
10 type='high';
11
12 %================ Definition des fenetres ===============
13 wd=boxcar(N);
14 whm=hamming(N);
15 whn=hanning(N);
16 wba=bartlett(N);
17 wbl=blackman(N);
18 wk1=kaiser(N, 1);
19 wk2=kaiser(N, 2);
20 wk3=kaiser(N, 3);
21 wk4=kaiser(N, 4);
22 wk5=kaiser(N, 5);
23 wk6=kaiser(N, 6);
24 wk7=kaiser(N, 7);
25 wk8=kaiser(N, 8);
26 wk9=kaiser(N, 9);
27 wk10=kaiser(N, 10);
28
29 %============== Normalisation des fenetres ==============
30 wd_norm=wd/sum(wd);
31 whm_norm=whm/sum(whm);
32 whn_norm=whn/sum(whn);
33 wba_norm=wba/sum(wba);
34 wbl_norm=wbl/sum(wbl);
35 wk1_norm=wk1/sum(wk1);
36 wk2_norm=wk2/sum(wk2);
37 wk3_norm=wk3/sum(wk3);
38 wk4_norm=wk4/sum(wk4);
39 wk5_norm=wk5/sum(wk5);
40 wk6_norm=wk6/sum(wk6);
41 wk7_norm=wk7/sum(wk7);
42 wk8_norm=wk8/sum(wk8);
43 wk9_norm=wk9/sum(wk9);
44 wk10_norm=wk10/sum(wk10);
45
46 %================== Application Filtres =================
47 fD=fir1(N-1,fs,type,wd_norm);
48 fHM=fir1(N-1,fs,type,whm_norm);
49 fHN=fir1(N-1,fs,type,whn_norm);
50 fBA=fir1(N-1,fs,type,wba_norm);

TNS-FIR-FPH -4/19- Bărbuţă Mihail-Gabriel


51 fBL=fir1(N-1,fs,type,wbl_norm);
52 fK1=fir1(N-1,fs,type,wk1_norm);
53 fK2=fir1(N-1,fs,type,wk2_norm);
54 fK3=fir1(N-1,fs,type,wk3_norm);
55 fK4=fir1(N-1,fs,type,wk4_norm);
56 fK5=fir1(N-1,fs,type,wk5_norm);
57 fK6=fir1(N-1,fs,type,wk6_norm);
58 fK7=fir1(N-1,fs,type,wk7_norm);
59 fK8=fir1(N-1,fs,type,wk8_norm);
60 fK9=fir1(N-1,fs,type,wk9_norm);
61 fK10=fir1(N-1,fs,type,wk10_norm);
62
63 %================== Application Fourier =================
64 fftD=fftshift(abs(fft(fD,resolution)));
65 fftHM=fftshift(abs(fft(fHM,resolution)));
66 fftHN=fftshift(abs(fft(fHN,resolution)));
67 fftBA=fftshift(abs(fft(fBA,resolution)));
68 fftBL=fftshift(abs(fft(fBL,resolution)));
69 fftK1=fftshift(abs(fft(fK1,resolution)));
70 fftK2=fftshift(abs(fft(fK2,resolution)));
71 fftK3=fftshift(abs(fft(fK3,resolution)));
72 fftK4=fftshift(abs(fft(fK4,resolution)));
73 fftK5=fftshift(abs(fft(fK5,resolution)));
74 fftK6=fftshift(abs(fft(fK6,resolution)));
75 fftK7=fftshift(abs(fft(fK7,resolution)));
76 fftK8=fftshift(abs(fft(fK8,resolution)));
77 fftK9=fftshift(abs(fft(fK9,resolution)));
78 fftK10=fftshift(abs(fft(fK10,resolution)));
79 riD=fftshift(abs(fft(wd_norm,resolution)));
80 riHM=fftshift(abs(fft(whm_norm,resolution)));
81 riHN=fftshift(abs(fft(whn_norm,resolution)));
82 riBA=fftshift(abs(fft(wba_norm,resolution)));
83 riBL=fftshift(abs(fft(wbl_norm,resolution)));
84 riK1=fftshift(abs(fft(wk1_norm,resolution)));
85 riK2=fftshift(abs(fft(wk2_norm,resolution)));
86 riK3=fftshift(abs(fft(wk3_norm,resolution)));
87 riK4=fftshift(abs(fft(wk4_norm,resolution)));
88 riK5=fftshift(abs(fft(wk5_norm,resolution)));
89 riK6=fftshift(abs(fft(wk6_norm,resolution)));
90 riK7=fftshift(abs(fft(wk7_norm,resolution)));
91 riK8=fftshift(abs(fft(wk8_norm,resolution)));
92 riK9=fftshift(abs(fft(wk9_norm,resolution)));
93 riK10=fftshift(abs(fft(wk10_norm,resolution)));
94
95 %========================= Plot1 =========================
96 plot(f,20*log10(fftD), 'c', f,20*log10(riD), 'y'), grid, title('FPH
Rectangulaire'), xlabel('frequence normee'), ylabel('amplitude (dB)'),
whitebg('k'), legend('Bande du filtre', 'Reponse impulsionelle');
97 plot(f,20*log10(fftHM), 'c', f,20*log10(riHM), 'y'), grid, title('FPH
Hamming'), xlabel('frequence normee'), ylabel('amplitude (dB)'),
whitebg('k'), legend('Bande du filtre', 'Reponse impulsionelle');
98 plot(f,20*log10(fftHN), 'c', f,20*log10(riHN), 'y'), grid, title('FPH
Hanning'), xlabel('frequence normee'), ylabel('amplitude (dB)'),
whitebg('k'), legend('Bande du filtre', 'Reponse impulsionelle');
99 plot(f,20*log10(fftBA), 'c', f,20*log10(riBA), 'y'), grid, title('FPH
Bartlett'), xlabel('frequence normee'), ylabel('amplitude (dB)'),
whitebg('k'), legend('Bande du filtre', 'Reponse impulsionelle');

TNS-FIR-FPH -5/19- Bărbuţă Mihail-Gabriel


100 plot(f,20*log10(fftBL), 'c', f,20*log10(riBL), 'y'), grid, title('FPH
Blackmann'), xlabel('frequence normee'), ylabel('amplitude (dB)'),
whitebg('k'), legend('Bande du filtre', 'Reponse impulsionelle');
101 plot(f,20*log10(fftK1), 'c', f,20*log10(riK1), 'y'), grid, title('FPH Kaiser
1'), xlabel('frequence normee'), ylabel('amplitude (dB)'), whitebg('k'),
legend('Bande du filtre', 'Reponse impulsionelle');
102 plot(f,20*log10(fftK2), 'c', f,20*log10(riK2), 'y'), grid, title('FPH Kaiser
2'), xlabel('frequence normee'), ylabel('amplitude (dB)'), whitebg('k'),
legend('Bande du filtre', 'Reponse impulsionelle');
103 plot(f,20*log10(fftK3), 'c', f,20*log10(riK3), 'y'), grid, title('FPH Kaiser
3'), xlabel('frequence normee'), ylabel('amplitude (dB)'), whitebg('k'),
legend('Bande du filtre', 'Reponse impulsionelle');
104 plot(f,20*log10(fftK4), 'c', f,20*log10(riK4), 'y'), grid, title('FPH Kaiser
4'), xlabel('frequence normee'), ylabel('amplitude (dB)'), whitebg('k'),
legend('Bande du filtre', 'Reponse impulsionelle');
105 plot(f,20*log10(fftK5), 'c', f,20*log10(riK5), 'y'), grid, title('FPH Kaiser
5'), xlabel('frequence normee'), ylabel('amplitude (dB)'), whitebg('k'),
legend('Bande du filtre', 'Reponse impulsionelle');
106 plot(f,20*log10(fftK6), 'c', f,20*log10(riK6), 'y'), grid, title('FPH Kaiser
6'), xlabel('frequence normee'), ylabel('amplitude (dB)'), whitebg('k'),
legend('Bande du filtre', 'Reponse impulsionelle');
107 plot(f,20*log10(fftK7), 'c', f,20*log10(riK7), 'y'), grid, title('FPH Kaiser
7'), xlabel('frequence normee'), ylabel('amplitude (dB)'), whitebg('k'),
legend('Bande du filtre', 'Reponse impulsionelle');
108 plot(f,20*log10(fftK8), 'c', f,20*log10(riK8), 'y'), grid, title('FPH Kaiser
8'), xlabel('frequence normee'), ylabel('amplitude (dB)'), whitebg('k'),
legend('Bande du filtre', 'Reponse impulsionelle');
109 plot(f,20*log10(fftK9), 'c', f,20*log10(riK9), 'y'), grid, title('FPH Kaiser
9'), xlabel('frequence normee'), ylabel('amplitude (dB)'), whitebg('k'),
legend('Bande du filtre', 'Reponse impulsionelle');
110 plot(f,20*log10(fftK10), 'c', f,20*log10(riK10), 'y'), grid, title('FPH
Kaiser 10'), xlabel('frequence normee'), ylabel('amplitude (dB)'),
whitebg('k'), legend('Bande du filtre', 'Reponse impulsionelle');
111
112 %========================= Plot2 =========================
113 plot(f,20*log10(fftD)), grid, title('FPH Hamming'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
114 plot(f,20*log10(fftHM)), grid, title('FPH Hamming'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
115 plot(f,20*log10(fftHN)), grid, title('FPH Hanning'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
116 plot(f,20*log10(fftBA)), grid, title('FPH Bartlett'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
117 plot(f,20*log10(fftBL)), grid, title('FPH Blackman'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
118 plot(f,20*log10(fftK1)), grid, title('FPH Kaiser 1'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
119 plot(f,20*log10(fftK2)), grid, title('FPH Kaiser 2'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
120 plot(f,20*log10(fftK3)), grid, title('FPH Kaiser 3'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
121 plot(f,20*log10(fftK4)), grid, title('FPH Kaiser 4'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
122 plot(f,20*log10(fftK5)), grid, title('FPH Kaiser 5'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
123 plot(f,20*log10(fftK6)), grid, title('FPH Kaiser 6'), xlabel('frequence
normee'), ylabel('amplitude (dB)');

TNS-FIR-FPH -6/19- Bărbuţă Mihail-Gabriel


124 plot(f,20*log10(fftK7)), grid, title('FPH Kaiser 7'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
125 plot(f,20*log10(fftK8)), grid, title('FPH Kaiser 8'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
126 plot(f,20*log10(fftK9)), grid, title('FPH Kaiser 9'), xlabel('frequence
normee'), ylabel('amplitude (dB)');
127 plot(f,20*log10(fftK10)), grid, title('FPH Kaiser 10'), xlabel('frequence
normee'), ylabel('amplitude (dB)');

TNS-FIR-FPH -7/19- Bărbuţă Mihail-Gabriel


4. Représentations graphiques (plot)

Fig. 1: Fenêtre rectangulaire (boxcar):

Fig. 2: Fenêtre Hamming:

TNS-FIR-FPH -8/19- Bărbuţă Mihail-Gabriel


Fig. 3: Fenêtre Hanning:

Fig. 4: Fenêtre Bartlett:

TNS-FIR-FPH -9/19- Bărbuţă Mihail-Gabriel


Fig. 5: Fenêtre Blackmann:

TNS-FIR-FPH -10/19- Bărbuţă Mihail-Gabriel


Fig. 9: Fenêtre Kaiser 4:

TNS-FIR-FPH -11/19- Bărbuţă Mihail-Gabriel


TNS-FIR-FPH -12/19- Bărbuţă Mihail-Gabriel
TNS-FIR-FPH -13/19- Bărbuţă Mihail-Gabriel
TNS-FIR-FPH -14/19- Bărbuţă Mihail-Gabriel
TNS-FIR-FPH -15/19- Bărbuţă Mihail-Gabriel
5. Analyse des résultats

Fenêtre Fréquence Fréquence Correction Bande de Bande de Bande de Ampl. lobe


a -3dB a -40dB ampl. coupure passage transition coupure secondaire
Rectangulaire 0.2521 0.2467 -21.0457 dB 0.2479 0.0054 0.2467 -21.0457 dB
Hamming 0.2537 0.2381 - 0.2463 0.0156 0.2381 -54.0145 dB
Hanning 0.2539 0.2382 - 0.2461 0.0157 0.2382 -43.9424 dB
Bartlett 0.2539 0.2343 -26.2067 dB 0.2461 0.0196 0.2343 -26.2067 dB
Blackmann 0.2546 0.2338 - 0.2454 0.0208 0.2338 -75.2926 dB
Kaiser β=1 0.2523 0.2460 -23.4307 dB 0.2477 0.0063 0.2460 -23.4307 dB
Kaiser β=2 0.2526 0.2443 -29.5082 dB 0.2474 0.0083 0.2443 -29.5082 dB
Kaiser β=3 0.2530 0.2421 -37.4341 dB 0.2470 0.0109 0.2421 -37.4341 dB
Kaiser β=4 0.2533 0.2401 - 0.2467 0.0132 0.2401 -45.9710 dB
Kaiser β=5 0.2536 0.2385 - 0.2464 0.0151 0.2385 -54.4073 dB
Kaiser β=6 0.2539 0.2370 - 0.2461 0.0169 0.2370 -62.7040 dB
Kaiser β=7 0.2542 0.2357 - 0.2458 0.0185 0.2357 -71.2425 dB
Kaiser β=8 0.2545 0.2345 - 0.2455 0.0200 0.2345 -80.5293 dB
Kaiser β=9 0.2547 0.2334 - 0.2453 0.0213 0.2334 -90.4414 dB
Kaiser β=10 0.2549 0.2323 - 0.2451 0.0226 0.2323 -99.6358 dB

FPH - Comparaison des fenetres


Bande de passage
Kaiser β=10
Kaiser β=9
Kaiser β=8
Kaiser β=7
Kaiser β=6
Kaiser β=5
Kaiser β=4
Kaiser β=3
Kaiser β=2
Kaiser β=1
Blackmann
Bartlett
Hanning
Hamming
Rectangulaire

0.2430 0.2440 0.2450 0.2460 0.2470 0.2480 0.2490

Frequence

TNS-FIR-FPH -16/19- Bărbuţă Mihail-Gabriel


FPH - Comparaison des fenetres
Bande de Transition
Kaiser β=10
Kaiser β=9
Kaiser β=8
Kaiser β=7
Kaiser β=6
Kaiser β=5
Kaiser β=4
Kaiser β=3
Kaiser β=2
Kaiser β=1
Blackmann
Bartlett
Hanning
Hamming
Rectangulaire

0.0000 0.0050 0.0100 0.0150 0.0200 0.0250

Frequence

FPH - Comparaison des fenetres


Bande de coupure
Kaiser β=10
Kaiser β=9
Kaiser β=8
Kaiser β=7
Kaiser β=6
Kaiser β=5
Kaiser β=4
Kaiser β=3
Kaiser β=2
Kaiser β=1
Blackmann
Bartlett
Hanning
Hamming
Rectangulaire

0.2250 0.2300 0.2350 0.2400 0.2450 0.2500

Frequence

TNS-FIR-FPH -17/19- Bărbuţă Mihail-Gabriel


FPH - Comparaison des fenetres
Attenuation du lobe secondaire
Kaiser β=10
Kaiser β=9
Kaiser β=8
Kaiser β=7
Kaiser β=6
Kaiser β=5
Kaiser β=4
Kaiser β=3
Kaiser β=2
Kaiser β=1
Blackmann
Bartlett
Hanning
Hamming
Rectangulaire

-120.0000 -100.0000 -80.0000 -60.0000 -40.0000 -20.0000 0.0000

Amplitude [dB]

FPH - Comparaison des fenetres


Passage / Transition / Coupure
Kaiser β=10
Kaiser β=9
Kaiser β=8
Kaiser β=7
Kaiser β=6
Kaiser β=5
Kaiser β=4 Bande de coupure
Kaiser β=3 Bande de transition
Kaiser β=2 Bande de passage
Kaiser β=1
Blackmann
Bartlett
Hanning
Hamming
Rectangulaire

0.0000 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000 0.3500 0.4000 0.4500 0.5000

Frequence

TNS-FIR-FPH -18/19- Bărbuţă Mihail-Gabriel


Bibliographie

− Răducanu M., Paleologu C. - Traitement Numérique du Signal - Cahier de travaux


pratiques
− John Treichler - Notes on the Design of Optimal FIR Filters - 2009 -
http://cnx.org/content/col10553/latest/
− Dr. Andrew Greensted - FIR Filters by Windowing -
http://www.labbookpages.co.uk/audio/firWindowing.html
− Wikimedia Foundation - Wikipedia -
http://fr.wikipedia.org/wiki/Filtre_à_réponse_impulsionnelle_finie

TNS-FIR-FPH -19/19- Bărbuţă Mihail-Gabriel