130 likes | 518 Views
Construire et utiliser un banc de filtres pour analyser le spectre d’un signal. Jean-Paul Stromboni, Polytech'Nice Sophia, S.I. 3 ème année séance 7, novembre 2012, durée : 50mn, vidéoprojecteur. Les objectifs de ce cours :. Définir le concept de banc de filtre et d’analyse du signal
E N D
Construire et utiliser un banc de filtres pour analyser le spectre d’un signal Jean-Paul Stromboni, Polytech'Nice Sophia, S.I. 3ème année séance 7, novembre 2012, durée : 50mn, vidéoprojecteur 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 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 d’un banc de filtres en Scilab Qu’appelle t’on banc de filtres et analyse ? • 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 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 : c’est l’opération inverse de l’analyse, l’addition des signaux de sortie du filtre du banc permet de reconstituer le signal.
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)
Comment utiliser un banc de filtres On désigne parle 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 l’on note x1, x2, x3, … xM avec D’où : X1+X2+ … +XM= (H1+H2+..HM)*X= X Et donc : x1+x2+ … +xM = x Exemple M=4: filtre1 filtre2 filtre3 filtre4
R R/2 R/4 R/8 f 0 fe f f f f B2 B2 B3 B3 B4 Exercice : appliquer manuellement un banc de 4 filtres au signal x dont le spectre X est donné compléter Découper X en quatre bandes égales, B1, B2, B3 et B4 B1 B1
Pour comparer les signaux x1, x2, … xM issus du banc de filtre, on peut leur associer une énergie 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) : Appliquer à l’exemple de la page précédente : calculer l’énergie de x, x1, x2, x3 et x4 Quelle est l’erreur faite si on approxime x par x3 ? On perd 10% de l’énergie du signal x, mais on peut com-presser x3 avec un taux de compression C=4 comme suit:
Comment créer un banc de M filtres itérativement à partir d’un filtre unique par décalage et addition : 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 Pour décaler de la réponse fréquentielle du filtre H, il suffit de multiplier le coefficient hn paroù k0 entier vaut Application : que vaut k0 ? Que vaut f0? Tracer le filtre h
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 ?
Création d’un banc de filtres et analyse par le banc du signal audio tiré d’un fichier wave Lit le signal audio dans e et fe Crée filtre générateur h 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 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 Joue sum(s,1) si play!=0
Analyse du script bancfiltres.sce : • Préciser les dimensions des matrices bande et s • Que trouve t’on dans bande(1,:) ? • Que trouve t’on dans s(1,:) ? • Comment calcule t’on Esignal ? • Que trouve t’on 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 ? matrice s matrice bande
R R/2 R/4 R/8 f R R R R 0 fe R/2 R/2 R/2 R/2 R/4 R/4 R/4 R/4 R/8 R/8 R/8 R/8 f f f f fe fe fe fe Application : compression du signal x réduit à x3 dans un taux C=4 avec une perte de 10% d’énergie En perdant 10% de l’énergie du signal x, on obtient C=4