Th`eme Signal - TP3 : Filtrage

Transcription

Th`eme Signal - TP3 : Filtrage
Université Joseph Fourier
UE MAP110/120
DLST
Année 2013-14
Thème Signal - TP3 : Filtrage
1 - Préambule
Un signal peut se présenter sous différentes formes :
– un enregistrement sonore d’un microphone,
– une image prise par un appareil photo,
– des données reçues par un ordinateur connecté à internet.
Le bruit est un phénomêne qui dégrade l’acquisition d’un signal. Il peut être caractérisé par :
– une mauvaise réception sonore à l’écoute de la radio en voiture (grésillement),
– une photo dégradée prise par manque de lumière,
– des problèmes de connexion WIFI d’un ordinateur (coupures de connexion).
On peut formaliser simplement la chaı̂ne d’acquisition d’un signal bruité de la façon suivante :
sb (t) = s(t) + b(t)
où sb (t) désigne le signal bruité en fonction du temps t, s(t) le signal d’origine et b(t) la réalisation
d’un bruit.
Dans ce TP, vous allez créer des signaux, additionner du bruit à ceux-ci et montrer qu’une
opération de filtrage de type convolution permet de retrouver approximativement s(t) à partir de
sb(t) sans connaissance de b(t).
L’objectif de vous faire comprendre :
– le contenu du spectre de puissance d’un signal calculé à partir de sa Transformée de Fourier,
– la notion de bruit dans une chaı̂ne d’acquisition d’un signal et sa caractérisation fréquentielle,
– le filtrage d’un signal afin de supprimer le bruit et le restaurer,
– le lien entre représentation temporelle et fréquentielle d’un signal.
Avant de commencer, récupérez les fichiers createsignal.sci, createnoise.sci, createfilter.sci,
filtersignal.sci et sur ALFRESCO https ://espaces-collaboratifs.grenet.fr, site MAP110-120,
Theme Signal, TP3
et placez-les dans un nouveau répertoire nommé TP3.
Démarrez Scilab et placez-vous dans ce répertoire TP3 .
Pour charger l’ensemble de fonctions nécessaires (fichiers avec l’extension .sci) à ce TP, à chaque
démarrage de Scilab, tapez la commande
getd .
2 - Générateur de signaux
Exercice 1 :
La fonction createsignal.sci permet de générer des signaux sinusoı̈daux de deux types
différents. Dans la console Scilab, appelez une première fois cette fonction de la façon suivante :
N = 1024 ;
[ sb ,t ] = createsignal (N , " BF " ) ;
MAP110/120 - 2013-14
1
TP3 - Signal
N correspond au nombre de points du signal sb qui est un vecteur de taille N ≥ 1.
t est le vecteur des instants de temps pour chaque échantillon de sb, qui est aussi de taille N.
A partir de t, déterminez la période d’échantillonnage Te du signal (indice : c’est l’écart en temps
de deux échantillons successifs).
Déduisez-en la fréquence d’échantillonnage Fe à partir de Te .
Exercice 2 :
Dans l’éditeur de Scilab, copiez le programme suivant en le nommant computespectrum.sci.
Vous prendrez soin de compléter les espaces manquants dans ce programme, délimités par les
caractères ... :
function [Ps , f] = computespectrum (y , t)
N = length (t );
// periode echantillonnage Te
Te = ... // A COMPLETER
// frequence echantillonnage Fe
Fe = ... // A COMPLETER
f = 0: Fe /N : Fe /2;
Y = fft ( y );
// spectre de puissance Ps
Ps = ... // A COMPLETER
Ps = Ps (1: N /2+1);
endfunction
Exercice 3 :
A l’aide de votre nouvelle fonction, calculez le spectre de puissance du signal sb dans la console
Scilab :
getd .
[ Psb , f] = computespectrum ( sb ,t ) ;
et en vous inspirant des commandes utilisées lors du TP2, tracez le signal sb en fonction de t.
Faites de même pour le spectre de puissance Psb en fonction de f.
Au regard de l’évolution temporelle du signal et de son spectre de puissance, déduisez son
type de contenu fréquentiel (basses, moyennes ou hautes fréquences).
A partir de la figure du spectre de puissance Psb, déduisez les valeurs des trois fréquences
contenues dans le signal sb. Vous pouvez pour cela utiliser l’outil zoom de la fenêtre graphique
de Scilab.
Exercice 4 :
Exécutez les commandes suivantes :
[ sh ,t ] = createsignal (N , " HF " ) ;
[ Psh , f] = computespectrum ( sh ,t ) ;
puis repondez aux mêmes questions que l’exercice 3 en considérant maintenant le signal sh et son
spectre de puissance Psh.
Exécutez dans la console Scilab, la commande suivante pour sauvegarder vos données :
save (" partie2 . dat ") ;
MAP110/120 - 2013-14
2
TP3 - Signal
3 - Générateur de bruit
Au préalable, si vous avez quitté Scilab après la fin de la partie précédente, vous pouvez recharger
les données avec la commande
load (" partie2 . dat ") ;
Bien que le bruit soit aléatoire, il possède certaines caractéristiques dans son spectre de puissance.
Vous observerez ce principe dans les questions suivantes.
3.1 - Bruit violet
La fonction createnoise.sci permet de générer du bruit de trois types différents. Vous testerez
dans un premier temps le bruit violet.
Exercice 5 :
Dans la console Scilab, appelez cette fonction de la façon suivante, et calculez le spectre de
puissance du bruit associé :
[ bv ,t ] = createnoise (N ," violet ") ;
[ Pbv , f] = computespectrum ( bv ,t ) ;
Vous pouvez répéter ce programme plusieurs fois et tracer le résultat de bv et Pbv afin de vous
convaincre du caractère aléatoire de ce bruit dans le temps, mais de contenu fréquentiel très
caractéristique (indice : tracer le logarithme du spectre de puissance selon la fréquence peut aider
à mieux interpréter le résultat, il faut pour cela tracer log(Pbv) au lieu de Pbv).
Déduisez le type de contenu fréquentiel du bruit violet à partir de vos deux figures ; justifiez votre
observation.
3.2 - Bruit rose
Exercice 6 :
Refaites l’exercice mais en appelant la fonction createnoise pour créer un bruit rose :
[ br ,t ] = createnoise (N ," rose ") ;
3.3 - Bruit blanc
Exercice 7 :
Refaites l’exercice mais en appelant la fonction createnoise pour créer un bruit blanc :
[ br ,t ] = createnoise (N ," blanc " ) ;
Dans la console scilab, exécutez la commande suivante pour sauvegarder vos données :
save (" partie3 . dat ") ;
MAP110/120 - 2013-14
3
TP3 - Signal
4 - Bruitage des signaux
Au préalable, si vous avez quitté Scilab après la fin de la partie précédente, vous pouvez recharger
les données avec la commande
load (" partie3 . dat ") ;
Afin de respecter la chaine d’acquisition, nous souhaitons ajouter du bruit dans les signaux que nous
avons observés en partie 1.
Exercice 8 :
Exécutez les commandes suivantes dans la console Scilab :
sb_bv = sb + bv ;
[ Psb_bv ,f ] = computespectrum ( sb_bv ,t ) ;
Décrivez ce qui est contenu dans le vecteur sb bv ; justifiez votre observation à partir du tracé de
sb bv en fonction de t et de Psb bv en fonction de f.
Exercice 9 :
Refaites l’exercice précédent avec :
– la somme du signal sb et du bruit br :
sb_br = sb + br ;
[ Psb_br ,f ] = computespectrum ( sb_br ,t ) ;
– la somme du signal sb et du bruit br :
sb_bb = sb + bb ;
[ Psb_bb ,f ] = computespectrum ( sb_bb ,t ) ;
– la somme du signal sb et du bruit br :
sh_bv = sh + bv ;
[ Psh_bv ,f ] = computespectrum ( sh_bv ,t ) ;
– la somme du signal sb et du bruit br :
sh br = sh + br ;
[ Psh br ,f ] = computespectrum ( sh_br ,t ) ;
– la somme du signal sb et du bruit br :
sh_bb = sh + bb ;
[ Psh_bb ,f ] = computespectrum ( sh_bb ,t ) ;
Observez dans chaque cas le signal bruité et le spectre de puissance correspondant.
Dans la console scilab, exécutez la commande suivante pour sauvegarder vos données :
save (" partie4 . dat ") ;
MAP110/120 - 2013-14
4
TP3 - Signal
5 - Filtrage et restauration des signaux bruités
Au préalable, si vous avez quitté Scilab après la fin de la partie précédente, vous pouvez recharger
les données avec la commande
load (" partie4 . dat ") ;
Le filtrage d’un signal bruité a pour objectif d’éliminer le bruit parasite et restaurer le signal tel qu’il
aurait du être perçu à l’origine (on parle couramment d’améliorer le rapport signal sur bruit). La
convolution est une méthode de filtrage permettant cette opération de restauration.
Son expression mathématique discrète est la suivante :
+∞
X
sr (t) = sb (t) ⋆ h(t) =
sb (n) × h(t − n)
n=−∞
où sr (t) désigne le signal filtré, sb (t) le signal bruité et h(t) le filtre. Il est intéressant de noter que
dans l’espace des fréquences, le produit de convolution (⋆) devient un produit simple (×) :
Sr (f ) = Sb (f ) × H(f )
où Sr (f ), Sb (f ) et H(f ) sont respectivement les transformées de Fourier de sr (t), sb (t) et h(t).
5.1 - Filtres
On se propose de tester deux types de filtre appelés passe haut et passe bas, conformément aux
fréquences que ces filtres ”laissent passer” et ”coupent”.
Exercice 10 :
La fonction createfilter.sci permet de créer un filtre suivant le type demandé. Dans la
console Scilab, créez un filtre passe-bas de la façon suivante
hpb = createfilter ( " PB ") ;
puis calculez le spectre de puissance de ce filtre avec la commande suivante :
[ Phpb ,f ] = computespectrum ( hpb ,t ) ;
Tracez le spectre de puissance Phpb en fonction de f, expliquez d’après la figure obtenue en quoi
ce filtre peut être qualifié de ”passe bas”. (indice : appuyez-vous sur la forme du spectre de
puissance, la représentation temporelle n’a pas d’interêt ici).
Exercice 11 :
De la manière similaire, on peut construire un filtre passe-haut de la façon suivante :
hph = createfilter ( " PH ") ;
[ Phph ,f ] = computespectrum ( Phph , t) ;
puis calculez le spectre de puissance de ce filtre avec la commande suivante :
[ Phpb ,f ] = computespectrum ( hpb ,t ) ;
Tracez le spectre de puissance Phph en fonction de f, expliquez d’après la figure obtenue en quoi
ce filtre peut être qualifié de ”passe haut”.
MAP110/120 - 2013-14
5
TP3 - Signal
5.2 - Restauration
Dans la partie 3, vous avez créé 6 signaux dont les caractéristiques signal et bruit sont différentes
à chaque fois (sb bv, sb br, sb bb, sh bv, sh br et sh bb).
On se propose ici de restaurer ces signaux par filtrage, et de comparer le résultat avec le signal
d’origine tel qu’il a été créé en partie 1 (sb et sh).
Exercice 12 :
Vous disposez de deux filtres (hpb et hph) ; pour chaque signal bruité, choisissez un filtre et
exécutez la commande suivante pour le restaurer (exemple pour le signal bruité sb bv) :
sb_bv_r = filtersignal ( sb_bv ,#) ;
où sb bv r désigne le signal restauré et # désigne le filtre que vous aurez choisi (remplacez # par
hpb ou hph). Ce filtre doit être sélectionné en fonction des caractéristiques fréquentielles du signal
et du bruit. Deux cas sont évidents, pour les autres vous respecterez la consigne suivante : couper
les fréquences du bruit en dehors de la fréquence du signal.
Exercice 13 :
Pour chaque signal restauré, exécutez les commandes graphiques suivantes permettant de le
comparer au signal d’origine dans le temps (exemple pour le signal restauré sb bv r) :
figure () ;
subplot (4 ,1 ,1) ;
plot2d (t , sb ,1) ;
xtitle ( " signal " ,#) ;
subplot (4 ,1 ,2) ;
plot2d (t , sb bv ,2) ;
xtitle ( " signal bruite " ,#) ;
subplot (4 ,1 ,3) ;
plot2d (t , sb bv r ,2) ;
xtitle ( " signal restaure " ,#) ;
subplot (4 ,1 ,4) ;
plot2d (t ,[ sb - sb bv sb - sb bv r ]) ;
xtitle ( " erreurs avant et apres filtrage " ,#) ;
Vous prendrez soin de remplacer le symbole # par la légende de votre axe.
Exercice 14 :
Pour chaque signal restauré, calculez son spectre de puissance, tracez-le en fonction de f.
Interprétez la forme du spectre obtenu.
MAP110/120 - 2013-14
6
TP3 - Signal