TP_signal_1

  • Published on
    18-Oct-2015

  • View
    19

  • Download
    0

Transcript

fvrier-mars 2008 Benot Decoux 1Traitement du Signal - Travaux Pratiques - Thme : "Echantillonnage, Transforme de Fourier dun signal chantillonn" Modalits de droulement Travail en binme - Sauf autorisation Evaluation - Rapport de synthse ( remettre 1 semaine aprs la dernire sance) - Comprhension des exercices (valuation continue) - Travail effectu Logicie/langage utilis - le logiciel/langage de programmation utilis est Matlab - Remarque : il existe un logiciel libre dvelopp sur le modle de Matlab par lINRIA (laboratoire de recherche franais) : Scilab. Sa syntaxe est pratiquement identique celle de Matlab. Il diffre de Matlab du point de vue de ses fonctions spcialises (et notamment des fonctions de Traitement du Signal). - Une petite aide lutilisation de Matlab est donne en annexe 1) Prise en main de Matlab (dure recommande : 30mn) En dernire page de ce document est donne une liste de commandes destine la dcouverte de Matlab par la pratique directe, de manire progressive. Si vous ntes pas encore familiaris avec Matlab, il est conseill de toutes les tester (utiliser pour cela la fentre de commande de Matlab) et danalyser leurs effets, pour aborder plus facilement les programmes de la suite. Pour des explications sur les commandes Matlab, il existe la commande help suivi du nom de la commande. Il est conseill de commenter chacune de ces commandes (symbole de dbut de commentaire : %); cela peut savrer utile pour la suite. Pour cette partie, il ny a pas de travail de synthse effectuer. 2) Gnration et affichage de signaux A partir de cet exercice, il est conseill dutiliser le mode "fichier" de Matlab (menu Fichier, option Nouveau, etc). On souhaite gnrer afficher un signal sinusodal dquation )tf2sin(.A)tsin(.A)t(s 00 == o A est son amplitude et f0 sa frquence (0 sa pulsation). Les diffrentes tapes ci-dessous permettent de raliser cette opration. 2.1) Pour connatre les instants des chantillons de ce signal, il faut gnrer un vecteur dont les lments reprsentent des instants rgulirement espacs (on lappellera "vecteur de temps"), par exemple de la manire suivante : fvrier-mars 2008 Benot Decoux 2 t=(0:N-1)*Te; %N : nombre dch. total ; Te : priode dchantillonnage Le signal peut alors tre gnr laide de la commande suivante : s=a*sin(2*pi*f0*t); On choisit les paramtres suivants : frquence dchantillonnage : fe=100Hz, 1000Hz et 10000Hz, frquence du signal : f0=10Hz, amplitude du signal : a=1. Ecrire un programme, utilisant les 2 lignes de code ci-dessus, permettant de gnrer (et dafficher) une priode de signal. 2.2) On souhaite avoir toujours un nombre entier de priodes dans les N chantillons (on verra pourquoi dans lanalyse de la TFD). Modifier ce programme pour avoir un paramtre np (nombre de priodes). Le tester pour np=1. 2.3) Modifier le programme pour gnrer 3 priodes de signal, les afficher en rouge et donner un titre au graphique. 2.4) Proposer une solution pour que cet axe soit gradu avec le temps correspondant au signal (prciser comment est gradu laxe des abscisses sinon). 3) Etude de lchantillonnage Remarque : cet exercice reprend une partie de lexercice 2 du TD3 (partie "Echantillonnage"). Introduction Avec Matlab utilis seul, on ne peut pas raliser dchantillonnage proprement dit (sauf si lon dispose dun matriel dacquisition de signaux gr par Matlab). On ne contrle pas les paramtres dchantillonnage, puisquon travail directement sur des signaux numriques (par exemple, un fichier son, un signal biomdical dont les chantillons sont stocks dans un fichier, etc). On ne peut donc pas tudier directement les consquences du sur-chantillonnage et du sous-chantillonnage. Par contre, on peut les simuler sur un signal numrique. En effet, sous-chantillonner un signal discret provoque sur le signal discrtis les mmes effets que le sous-chantillonnage dun signal analogique (voir cours). 3.1) Echantillonnage dun signal de test Gnration du signal On considre un signal sinusodal dfini par : )tf2sin()t(s 0= avec f0=1Hz. fvrier-mars 2008 Benot Decoux 33.1.1) Rappeler (sans dmonstration) lexpression thorique de son spectre (complexe) damplitude et le reprsenter. 3.1.2) On choisit dchantillonner ce signal la frquence fe=4 Hz. Vrifier que cette frquence dchantillonnage est correcte, du point de vue thorique (en justifiant la rponse). Ecrire un programme permettant de gnrer et dafficher quelques priodes du signal s(t). Affichage du spectre 3.1.3) Reprsenter le spectre thorique du signal sur un intervalle allant de fe 2fe (en considrant que sa dure est infinie). 3.1.4) Afficher son spectre laide de la fonction fft (lalgorithme FFT, pour Fast Fourier Transform, est un algorithme de calcul rapide de la TFD, Transforme de Fourier Discrete), par exemple de la manire suivante : tfd=fft(s,N)/N; %TFD du signal s, sur N chantillons Remarque : tfd est une variable, on peut lappeler comme on veut ! Sous-chantillonnage 3.1.5) On simule un sous-chantillonnage de ce signal modifiant la frquence dchantillonnage. Donner lexpression thorique du signal non-tronqu chantillonn. 3.1.6) Observer leffet du sous-chantillonnage en faisant varier la frquence du signal aux valeurs suivantes : f0=fe/10 f0=fe/4 f0=fe/2 f0=fe*3/4 f0=fe*10/9 Interprter les rsultats en raisonnant sur le spectre (pour le 3e cas, on prcisera quelles sont les valeurs thoriques des chantillons). Filtrage anti-repliement Pour simuler le filtrage anti-repliement, le signal va dabord tre sur-chantillonn, puis sous-chantillonn, dabord sans puis avec filtrage. 3.1.7) Avec f0=0,4Hz, afficher le signal sinusodal prcdent sur-chantillonn dun facteur 5 (en prcisant fe). 3.1.8) Pour le sous-chantillonnage, on peut utiliser par exemple les lignes de code suivantes : j=1; for i=1:N if mod(i,se)==0 signal2(j)=signal(i); j=j+1; end; end; o la variable signal est le vecteur des chantillons du signal, et se est le facteur de sous-chantillonnage. fvrier-mars 2008 Benot Decoux 4Analyser ce que font ces lignes de code, et afficher le signal ainsi sous-chantillonn (par exemple avec les valeurs suivantes de se : 2, 5, 7 et 9, ou dautres valeurs), avec laxe du temps correctement gradu. Interprter ces rsultats en mettant en vidence le problme pos par lchantillonnage. 3.1.9) Recommencer les tests prcdents en filtrant (passe-bas) le signal pralablement son sous-chantillonnage, au moyen de la fonction filter et dun filtre de Butterworth (voir exemple ci-dessous). On choisira la frquence de coupure et lordre du filtre judicieusement. Reprendre les tests de la question prcdente et mettre en vidence lamlioration apporte par ce filtrage. Exemple de programmation dun filtre de Butterworth (et affichage de sa rponse en frquence) : ... [b,a]=butter(N,Wn); %dfinir N et Wn [H,phase]=freqz(b,a,F); %F vecteur de frquences dfinir semilogx(F,20*log(abs(H))); 3.1.10) Recommencer la mme chose avec la fonction pr-dfinie de Matlab decimate. 3.2) Application un signal sonore On souhaite reprendre les tests prcdents sur un cas concret. On considre un signal sonore stock dans un fichier son de type WAV. Dans les fichiers utiliss pour cette sance de TP, ce son a t chantillonn une frquence 44,1kHz (frquence pour une qualit haute-fidlit, utilise pour les CD). Dans une application de tlphonie, on se limite une bande passante de 8kHz. 3.2.1) Choisir lun des fichiers WAV proposs sur la page Internet du TP. Charger les chantillons de ce fichier en mmoire (commande wavread). Par ttonnement, rechercher une partie du signal prsentant une priodicit, et lafficher en mode temporel (quelques priodes) ainsi quen mode frquentiel (fonction FFT), avec les graduations correctes des axes. 3.2.2) Relever la frquence fondamentale (approximative) du signal, la fois en mode temporel et en mode frquentiel. 3.2.3) Le spectre du signal audio est celui reprsent ci-dessous, avec fmax=22050Hz. On suppose que lon travaille sur une application de tlphonie et que la bande utile du signal est de 8kHz ; pour simplifier, on prendra pour limite de bande utile fu=22050/4=5512,5Hz. On considre que le signal de 44100Hz prsent dans les fichiers WAV utiliss est la version sur-chantillonne du signal utile, pouvant tre chantillonn lui 11025Hz. fmax-fmax 0 fu-fu fvrier-mars 2008 Benot Decoux 5 Le spectre du signal chantillonn 2fu est le suivant : Sil nest pas pralablement filtr, le chevauchement des spectres se traduira par des signaux parasites supplmentaires dans la bande utile. Raliser un sous-chantillonnage du signal charg partir dun fichier WAV chantillonn 44100Hz dun facteur 4, et mettre en vidence le problme de repliement des spectres en comparant le signal original et le signal sous-chantillonn (si lon dispose dun casque, on pourra galement couter leffet sur le son). Remarque : cette question reprend lexercice 1 du TD3. 3.2.4) Rsoudre le problme en filtrant le signal avec un filtre de Butterworth dont les paramtres seront judicieusement choisis. fmax-fmax 0 fu-fu fvrier-mars 2008 Benot Decoux 6Annexe : Prise en main de Matlab 1) Introduction Matlab est un langage interprt, cest dire que si lon crit une suite de commandes, celles-ci sont traites une une. Les variables utilises dans une ligne de commande restent alors en mmoire. La liste des commandes peut galement tre copie dans un fichier texte (portant lextension .m) ; il est recommand de le faire lorsque celle-ci sallonge. La structure de ces programmes peut alors tre trs proche dun programme en C, les dclarations de variables et les allocations mmoire en moins. Matlab fonctionne sur le principe du calcul matriciel. Toutes les variables sont vues comme des matrices. Une variable simple (ce quon appelle "un scalaire") est vue comme une matrice une ligne et une colonne ; un vecteur de N lments est vu comme une matrice une colonne et N lignes. 2) Pour dmarrer avec Matlab 2.1) Mode "Commandes" Le liste des commandes suivantes permettent de se familiariser la syntaxe de Matlab. help help signal x=2; x clear x x x=3 clear x x=[1 2 3]; x clear x x=[1 2 3] %noter la diffrence par rapport la 1re commande y=[4;5;6] x y clear y y=[4 5 6] z=[x y] clear z z=[x;y] t=[0:9] t=(0:9) size(t) t=[0:0.1:0.9] t=[0:9] size(t) pi clear for i=1:10 s(i)=i; end s clear t=0:0.1:2*pi s=sin(t) %observer ces valeurs fvrier-mars 2008 Benot Decoux 7plot(s) help plot(t,s) clear N=10 e=0.1 t=(0:N-1)*e m=ones(2,3) zeros(3,2) eye(3,3) m(:,2)=0 m(2,:)=0 x=[1 2 3] y=[4;5;6] x*y dot(x.y) subplot(2,1,1); %recommencer (les 2 lignes) avec (1,2,1) stem(sin([0:0.1:2*pi])) subplot(2,1,2); %recommencer (les 2 lignes) avec (1,2,2) stem(sin(2*pi*100*[0:99]/10000)) 2.2) Mode "Fichiers" (.m) Le mode "Fichiers" Pour sauvegarder une liste de commandes Matlab dans un fichier (qui doit porter lextension .m), il faut ouvrir lditeur de commandes de Matlab. Louverture et la cration de fichiers .m deffectue partir du menu File de la fentre de commandes. On appellera ces fichiers "programme Matlab". Excuter un programme Matlab Pour excuter un programme Matlab, on peut utiliser le menu Debug, option Run, de lditeur texte de Matlab. Obtenir de laide Complte : help Sur une bote outils (exemple : Signal Processing Toolbox) : help signal Sur une fonction particulire : help fonction (remplacer fonction par un nom de fonction Matlab) Afficher le rsultat dune commande Il suffit de ne pas mettre de point virgule la fin de la ligne. 2) Fonctions utiles fvrier-mars 2008 Benot Decoux 8 Remarque pralable : la plupart des fonctions Matlab peuvent comporter un nombre darguments variable ; de mme, elles peuvent renvoyer plusieurs variables, qui peuvent tre utilises ou non selon les besoins. wavread, wavwrite Lecture et criture de foichiers WAV fft Fast Fourier Transform : algorithme rapide de calcul de la TFD (Transforme de Fourier Discrte) plot Affichage graphique (2D) dun tableau (sous forme de courbe) subplot Permet davoir plusieurs graphes sur la mme figure stem Graphe dun signal (style "discret") freqz Rponse en frquence dun filtre. Filter Calcul de la sortie dun filtre fir1 Conception dun filtre rponse impulsionnelle finie buttord,cheb1ord,cheb2ord,ellipord Synthse des filtres numriques resample R-chantillonnage dun tableau square Gnration dun signal carr abs, angle, real, imag, conj Pour des variables complexes, respectivement : module, argument, partie relle, partie imaginaire, conjugu. Traitement du Signal- Travaux Pratiques -Thme: "Echantillonnage, Transforme de Fourier dun signal chantillonn"Travail en binmeEvaluationLogicie/langage utilisIntroductionGnration du signalAffichage du spectreSous-chantillonnage3.2) Application un signal sonore1) Introduction2) Pour dmarrer avec Matlab2.1) Mode "Commandes"