S.S.I.I., , n°7 : Construire et utiliser un banc de filtres Page 1 Construire et utiliser un banc de filtres pour analyser le spectre dun signal Les objectifs de ce cours : Définir le concept de banc de filtre et danalyse du signal Expliquer la fonction et lutilisation dun banc de filtre Calculer lénergie associée à un signal Construire itérativement un banc de filtres avec un seul filtre Créer et utiliser un banc de filtres en Scilab: un exemple. TD n°7 : création et utilisation dun banc de filtres en Scilab Quappelle ton banc de filtres et analyse ? Jean-Paul Stromboni, Polytech'Nice Sophia, S.I. 3 ème année séance 7, novembre 2012, durée : 50mn, vidéoprojecteur Banc de filtres : il sagit dun 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 dun signal audio présenté à lentrée du banc de filtre. Analyse du signal : 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. Synthèse : cest lopération inverse de lanalyse, laddition des signaux de sortie du filtre du banc permet de reconstituer le signal.
S.S.I.I., , n°7 : Construire et utiliser un banc de filtres Page 2 Banc de filtre : définition, notation, exemple. Notation : on désigne un filtre de taille R par le vecteur de ses coefficients h=(hn, n=0..R-1) ou par H=(Hk, k=0..R-1), sa réponse fréquentielle, avec On a donc : H=fft(h,-1) Et aussi : h= fftshift(real(ifft(H))) Le banc de M filtres sera donc constitué de filtres désignés par hi ou Hi, i = 1.. M avec Hi= fft(hi) Avec la contrainte qui définit un banc de filtre Exemple M=4 (H1, H2, H3, H4 entre –fe/2 et fe/2)
S.S.I.I., , n°7 : Construire et utiliser un banc de filtres Page 3 Comment utiliser un banc de filtres On désigne par le vecteur x = (xn=x(nTe), n=0..N-1) le signal à analyser (N échantillons du signal) et par le vecteur X=fft (x(1:R)) le spectre de x calculé par TFD sur une fenêtre rectangulaire de taille R : Le signal x est filtré par les M filtres du banc, il en résul- te M signaux filtrés que lon note x1, x2, x3, … xM avec Doù : X1+X2+ … +XM= (H1+H2+..HM)*X= X Et donc : x1+x2+ … +xM = x Exemple M=4: filtre1 filtre2filtre3filtre4
S.S.I.I., , n°7 : Construire et utiliser un banc de filtres Page 4 f Exercice : appliquer manuellement un banc de 4 filtres au signal x dont le spectre X est donné f 0fe R R/2 R/4 R/8 compléter f Découper X en quatre bandes égales, B1, B2, B3 et B4 ff B1 B2 B3 B4
S.S.I.I., , n°7 : Construire et utiliser un banc de filtres Page 5 Pour comparer les signaux x1, x2, … xM issus du banc de filtre, on peut leur associer une énergie Appliquer à lexemple 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 : 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 avec un taux de compression C=4 comme suit: Quelle est lerreur faite si on approxime x par x3 ?
S.S.I.I., , n°7 : Construire et utiliser un banc de filtres Page 6 Pour décaler de la réponse fréquentielle du filtre H, il suffit de multiplier le coefficient h n par où k0 entier vaut Comment créer un banc de M filtres itérativement à partir dun filtre unique par décalage et addition : Application : que vaut k0 ? Que vaut f0? Tracer le filtre h 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
S.S.I.I., , n°7 : Construire et utiliser un banc de filtres Page 7 Exercice : créer les quatre filtres H1, H2, H3, et H4 engendrés de cette manière par H0 pour R=32 H0 f0= k0= fe= H1 f0=500Hz k0=2 H2 f0= k0= H3 f0=2500Hz k0= H4 f0= k0= Comment vérifier que ces quatre filtres constituent bien un banc ?
S.S.I.I., , n°7 : Construire et utiliser un banc de filtres Page 8 Création dun banc de filtres et analyse par le banc du signal audio tiré dun 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.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 Crée filtre générateur h Crée banc de M filtres De taille R partir du filtre h Filtre e dans sfiltre Ramène longueur sfiltre à celle de y et sauve dans des fichiers wave Calcule et affiche un diagramme barre des énergies en % de lénergie de e Lit le signal audio dans e et fe Joue sum(s,1) si play!=0
S.S.I.I., , n°7 : Construire et utiliser un banc de filtres Page 9 Analyse du script bancfiltres.sce : Préciser les dimensions des matrices bande et s Que trouve ton dans bande(1,:) ? Que trouve ton dans s(1,:) ? Comment calcule ton Esignal ? Que trouve ton dans E(1) ? Utilité de la ligne s(j+1,:)=sfiltre(1:length(e)); ? Que contient le fichier s2.wav ? Quel est le pourcentage de lénergie du signal filtré 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 (% énergie signal) 1 (basse fréquence)E(1) 1 et 2E(1)+E(2)= 1, 2, 3 1,2,3 et 4 1,2,3,4,5,6,7, et 8
S.S.I.I., , n°7 : Construire et utiliser un banc de filtres Page 10 Application : compression du signal x réduit à x3 dans un taux C=4 avec une perte de 10% dénergie f 0fe R R/2 R/4 R/8 R/4 f fe R R/2 R/8 R/4 f fe R R/2 R/8 R/4 f fe R R/2 R/8 R/4 f fe R R/2 R/8 En perdant 10% de lénergie du signal x, on obtient C=4