Construire et utiliser un banc de filtres pour analyser le spectre d’un signal
description
Transcript of Construire et utiliser un banc de filtres pour analyser le spectre d’un signal
S.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtresS.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtres Page Page 11
Construire et utiliser un banc de filtres
Les objectifs de ce cours :
Définir le concept de banc de filtre et d’analyse du signal Expliquer la fonction et l’utilisation d’un banc de filtre Calculer l’énergie associée à un signal Construire un banc de filtres à partir d’un filtre générateur Créer et utiliser un banc de filtres : un exemple avec Scilab.
TD n°7 : création et utilisation d’un banc de filtres en Scilab
Qu’est ce qu’un banc de filtres ?
Jean-Paul Stromboni, Polytech'Nice Sophia, S.I. 3ème année cours 7, novembre 2015, durée : 50mn, vidéoprojecteur
Banc de filtres : il s’agit d’un ensemble de M filtres de même taille R opérant à la même fréquence d’échantillonnage fe, et conçus pour analyser automatiquement la composition fréquentielle d’un signal audio présenté à l’entrée du banc de filtre.
Analyse d’un signal par un banc de M filtres : consiste à découper le spectre du signal en M bandes de fréquences, ou encore à décomposer le signal analysé en M signaux différents à la sortie des filtres du banc.
Reconstitution du signal : l’addition des signaux de sortie des filtres du banc de filtre permet de reconstituer le signal initial.
S.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtresS.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtres Page Page 22
Définition d’un banc de filtres et exemple
Notation : on désigne un filtre de taille R par le vecteur de ses coef-ficients h= (hn, n= 0..R-1) ou par H= (Hk, k= 0..R-1), sa réponse fréquentielle, avec
H= fft(h) si h=ifft(H) mais h= fftshift(real(ifft(H))) ! On trace H=abs(fft(h)) ou on calcule H=fft(fftshift(h)) !Un banc de M filtres sera donc constitué de filtres désignés par hi ou Hi, i = 1 .. M avec Hi= fft(hi)
Contrainte de définition d’un banc de filtres :
.1)/(],1,0[1
M
i ei RkfHRk
Exemple d’un banc de M=4 filtres de taille R=64 (attention, H1, H2, H3, H4 tracés entre –fe/2 et fe/2)
1
0
/2)/(R
n
Rnkinek ehRkfHH
S.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtresS.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtres Page Page 33
Utilisation d’un banc de filtres
On désigne par le vecteur x = (xn=x(nTe), n= 0..N-1) le signal à l’entrée du banc (x contient N échantillons) et par le vecteur X=fft (x(1:R)) le spectre de x calculé par Transformée de Fourier Discrète (TFD) de taille R
x est filtré tour à tour par les M filtres du banc, et on note x1, x2, x3, … xM les signaux filtrés avec :
X1+X2+ … +XM= (H1+H2+..+HM)*X= Xcar H1+ H2+ ...+ HM= ones(1,R)donc x1+x2+ … +xM = x
1..0,)/(1
0
/2
RkeRkfXXX
R
n
Rnkiek
Exemple avec M=4:
filtre1 filtre2 filtre3 filtre4
NnnTxx e ,0),(
NnnTxx e ,0),(11 NnnTxx e ,0),(44 2x 3x
XHXxx
XHXxx
XHXxx
MMTFD
Mh
TFDh
TFDh
M
222
111
2
1
S.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtresS.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtres Page Page 44
f
Exercice : appliquer graphiquement un banc de 4 filtres au signal x de spectre X donné ci-dessous
X
1,0,1,0, RmXXRnxx mTFD
n
f0 fe
R
R/2
R/4R/8
compléter
f
1X
2X
3X
4X
Découper X en quatre bandes égales, B1, B2, B3 et B4
f
f
1,0,1..0, 1111 RmXXRnxx mTFD
n
1x
B1 B1
B2 B2
B3 B3
B4
3x
4x
2x
S.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtresS.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtres Page Page 55
Définition de l’énergie d’un signal et comparaison des signaux x1, x2, … xM issus du banc de filtres
1
0
2
2
1)(,0,
N
n nn xxENnxx
1
0
2
2
1)(
1,0,]1,0[,
N
m m
mTFD
n
XN
xE
NmXXNnxx
)(/)(
)(
)(
)(
)(
)(
3
4
3
2
1
xExE
xE
xE
xE
xE
xE
Appliquer à l’exemple de la page précédente : calculer l’énergie de x, x1, x2, x3 et x4
Définition de l’énergie associée à un signal à partir des échantillons de ce signal :
216
32)
4
3
2
1
4
12
8
141(
22
2
2
2
222
RR
R
R
16
29
32
58 RR
RR 1.032
3
32
3R
%9064
58
0
Calcul de l’énergie à partir du spectre (théorème de Parseval) :
On perd 10% de l’énergie du signal x, mais on peut com-presser x3 dans un facteur C=4
3444
333 xxxxxx dec
Bsed
B
Quelle est l’erreur faite si on approxime x par x3 ?
S.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtresS.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtres Page Page 66
Pour décaler de la réponse fréquentielle du filtre H, il suffit de multiplier le coefficient hn paroù k0 entier vaut
Création d’un banc de filtres par décalages et additions successifs d’un filtre générateur unique
00
00
0
0
0
0
)2
cos(2 0/2/2
0
1
0
/)(2
/2
0
1
0
/)(2
/2
kkkkk
nRink
nRink
nnn
kk
R
n
Rkknink
Rinknn
kk
R
n
Rkknink
Rinknn
HHHR
nkhehehwh
HehH
ehh
HehH
ehh
Exemple : k0 =6, R=32, fe=8000 Hz, que vaut f0 ?
Soit le filtre de vecteur de coefficients h, et de réponse fréquentielle H, donc H=fft(h), length(h)= length(H)= R et
Rfkf e /00
1
0
/2 1...0,R
n
Rinknk RkehH
)/2cos(2 0 RnkefRfk /00
f0?Hk?Hk-k0?Hk+k0?
hn réel
et
HkHk-k0
hn complexe
S.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtresS.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtres Page Page 77
Exercice : créer les quatre filtres H1, H2, H3 et H4 engendrés de cette manière par H0 pour R=32
H0f0=k0=fe=
H1f0=500Hzk0=2
H2f0=k0=
H3f0=2500Hzk0=
H4f0=k0=
Comment vérifier que ces quatre filtres constituent bien un banc ?
S.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtresS.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtres Page Page 88
Création d’un banc de filtres et analyse par le banc du signal audio tiré d’un fichier wave
function [s, E, Esignal, fe]=bancfiltres(M, R, fichier, play) //fichier ‘bancfiltres.sce’ //utilisation [s,e,es,fe]=bancfiltres(8,128,'piano.wav',0); [e,fe]=wavread(fichier); N= R/(4*M); H=[ones(1,N-1),0.9,0.5,0.1,zeros(1,R-2*N-3),... 0.1,0.5,0.9,ones(1,N-2)]; h=fftshift(real(ifft(H))); n=0:R-1; for j=0:M-1 bande(j+1,:)=2*cos((2*j+1)*n*%pi/(2*M)).*h; end for j=0:M-1 sfiltre=convol(e,bande(j+1,:)); s(j+1,:)=sfiltre(1:length(e)); wavwrite(s(j+1,:),fe,['s'+string(j+1)+'.wav']); end Esignal= e*e'/2; E=diag(s*s')/2; disp(['sum(E):',string(sum(E))]) bar([0:M-1]*fe/(2*M),100*E/Esignal) xtitle(['Analyse de ',fichier],'frequence (Hz)'... ,'energie (% energie totale)') xgrid(); if play then sound(sum(s,1),fe); end endfunction
0 500 1000 1500 2000 2500 3000 35000
10
20
30
40
50
60
70
80
fréquence (Hz)
éner
gie
(% é
nerg
ie tot
ale)
Analyse de piano.wav
Crée le filtre générateur h
Crée un banc de M filtres à partir du filtre générateur h
Filtre e dans sfiltre,réduit length(sfiltre) sauve au format wave
Calcule et trace le diagramme des
énergies des signaux issus du banc de filtre
Lit le signal audio dans e et fe
Joue sum(s,1) si play!=0
S.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtresS.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtres Page Page 99
Étudier le script ‘bancfiltres.sce’ et préciser :
les dimensions des matrices bande et s : le contenu de la ligne bande(1,:) : le contenu de s(1,:) : le contenu de Esignal le contenu de E(1) la raison de la ligne s(j+1,:)=sfiltre(1:length(e)); le contenu du fichier s2.wav ? l’énergie de e conservée selon les bandes de fréquence
conservées ci-dessous
h1
h2
…
hM
s1
s2
…
sM
matrice bande matrice s
Bandes de fréquence Énergie (en % énergie de e)
1 (basse fréquence) E(1)
1 et 2 E(1)+E(2) =
1, 2, 3
1, 2, 3 et 4
1, 2, 3, 4, 5, 6, 7 et 8
S.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtresS.S.I.I., 2015-16, cours n°7 : Construire et utiliser un banc de filtres Page Page 1010
Application à la compression du signal x dans un rapport C=4 avec une perte d’énergie de 10%
4
4
f0 fe
R
R/2
R/4R/8
R/4
ffe
R
R/2
R/8
R/4
ffe
R
R/2
R/8
R/4
ffe
R
R/2
R/8
R/4
ffe
R
R/2
R/8
3B
34 B
En perdant 10% de l’énergie du signal x, on obtient C=4
3444
333 xxxxxx dec
Bsed
B