La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Retour sur les filtres et bancs de filtres Jean-Paul Stromboni, décembre 2007.

Présentations similaires


Présentation au sujet: "Retour sur les filtres et bancs de filtres Jean-Paul Stromboni, décembre 2007."— Transcription de la présentation:

1 Retour sur les filtres et bancs de filtres Jean-Paul Stromboni, décembre 2007

2 en résumé un banc de filtres est conçu pour découper précisément le spectre d'un signal audio pour constituer un banc de filtres, on peut créer et décaler un filtre générateur un filtre non récursif peut être mis en œuvre à partir de sa seule réponse impulsionnelle la réponse impulsionnelle d'un filtre linéaire et stationnaire peut être déduite de la réponse harmonique par transformée de Fourier inverse pour quantifier l'effet d'un filtre sur un signal, on peut considérer l'énergie du signal filtré

3 1. définir un filtre quasi rectangulaire à partir de sa réponse harmonique Quel est le résultat du script MATLAB suivant ? R=32 fe=8000; H=[ones(1,3),.9,.5,.1,zeros(1,21),.1,.5,.9,1,1]; fr=[0:R-1]*fe/R; stem(fr,H) grid xlabel('f (Hz)') title('réponse harmonique H')

4 qu'est ce qui change si on utilise l'instruction suivante : stem(fr-4000,fftshift(H)) tracer le résultat donner le type du filtre : sa fréquence de coupure à – 6 dB, soit fc : sa longueur : sa largeur (en Hz) à -6 dB : sa fréquence d'échantillonnage : sa résolution fréquentielle :

5 Mon premier banc de filtres ? tracer la réponse harmonique HH=1-H ci-dessous préciser : –le type du filtre HH –sa longueur –sa largeur à -6 dB Pourquoi H et HH constituent ils un banc de filtres ?

6 2. mettre le filtre H en œuvre les instructions suivantes calculent la réponse impulsionnelle h du filtre de réponse harmonique H h=fftshift(real(ifft(H))); stem(h) grid title(['rép. impuls. h, longueur=',num2str(length(h))]) xlabel('indice n de l''échantillon hn') length(h) = ? H est il un filtre FIR ou IIR?

7 Pour appliquer le filtre de réponse impulsionnelle h=(h0,h1,…h31) au signal e de longueur length(e) retrouver le résultat : s n =h 0 e n +h 1 e n-1 +h 2 e n-2 + … + h 31 e n-31 que réalise le script suivant ? e=0.6*cos(2*pi*1000*t); s=zeros(size(e)); for n=1:length(e) for k=1:R if n-k+1>0, s(n)=s(n)+h(k)*e(n-k+1); end pour filtrer, on utilisera plus aisément l'instruction 'filter' de MATLAB. Explicitez les arguments : s=filter(h,1,e);

8 3. exploiter la réponse harmonique quel est l'effet du script suivant ? fe=8000; t=0:1/fe:2; e=0.6*cos(2*pi*1000*t); s=filter(h,1,e); plot(t,e,t,s) legend('e','s') que peut on prévoir au vu de H ? et si la fréquence de e valait 440Hz ? et si elle valait 1500Hz ?

9 4. Calculer l'énergie d'un signal rappeler la définition de l'énergie du signal e de longueur length(e) : que donne Ee=e'*e/2 en Matlab selon que size(e)=(16001,1) ou size(e)=(1,16001) ? avantage selon vous de Ee=sum(e.*e)/2 ?

10 5. créer les filtres du banc en décalant la réponse harmonique H reprendre H représenté entre –fe/2 et fe/2 et –décaler de k0=4 points vers la droite –décaler de k0=4 points vers la gauche –additionner : caractériser le filtre résultat nommé H1

11 et si on décale maintenant de k0=12 points, quel est le filtre résultat H2 ? nature de H2, largeur, … H1 et H2 constituent ils un banc de filtres ?

12 Pour décaler H de f0, on peut aussi modifier la réponse impulsionnelle h. Quel est le résultat du script suivant ? R=32; n=0:R-1; k0=4; h1=2*cos(2*pi*k0*n/R).*h; subplot(2,1,1) stem(fr-4000,fftshift(abs(fft(h1)))) grid xlabel('f (Hz)') title('tracé de H1') subplot(2,1,2) k0=12; h2=2*cos(2*pi*k0*n/R).*h; stem(fr-4000,fftshift(abs(fft(h2)))) grid xlabel('f (Hz)') title('tracé de H2')

13 Construire un banc de 4 filtres sur le même principe à l'aide de Matlab quelle est la largeur du filtre générateur ? chaque filtre est de largeur le filtre générateur est de largeur d'où H= [ calculer la réponse impulsionnelle h associée à H : h=fftshift(real(ifft(H)); calculer les 4 réponse impulsionnelles dans une boucle et les stocker dans un tableau ri ( ?, ?) : pour H1, k0= (R/4*M) h1n=2cos(2*pi*n*(R/(4*M))/R)hn pour H2, k0= 3*R/(4*M) h2n=2cos(2*pi*n*3*(R/(4*M))/R)hn pour H2, k0= 5*R/(4*M) h2n=2cos(2*pi*n*5*(R/(4*M))/R)hn pour H2, k0= 7*R/(4*M) h2n=2cos(2*pi*n*7*(R/(4*M))/R)hn for k=0:3 ri(k+1,:)=2*cos(2*(2*k+1)*pi*[0:R-1]/(4*M)).*h; end

14 Tracer les réponses harmoniques des filtres du banc for k=1:4 stem(fr-fe/2,fftshift(abs(fft(ri(k,:)))); hold on end hold off Filtrer e dans une boucle et placer les signaux filtrés dans un tableau efiltre(?, ?) for k=1:4 yfiltre(k,:)=filter(ri(k,:),1,e); end Calculer et tracer les énergies des signaux filtrés E=diag(yfiltre*yfiltre'); bar([0:3]*fe/4,100*E/sum(E)) grid Construire un banc de 4 filtres sur le même principe à l'aide de Matlab

15 analyse de Bbc.wav

16 Sujet de travaux dirigés 1.Filtrer : créer un filtre passe bande de longueur R=256, de fréquences de coupure 500Hz et 1000Hz : 1.d'abord si fe = 8kHz, 2.puis en prenant en compte de la valeur de fe. On évaluera l'effet de ce filtre, à l'oreille, à l'aide du spectrogramme, et à l'aide de l'énergie. 2.Banc de filtres : 1.créer un banc de M=8 filtres permettant d'analyser un signal tiré d'un fichier wave. La longueur des filtres est R=128. 2.Appliquer le banc de filtres à différents signaux, et négliger les bandes de plus faible énergie, tant que la qualité du signal approximé est jugée bonne.


Télécharger ppt "Retour sur les filtres et bancs de filtres Jean-Paul Stromboni, décembre 2007."

Présentations similaires


Annonces Google