10.01.2015 Views

TP - Initiation MATLAB

TP - Initiation MATLAB

TP - Initiation MATLAB

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

N+i - MTS<br />

<strong>TP</strong> - <strong>Initiation</strong> <strong>MATLAB</strong><br />

<strong>TP</strong> - <strong>Initiation</strong> <strong>MATLAB</strong><br />

Le but de ce <strong>TP</strong> est de s’initier au programme de calcul numérique <strong>MATLAB</strong>. Les fonctionnalités<br />

résolument matricielles de ce logiciel en font un puissant outil très utilisé de nos jours, dans différents<br />

contextes (traitement d’images, optimisation, contrôle, . . ., par le biais de toolboxes) et notamment celui<br />

du traitement numérique du signal. Il permet en effet la résolution rapide de problèmes numériques,<br />

problèmes qui nécessiteraient un temps de développement plus important en C ou en Java.<br />

Après une prise en main de l’environnement de <strong>MATLAB</strong>, le principe du <strong>TP</strong> est simple. Des séries<br />

de questions vont être posées afin de mettre en œuvre les différentes fonctionnalités qui vous seront<br />

nécessaires pour les <strong>TP</strong> suivants. Chaque question fait en général référence à des fonctions <strong>MATLAB</strong> à<br />

utiliser. Il est alors nécessaire d’utiliser l’aide de <strong>MATLAB</strong> pour analyser les paramètres, les résultats<br />

et le comportement de ces fonctions afin de répondre de manière pertinente à la question posée.<br />

1 Prise en main de l’environnement<br />

L’environnement de travail de <strong>MATLAB</strong> est souple d’utilisation (langage interprété) et très évolutif<br />

car il permet soit de travailler interactivement en passant des commandes au clavier (comme pour une<br />

calculatrice), soit de réaliser des programmes (scripts) ou des fonctions en plaçant ces commandes dans<br />

des fichiers texte, le nom de ces fichiers constituant alors de nouvelles commandes <strong>MATLAB</strong>.<br />

1.1 Procédure de démarrage de l’environnement<br />

◮ Comment lancer l’environnement de travail de <strong>MATLAB</strong> <br />

1.2 Manipulation de la ligne de commande<br />

◮ Réaliser quelques opérations simples directement en mode interactif (ligne de commandes).<br />

1+1 ou sqrt(4) ou sqrt(4); ou 6.0e-2*cos(pi/4)<br />

◮ Sous <strong>MATLAB</strong>, comment utiliser l’aide intégrée, pour les différentes fonctions utilisées <br />

help <br />

1.3 Notion de script<br />

Un script <strong>MATLAB</strong> est une succession de commandes stockée dans un fichier ayant pour extension<br />

.m (par exemple, prog.m). Pour exécuter le script, il suffit de taper son nom (prog par exemple) en<br />

ligne de commande. Si le script prog.m se trouve dans le répertoire de travail courant, alors <strong>MATLAB</strong><br />

sera capable de lire le fichier et d’exécuter toutes les commandes qu’il contient, les unes à la suite des<br />

autres.<br />

Toute ligne commençant par le caractère % sera considérée comme une ligne de commentaire (à<br />

utiliser sans modération dans votre code).<br />

2 Manipulation de variables / vecteurs / matrices<br />

<strong>MATLAB</strong> est l’abréviation de Matrix Laboratory et comme son nom l’indique, toutes les entités<br />

(ou variables) manipulées sont des matrices.<br />

1


N+i - MTS<br />

<strong>TP</strong> - <strong>Initiation</strong> <strong>MATLAB</strong><br />

2.1 Création de variables<br />

Pour déclarer de telles variables, il suffit de spécifier un nom pour la variable (par exemple toto)<br />

et de lui attribuer une valeur (par exemple l’entier 4 ou la chaîne de caractères ’chat’).<br />

Type de variables Représentation <strong>MATLAB</strong> Exemple de déclaration<br />

scalaire matrice 1 × 1 toto = 4<br />

vecteur ligne à n éléments matrice 1 × n toto = [ 1 2 ]<br />

vecteur colonne à m éléments matrice m × 1 toto = [ 1 ; 2 ]<br />

matrice à m lignes et n colonnes matrice m × n toto = [ 1 2 3 ; 4 5 6 ]<br />

◮ Comment voir les variables courantes ainsi que leurs propriétés <br />

Routines à utiliser :<br />

whos, size, length<br />

2.1.1 Variables prédéfinies<br />

Certaines variables existent déjà sous <strong>MATLAB</strong> et il est fortement déconseillé de les utiliser comme<br />

des variables quelconques.<br />

pi, eps, i, j<br />

2.1.2 Variables complexes<br />

◮ Comment déclarer une variable complexe <br />

◮ Comment obtenir le conjugué d’une variable complexe <br />

Routines à utiliser :<br />

real, imag , abs, angle, conj, ’<br />

2.1.3 Autres techniques de création de variables<br />

De nombreuses routines <strong>MATLAB</strong> permettent de créer des variables avec des valeurs particulières.<br />

Matrices simples<br />

◮ Comment générer une matrice remplie de zeros remplie de uns <br />

◮ Comment générer une matrice identité <br />

Routines à utiliser :<br />

zeros, ones , eye<br />

Vecteurs à pas constant<br />

◮ Comment générer un vecteur ligne contenant les valeurs de a à b par pas de p <br />

◮ Comment générer un vecteur ligne contenant k valeurs également espacées entre les bornes a et<br />

b incluses <br />

Routines à utiliser :<br />

: , linspace<br />

Matrices aléatoires<br />

◮ Comment générer un vecteur ligne de n valeurs qui suivent une loi normale <br />

◮ Comment générer un vecteur colonne de m valeurs qui suivent une loi uniforme <br />

Routines à utiliser :<br />

randn , rand<br />

Création de matrices par assemblage<br />

◮ Comment assembler deux (ou plus) scalaires / vecteurs / matrices pour produire un nouveau<br />

vecteur ou matrice <br />

2


N+i - MTS<br />

<strong>TP</strong> - <strong>Initiation</strong> <strong>MATLAB</strong><br />

2.2 Manipulation de matrices<br />

2.2.1 Accès à une plage de valeurs (sous-matrices)<br />

Il est important de remarquer que contrairement à certains langages de programmation tels que C,<br />

le premier élément d’un vecteur a pour indice 1 et non 0.<br />

◮ Comment accéder à la valeur d’indice k d’une matrice ligne d’une matrice colonne d’une<br />

matrice à deux dimensions <br />

◮ Comment extraire les valeurs comprises entre les indices k 1 et k 2 d’un vecteur colonne, sous la<br />

forme d’un vecteur colonne <br />

◮ Extrapoler pour une matrice bi-dimensionnelle <br />

◮ Comment extraire une ligne entière d’une matrice bi-dimensionnelle <br />

2.2.2 Matrice transposée<br />

◮ Comment obtenir la transposée d’une matrice A <br />

◮ Comment obtenir la transposée de la matrice conjuguée de A <br />

2.2.3 Opérateurs arithmétiques élémentaires<br />

Opérateur Sémantique<br />

+ Addition<br />

- Soustraction<br />

* Produit matriciel<br />

.* Produit terme à terme<br />

/ Division<br />

./ Division terme à terme<br />

ˆ<br />

Elévation à une puissance<br />

.ˆ Elévation à une puissance terme à terme<br />

◮ Essayer les différents opérateurs arithmétiques présentés. Observer la différence entre les deux<br />

opérateurs de produit.<br />

2.2.4 Autres fonctions mathématiques<br />

Il est possible d’appliquer quantité d’autres fonctions mathématiques à des variables (scalaires,<br />

vecteurs ou matrices terme à terme). Parmi les plus utilisées, on retrouve<br />

sin , cos , tan , exp , sqrt , log , abs<br />

◮ Générer un signal sinusoïdal d’amplitude a = 2, de fréquence ν = 50Hz, de durée T = 100ms<br />

sur n = 500 échantillons.<br />

◮ Les fonctions min et max existent sous <strong>MATLAB</strong>. Possèdent-elles le comportement que les fonctions<br />

précédentes <br />

◮ De même pour les fonctions sum, mean ou std.<br />

3 Affichage graphique<br />

Une des forces de <strong>MATLAB</strong> est de permettre la représentation graphique sous forme de courbes<br />

ou d’images, des différents objets manipulés.<br />

3.1 Ouverture d’une fenêtre<br />

◮ Comment ouvrir une fenêtre prête à recevoir un graphique <br />

◮ Comment associer un titre à cette fenêtre <br />

Routines à utiliser :<br />

figure , set<br />

3


N+i - MTS<br />

<strong>TP</strong> - <strong>Initiation</strong> <strong>MATLAB</strong><br />

3.2 Graphique 2D<br />

3.2.1 Affichage d’une courbe<br />

◮ Afficher la courbe correspondant au signal sinusoïdal généré.<br />

légendes des axes.<br />

Routines à utiliser :<br />

plot , title , xlabel, ylabel<br />

Positionner clairement titre et<br />

3.2.2 Affichage de plusieurs courbes dans un même graphe<br />

◮ Afficher plusieurs courbes superposées, chaque courbe correspondant à un signal sinusoïdal généré<br />

avec une amplitude différente des autres. Chaque courbe possède également des attributs (couleurs et<br />

tracés) différents.<br />

◮ Superposer une sinusoïde déphasée d’une demi-période.<br />

Routines à utiliser :<br />

plot , hold<br />

3.2.3 Affichage de plusieurs courbes<br />

◮ Même travail que la question précédente dans des graphes séparés au sein d’une fenêtre unique.<br />

Routines à utiliser :<br />

plot , subplot<br />

3.3 Image<br />

◮ Toute matrice peut être visualisée sous la forme d’une image. Visualiser sous cette forme une<br />

matrice que vous avez déjà manipulée.<br />

◮ Charger une image (au format JPEG, par exemple) sous la forme d’une matrice et visualiser-la.<br />

◮ Changer la palette utilisée pour afficher l’image.<br />

Routines à utiliser :<br />

imread , image , imagesc, colormap<br />

4 Organisation du code<br />

4.1 Structures de boucles et de contrôle<br />

Comme de nombreux langages de programmation, <strong>MATLAB</strong> possède plusieurs instructions de<br />

contrôles et de boucles : if, for ou while. Même s’il est donc possible d’écrire des boucles, celles-ci<br />

sont très lentes par rapport à un traitement matriciel. Il faut donc privilégier celui-ci lorsque c’est<br />

possible.<br />

◮ Donner deux méthodes (l’une matricielle, l’autre pas) pour remplir un vecteur x de longueur N<br />

tel que x(k) = k où k ∈ [1, N].<br />

4.2 Notion de fonction<br />

La notion de fonction permet de factoriser une portion de code pour une réutilisation plus aisée.<br />

Cette factorisation se traduit par<br />

• la création d’un fichier d’extension.m contenant ce code,<br />

• une formalisation des entrées (paramètres) et des sorties (résultats retournés) de ce code,<br />

• un environnement d’exécution séparé pour ce code (notion de variables locales)<br />

4


N+i - MTS<br />

<strong>TP</strong> - <strong>Initiation</strong> <strong>MATLAB</strong><br />

4.2.1 Déclaration d’une fonction<br />

◮ Quelle est le formalisme <strong>MATLAB</strong> utilisé pour déclarer une fonction <br />

◮ Créer une fonction appelée GenereSignal qui génère un signal sinusoïdal. Etablir la liste des<br />

paramètres nécessaires et le résultat retourné.<br />

◮ Programmer de façon vectorielle cette fonction.<br />

◮ Commenter la fonction GenereSignal pour que l’aide de <strong>MATLAB</strong> l’affiche.<br />

function [signal , temps_ech] = GenereSignal (ampl , frequence , duree , n_ech)<br />

% GenereSignal Génération d’un signal sinusoïdal<br />

% [IN] :<br />

% Paramètres de la sinusoïde à échantillonner :<br />

% ampl : Amplitude de la sinusoïde<br />

% frequence : Fréquence de la sinusoïde<br />

% Paramètres de l’échantillonnage :<br />

% duree : Durée du signal à produire<br />

% n_ech : Nombre d’échantillons du signal produit<br />

% [OUT] :<br />

% signal : Sinusoïde échantillonnée<br />

% temps_ech : Instants d’échentillonnage<br />

% [APPEL] :<br />

% [signal t] = GenereSignal (2 , 50 , 0.1 , 500)<br />

% plot(t , signal)<br />

temps_ech = linspace (0 , duree , n_ech)<br />

signal = ampl * sin(2*pi*frequence*temps_ech)<br />

4.2.2 Utilisation d’une fonction<br />

◮ Créer un script qui fait appel à la fonction GenereSignal pour produire les mêmes graphiques<br />

qu’à l’étape précédente.<br />

4.2.3 Application directe<br />

◮ Ecrire une fonction GenereSignal2 qui produit un signal de longueur n = 250 correspondant à<br />

une sinusoïde pure de fréquence ν = 0.1Hz, échantillonnée à f = 1Hz.<br />

function [signal , temps_ech] = GenereSignal2 (ampl , frequence , freq_ech , n_ech)<br />

% GenereSignal2 Génération d’un signal sinusoïdal<br />

% [IN] :<br />

% Paramètres de la sinusoïde à échantillonner :<br />

% ampl : Amplitude de la sinusoïde<br />

% frequence : Fréquence de la sinusoïde<br />

% Paramètres de l’échantillonnage :<br />

% freq_ech : Fréquence d’échantillonnage de la sinusoïde<br />

% n_ech : Nombre d’échantillons du signal produit<br />

% [OUT] :<br />

% signal : Sinusoïde échantillonnée<br />

% temps_ech : Instants d’échentillonnage<br />

5


N+i - MTS<br />

<strong>TP</strong> - <strong>Initiation</strong> <strong>MATLAB</strong><br />

% [APPEL] :<br />

% [signal2 t2] = GenereSignal2 (1 , 0.1 , 1 , 250)<br />

% plot(t2 , signal2)<br />

[signal temps_ech] = GenereSignal (ampl , frequence , n_ech / freq_ech , n_ech)<br />

5 Problèmes simples<br />

1. Construire un vecteur A d’échantillons gaussiens, de taille N = 1000, de variance σ 2 = 0.8 et de<br />

moyenne M = 2. Afficher l’histogramme des échantillons. Essayer pour N = 10000.<br />

A = sqrt(sigma2)*randn(1,N) + M<br />

hist(A)<br />

2. L’estimation de la variance est donnée par la formule<br />

̂σ<br />

A 2 = 1 N∑<br />

(A(n) − ̂m A ) 2 (1)<br />

N<br />

n=1<br />

où ̂m A est l’estimation de la moyenne de A.<br />

̂m A = 1 N<br />

En utilisant la formule donnée, calculer ̂m A , l’estimation de la moyenne.<br />

N∑<br />

A(n) (2)<br />

n=1<br />

m A = sum(A) / N<br />

ou<br />

m A = mean(A)<br />

En utilisant la formule donnée, calculer en une seule ligne ̂σ A 2 , l’estimation de la variance.<br />

s2 A = sum((A-m A).*(A-m A)) / N<br />

ou<br />

s2 A = var(A)<br />

3. Ecrire une fonction dont le code ne contient qu’une seule ligne, qui sous-échantillonne un vecteur<br />

x donné d’un facteur N. Par exemple, le vecteur x = [ 1 2 3 4 5 6 7 8 9 ] devient [ 1 3<br />

5 7 9] pour N = 2. Appliquer cette fonction au vecteur A.<br />

x(1:N:length(x))<br />

4. Faire de même en deux lignes, pour un sur-échantillonnage d’un vecteur. Par exemple, le vecteur<br />

x = [ 1 2 3 4 ] devient [ 1 0 0 2 0 0 3 0 0 4] pour N = 3.<br />

6


N+i - MTS<br />

<strong>TP</strong> - <strong>Initiation</strong> <strong>MATLAB</strong><br />

y = zeros(1,N*(length(x)-1)+1<br />

y(1:N:length(y)) = x<br />

7

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!