1 / 18

I – Filtre: tracer H1 entre 0 et fe

Voici quelques questions pour assimiler la seconde partie du cours S.S.I.I., spectre, filtrage, banc de filtres, compression, … Préparer les réponses avant le cours, en s’aidant des polycopiés, des travaux dirigés, et de Scilab ou de Matlab pour vérifier les prévisions et faire des calculs.

walden
Download Presentation

I – Filtre: tracer H1 entre 0 et fe

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Voici quelques questions pour assimiler la seconde partie du cours S.S.I.I., spectre, filtrage, banc de filtres, compression, … • Préparer les réponses avant le cours, en s’aidant des polycopiés, des travaux dirigés, et de Scilab ou de Matlab pour vérifier les prévisions et faire des calculs. • I - Filtre : on définit à l’aide de Matlab ou de Scilab un filtre H1 en imposant les R=32 valeurs de sa réponse fréquentielle qui sont réparties régulièrement sur l’intervalle de fréquence allant de 0 à fe=8kHz et placées dans le vecteur H1 suivant : • H1=[ones(1,7),0.1,0.5,0.9,zeros(1,13),0.1,0.5,0.9,ones(1,6)]; • préciser les instructions Matlab ou Scilab qui permettent de tracer H1 entre 0 et fe. • tracer maintenant H1 entre –fe/2 et fe/2, préciser gain statique et fréquence de coupure • on l’a vu en cours, l’instruction h=fftshift(real(ifft(H1))) calcule la réponse impulsionnelle du filtre de réponse fréquentielle H1 dans le vecteur h=[h0,h1, … hR-1]: • que réalise ifft(H1) ? • pourquoi real(ifft(H1)) et pourquoi pas abs(ifft(H1)) ? • pourquoi utiliser fftshift ? • écrire l’équation à programmer pour filtrer un signal composé de N échantillons contenus dans le vecteur e=[e0,e1, … eN-1] • prévoir l’effet du filtre sur le spectre du signal contenu dans e ? • calculer la sortie du filtre si l’entrée e est une impulsion : e0=1 et e1=e2=…=eN-1=0.  • II – Signal et signal filtré : on applique à l’entrée du filtre H1 précédent un signal sinusoïdal de fréquence f0=1000 Hz et d’amplitude a= 0.8 échantillonné à la fréquence fe=8000 Hz. • 1. Quel est le tracé obtenu si on exécute les instructions Matlab suivantes ? • N=8192 • fe=8000 • f=[0 :N-1]*fe/N ; • plot(f,abs(fft(e(1:N))/N) • 2. l’instruction Matlab : e1=filter(h,1,e) ; ou l’instruction Scilab: e1=convol(h,e), filtrent e et placent le signal filtré dans le vecteur e1, comment prédire la valeur de e1 ? • 3. et si f0 valait 2000 Hz, puis 2250Hz, puis 2500Hz, quel serait l’effet sur le vecteur e1 ? • on crée le vecteur e1d avec l’instruction : e1d=e1(1 :2 :length(e1));préciser la taille de e1d, sa fréquence d’échantillonnage, et tracer le spectre de e1d • 4. on crée maintenant le vecteur e1se en exécutant les deux instructions ci-dessous, préciser la taille, la fréquence d’échantillonnage et le spectre du signal e1se : • e1se=zeros(1,length(e1)) ; • e1se(1 :2 :length(e1))=e1d ; • 5. proposer un filtre capable de reconstituer le spectre de e1 à partir de celui de e1se. • III- Banc de filtres et compression : On construit un banc de deux filtres dont les réponses fréquentielles sont fixées dans le vecteur H1 précédent et un vecteur H2 à déterminer : • 1. déterminer le vecteur H2 à partir du vecteur H1 précédent • 2. tracer H2 entre 0 et fe, préciser gain statique et fréquences de coupure basse et haute • 3. comment faire calculer la réponse impulsionnelle du filtre H2 dans le vecteur h2 ? • 4. que contient le vecteur e2=filter(h2,1,e) ? Que peut-on prédire pour la valeur de e2 ? • 5. si on néglige la sortie e2 du filtre H2 devant la sortie e1 de H1, quel est le taux de compression qui en résultera dans la structure de principe vue en cours ? • 6. calculer l’énergie du signal e (on suggère d’utiliser le théorème de Parseval, à tirer du cours)

  2. I – Filtre: tracer H1 entre 0 et fe fe=8000; R=32; H1=[ones(1,7),0.9,0.5,0.1,zeros(1,13),0.1,0.5,0.9,ones(1,6)]; f=[0:R-1]*fe/R; plot2d3(f,H1) xgrid() xlabel("fréquence (Hz)") ylabel("H1") title(["tracé de H1 ",string(R)," valeurs."])

  3. I – Filtre tracer entre –fe/2 et fe/2 plot2d3(f-fe/2,fftshift(H1))

  4. I – Filtre : réponse impulsionnelle h clf(); h=fftshift(real(ifft(H1))); plot2d3([0:R-1]/fe,h) xgrid(); xlabel("temps(s)") ylabel("h"); ifft calcule la TDF inverse, c’est une quantité complexe real prend la partie réelle, avantage sur abs, elle peut être négative fftshift permet d’avoir un filtre causal, h débute en t=0 et pas avant

  5. I – Filtre : effet de H1 sur le spectre d’un signal e filtre passe bas, qui supprime les fréquences > 2000Hz : il multiplie par 1 les composantes du spectre de e entre 0 et 1500Hz, D’où le gain statique égale à 1 par 0.5, la composante du spectre de e de fréquence 2000Hz, d’où la fréquence de coupure à -6dB par 0.9, à la fréquence Par 0.1 à la fréquence

  6. I – Filtre : réponse à une entrée impulsion La réponse à une impulsion e0=1 et e1=e2=…=eN-1=0 est la réponse impulsionnelle, en effet, seul e0=1 est différent de 0, Il en résulte e1n=hn, n=0 .. R-1  D’où la dénomination filtre à réponse impulsionnelle finie, car de durée RTe, Et R longueur du filtre

  7. II – Signal et signal filtré : spectre de e // signal N=8192; fe=8000; f=[0:N-1]*fe/N; a=0.8; f0=1000; e=a*sin(2*%pi*f0*t); //calcul du spectre plot(f,abs(fft(e)/N)) xgrid(); xlabel("fréquence (Hz)") ylabel("abs(fft(e))/N") title("spectre de e divisé par la taille de la fenêtre")

  8. II – Signal et signal filtré : H1 filtre e //filtrage e1=convol(h,e); e1=e1(1:N); plot(f,abs(fft(e1(1:N))/N)) xgrid(); xlabel("fréquence (Hz)"); ylabel("abs(fft(e1(1:N)))/N") title("spectre de e1 divisé par la taille de la fenêtre")

  9. II – Signal et signal filtré : il y a un régime transitoire du filtre qui dure à peu près RTe plot(t,e,t,e1) legend("e","e1") xgrid();

  10. II – Signal et signal filtré : f0=2000Hz f0= 2000Hz // le gain de H1 vaut 0.5 et non plus 1

  11. II – Signal et signal filtré : sous échantillonnage //sous échantillonnage e1d=e1(1:2:length(e1)); Nd=length(e1d); fd=[0:Nd-1]*fe/(2*Nd); plot(fd,abs(fft(e1d))/length(e1d)) xgrid(); xlabel("fréquence (Hz)") ylabel("abs(fft(e1d))/length(e1d)") title("spectre de e1d divisé par la taille de la fenêtre") La contrainte de Shannon est respectée ?

  12. II – Signal et signal filtré : sur échantillonnage //sur échantillonnage e1se=zeros(1,length(e1)); e1se(1:2:length(e1))=e1d; //calcul du spectre plot(f,abs(fft(e1se)/N)) xgrid(); xlabel("fréquence (Hz)"); ylabel("abs(fft(e1se))/N") title("spectre de e divisé par la taille de la fenêtre")

  13. II – Signal et signal filtré : reconstruire e1 //reconstruction de e1 à partir de e1se e1r=convol(2*h,e1se); e1r=e1r(1:N); plot(f,abs(fft(e1r)/N)) … Il faut prendre 2H1 au lieu de H1

  14. II- Banc de filtres : //Banc de filtres H2=1-H1; f=[0:R-1]*fe/R; plot(f,H1,f,H2) xgrid() legend("H1","H2") xlabel("fréquence (Hz)") ylabel("H1 et H2") title(["réponse fréquentielle des filtres du banc ",string(R)," valeurs."]) Gain statique H2 = 0 Fréquence coupure basse à -6dB = 2000 Hz Fréquence coupure haute = 4000 Hz Filtre passe haut

  15. II- Banc de filtres : h2=fftshift(real(ifft(H2))); plot2d3([0:R-1]/fe,h2) xgrid(); xlabel("temps(s)") ylabel("h2");

  16. II- Banc de filtres : e filtré par H2 e2 sera nul, car 3000Hz est hors de la bande passante de H2

  17. compresser banc de filtres banc de M=2 filtres conserver K signaux sur M bandes xdi, i=1..M e1interp e1 ed1 e1se H1 e erec e2 ed2 e2se H2 e2interp III- Banc de filtres et compression • Si on néglige e2 devant e1, après tout, l’énergie de e2 est nulle, on obtient un taux de compression de C=M/K=2 • Si on exprime en plus e1 sur 7 bits au lieu de 8, on obtient ? • C= 16/7 = 2.3 environ …

  18. II- Banc de filtres : function [E]=energie(s) //fichier energie.sci E=0; for i=1:length(s) E=E+s(i)^2; end E=E/2; endfunction //énergie exec("energie.sci"); E=energie(e) // résultat obtenu : E= 1310.72 D’après Parseval :

More Related