TP - Initiation MATLAB
TP - Initiation MATLAB
TP - Initiation MATLAB
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