- Traitement du Signal –

Transcription

- Traitement du Signal –
CESI Mont-Saint-Aignan – février 2007 – Benoît Decoux
- Traitement du Signal –
Travaux Pratiques – n°5
Objectifs :
1) Filtrage de type RII
2) Filtrage temps-réel
3) Filtrage de type RIF
4) Filtrage d’un signal réel
par programmation Scilab.
1) Filtrage de type RII
1.1) Générer quelques périodes d’un signal constitué par la somme de 2 signaux sinusoïdaux
de mêmes amplitudes et de fréquences respectives f1=10Hz et f2=100Hz.
1.2) Filtrer ce signal à l’aide des fonctions iir et flts de Scilab (voir annexe). On prendra
pour le filtre le type Butterworth passe-bas et l’ordre 8. Afficher le signal original et le
signal filtré dans la même fenêtre. Commenter les résultats.
1.3) Recommencer avec le type passe-haut. Commenter.
1.4) A l’aide de la fonction bode de Scilab, afficher le diagramme de Bode de ce dernier
filtre, et l’interpréter. Indiquer notamment la pente de la variation du gain en dB/décade.
1.5) Précisez les coefficients du filtre numérique utilisé (en affichant le résultat de la
fonction iir), et l’équation aux différences correspondante (s(n) en fonction de s(n-i),
i=1,2,… et e(n-j), j=0,1,….
2) Filtrage temps-réel
Le filtrage réalisé ci-dessus n’est pas temps-réel. Pour s’approcher d’une implantation
temps-réel, il faut programmer soi-même l’équation aux différences.
On choisit de programmer la version numérique du filtre passe-bas du 2e ordre
programmé pour le TP4, dont l’équation aux différences est :
s(n) = a0e(n) + a1e(n − 1) + a2e(n − 2) + b1s(n − 1) + b2s(n − 2)
2.1) En utilisant les formules du cours, calculer (à l’aide de Scilab) les coefficients ai et bi du
filtre numérique pour avoir une fréquence de coupure fc=50Hz et un coefficient
d’amortissement ξ=0,7.
2.2) Programmer l’équation aux différences et l’appliquer au signal précédent. Commenter.
3) Filtrage de type RIF
3.1) En utilisant la méthode de synthèse des filtre RIF pas développement en série de Fourier
de la réponse fréquentielle (voir algorithme et programme vu en cours), calculer les
coefficients d’un filtre RIF passe-bas dont la fréquence de coupure est 50Hz. On
prendra un nombre de coefficients N égal à 10.
3.2) Afficher le diagramme de Bode de ce filtre en utilisant le programme suivant :
d(N)=1;
num=poly(h, "z", "coef");
den=poly(d, "z", "coef");
sys=syslin('d', num, den);
xbasc;
bode(sys, 0.0001, 0.5);
//->sys=système linéaire
//effacement graphique
3.3) Diminuer le phénomène d’ondulations dans la bande passante en pondérant les
coefficients par une fenêtre de Hamming. Commentez.
3.4) Recommencer avec N=30. Commenter les différences.
1
CESI Mont-Saint-Aignan – février 2007 – Benoît Decoux
4) Filtrage d’un signal réel
4.1) Appliquer un filtrage passe-bas de type RII, avec une fréquence de coupure de 200 Hz
(environ) à un signal sonore stocké dans un fichier de type WAV. Ecouter et interpréter
le résultat.
4.2) Même chose avec un filtrage passe-haut avec une fréquence de coupure de 500 Hz
(environ).
4.3) Visualiser le spectrogramme du son non-filtré et celui du son filtré, et interpréter les
différences entre eux.
2
CESI Mont-Saint-Aignan – février 2007 – Benoît Decoux
Annexe : Quelques fonctions Scilab de filtrage
Fonction iir : génération d’un filtre de type RII
Cette fonction renvoie une structure de filtre (sous la forme d’une fonction de transfert) pouvant
être passé directement à la fonction de filtrage flts décrite après.
Syntaxe :
[hz]=iir(n,ftype,fdesign,frq,delta)
Entrées :
! L’argument n est l’ordre du filtre (un entier positif).
! L’argument ftype est le type du filtre ; il peut prendre les valeurs
’lp’ : passe-bas,
’hp’ : passe-haut,
’bp’ : passe-bande
’sb’ : stoppe-bande
! L’argument fdesign indique le type de la technique de synthèse de filtre analogique
! La valeur de fdesign peut être
’butt’ pour un filtre de Butterworth filter design,
’cheb1’ for a Chebyshev filter design of the first type,
’cheb2’ for a Chebyshev filter design of the second type, or
’ellip’ for an elliptic filter design.
! L’argument frq est un vecteur à 2 élements contenant les fréquences de coupure du filtre désiré.
Pour les filtres passe-bas et passe-haut, seul le 1er élément est utilisé (il faut quand même exprimer
les 2 élements du vecteur avec la syntaxe [val1, val2], où val1 et val2 sont les valeurs des 2
éléments). Le 2e élément est utilisé pour les types passe-bande et stoppe-bande. Dans Scilab, les
fréquences sont exprimées en proportion de la fréquence d’échantillonnage fe : cette proportion va
de 0 à 1. Mais comme on est dans le domaine échantillonné, il faut respecter la condition de
Shannon et ne pas travailler à des fréquences supérieures à fe/2, donc de 0 à 0,5. Par exemple, un
signal de 1000 Hz, échantillonné à 10kHz, correspond à 0,1.
! delta : non utilisé avec les filtres de Butterworth (on le remplace alors [0 0]).
Sortie :
! hz est la sortie de la fonction, un polynôme donnant les coefficients du filtre désiré.
Fonction flts : application d’un filtre de type RII à un signal
Syntaxe :
[s]=flts(e,f)
Entrées :
! e : le signal d’entrée
! f : le filtre (retourné par la fonction iir)
Sortie :
! s : signal de sortie
3