INITIATION À MATLAB

Programming, Math · course

Voir tous les documents en programmation

Ecole Nationale des Sciences de l’Informatique AU : 2015/2016

INITIATION À MATLAB

1. Introduction

Matlab (abréviation de " MATrix LABoratory ") est un puissant logiciel de calcul numérique. C’est un environnement informatique conçu pour le calcul matriciel. L'élément de base est une matrice dont la dimension n'a pas à être fixée. Matlab est un outil puissant qui permet la résolution de nombreux problèmes en beaucoup moins de temps qu'il n'en faudrait pour les formuler en C ou en Pascal. La programmation au même titre que C, Pascal ou Basic. Par contre, sa singularité est qu’il s’agit d’un langage interprété, c'est-à-dire que les instructions sont exécutées immédiatement après avoir été tapées. Le but de ce TP est de vous familiariser avec l’utilisation de MATLAB.

1.1. Lancement

Au lancement de Matlab, la fenêtre "command" apparaît. C'est dans cette fenêtre que l'on peut taper les instructions Matlab (à la suite des chevrons >>).

Fenêtre « Command »

1.2 . Langage interprété

Puisque Matlab est un langage interprété. Il n'est pas nécessaire de compiler un programme avant de l'exécuter. Toute commande tapée dans la fenêtre de commande est immédiatement exécutée.

La réponse est affichée si on ne met pas de point-virgule en fin de ligne. Elle est de plus stockée dans une variable nommée ans (answer). La plupart des fonctions mathématiques usuelles sont définies dans Matlab, et

-1-

Ecole Nationale des Sciences de l’Informatique AU : 2015/2016

ceci sous une forme naturelle (sin, cos, exp, ...). C’est également le cas de certaines constantes comme pi par exemple :

1.2.

Les variables

On peut évidemment indiquer le nom de la variable dans laquelle le résultat doit être stocké (ce nom doit commencer par une lettre et occuper moins de 19 caractères). Remarque : Matlab distingue les minuscules des majuscules.

Le nom de la variable ainsi que le résultat sont alors affichés. On peut taper plusieurs commandes par ligne si elles sont séparées par un point virgule.

1.3.

Les variables complexes

Matlab travaille indifféremment avec des nombres réels et complexes. Par défaut les variables i et j sont initialisées à la valeur complexe. Naturellement si vous redéfinissez la variable i ou j avec une autre valeur elle n'aura plus la même signification.

Les fonctions usuelles de manipulation des nombres complexes sont prédéfinies dans Matlab : real, imag, abs, angle (en radian), conj.

1.4.

Les vecteurs, les matrices et leur manipulation

En fait, toute variable de Matlab est une matrice (scalaire : matrice 1x1, vecteur : matrice 1xN ou Nx1). On peut spécifier directement une matrice sous la forme d'un tableau avec des crochets, l'espace ou la virgule sépare deux éléments d'une même ligne, les points virgules séparent les éléments de lignes distinctes.

Les éléments d'une matrice peuvent être n'importe quelle expression de Matlab :

Les éléments d'une matrice peuvent ensuite être référencés par leurs indices, on utilise alors des parenthèses et non des crochets. Le mot-clé end peut être utilisé en indice pour signifier le dernier élément.

-2-

Ecole Nationale des Sciences de l’Informatique AU : 2015/2016

On peut remarquer que la taille du vecteur x a été ajustée en remplissant les éléments non précisés par 0. On peut aussi créer des matrices avec les fonctions zeros, ones et eye, ces fonctions créent des matrices de la taille précisée, respectivement remplies de zéros, de un, et de un sur la diagonale et de zéros ailleurs.

On peut avoir des informations sur la taille d'une matrice :

On peut ajouter des lignes et des colonnes à des matrices déjà existantes (attention, les dimensions doivent toutefois être compatibles ...).

1.5.

L'opérateur " : "

L'opérateur " : ", sous Matlab, peut être considéré comme l'opérateur d'énumération. Sa syntaxe usuelle est :« deb:pas:fin ». Il construit un vecteur dont le premier élément est deb puis deb+pas, deb+2*pas... jusqu'à deb+n*pas tel que deb+n*pas < fin < deb+(n+1)*pas. « : » est très utile pour construire des signaux.

Le pas d'incrémentation peut être omis, un pas de 1 est alors pris par défaut :

Publicité

-3-

Ecole Nationale des Sciences de l’Informatique AU : 2015/2016

On peut aussi utiliser le " : " pour sélectionner des éléments d'un vecteur ou d'une matrice :

1.6.

Opérations matricielles

Les opérations usuelles sont définies de façon naturelle pour les matrices :

Autres fonctions utiles pour les opérations matricielles

renverra un vecteur ligne dont chaque élément sera le maximum de la colonne correspondante. De la même façon est définie la fonction min().

2. Affichages graphiques et alphanumériques

2.1.

Affichage alphanumérique

On peut afficher des chaînes de caractères dans la fenêtre de commande :

Les fonctions sprintf et fprintf existent également

-4-

Ecole Nationale des Sciences de l’Informatique AU : 2015/2016

On peut aussi demander des valeurs à l'utilisateur :

Matlab affichera la chaîne de caractère entrée en paramètre et attendra une réponse de l'utilisateur.

2.2.

Affichages graphiques de courbes 1D

Matlab permet un grand nombre de types d'affichage 1D et 2D, seuls les plus courant seront décrits ici. La commande plot permet l'affichage d'une courbe 1D :

On peut ajouter un titre aux figures ainsi que des labels aux axes avec les commandes title, xlabel, ylabel:

2.3.

Affichages graphiques de courbes 2D

Avec la commande mesh on peut aisément avoir une représentation d'une fonction 2D. Cependant il faut construire la grille des coordonnées des points en lesquels on a les valeurs de la fonction à l'aide de la fonction meshgrid.

2.4.

Affichage de plusieurs courbes

On peut bien évidemment vouloir afficher plusieurs courbes à l'écran. Pour cela deux solutions s'offrent à nous. On peut effectuer plusieurs affichages sur une même figure en utilisant la commande subplot qui subdivise la fenêtre graphique en plusieurs sous figures. Sa syntaxe est : «subplot(nombre_lignes,nombre_colonnes,numéro_subdivision)».Les subdivisions sont numérotés de 1 à nombre_lignes*nombre_colonnes, de la gauche vers la droite puis de haut en bas.

On peut aussi ouvrir une deuxième fenêtre graphique à l'aide de la commande figure. Le passage d'une fenêtre graphique à une autre pourra alors se faire à la souris ou en précisant le numéro correspondant dans la commande figure(n). NB : on peut également superposer plusieurs courbes sur le même référentiel, en utilisant la commande hold on (resp. hold off).

-5-

Ecole Nationale des Sciences de l’Informatique AU : 2015/2016

3. Environnement de travail, scripts et fonctions

3.1.

Répertoire de travail

Il est indispensable de travailler dans votre propre répertoire et non dans le répertoire de Matlab. De même dans votre répertoire vous pouvez organiser vos fichiers dans des sous répertoires. Pour que vos fonctions et scripts soient accessibles à partir de la ligne de commande Matlab il faut le répertoire dans lequel vous allez travailler, en utilisant les commandes cd et dir.

3.2.

Publicité

Sauvegarde et chargement de variables

Il peut être utile, lors d'une session de travail, de sauvegarder des variables dans des fichiers du répertoire de travail. Cela peut être réalisé à l'aide de la fonction save dont la syntaxe est : « save nom_fichier nom_variables ».

Si le nom des variables est omis, tous l'espace de travail est sauvé; si l'extension du fichier est omise elle sera automatiquement .mat, si de plus, le nom du fichier est omis, la sauvegarde se fera dans le fichier matlab.mat. Pour recharger des variables sauvées dans un fichier, il suffit de taper :

Si le nom du fichier est omis, Matlab chargera le fichier matlab.mat. On peut à un moment donné vouloir connaître toutes les variables disponibles dans l'espace de travail. Cela est possible grâce aux commandes who et whos. La commande who nous donne le nom de toutes les variables existantes, tandis que whos nous donne leur nom et l'espace mémoire qu'elles occupent.

3.3.

Scripts

Il est parfois (souvent) souhaitable, pour ne pas avoir à taper plusieurs fois une même séquence d'instructions, de la stocker dans un fichier. Ainsi on pourra réutiliser cette séquence dans une autre session de travail. Un tel fichier est dénommé script. Sous windows, il suffit d'ouvrir un fichier avec le menu file, new, de taper la séquence de commande et de sauver le fichier avec une extension " .m " (nom_fich.m). En tapant le nom du fichier sous Matlab, la suite d'instructions s'exécute. Les variables définies dans l'espace de travail sont accessibles pour le script. De même les variables définies (ou modifiées) dans le script sont accessibles dans l'espace de travail. On peut (doit) mettre des commentaires à l'aide du caractère pour-cent " % ". Toute commande située après " % " n'est pas prise en compte par Matlab, jusqu'à la ligne suivante.

3.4.

Fonctions

On a parfois (souvent) besoin de fonctions qui ne sont pas fournies par Matlab. On peut alors créer de telles fonctions dans un fichier séparé et les appeler de la même façon que les fonctions préexistantes. La première ligne (hormis les lignes de commentaires) d'une fonction doit impérativement avoir la syntaxe suivante :

Exemple de fonction :

Cette fonction pourra être appelée par :

-6-

Ecole Nationale des Sciences de l’Informatique AU : 2015/2016

Exemple de fonction à plusieurs variables de sortie :

Cette fonction pourra être appelée par :

Le nom de la fonction doit impérativement être le même que le nom du fichier dans lequel elle est stockée (sinon Matlab ne prendra pas en compte ce nom mais uniquement celui du fichier). Les nombres d'arguments en entrée et en sortie ne sont pas fixes et peuvent être récupérés par nargin et nargout. Cela nous permet donc de faire des fonctions Matlab pouvant dépendre d'un nombre variable de paramètres. Les variables de l'espace de travail ne sont pas accessibles à la fonction sauf si elles sont entrées comme variables d'entrée. De même les variables définies dans une fonction ne sont pas accessibles dans l'espace de travail.

4. Boucles et contrôles

Comme de nombreux autres langages de programmation, Matlab possède trois types d'instructions de contrôles et de boucles : for, if et while.

4.1.

Contrôle : " if "

La condition est exprimée au travers d'une expression logique. Les expressions logiques sont des expressions quelconques pour lesquelles on considère uniquement le fait qu'elles soient nulles (expression fausse) ou non (expression vraie). On peut aussi construire ces expressions à l'aide des opérateurs logiques et (&), ou (|), égal (==), supérieur (>,>=), inférieur(<,<=), non(~), ou exclusif (xor) ou à l'aide de fonctions logiques prédéfinies exist, any, find , isinf, isnan... 4.2.

Boucle : « while »

La suite d’instructions est répétée un nombre indéfini de fois jusqu’à ce que l’expression logique soit fausse.

4.3.

Boucle : "for"

La boucle for a pour syntaxe :

-7-

Ecole Nationale des Sciences de l’Informatique AU : 2015/2016

Cette structure de contrôle est très utile, mais il est recommandé d'éviter au maximum les boucles dans Matlab, car elles sont très lentes par rapport à un traitement matriciel. Par exemple, la boucle suivante :

est équivalente à

Mais s'exécutera beaucoup plus lentement. Essayez avec N = 10, 100, 1000, etc. et comparez les temps. Malheureusement, on ne rencontre pas toujours des cas aussi simples et il est difficile de penser matriciel, c'est à dire penser en Matlab. Les fonctions zeros et ones, permettent parfois d'éviter de mettre en œuvre une boucle. Par exemple, au lieu de faire la boucle :

On peut écrire :

De plus certaines fonctions Matlab agissent sur une matrice en tant que suite de vecteurs. Ainsi

nous donne le même résultat (mais en moins de temps) que :

Publicité

5. Help / Aide en ligne

Matlab est pourvu d'une fonction d'aide très utile : help. Ainsi si vous tapez help sur la ligne de commande apparaissent tous les répertoires accessibles depuis Matlab ainsi qu'une explication concernant ces répertoires. Si vous tapez help suivi du nom d'un répertoire, Matlab affiche une explication brève sur toutes les fonctions et scripts de ce répertoire. Enfin si vous tapez help suivi du nom d'un fichier (script ou fonction), apparaît une explication détaillée sur l'utilisation de la fonction ou du script. De plus vous pouvez créer une aide sur les fonctions et scripts que vous créez et sur vos répertoires. Pour une fonction, Matlab prendra comme help toutes les lignes de commentaires suivant l'instruction function (en première ligne). Pour un script, Matlab prendra toutes les lignes de commentaires placés en début de fichier. Ces aides que vous créez pour vos fonctions et scripts sont intéressantes pour un utilisateur éventuel, mais aussi pour vous, pour vous rappeler le but de telle fonction ou pour vous souvenir de sa syntaxe. Exemple simple :

-8-

Ecole Nationale des Sciences de l’Informatique AU : 2015/2016

UTILISATION DE LA TFD POUR L’ANALYSE SPECTRALE DE SIGNAUX

Sous MATLAB, la fonction FFT met en œuvre l’algorithme rapide de calcul de la TFD. Elle a pour syntaxe . La séquence obtenue est la TFD de la séquence de longueur N calculé sur L points de fréquence. Bien que la fonction FFT permette de calculer les valeurs de la TFD pour L quelconque, il est conseillé pour des raisons de rapidité de prendre L comme puissance de 2.

1. Zero padding

Nous proposons de calculer la TFD d’une séquence d’ordre 4 puis d’ordre 8 et voire l’effet du zero padding sur le signal et son spectre.

 Calculer la FFT d’ordre 4 (N=4) de la séquence  Calculer la FFT d’ordre 8 de la même séquence.  Que remarquez-vous ?  Essayons maintenant de voir l’allure du spectre de cette même séquence en augmentant plus sa taille à

100.

2. Les fenêtres

On appelle fenêtre la suite des coefficients utilisés pour pondérer le signal avant d’en calculer le spectre.

Soit le signal

, fenêtre rectangulaire de longueur .

 Calculer sa transformée de Fourier .  Représenter le module et l’argument de .  Déterminer les valeurs de pour lesquelles s’annule.

 Calculer, en utilisant la FFT, les spectres des fenêtres de Bartlett, de Hanning et de Hamming.  Représenter les modules des spectres des différentes fenêtres sur la même figure et les comparer.

3. Conséquence de la limitation temporelle d’un signal

3.1.

Phénomène de « Leakage »

On considère le signal discret

Limiter la durée du signal à échantillons, dans l’intervalle , est équivalent à le multiplier par une fenêtre rectangulaire de longueur , soit :

Si on limite la durée d’échantillonnage à échantillons et lui applique la transformation de Fourier discrète TFD d’ordre 512interpréter le spectre correspondant.

-9-

Ecole Nationale des Sciences de l’Informatique AU : 2015/2016

Calculons maintenant le spectre du signal par la fenêtre de Hamming et essayons de voir la différence entre les deux !!

3.2.

Résolution spectrale

La précision ne doit pas être confondue avec la résolution qui est le pouvoir de distinguer deux fréquences voisines dans un signal, c’est donc le problème de séparation de deux pics aux fréquences voisines. Essayons de voir ceci de plus près !

Soit le signal discret :

Le spectre du signal tronqué où est une fenêtre rectangulaire de longueur est :

Où désigne le spectre de la fenêtre rectangulaire calculé précédemment.

Calculons et représentons le module du spectre pour et essayons de voir l’effet de la taille de la fenêtre rectangulaire.

Fixons maintenant et calculons le spectre de en le multipliant par la fenêtre de hamming. Observons le résultat et voyons l’effet sur la résolution.

-10-