Vous êtes sur la page 1sur 25

Exemples Simples pour Commencer Utiliser MATLAB en Traitement du Signal

Jol Le Roux et Jean-Paul Stromboni Dpartement Sciences Informatiques Polytech Nice

Ce document ne cherche pas tre complet, mais seulement permettre de commencer crire des programmes simples en matlab ; on trouvera sur le web de nombreux cours de matlab et laide de matlab contient toutes les informations utiles pour amliorer son savoirfaire et approfondir ses connaissances. Pour commencer (On suppose que Matlab est install ...) On lance matlab ; dans la fentre qui apparait on voit >> qui indique que matlab attend une commande. Remarque : On peut bien sr commencer par les exemples de laide de matlab

1. Premires oprations : Les commandes au clavier 2. Cration de programme dans un fichier 2.1. Retrouver et excuter des programmes matlab crits dans des fichiers .m et rangs dans un dossier 3. Ralisation et modification dun programme 4. Oprations en matlab 5. Gestion des graphiques 6. Conception de programmes un peu complexes 7. Les tests logiques de base 8. Utilisation dun rsultat de test pour modifier lexcution dun programme 9. Un autre type dopration courante est la rptition dune squence dinstructions (boucle) 10. Gestion des squences (vecteurs, matrices) 11. Les fonctions 11.1. Quelques fonctions utiles 11.2. Appel de fonctions et gestion des fichiers dans les dossiers 12. Entres Sorties de sons et dimages :

1 Premires oprations : Les commande au clavier (pour faire des calculs simples, des affichages de graphes, ...) dans la fentre de commande ( command window ) >> Indique que Matlab attend une commande

Entre au clavier Le rsultat saffiche Entre au clavier Le rsultat est calcul et affich saffiche Commande pour tracer la squence b Le graphique va apparatre dans une autre fentre grid on indique que les units apparaissent dans le trac sous la forme dune grille e Dans cet exemple a est un vecteur ligne ; en frappant b=a+2 on cre un second vecteur ligne b en ajoutant 2 chacun des lments de a On demande un trac en frappant la commande plot ; le rsultat saffiche dans une nouvelle fentre : en abscisse on obtient le numro dindice et en ordonne la valeur de la composante correspondante de b .

Affichage dans la nouvelle fentre des valeurs des lments de la squence b

Si on frappe un point-virgule la fin de la ligne de commande


>> b = a + 2 ;

et non
>>b=a+2

Alors la commande est excute mais le rsultat nest pas affich Si on veut entrer une squence longue dintervalles rguliers sans entrer toutes les valeurs on utilise les deux points :

Il est possible dappliquer des fonctions sur la squence a :

affiche le sinus de la squence :

En abscisse il y a un simple numro : la position de llment a dans le calcul (on notera que matlab commence les numros dindice 1 et non zro) Pour se dplacer dans la liste des instructions, on peut utiliser es flches du clavier

Si on frappe Entre , cest la ligne slectionne qui est excute. 2 Cration de programme dans un fichier On se rend compte que la frappe directe dinstructions permet difficilement de gnrer sans erreur des squences doprations trs complexes ; pour y arriver il faut enregistrer les programmes dans un fichier dont on lancera lexcution quand il sera prt

On clicke sur File et (en gardant lindex appuy, click gauche) dans le menu droulant New M-File . Ceci fait apparatre une nouvelle fentre (Editor) dans laquelle on ditera le texte du programme

Rangement des fichiers dans les dossiers

Attention : Il est important de shabituer la gestion des fichiers : il faut savoir dans quel dossier on range les fichiers pour pouvoir les retrouver, les modifier ventuellement et les excuter par la suite . Une fois quon a crit un programme il faut le sauvegarder : on choisit par exemple save as et le nom du fichier qui doit ncessairement avoir lextension .m : matlab reconnaitra par la suite cette extension lorsquon lui demandera lexcution dans la fentre de commande ; par exemple pour excut le programme enregistr dans le fichier premierpas.m il faudra frapper dans la fentre Command Window >> premierpas Ici le fichier premiersepas.m est rang dans le dossier work de matlab

Voici le contenu du fichier premierspas.m

En frappant la commande premierspas on excute le programme contenu dans le fichier premierpas.m La deuxime commande plot(t,x) trace la squence x en fonction de la squence t : les instructions donnes dans la fentre des commandes (command window) reconnaissent les noms des variables donns dans le fichier du programme : tout se passe comme si la squence dinstructions du programme tait entre dans la fentre de commandes

2.1 Retrouver et excuter des programmes matlab crits dans des fichiers .m et rangs dans un dossier Lorsquon range les fichiers o sont crits les programmes matlab dans un dossier cr dans ce but, par exemple C:\programmatlab , il faut donner matlab les informations pour quil puisse trouver le dossier en question ; ceci se fait en dfinissant le chemin daccs (commande File/Set Path)

Commande permettant de dfinir le chemin daccs au nouveau dossier

Slection du dossier

Une fois quon a click save matlab ira chercher si ncessaire les fichiers contenus dans le dossier programmatlab 9

3 Ralisation et modification dun programme

Pour modifier le programme On lance lditeur de matlab


>> edit

une nouvelle fentre souvre on y crit le texte du programme (voir par exemple exemplematlab.m) ( Dans un programme enregistr dans un fichier, on terminera une instruction par un pointvirgule afin dviter dafficher le rsultat de linstruction dans la fentre de commande.) et on lenregistre (save) sous la forme dun fichier fichier.m ; lextension .m indique que cest un programme excutable par matlab (ne pas oublier de lenregistrer nouveau lorsquon modifie le fichier) dans la ligne de commande de matlab, on choisit le current directory o on enregistre le fichier (on peut choisir un autre dossier que le current directory) pour lexcuter dans la fentre matlab
>> exemplematlab

la fin de lexcution de matlab on retrouve dans cette fentre le >> Un commentaire commence par un sign e % (en dbut de ligne o aprs une instruction) Voici un programme essai1.m Qui en engendre (fonction rand) une squence pseudo alatoire a dont la longueur est celle de la squence t (soit ici 1024) et qui la trace

Son excution dans la fentre de commande

10

produit laffichage

Il est utile de bien jongler avec les fentres daffichage des graphiques ; voici quelques oprations courantes (des possibilits supplmentaires seront dcrites dans un paragraphe ultrieur ; une fois les bases acquises, il faudra se rfrer la documentation matlab pour utiliser les nombreuses possibilits offertes) ; Si on veut superposer un deuxime graphique un graphique quon vient de tracer, on utilise la commande hold on Voici deux programmes traant un sinus et un cosinus

11

Si on excute le premier programme, puis la commande hold et le deuxime programme

On superpose ainsi les deux tracs

(exercez vous en appliquant les commandes du type hold, hold on et hold off)

12

Conseil : Si vous envisagez dcrire des programmes compliqus, commencez par un cas simple que vous enrichirez petit petit en prenant soin de vrifier avant une nouvelle modification que votre programme fonctionne correctement. 4 Oprations en matlab Il arrive souvent quon applique la mme opration tous les lments dun tableau. On peut le faire en effectuant une boucle for ... end sur lopration

(On voit ici un exemple de boucle et de manipulation dindice) ; On peut aussi crire de manire non seulement condense (et parfois plus difficile lire) mais aussi optimise pour acclrer les calculs le code point avant le code du produit (.* la place de *) et ainsi on effectuera le mme produit sur tous les couples dlments ayant la mme position (le mme indice) dans les deux squences

qui donnera le mme rsultat

13

5 Gestion des graphiques Nous avons vu un exemple de trac simple ; en voici un autre o on donne labscisse et lordonne pour deux graphes
>> x = [0:0.01:2*pi]; >> plot(x,cos(x),x ,sin(x))

clear all close all % ferme les anciennes figures figure(1) ; % pour crer une nouvelle fentre de figure x = [0:0.01:2*pi]; plot(x, cos(x),'.',x, sin(x),'+') % cos(x) en points, sin(x) en +

14

Pour rajouter un titre et une lgende


title('sinus et cosinus'); xlabel('x'); ylabel('f(x)') legend('cos(x)','sin(x)',0) % le 0 place la lgende ct des courbes

Il est courant de vouloir afficher plusieurs figures sur le mme cran ce qui se fait avec la fonction subplot 15

Exemples de commandes expliques dans le manuel matlab stem xlabel title figure disp grid ylabel bar step input

16

6 Conception de programmes un peu complexes Un programme est une squence dinstruction qui modifie des donnes, il est la plupart du temps ncessaire de modifier la squence effectuer en fonction dun rsultat de calcul ; on effectue alors un test sur le rsultat 7 Les tests logiques de base

Oprateur Inversion (NOT a) : ~a Identit (double =) : a = = b a<b a>b a <= b a >= b a ~=b

Description retourne 1 si a est gal 0, 0 si a est gal 1 retourne 1 si a gale b, 0 autrement retourne 1 si a est plus petit que b, 0 autrement retourne 1 si a est plus grand que b, 0 autrement retourne 1 si a est plus petit ou gal b, 0 autrement retourne 1 si a est plus grand ou gal b, 0 autrement retourne 1 si a est diffrent de b, 0 autrement

8 Utilisation dun rsultat de test pour modifier lexcution dun programme On utilise couramment les tests logiques ci-dessus pour modifier la squence dinstructions excuter : aprs le if on a la squence dinstructions excuter si le rsultat du test est vrai ; et aprs le else la squence dinstructions excuter si le rsultat du test est faux ; (attention viter le ; avant le end (la notion de fonction qui apparat ici sera explique ultrieurement)

On peut combiner des tests en squence

17

>> test_de_y(-1) ans = negatif >> test_de_y(1) ans = positif >> test_de_y(0) ans = nul

On peut effectuer des tests plus labors de ce type en utilisant linstruction switch que nous ne dvelopperons pas dans cette introduction

9 Un autre type dopration courante est la rptition dune squence dinstructions (boucle) Par exemple on rpte le mme calcul pour des valeurs successives dun indice

18

Le a entre crochets indique la variable (ou les variables spares par une virgule quon veut voir renvoye par la fonction) Lorsquon appelle cette fonction pour une valeur de la variable on obtient
>> somme(2) ans = 2 2 4 8

Sur le mme principe, on peut rpter une squence tant quune condition est vrifie avec linstruction de boucle while

19

10 Gestion des squences (vecteurs, matrices) : Matlab, comme son nom lindique a dabord t conu pour optimiser et faciliter le calcul sur les matrices, dont les vecteurs sont un cas particulier ; pour donner les valeurs des composantes dun vecteur ligne on crit entre crochets (on peut sparer les lments par des virgules ou par des blancs)
>> vligne = [2, 4, 7]; >> vligne vligne = 2 4 7

On utilise les deux points pour donner des intervalles sous la forme suivante : [premier lment : pas dincrmentation : dernier lment]
>> w = [0 : 0.5 : 4]; >> w w = Columns 1 through 7 0 3.0000 Columns 8 through 9 3.5000 4.0000 0.5000 1.0000 1.5000 2.0000 2.5000

20

Par exemple si le premier lment est 2, on obtient


>> v=[2 : 0.5 : 4]; >> v v = 2.0000 2.5000 3.5000 4.0000 3.0000

>>

Si le pas dincrmentation est positif et que le premier lment est plus grand que le dernier, matlab cre un vecteur vide.
>> v = [5:0.5:4]; >> v v = Empty matrix: 1-by-0

On cre des vecteurs colonnes ou des matrices en sparant les lignes par des points virgules ;
>> matrice=[1,2,3;4,5,6;7 ,8,9] matrice = 1 4 7 2 5 8 3 6 9

Les oprations applicables aux matrices scrivent simplement : par exemple on pourra faire le produit de deux matrices
>> matrice1=[1,2;3,4]; >> matrice2=[5,6;7,8]; >> matrice1*matrice2 ans = 19 43 22 50

>>

21

On peut encore utiliser la notation condense .* qui effectue ici encore un produit terme terme :
>> matrice1.*matrice2 ans = 5 21 12 32

On accde un lment du vecteur ou de la matrice en frappant


>> matrice1(2,1) ans = 3

On peut aussi slectionner un sous-ensemble par exemple une ligne ou une colonne de la matrice en replaant un des indices par :
>> matrice1(:,2) ans = 4 2 4

>> matrice1(2,:) ans = 3

22

11 Les fonctions Pour viter de rdiger des programmes trop longs et rptitifs, on peut crire des squences de lignes de programmation sous la forme de fonctions Donne calculer = nom de la fonction ( suite des variables auxquelles sapplique le calcul) Pour effectuer le calcul on frappe le nom de la fonction avec comme arguments les valeurs des variables pour lesquelles on veut faire le calcul Dans lexemple Dfinition de la fonction Appel de la fonction

Remarque : il faut grer correctement les dossiers o sont rangs les fichiers contenant le texte des fonctions Une fonction peut renvoyer plusieurs donnes : dans ce cas la liste des noms de variables o ces donnes seront ranges est donne entre crochets
function [sorti1, sorti2, ...] = nom_de_fonction(entr1, entr2, ...)

11.1 Quelques fonctions utiles Matlab intgre un grand nombre de fonctions dont la description est donne dans laide ; voici quelques fonctions utiles Sur les matrices
>> V = [0:0.1:10]; % utilisation de length - vecteur 1x101 >> n = length(V) n = 101

23

>> M = [1 2 3; 4 5 6]; % utilisation de size - matrice 2x3 >> [n,m] = size(M) n = 2 m = 3

Noter que lappel dune fonction permet de renvoyer plusieurs rsultats (arguments) dont la liste est donne entre crochets : [n,m] Ici la fonction size donne le nombre de lignes et de colonnes de la matrice La fonction exponentielle scrit exp(x) ; toutefois lcriture dun exposant utilise laccent circonflexe qui permet deffectuer le calcul de puissance
>> 2^3

2 puissance 3 scrit :

ans = 8

il existe aussi des fonctions crites par dautres programmeurs quon peut rutiliser en sassurant tout de mme que la fonction ralise bien ce quelle est cense faire ... Une des richesses de matlab provient de ce quil est un outil utililis par de trs nombreux ingnieurs et est ainsi un outil permettant des changes de programmes adapts diffrents types dapplication des mathmatiques dans le monde industriel ou de la recherche.

11.2 Appel de fonctions et gestion des fichiers dans les dossiers (Revoir lexemple de setpath matlab o on utilise des fichiers rangs ailleurs que dans le rpertoire matlab) Il existe aussi des fonctions crites par dautres programmeurs quon peut rutiliser en sassurant tout de mme que la fonction ralise bien ce quelle est cense faire ...

Et un exemple de include Load Save S = load('arg1', 'arg2', 'arg3', ...) save('filename', 'var1', 'var2', ...)

24

12. Entres Sorties de sons et dimages : On trouvera des explications dtailles dans laide de mathlab lire des fichiers de sons exemple de lecture dun signal enregistr (une sinusode amortie) suivie de son trac :
>> signal= wavread('sinusamorti.wav'); >> plot(signal);

gnrer des fichiers de sons;


wavwrite(y,Fs,N,'filename')

signification des parameters (consulter laide matlab) y : tableau enregistrer, Fs :frquence dchantillonnage, N : nombre de bits, nom du fichier enregistrer des sons
wavrecord(n,Fs)

paramtres : n : nombre dchantillons, Fs : frquence dchantillonnage couter des sons


wavplay(y,Fs)

paramtres : y : squence couter, Fs frquence dchantillonnage lire des fichiers dimages : voir la fonction imread dans laide matlab gnrer des fichiers dimages : voir la fonction imwrite dans laide matlab 25