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