90 likes | 206 Views
Comment tailler les filtres sur mesure. Séance 8, nouvelle application des filtres, 1 heure Version : samedi 10 avril 2004 Auteur: Jean-Paul Stromboni. Contenu de la séance :. on montre comment on peut déterminer un filtre FIR à partir de la réponse impulsionnelle souhaitée
E N D
Comment tailler les filtres sur mesure Séance 8, nouvelle application des filtres, 1 heure Version : samedi 10 avril 2004 Auteur: Jean-Paul Stromboni Contenu de la séance : • on montre comment on peut déterminer un filtre FIR à partir de la réponse impulsionnelle souhaitée • on crée un filtre passe-bas de réponse harmonique imposée • on crée un filtre passe-bande en décalant le filtre passe bas • On montre comment appliquer un tel filtre avec Matlab et l’évaluer avec Goldwave • On utilise cette technique pour définir un banc de 4 filtres Savez vous répondre aux questions suivantes ?
Pour découper avec précision le spectre d’un signal, il faut créer le filtre adéquat Quand l’objectif est de découper précisément le spectre d’un signal audio, par exemple dans un banc de filtres, on utilise un filtre linéaire et stationnaire, soit dans le domaine fréquentiel : • est la transformée de Fourier du signal audio à modifier, soit • est celle du signal filtré • est la réponse harmonique du filtre, c’est aussi la transformée de Fourier de la réponse impulsionnelle Découper le spectre d’un signal revient donc à créer un filtre de réponse harmonique adéquate: Or, les filtres récursifs d’ordre un et deux permettent au mieux de fixer 2 ou 3 paramètres, mais par la forme de la réponse harmonique dans son entier On leur préfère donc les filtres non récursifs et la technique étudiée ci-dessous
On sait synthétiser un filtre à partir d’une réponse impulsionnelle de durée finie Soit la réponse impulsionnelle à synthétiser, de durée finie et de longueur R. Écrivons la relation d’entrée sortie du filtre sous la forme d’un produit de convolution : Pour un filtre dont la réponse impulsionnelle est , on en déduit : • La longueur du filtre est R=4 • La durée de la réponse impulsionnelle est • l’EaD • Et la fonction de transfert Appliquer à :
Imposer la réponse harmonique d’un filtre, c’est imposer sa réponse impulsionnelle. Soit la réponse harmonique imposée définie à partir de R points de fréquence. C’est la transformée de Fourier rapide de la réponse impulsionnelle recherchée : où ifft est la fft inverse. Même si Hk est réelle, hn peut être dotée d’une partie imaginaire pure, ce qui est à exclure pour une équation aux différences à coefficients réels; Pour assurer hn réelle, on démontre en utilisant la définition de ifft qu’il faut imposer Hk paire : Concevoir Hk pour un filtre passe bas de longueur 16 avec fc=1000Hz et fe=8000Hz
Matlab peut calculer les coefficients du filtre si on spécifie la réponse harmonique %définir et tracer RH R=32; fe=8000; fc=1000; N = fix(fc*R/fe); n=0:R-1; fr= n*fe/R-fe/2; H=[ones(1,N+1), ... zeros(1,R-2*N-1),... ones(1,N)]; stem(fr,fftshift(H)) % calcul et tracé de hn h=fftshift(real(ifft(H))); stem((n-R/2)/fe,h) % calcul et tracé de RH spec=abs(fft(h,R)); stem(fr,fftshift(spec)) xlabel('frequence (Hz)') ylabel('Réponse harmonique') grid on Décrire le filtre réalisé
Le filtre précedent n’est pas rectangulaire ! Ici, Matlab calcule plus de points (courbe rouge) sur la réponse harmonique du filtre précédent : hold on fr2=[0:R2-1]*fe/R2-fe/2; spec2= abs(fft(h,5*R)); plot(fr2,fftshift(spec2),'r') Voici ce qui advient si on arrondit la forme de la réponse harmonique : 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)]; Conclure :
Pour obtenir des filtres passe-bande, on décale le filtre passe bas précédent La relation ci-dessus, tirée de la définition de ifft, détermine à partir de hn la réponse impulsionnelle d’un filtre passe bande. On vérifie avec Matlab : Quel est le type de ce filtre, son gain statique, quel est le filtre passe bas que l’on a décalé ?
Appliqué à un signal audio, un tel filtre en découpe le spectre avec précision Ce script Matlab applique un filtre passe bande dont la forme est donnée par H au son piano.wav % lecture du son à filtrer [e,fe,b]=wavread ('piano.wav'); % définition du filtre R=256; % longueur du filtre fc=500; % bande passante f0=1500; % fréquence centrale N = fix(fc*R/fe); 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)]; % réponse impulsionnelle h=fftshift(real(ifft(H))); filtre = 2*cos(2*pi*[0:R-1]*f0/fe).*h; % filtrage du signal audio y=filter( filtre,1,e); wavwrite(y,fe,b,'pianofiltre.wav'); % calcul de l’énergie du signal E=(y’*y)/2; Voici les spectrogrammes de piano.wav suivi de pianofiltre.wav calculés et tracés par Goldwave
Énumerer les particularités du groupe de quatre filtres créés ci-dessous par Matlab % comment créer un banc de quatre filtres avec Matlab [e,fe,b]=wavread ('BBC.wav'); R= 128; M= 4; N= R/(4*M); n=0:R-1; 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))); for j=0:M-1 % réponses impulsionnelles des filtres bande(j+1,:)=2*cos((2*j+1)*n*pi/(2*M)).*h; end fr=n*fe/R-fe/2; coul=['r','b','g','k','y','m','c','rp']; hold on for j=0:M-1 % calcul et tracé des réponses harmoniques stem(fr,abs(fftshift(fft(bande(j+1,:)))),coul(j+1)) end xlabel('fréquence (Hz)') ylabel('Réponse harmonique') grid on