Vous êtes sur la page 1sur 82

Centre De Formation **HBM Corporation**

Formation sur le logiciel


MATLAB 6.5

Support de formation (ver 3.0)

Pour les spécialités : Electronique.


Informatique.
Système LMD (ELEC & INFO).

Mer. ATOUI Hamza


Ingénieur en électronique option contrôle industriel
Deuxième année magistère option TELECOM et
Traitement du signal numérique

Email : HBMVIPH@hotmail.com

2007-2008
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Table Des Matières

1) Introduction.
2) La structure de logiciel MATLAB 6.5.
3) Types de formats connus par MATLAB.
4) Quelques commandes & constantes souvent utilisées.
5) Quelques fonctions I/O standard.
6) Instructions de contrôles :
- IF . . . ELSE . . . END.
- SWITCH . . . CASE . . . END.
- FOR . . . END.
- WHILE . . . END.
- L’instruction « BREAK ».
7) Manipulation des vecteurs.
8) Manipulation des matrices.
9) Manipulation des polynômes & nombres complexes.
10) Manipulation des chaînes de caractères & fonctions de conversions.
11) Programmation des fonctions & procédures sous MATLAB.
12) Le graphisme.
13) Les boites de dialogues & fonctions de chargement & sauvegarde
MATLAB (LOAD & SAVE).
14) Les Interfaces graphiques.
15) Manipulation des fichiers sous MATLAB.
16) Manipulation du port parallèle.
17) Manipulation de la carte son & filtrage numérique sous MATLAB.
18) SIMULINK.

- Annexe « Aide en ligne de quelques commandes MATLAB ».


- Bibliographie

2
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

1) Introduction :
MATLAB dont le nom provient de MATRIX LABORATORY est un langage
de calcul scientifique basé sur le type de variables matricielle. Outre ses grandes
capacités de calcul numérique appliqué à différents domaines scientifiques tels le
traitement de signal, l’automatique, etc., MATLAB intègre des fonctionnalités
graphiques de grande qualité en 2D ou 3D.
L’utilisation de MATLAB peut se faire de façon interactive en exécutant des
commandes directement après le prompt (>>) ou par des scripts (*.m). Ces derniers
peuvent être des simples programmes ou des fonctions avec des paramètres d’appel et
de retour. Les fonctions sont très utiles dans la mesure où chaque utilisateur peut
étendre les possibilités de MATLAB à son domaine d’application.

2) La structure de logiciel MATLAB :

Le WORKSPACE ou
fenêtre des commandes.

(>>) : Prompt

Les figures de
L’Editeur de Script dessin
Type de fichiers :
Type de fichiers : (*.fig)
(*.m)

Le Guide (GUI) Le SIMULINK


Pour programmer les Pour la
Interfaces graphiques simulation temps
Type de fichiers : réel
(*.fig, *.m) Type de fichiers :
(*.mdl)

3
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

3) Types de formats connus par MATLAB :


- Format réel :
>> x = 4.568
x =
4.5680

- Format complexe :
>> z = 4 + 5j
z =
4.0000 + 5.0000i

- Format code ASCII ou chaîne de caractères :


>> String = 'Formation MATLAB'
String =
Formation MATLAB

- Format logique :

>> a = logical(1)
a =
1

>> b = logical(0)
b =
0

>> whos a b
Name Size Bytes Class

a 1x1 1 logical array


b 1x1 1 logical array

Grand total is 2 elements using 2 bytes

4) Quelques commandes et constantes souvent utilisées :

- la commande WHOS : permet d’avoir la liste des variables connues dans le l’espace
de travail « WORKSPACE » avec leur nom, taille, nombre d’octets et classe.

>> x = 4.5;
>> z = 4 + 2.3i;
>> whos
Name Size Bytes Class

x 1x1 8 double array


z 1x1 16 double array (complex)
Grand total is 2 elements using 24 bytes

4
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

- La commande CLEAR : on utilise cette commande pour supprimer une variable


dans l’espace de travail.

>> x = 4.5;
>> z = 4 + 2.3i;
>> a = logical(1);
>> d = 'MATLAB';
>> whos
Name Size Bytes Class

a 1x1 1 logical array


d 1x6 12 char array
x 1x1 8 double array
z 1x1 16 double array (complex)

Grand total is 9 elements using 37 bytes

>> clear x a
>> whos
Name Size Bytes Class

d 1x6 12 char array


z 1x1 16 double array (complex)

Grand total is 7 elements using 28 bytes

- La commande CLC : pour effacer la page du prompt.


- La commande CLOSE : pour fermer une fenêtre « figure ».
- La constante PI, le plus grand réel et le plus petit réel représentées sous MATLAB,
la constante INF et EPS.

>> pi
ans =
3.1416

>> realmax
ans =
1.7977e+308

>> realmin
ans =
2.2251e-308

>> inf
ans =
Inf

>> eps
ans =
2.2204e-016

5
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

5) Quelques fonctions I/O standard :


- La fonction INPUT : permet de saisir une valeur numérique ou chaîne dans une
variable par le prompt.
% Exemple de saisie numérique
>> a = input('Entrez la valeur : ')
Entrez la valeur : 12.325

a =

12.3250

% Exemple de saisie chaîne de caractères


>> String = input('Donnez votre Nom : ','s')
Donnez votre Nom : ATOUI Hamza

String =

ATOUI Hamza

- La fonction SPRINTF : Ecriture d’une donnée en format string.


Syntaxe:

S = sprintf ( format , A , . . . )

Exemple :
Commande Résultat
sprintf('%0.5g',(1+sqrt(5))/2) 1.618
sprintf('%0.5g',1/eps) 4.5036e+15
sprintf('%15.5f',1/eps) 4503599627370496.00000
sprintf('%d',round(pi)) 3
sprintf('%s','hello') hello
sprintf('The array is %dx%d.',2,3) The array is 2x3
sprintf('\n') Nouveau ligne

- La fonction SSCANF : Lecture d’une donnée sous un format de contrôle.


Syntaxe :
A = sscanf (S , format )

Exemple :
>> S = '3.1416';
>> A = sscanf(S,'%f')

A =

3.1416

6
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exercices :

Exercice 1 :
Ecrire un programme qui calcul le périmètre d’un rectangle, carré et un
cercle.

Exercice 2 :
Ecrire un programme qui calcul la résistance équivalente des 3
résistances placées en parallèles puis en séries.

Exercice 3 :
Ecrire un programme qui calcul la valeur de la TVA (taxe sur valeur
ajoutée) et prix net (taxe incluse) à partir du prix hors taxe et du taux
de la TVA.

Exercice 4 :
Ecrire un programme qui lorsqu’on fait entrer un montant en dinars,
affiche le nombre de billets et de pièces qu’il faut pour réaliser ce
montant en supposant que les billets et pièces disponibles sont :
Pièces : 1, 5, 10, 50 DA.
Billets : 100, 200 DA.
On donne les commandes : « fix » et « rem/mod ».

Remarque : la solution doit être sur l’éditeur de script MATLAB.

7
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

6) Instructions de contrôles :
Comme les langages de programmation classiques, MATLAB dispose des
commandes du type FOR, WHILE, IF . . .

- IF . . . ELSE . . . END.
Syntaxe

if conditions if conditions if conditions

Bloc Bloc1
d’instruction else elseif conditions

end Blok2
end elseif conditions

>> a = 4;
>> b = 5; else
>> c = 2;
>> delta = b^2 - 4*a*c;
>> if delta > 0 end
disp('2 solutions réelles');
elseif delta == 0
disp('solution double');
else
disp('2 solutions complexes');
end

2 solutions complexes

- SWITCH . . . CASE . . . END.


La structure SWITCH doit permettre le choix des actions à effectuer selon la valeur
d’une expression donnée.
Syntaxe :
switch (expression)
case exp1
Bloc 1
case exp2
Bloc 2
case {exp3, exp4, exp5}
Bloc 3
otherwise
Bloc 4
end

8
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exemple :
>> a = 4;
>> b = 5;
>> c = 2;
>> delta = b^2 - 4*a*c;
>> switch sign(delta)
case 1
disp('2 solutions réelles');
case 0
disp('solution double');
otherwise
disp('2 solutions complexes');
end

2 solutions complexes

- La boucle FOR . . . END.


Elle répète l’exécution d’un bloc d’instructions tant que l’indice de la boucle n’arrive
pas à la valeur finale.
Syntaxe :
for k = valeur de départ : pas : valeur finale

Bloc d’instructions

end

Exemple :
Calcul de somme de N premier élément de l’ensemble naturelle :
>> N = 10;
>> S = 0;
>> for k=1:N
S = S+k;
end
>> S
S =
55

- La boucle WHILE . . . END.


Elle répète un bloc tant que la condition d’arrêt n’est pas vérifie.
Syntaxe :
while conditions

Bloc d’instructions

end

9
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exemple:
Calcul de produit de N premier élément de l’ensemble naturelle :
>> P = 1;
>> N = 4;
>> k = 1;
>> while k<=N
P = P * k;
k = k + 1;
end
>> P
P =
24

- La commande BREAK : cette commande termine d’exécution des boucles FOR et


WHILE.
Exemple :
La recherche de premier élément qui accepte la division par 9 dans l’ensemble
[2, 6] :
>> for k = 2:1:6
if rem(9,k) == 0
sprintf('Le premier élément est %d',k)
break;
end
end

ans =

Le premier élément est 3

Exercices :

Exercice 1 :
Soit la fonction exprimée mathématiquement comme suit :
⎧x2 + y 2 si x > 0 et y > 0

F ( x, y ) = ⎨1 si x < 0 et y < 0
⎪x ailleurs
∀x, y ∈ ℜ ⎩
Donnez le programme qui calcul cette fonction.

10
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exercice 2 :
Ecrire un programme qui calcul le salaire net d’un ouvrier horaire. On
supposera que les heures supplémentaires (au-delà de 70h/mois) sont
payées à 125% du taux horaire de base, et qu’une retenue de 4.75%
s’applique à l’ensemble du salaire brut.

Exercice 3 :
Donnez le programme qui calcul la somme suivante :
S1 = 0 + 6 + 12 + 18 + . . . + 54.
S2 = 3 +5 +7 + . . . + (15 termes).

Exercice 4 :
Ecrire un programme qui permet d’afficher les diviseurs d’un nombre
entier.

Exercice 5 :
Donnez un programme qui affiche les 20 premiers nombres pairs, avec
leur somme à la fin du traitement.

Exercice 6 :
On appelle nombre premier, un nombre entier > 0 qui n’admet pas de
diviseurs que 1 et lui-même.
1- Donnez un programme qui détermine si un nombre est premier ou
non.
2- On utilise la tache précédente pour programmer un programme
qui affiche les N premiers nombres premiers.

11
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

7) Manipulation des vecteurs :


Les vecteurs sont des tableaux unidimensionnels, qui sont définis par leurs
noms, tailles, formats et un indice qui parcours les éléments de 1 jusqu'à la fin, avec
l’évolution de cet indice suit une suite arithmétique de raison est égal à « 1 ».

Exemple :
X1 X2 X3 X4 X5

1 2 3 4 5

Les éléments de Les indices de


vecteur vecteur

La saisie manuelle d’un vecteur (Tableau) :


>> Tab = [1.2 5.6 5 10 -5]

Tab =

1.2000 5.6000 5.0000 10.0000 -5.0000

Les opérations classiques sur les vecteurs :


L’addition :
>> x = [1, 5, 8];
>> y = [7, -5, 5];
>> z = x+y
z =
8 0 13

La soustraction :
>> d = x-y
d =
-6 10 3

12
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

La multiplication et la division élément par élément :


La multiplication :

>> p = x.*y
p =
7 -25 40

La division :
>> Div = x./y
Div =
0.1429 -1.0000 1.6000

Entai division :
>> E = x.\y
E =
7.0000 -1.0000 0.6250

Opération avec un scalaire :


>> x+2
ans =
3 7 10
>> x-3
ans =
-2 2 5
>> x*4
ans =
4 20 32
>> x/4
ans =
0.2500 1.2500 2.0000
La puissance et la racine carrée des éléments d’un vecteur :
% puissance N d’un vecteur
>> N = 3;
>> x = [1 2 5];
>> P = x.^N
P =
1 8 125
% puissance d’un vecteur par un autre vecteur
>> y = [2 -1 5];
>> x = [1 2 5];
>> D = x.^y
D =
1.0e+003 *
0.0010 0.0005 3.1250

13
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

% Racine carrée d’un vecteur par la commande « sqrt »


>> v = [4 5 9];
>> racine = sqrt(v)
racine =
2.0000 2.2361 3.0000
% Racine carrée par la puissance à (1/2).
>> racine = v.^(0.5)
racine =
2.0000 2.2361 3.0000

Exercices :

On demande de programmer quelques opérations vectorielles par les


instructions de contrôles comme la somme de 2 vecteurs, la division par
une constante, la puissance et la racine carrée d’un vecteur.

Opérations usuelles sur les vecteurs :


- La somme des éléments d’un vecteur :
>> Vecteur = [1 4 5 -2 6 -9 8 2.3 6.5 1.4];
>> somme = sum(Vecteur)
somme =
23.2000

- la somme cumulée des éléments d’un vecteur :


>> x = [1 2 5];
>> cumsum(x)
ans =
1 3 8

- le produit des éléments d’un vecteur :

>> s = [1 4 5];
>> p = prod(s)
p =
20

- le produit cumulé des éléments d’un vecteur :

>> s = [1 4 5];
>> cumprod(s)
ans =
1 4 20

14
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

La valeur moyenne d’un vecteur :


>> d = [1 4 5 6 82 5];
>> vmoy = mean(d)
vmoy =
17.1667

La différence élémentaire des éléments d’un vecteur :


Algorithme :
Soit « x » est un vecteur de N éléments, sa différence élémentaire est la suivante :
y(n) = x(n+1) – x(n) avec n=1..N-1.

>> d = [1 4 5 6 82 5];
>> diff(d)
ans =
3 1 1 76 -77

Génération des vecteurs :


Génération uniforme :
Syntaxe :
V = valeur_de_départ : le pas : valeur_final

>> temps = 1:1:7


temps =
1 2 3 4 5 6 7

Génération aléatoire :
Vecteur de destruction uniforme aléatoire se génère par la fonction « rand ».
Syntaxe :
Rand (nombre des lignes , nombre des colonnes).
Exemple :
>> B = rand(1,5)
B =
0.9501 0.2311 0.6068 0.4860 0.8913

Vecteur de destruction normalisé aléatoire se génère par la fonction « randn ».


Syntaxe :
Randn (nombre des lignes , nombre des colonnes).
Exemple :
>> bruit = randn(1,5)
bruit =
-0.4326 -1.6656 0.1253 0.2877 -1.1465

15
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Consultation, modification et suppression de quelques éléments d’un vecteur :


Consultation :

>> R = [4 5 7 8 1 22 5]
R =
4 5 7 8 1 22 5
% consultation de l’élément d’indice 3 :
>> R(3)
ans =
7
% consultation des éléments d’indices [1 3 4 6] :
>> R([1 3 4 6])
ans =
4 7 8 22
% consultation des éléments 1Î6 :
>> R(1:6)
ans =
4 5 7 8 1 22

Modification :
% modification de l’élément d’indice 3 :
>> R(3) = 100
R =
4 5 100 8 1 22 5
% modification des éléments d’indice [1 3 4 6] :
>> R([1 3 4 6]) = [786 785 782 178]
R =
786 5 785 782 1 178 5
% modification des éléments de 2Î4 par la même valeur:
>> R(2:4) = 0
R =
786 0 0 0 1 178 5

La suppression :
>> R = [4 5 7 8 1 22 5]
R =
4 5 7 8 1 22 5
% suppression de l’élément d’indice 6 :
>> R(6) = []
R =
4 5 7 8 1 5
% suppression des éléments [1 3 5] :
>> R([1 3 5]) = []
R =
5 8 5

16
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Longueur d’un vecteur :


>> x = [4 5 8 8 9 6 4 1];
>> length(x)
ans =
8

La comparaison entre les vecteurs :


La supériorité :

>> x = [1 5 8];
>> y = [7 -5 5];
>> x > y
ans =
0 1 1
L’infériorité :
>> x < y
ans =
1 0 0
L’égalité :
>> x == y
ans =
0 0 0
L’inégalité :
>> x ~= y
ans =
1 1 1
Exercices :

Exercice 1 :
1- Générez un vecteur de 10 éléments par la boucle FOR.
2- Calculez leur somme par un algorithme et par la commande
« sum ».
3- Calculez la somme des éléments d’indice paire et les éléments
d’indice impair.
4- Générez un vecteur uniforme bruité (bruit additif).
5- Appliquez la fonction suivante sur le vecteur de la question 1.
N
A= ∑ (x
i =1
i − mx )2
Avec mx:la valeur moyenne de vecteur x.

17
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exercice 2 :
1- Calculez la fonction suivante :
f ( x) = y = cos(x) Avec
x ∈ [0, π ].
2- Donnez un algorithme qui calcul le nombre des éléments qui sont
supérieur ou égal zéro.
3- Ajoutez un bruit additif à la fonction f(x) et faite la même
question 2 sur le signal bruité.
4- Qu’est que vous avez remarqué ?

Exercice 3 :
1- générez la fonction suivante :
f ( x) = y = sin(x) Avec
x ∈ [0,2π ].
2- Calculez la valeur moyenne.
3- Calculez la valeur efficace par la formule suivante :

1 N
Veff ( x) = ∑
N i =1
(xi )2

∂f
4- Calculez la dérivé première de f(x). ∂x

Exercice 4 :
1- on demande de donner le programme qui fait le calcul de la
moyenne d’un étudiant « de chaque module et moyenne
générale » et l’affiche de la façon suivante :
Module note TD note EMD Coefficient Total moyenne
Math 5
Science 2
Physique 4
Info 5
Sport 2
Total xxxxxx
Moyenne générale : yyyyyyy
Mention : Ajourné ou admit (Passable, bien, très bien, …)

18
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Manipulation des matrices :


C’est une table de deux dimensions.
La saisie manuelle :

>> Matrice = [1 2 5; 4 7 8; 5 2 8]
1MatriceX2= X4 X6
1 2 5
2 4 7 8
5 2 8

Les fonctions « sum », « prod », « mean », et « diff » sont appliqués sur les colonnes
de la matrice :
>> sum(Matrice)
ans =
10 11 21
>> prod(Matrice)
ans =
20 28 320
>> mean(Matrice)
ans =
3.3333 3.6667 7.0000
>> diff(Matrice)
ans =
3 5 3
1 -5 0

Les matrices carrées :


Le déterminent d’une matrice carrée:

>> Matrice = [1 2 5; 4 7 8; 5 2 8] ;
>> det(Matrice)
ans =
-79

L’inverse d’une matrice carrée :


>> inv(Matrice)
ans =
-0.5063 0.0759 0.2405
-0.1013 0.2152 -0.1519
0.3418 -0.1013 0.0127

Le rang d’une matrice :

>> Matrice = [1 2 5; 4 7 8; 5 2 8];


>> rank(Matrice)
ans =
3

19
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Les valeurs propres d’une matrice carrée :

>> eig(Matrice)

ans =

14.0307
-1.5844
3.5537

La matrice transposée :
>> Matrice = [1 2 5; 4 7 8; 5 2 8];
>> Matrice.'

ans =

1 4 5
2 7 2
5 8 8
Retournement du gauche vers la droite :

>> Matrice = [1 2 5; 4 7 8; 5 2 8]
Matrice =
1 2 5
4 7 8
5 2 8

>> fliplr(Matrice)
ans =
5 2 1
8 7 4
8 2 5

Retournement du haut vers le bas :

>> Matrice = [1 2 5; 4 7 8; 5 2 8]
Matrice =
1 2 5
4 7 8
5 2 8

>> flipud(Matrice)
ans =
5 2 8
4 7 8
1 2 5

20
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Rotation à 90° :
>> Matrice = [1 2 5;4 7 8;5 2 8]
Matrice =
1 2 5
4 7 8
5 2 8

>> rot90(Matrice)
ans =
5 8 8
2 7 2
1 4 5

Les matrices particulières :


La matrice d’identité : est une matrice carrée de diagonale = 1.

>> eye(3)
ans =
1 0 0
0 1 0
0 0 1

La matrice nulle : est une matrice de (n) lignes et de (m) colonnes contient des zéros.
>> zeros(3,4)
ans =
0 0 0 0
0 0 0 0
0 0 0 0

La matrice unité : est une matrice de (n) lignes et de (m) colonnes contient des uns.

>> ones(4,3)
ans =
1 1 1
1 1 1
1 1 1
1 1 1

21
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

La matrice aléatoire :

>> rand(4,4)
ans =
0.7621 0.4447 0.7382 0.9169
0.4565 0.6154 0.1763 0.4103
0.0185 0.7919 0.4057 0.8936
0.8214 0.9218 0.9355 0.0579

>> randn(4,5)
ans =
1.1909 0.1746 2.1832 0.0593 -1.3362
1.1892 -0.1867 -0.1364 -0.0956 0.7143
-0.0376 0.7258 0.1139 -0.8323 1.6236
0.3273 -0.5883 1.0668 0.2944 -0.6918

Le carré magique :

>> magic(3)
ans =
8 1 6
3 5 7
4 9 2

La consultation de quelques éléments d’une matrice :

>> mat = [7 1 3.6; 5 1.2 57; 8 9 10]


mat =
7.0000 1.0000 3.6000
5.0000 1.2000 57.0000
8.0000 9.0000 10.0000

>> mat(1,3)
ans =
3.6000
>> mat(1:2,2:3)
ans =
1.0000 3.6000
1.2000 57.0000

Modification de quelques éléments d’une matrice :


>> mat(1:2,2:3) = [0 0;0 0]
mat =
7 0 0
5 0 0
8 9 10

22
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

La suppression d’une ligne ou une colonne ou plusieurs dans une matrice :

>> mat(1,:)=[] % suppression de la première ligne


mat =
5 0 0
8 9 10

Dimensions d’une matrice :


>> mat = [7 1 3.6; 5 1.2 57; 8 9 10];

>> size(mat) % dimension de la matrice « mat »


ans =
3 3
>> size(mat,1) % la première dimension
ans =
3
>> size(mat,2) % la deuxième dimension
ans =
3

La diagonale d’une matrice carrée :

>> diag(mat)
ans =
7.0000
1.2000
10.0000

Exercices :

Exercice 1 :
1- Trouvez la solution de système d’équation suivant :

⎧ x − y + 3z = 1 ⎫
⎪ ⎪
⎨ 2 x + y + 2 z = 0 ⎬
⎪− y − z = −1 ⎪
⎩ ⎭
Par la solution matricielle et la solution classique.

23
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exercice 2 :
Ecrire un programme qui permet de calculer la somme des éléments
placés au dessus de la diagonale et le produit des éléments placés au
dessous de la diagonale et de modifier la diagonale de la matrice
carrée par « 0 ».

Exercice 3 :
Ecrire un programme qui permet de réaliser les étapes suivantes :
1- Remplit 4 vecteurs T1, T2, T3, T4 de taille N = 5.
2- Remplit la matrice M1 par les vecteurs Ti en ligne.
3- Remplit la matrice M2 par les vecteurs Ti en colonne.

Exercice 4 :
1- Générez une matrice aléatoire de destruction normalisée.
2- Forcez les éléments qui sont >=0 à « 1 » et les éléments qui sont
<0 à « -1 ».
3- Transformez la matrice résultat à un vecteur puis rempliez un
autre vecteur de la façon suivante :
x y z

x x x y y y z z z

4- Tracez le dernier vecteur par la fonction plot ou stem.

24
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

9) Polynômes et nombres complexes :


a- Polynômes :
Le calcul polynomial est à la base de nombreux domaines scientifiques :
Traitement du signal numérique et analogique, contrôle de procédés, approximation
de fonctions et interpolation de courbes.

MATLAB représente les polynômes sous forme de vecteurs lignes dont les
composantes sont ordonnées par ordre des puissances décroissantes. Un polynôme de
degré « n » est présenté par un vecteur de taille « n+1 ».

Exemple :
f ( x ) = 2 x 5 + 3 x 3 − 4 x1 + 8
>> f = [2 0 3 0 -4 8]
f =
2 0 3 0 -4 8

a.1- Les racines d’un polynôme :

>> roots(f)
ans =
-0.2065 + 1.6170i
-0.2065 - 1.6170i
-1.2788
0.8460 + 0.6793i
0.8460 - 0.6793i

a.2- Reconstruction d’un polynôme par ses racines :


>> poly([1 2 3])
ans =
1 -6 11 -6
Le polynôme f(x)= x3-6x2+11x-6

a.3- Le produit polynomial :

>> v1 = [1 4 7] % f1(x) = x2+4x+7


v1 =
1 4 7
>> v2 = [4 5 6] % f2(x) = 4x2+5x+6
v2 =
4 5 6
>> conv(v1,v2)
ans =
4 21 54 59 42
4 3 2
% F(x) = 4x +21x +54x +56x+42

25
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

a.4- La division polynomiale :


>> [Q, R] = deconv(v1,v2)
Q =
0.2500
R =
0 2.7500 5.5000

a.5- L’évaluation d’un polynôme :


Pour déterminer la valeur d’une fonction polynomiale dans un point ou intervalle ; on
trouve dans MATLAB la fonction suivante :
Syntaxe :
polyval( f , x ) : évaluation de la fonction polynomiale f(x) pour un ensemble donnée
de valeurs de la variable « x », exprimé sous forme vecteur.
>> x0 = 4;
>> f = [2 1 -2]; % f(x) = 2x2+x-2
>> polyval(f, x0) % f(x=4)
ans =
34
>> x = 0:0.5:2
x =
0 0.5000 1.0000 1.5000 2.0000
>> polyval(f, x) % f(x)
ans =
-2 -1 1 4 8

a.6- Calcul de la dérivée d’une fonction polynomiale :


Syntaxe :
polyder( f ) : calcul de la dérivée d’une fonction polynomiale f(x).

>> f = [2 1 -2]
f =
2 1 -2
>> polyder(f)
ans =
4 1
% f’(x) = 4x+1

b- Les nombres complexes :


MATLAB accepte les nombres complexes sous leur forme algébrique « a+i*b » ou
exponentielle R*exp(j*Theta). Les symboles « i » et « j » représentes le nombre
imaginaire pur vérifiant : i2 = j2 = -1.
b.1- Saisie d’un nombre complexe :
>> z = 4 + 7i
z =
4.0000 + 7.0000i
>> z1 = complex(2,5)
z1 =
2.0000 + 5.0000i

26
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

b.2- Partie réelle d’un nombre complexe :


>> real(z)
ans =
4

b.3- Partie imaginaire d’un nombre complexe :


>> imag(z)
ans =
7

b.4- Module et Phase d’un nombre complexe :

>> abs(z) % le module


ans =
8.0623

>> angle(z) % la phase


ans =
1.0517

b.5- Conjugué d’un nombre complexe :


>> z = 4 + 7i
z =
4.0000 + 7.0000i

>> conj(z)
ans =
4.0000 - 7.0000i

b.6- Représentation graphique d’un nombre complexe :


b.6.1- Représentation en module et argument :
Pour représenter le module et l’argument, on utilise la fonction « compass » qui trace
un segment orienté partant de l’origine du plan vers l’image du complexe.

>> z = 4 + 7i
z =
4.0000 + 7.0000i
>> compass(z)

27
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Représentation polaire du complexe « z »

b.6.2- Représentation en partie réelle et imaginaire :


La commande « feather » représente un nombre complexe par sa partie réelle et
imaginaire dans un plan cartésien.
>> z = 4 + 7i
z =
4.0000 + 7.0000i
>> feather(z)

Représentation cartésienne du complexe « z »

28
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exercices :

Exercice 1 :
Tracez le polynôme f(x) = 2x2 + x – 2. Dans l’intervalle [-10, +10], on
donne la fonction plot(x, y) pour tracer une courbe selon l’axe des « x »
et des « y ».

Exercice 2 :
On donne le polynôme fractionnel suivant :
x +1
f ( x) =
x2 + 4x +1
1- Tracez f(x) sur son domaine de définition.
2- Calculez la dérivée première de f(x).
3- Tracez la dérivée à partir de résultat de la question 1.

Exercice 3 :
Etude d’un circuit électrique RLC :
Le circuit RLC suivant est attaqué par un signal sinusoïdal e(t) = ejwt.

Ve Vs

Avec : R = 100, L = 0.1 H et C = 1mF.


Et un domaine de pulsations allant de 0 à 5000 rad/s.
Dans le domaine fréquentiel, ce circuit est défini par la fonction de
transfert suivant :
V s ( jω ) 1
H ( jω ) = =
Ve ( jω ) 1 − LCω + jRCω
2

Nous désirons calculer et Tracer la réponse en fréquences de cette


fonction de transfert dans une bande de pulsations donnée.

29
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

10) Les chaînes de caractères et fonctions de conversion :


a- Les chaînes de caractères :
Les chaînes de caractères sont des vecteurs de 1*N avec « N » le nombre de
caractères de la chaîne. MATLAB, outre ses puissances capacités de calcul numérique
de visualisation, possède des fonctions de traitement de chaînes de caractères.
- Saisie d’une chaîne « string » :

>> chaîne = 'MATLAB 6.5'


chaîne =
MATLAB 6.5

- Langueur d’une chaîne :


>> length(chaîne)
ans =
10

- Comparaison entre les chaînes de caractères :


>> string1 = 'MATHWORK'
string1 =
MATHWORK

>> string2 = 'MATLAB'


string2 =
MATLAB

>> strcmp(string1,string2)
ans =

0
Si string1 est égal à string2, strcmp retourne la
valeur « 1 » sinon « 0 »

- La comparaison de N caractères de deux chaînes :


>> strncmp(string1,string2,3)
ans =
1
% comparez les 3 caractères premiers

- Majuscule d’un string :


>> str = 'SimuLink'
str =
SimuLink

>> upper(str)
ans =
SIMULINK

30
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

- Minuscule d’un string :


>> str = 'GUIDE "GRAPHICS USER INTERFACE"'
str =
GUIDE "GRAPHICS USER INTERFACE"

>> lower(str)
ans =
guide "graphics user interface"

- Code ASCII d’un string :


>> str = 'matlab';
>> abs(str)
ans =
109 97 116 108 97 98

- Conversion code ASCII vers l’ensemble des caractères :


>> code = [109 97 116 108 97 98];
>> setstr(code)
ans =
matlab

- Concaténation des chaînes de caractères :


>> str1 = 'MATLAB 6.5 ';
>> str2 = ' MATWORK ';
>> str3 = ' SIMULINK ';
>> strcat(str1,str2,str3) % concaténation horizontale
ans =
MATLAB 6.5 MATWORK SIMULINK

>> strvcat(str1,str2,str3) % concaténation verticale


ans =

MATLAB 6.5
MATWORK
SIMULINK

- Vérifier si une variable contient un ensemble de caractères ou non :


>> x = 4;
>> isstr(x)
ans =
0

>> str = 'matlab';


>> isstr(str)
ans =
1

31
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

- Vérifier si une chaîne contient des lettres ou non :


>> str = 'MATLAB 6.5'
str =
MATLAB 6.5
>> isletter(str)
ans =

1 1 1 1 1 1 0 0 0 0

- Chercher d’une sous chaîne dans une autre :


>> parent = 'Matwork Matlab Math';
>> str = 'Mat';
>> findstr(parent, str)

ans =

1 9 16

- Justifie une chaîne de caractère :

>> S = ' Hamza'


S =
Hamza

>> T = strjust(S,'right') % Justification à droite


T =
Hamza

>> T = strjust(S,'left') % Justification à gauche


T =
Hamza

>> T = strjust(S,'center') % Justification au centre


T =
Hamza

- Filtrer une chaîne :


La recherche d’une chaîne dans les lignes d’une autre chaîne au début et retourne
l’indice de la ligne qui contient la chaîne cherchée.

>> x = strmatch('max',strvcat('max','minimax','maximum'))
x =
1
3
% La recherche exacte ou dés que il trouve le 1er élément on arrête
>> x = strmatch('max',strvcat('max','minimax','maximum'),'exact')
x =
1

32
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

- Chercher et remplacer un motif dans une chaîne :


Syntaxe :
str = strrep ( str1 , str2 , str3 ).
str1: la chaîne principale.
str2 : la chaîne a cherché
str3 : la chaîne remplace str2 s’il existe.

>> s1 = 'This is a good example.';


>> str = strrep(s1,'good','great')
str =
This is a great example.

- Rechercher une clé dans une chaîne :


D’une autre façon, l’extraction des mots qui compose une phrase. MATLAB propose
la fonction suivante qui fait ce travail :
Syntaxe :
[mot, reste] = strtok( chaîne ).
>> s = ' This is a good example.';
>> [mot,reste] = strtok(s)
mot =
This

reste =
is a good example.

- Enlever les caractères blancs dans la fin d’une chaîne :

>> A{1,1} = 'MATLAB ';


>> A{1,2} = 'SIMULINK ';
>> A{2,1} = 'Toolboxes ';
>> A{2,2} = 'The MathWorks ';
>> A

A =

'MATLAB ' 'SIMULINK '


'Toolboxes ' 'The MathWorks '

>> deblank(A)
ans =

'MATLAB' 'SIMULINK'
'Toolboxes' 'The MathWorks'

33
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

b- Fonctions de conversion :
b.1- Numéro vers string :

>> x = 12.58;
>> str = num2str(x)
str =
12.58
>> isstr(str)
ans =
1

b.2- String vers numéro :


>> str = '45.2158';
>> x = str2num(str)
x =
45.2158
>> isstr(x)
ans =
0

b.3- Entier vers string :


>> x = 45.21;
>> int2str(x)
ans =
45

b.4- Matrice vers string :


>> mat = [1 2 4;4 5 6]
mat =
1 2 4
4 5 6
>> mat2str(mat)
ans =
[1 2 4;4 5 6]

b.5- String vers matrice ou vecteur :


>> ch = '[1 2 4;7 8 9]';
>> str2num(ch)
ans =
1 2 4
7 8 9
>> str = '[1 2 4.5 6.5]';
>> str2num(str)
ans =
1.0000 2.0000 4.5000 6.5000

34
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

b.6- Décimal vers hexadécimal :

>> d = 12;
>> hex = dec2hex(d,2) % hexa de 12 sur 2 digits
hex =
0C

>> isstr(hex)
ans =
1
% on remarque que hex est un string

b.7- Hexadécimal vers décimal :


>> hexa = 'FF';
>> hex2dec(hexa)
ans =
255

b.8- Décimal vers le binaire :

>> d = 10 ;
>> dec2bin(d,8) % conversion sur 8 bits
ans =
00001010

b.9- Binaire vers décimal :


>> bin = '1011';
>> bin2dec(bin)
ans =
11

b.10- Décimal vers binaire vecteur :


>> d = 24;
>> dec2binvec(d,8) % conversion sur 8 bits
ans =
0 0 0 1 1 0 0 0
LSB MSB

b.11- Binaire vecteur vers décimal :

>> v = [0 1 0 1];
>> binvec2dec(v)
ans =
10

35
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

11) Programmation des fonctions & procédures sous MATLAB :


Les procédures et fonctions, désignées collectivement par le terme « routine », sont
des blocs d’instructions autonomes qui peuvent être appelés depuis divers endroits
d’un programme. Une fonction est une routine qui renvoie une valeur ou plusieurs
quand elle est exécutée. Une procédure est une routine qui ne renvoie pas de valeur.

Présentation graphique d’une fonction :

Fonction

Paramètres d’entrées Paramètres de sorties

Le corps d’une fonction :


function [paramètres de soties] = Nom_de_la_fonction(paramètres d’entrées)
%
% commentaires sur la fonction et aussi représente l’aide en ligne de cette fct
%

Bloc d’instructions représente le source exécutable par l’appelle de la fct

Exemple de compréhension :
Dans cet exemple on doit programmer une fonction qui simule une diode montée en
série avec une source.
Rappel :
La diode doit être passante si la tension Va > Vk sinon bloquée.

function Vout = diode (Vin)


% cette fonction fait la simulation d’une diode
% paramètres d’entrées :
% Vin : la tension d’entrée
% paramètres de sorties :
% Vout : la tension de sortie
% initialisation du vecteur de sortie
Vout = zeros (1,length(Vin)) ;
for k=1 :length(Vin)
if Vin(k) >= 0
Vout(k)=Vin(k);
end
end

36
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Programmation avancée des fonctions :


Dans cette partie du cours, on va utiliser les 2 commandes MATLAB suivantes :
La commandes « nargin » : retourne le nombre des paramètres d’entrées d’une
fonction.
La commandes « nargout » : retourne le nombre des paramètres de sorties d’une
fonction.
Exemple :
Programmez une fonction qui calcul le min et le max d’un vecteur.
function [maxi,mini] = MaxMin(Vecteur)
% cette fonction calcul le max et le min d'un vecteur.
% paramètres de sorties:
% maxi : maximum de la table "Vecteur"
% mini : minimum de la table "Vecteur"
% paramètres d'entrées:
% Vecteur : un tableau de N éléments.
% Syntaxe :
% [maxi,mini] = maxmin(vecteur)
% maxi = maxmin (vecteur)
% Exemple :
% v = [1 2 0 -8 4 1 96 -100 5 2.6];
% [mx, mn] = maxmin (v)
%======================================================

switch nargin
case 0
error('manque de paramètres d''entrées');
case 1
switch nargout
case 0
maxi = max(Vecteur)
mini = min(Vecteur)
case 1
maxi = max(Vecteur);
case 2
maxi = max(Vecteur);
mini = min(Vecteur);
otherwise
error('Beaucoup de paramètres de sorties');
end
otherwise
error('Beaucoup de paramètres d''entrées');
end

37
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exercices :

Exercice 1 :
A) Programmez les fonctions suivantes :
1- Fonction qui calcul la somme des nombres d’indice pair dans un
vecteur.
2- Fonction qui fait l’évaluation d’un polynôme fractionnel dans un
point ou plusieurs points.
3- Fonction qui calcul la somme ou la valeur moyenne selon le choix
de l’utilisateur.
4- Fonction qui fait le sur échantillonnage d’une vecteur
« UpSampler ».
B) Créez un ToolBox du nom « My_functions » et installez le dans la
liste des chemins MATLAB.

Exercice 2 :
Programmez un fonction qui calcul les racines d’un polynôme de 2ème
ordre ( f(x) = Ax2 + Bx + C = 0 ).

Exercice 3 :
Ecrire une fonction qui calcul le nombre de passage par zéro d’un signal
(vecteur). On donne : le passage par zéro sera détecté par la
vérification de signe de produit de deux éléments d’indice « n » et
« n+1 ».

Exercice 4 :
Programmez une fonction qui réalise le filtre numérique suivant :
M
y (n) = ∑ b(k ) × x(n − k )
k =1
M : le nombre des coefficients du filtre.
x : le signal à filtrer.
y : le signal résultat.
b : vecteur qui contient les coefficients du filtre numérique.

38
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

12) Le graphisme :

Le graphisme

2D 3D

Le tracé Gestion Gestion des


des des images images
fonctions fixes animées

Dans cette partie, on va étudier le graphisme Î2DÎTracé des fonctions et


La deuxième partie, c’est le graphisme Î 2D Î gestion des images fixes.

La fonction ou la commande « PLOT » :


Syntaxe :
plot (x, y) % tracé « y » en fonction de « x ».
plot (x, y, s) % tracé « y » en fonction de « x » par la couleur et le marker « s ».
plot(x, y, s, ‘propriétés’, ‘valeurs’).

Table des couleurs usuelles :


RGB Short Name Long Name French Name
[1 1 0] y yellow Jaune
[1 0 1] m magenta Magenta
[0 1 1] c cyan Cyan
[1 0 0] r red Rouge
[0 1 0] g green Vert
[0 0 1] b blue Bleu
[1 1 1] w white Blanc
[0 0 0] k black Noir

39
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Table des markers :


+ plus sign
o circle
* asterisk
. point
x cross
s square
d diamond
^ upward pointing triangle
v downward pointing triangle
> right pointing triangle
< left pointing triangle
p five-pointed star (pentagram)
h six-pointed star (hexagram)

Table des lignes:


- solid line (default)
-- dashed line
: dotted line
-. dash-dot line

La liste des propriétés :


LineWidth: specifies the width (in points) of the line.
MarkerEdgeColor: specifies the colour of the marker or the edge colour for filled
markers (circle, square, diamond, pentagram, hexagram, and the four triangles).
MarkerFaceColor: specifies the colour of the face of filled markers.
MarkerSize: specifies the size of the marker in units of points.

Exemples:
>> x = 0:0.1:2*pi;
>> y = sin(x);
>> plot(x,y)

40
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

plot(x,y,'r') % tracez y(x) avec la couleur rouge

>> plot(x,y,'*') % tracez y(x) avec le marker étoile

41
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

>> plot(x,y,'sk') % tracez y(x) avec le marker carré et


%la couleur noire

>> plot(x, y,'--rs','LineWidth',2,...


'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',5)

42
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

On peut tracer plusieurs courbes dans le même axe par les deux astuces suivantes :
Astuce 1 :
>> x = 0:0.1:2*pi;
>> y = sin(x);
>> g = cos(x);
>> plot(x, y, x, g)

Astuce 2 :
>> plot(x, y)
>> hold on, plot(x, g, 'r')

43
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

La fonction ou la commande « STEM » :


On utilise cette fonction pour tracer les courbes échantillonnées :
Syntaxe :
stem (x, y)
stem (x, y, ‘fill’)
stem (x, y, ‘fill’, s)

>> x = 0:0.1:2*pi;
>> y = sin(x);
>> stem(x, y,'*r')
>> stem(x, y,'fill','>b') % 'fill' : marker est plein

44
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

La fonction ou la commande «BAR et BARH » :


On utilise « BAR » et « BAR » pour tracer les histogrammes d’un tableau ou une
matrice verticalement ou horizontalement.
Syntaxe :
Bar(x)
Bar(x, y)
Bar(y, style) % style = ‘group’ ou ‘stack’
Exemple:
>> x = -5:0.5:5;
>> y = exp(-x.^2);
>> bar(x,y)

>> Y = round(rand(5,3)*10);
>> subplot(2,2,1), bar(Y,'group'),
>> title 'group'
>> subplot(2,2,2), bar(Y,'stack'),
>> title 'stack'
>> subplot(2,2,3), barh(Y,'stack'),
>> title 'stack horizontal'
>> subplot(2,2,4), bar(Y,1.5),
>> title 'Width = 1.5'

45
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

La gestion des axes :


>> x = 0:0.1:2*pi;
>> y = sin(x);
>> plot(x,y)
>> grid % affichage de la grille
>> title('la fonction sinus') % le titre de l’axe
>> xlabel('le temps') % légende de l’axe des « x »
>> ylabel('l''amplitude')% légende de l’axe des « y »
>> text(3,0.7,'f(x) = sin(x)')
>> axis([0 2*pi -1 1])
>> gtext('la fonction trigonométrique sin(x)')

46
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

>> x = -pi:pi/20:pi;
>> plot(x,cos(x),'-ro',x,sin(x),'-.b')
>> legend('cos','sin');

47
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Gestion des images fixes :

Gestion des images

Lire d’une Afficher Ecrire d’une Redimensionner


image d’une image image Une image

a- Lire une image :


Syntaxe :
A = imread(filename,fmt)
[X,map] = imread(filename,fmt)
Les formats des images connus par MATLAB 6.5 :
'bmp' Windows Bitmap (BMP)
'cur' Windows Cursor resources (CUR)
'hdf' Hierarchical Data Format (HDF)
'ico 'Windows Icon resources (ICO)
'jpg' or 'jpeg' Joint Photographic Experts Group (JPEG)
'pcx' Windows Paintbrush (PCX)
'png' Portable Network Graphics (PNG)
'tif' or 'tiff' Tagged Image File Format (TIFF)
'xwd' X Windows Dump (XWD)

b- Afficher une image:


Syntaxe:
imshow(X,map)

>> [A,map] = imread('splash.bmp','bmp');


>> imshow(A,map)

48
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

c- Ecrire une image:


Syntaxe :
imwrite(X, map, filename, fmt)
Les formats des images connus par MATLAB 6.5 :
'bmp' Windows Bitmap (BMP)
'hdf' Hierarchical Data Format (HDF)
'jpg' or 'jpeg' Joint Photographic Experts Group (JPEG)
'pcx' Windows Paintbrush (PCX)
'png' Portable Network Graphics (PNG)
'tif' or 'tiff' Tagged Image File Format (TIFF)
'xwd' X Windows Dump (XWD)

>> A = rand(64,64,3);
>> imshow(A)
>> imwrite(A,'bruit.jpg','jpg');

d- Redimensionner une image :


Syntaxe :
B = imresize(A,[mrows ncols],method)
method:
'nearest' (default) uses nearest neighbor interpolation.
'bilinear' uses bilinear interpolation.
'bicubic' uses bicubic interpolation.
>> [A,map] = imread('splash.bmp','bmp');
>> size(A)
ans =
394 394

>> B = imresize(A,[128 128]);


>> size(B)
ans =
128 128

49
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

13) Les boites de dialogues & fonctions de chargement & sauvegarde MATLAB :
Dans cette partie du cours, on va étudier les boites de dialogues sauvent utilisées dans
la programmation avancée.

Les boites de dialogues :


Boite de dialogue Description
Errordlg Boite de dialogue affiche un message d’erreur
Warndlg Boite de dialogue affiche un message de risque
Helpdlg Boite de dialogue affiche un message d’aide
Questdlg Boite de dialogue affiche un questionnaire
Inputdlg Boite de dialogue de saisie
Waitbar Boite de dialogue affiche une bar de progretion de 0Æ1
Msgbox Boite de dialogue affiche un message d’information

- La boite de dialogue « Errordlg » :


Syntaxe :
Errordlg( Message d’erreur , le nom de la boite de dialogue ).
>> errordlg('File not found','File Error');

- La boite de dialogue « Warndlg » :


Syntaxe :
warndlg( Message de risque , le nom de la boite de dialogue ).

>> warndlg('Pressing OK will clear memory','Warning');

50
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

- La boite de dialogue « Helpdlg » :


Syntaxe :
Helpdlg( Message d’aide , le nom de la boite de dialogue).
>> helpdlg('Choose 10 points from the figure','Point Selection');

- La boite de dialogue « Questdlg » :


Syntaxe :
button = questdlg('qstring').
button = questdlg('qstring','title').
button = questdlg('qstring','title','default').
button = questdlg('qstring','title','str1','str2','default').
button = questdlg('qstring','title','str1','str2','str3','default').
>> button = questdlg('Do you want to continue?',...
'Continue Operation','Yes','No','Help','No');
if strcmp(button,'Yes')
disp('Creating file')
elseif strcmp(button,'No')
disp('Canceled file operation')
elseif strcmp(button,'Help')
disp('Sorry, no help available')
end
Creating file

51
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

- La boite de dialogue « Inputdlg » :


Syntaxe :
answer = inputdlg(prompt,title,lineNo,defAns,Resize).
Prompt : c’est une cellule qui contient les labels de chaque champ de saisie.
title : le titre le la boite de saisie.
lineNo : le nombre de lignes de chaque champ de saisie.
defAns : les valeurs par défaut de chaque champ.
Resize : indique le style d’affichage de la boite de saisie :
Si Resize = ‘on’ la boite est en mode ‘Normal’
Sinon ‘off’ en mode ‘modal’.

>> prompt = {'Enter matrix size:','Enter colormap name:'};


title = 'Input for peaks function';
lines= 1;
def = {'20','hsv'};
answer = inputdlg(prompt,title,lines,def,'off');
>> answer

answer =

'20'
'hsv'

- La boite de dialogue « Waitbar » :


Syntaxe :
h = waitbar(x,'title').
waitbar(x,h).
waitbar(x,h,'updated title').
>> h = waitbar(0,'Please wait...');
for i=1:100, % computation here %
waitbar(i/100)
end
close(h)

52
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

- La boite de dialogue « Msgbox » :


Syntaxe :
Msgbox( Message , titre de la boite de dialogue ).
>> msgbox('Bon jour','PC-WORLD')

Les fonctions de sauvegarde et chargement MATLAB dans les fichier « *.mat »:


Ce type de fichier, de type binaire, est propre à MATLAB. Les données sauvegardées
par la commande « Save » et chargées par « Load ».
- Fonction de sauvegarde « Save » :
Syntaxe :
Save(le nom de fichier « *.mat » , ‘var1’ , ’var2’ , …).
>> clear all
>> x = 4;
>> string = 'MathWork 2007';
>> Tab = [1 2 54 2.3 1.02];
>> save('Mes_variables','x','string','Tab');

- Fonction de chargement « Load » :


Load( le nom de fichier).
Load( le nom de fichier , nom var1 , nom var2 , …).

>> clear all % Effacement des variables crées précédemment


>> x
??? Undefined function or variable 'x'.

>> load('Mes_variables');% chargement de toutes les variables


>> x
x =
4
>> whos
Name Size Bytes Class

Tab 1x5 40 double array


string 1x13 26 char array
x 1x1 8 double array

Grand total is 19 elements using 74 bytes

53
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

>> clear all % Effacement des variables chargées précédemment


>> Tab
??? Undefined function or variable 'Tab'.

>> load('Mes_variables','string'); % chargez "string" seulement


>> whos
Name Size Bytes Class

string 1x13 26 char array

Grand total is 13 elements using 26 bytes

Exercices :
Exercice1 :
1- On demande de faire la saisie d’un texte par une boite de
dialogue.
2- Calculez le nombre des mots qui compose ce texte.
3- Calculez la fréquence d’apparition de chaque lettre après le
UpperCasse du texte.
4- Sauvegarde les résultats obtenus précédemment dans le fichier
« texte.mat ».
5- On doit calculer le sinus et le cosinus d’un vecteur uniforme,
donc on doit le générer par la valeur initiale, finale et le pas. On
demande de saisir les éléments de génération d’un vecteur
uniforme par une boite de dialogue, puis calculez le sin et le cos
de ce vecteur.
6- Sauvegardez ces signaux (vecteur uniforme, sin, cos) dans le
fichier « signal.mat ».
7- Effacez l’espace de travail « workspace », puis chargez le
fichier « texte.mat ».
8- On demande après le chargement d’afficher les informations qui
donne par la commande « whos » dans une boite de dialogue.
9- Charger le fichier « signal.mat », et tracez le signal sin et cos
dans le même axe.

54
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

14) Les Interfaces graphiques :


MATLAB propose dans ce cadre des composants visuels pour réaliser des
interfaces graphiques qui facilitent le dialogue homme/machine. Pour réaliser une
interface graphique sous MATLAB on peut exploiter l’utilitaire « GUI » (GRAPHICS
USER INTERFACE), ou la programmation hard par des instructions près définis.
Pour simplifier les choses, on doit présenter un composant visuel ou objet
graphique par :
ButtonDown function Create function

Evénements Delete function


CallBack function

Objet graphique

Propriétés
Modification Consultation

La consultation se fait par l’appelle de la fonction « GET », et la modification par la


fonction « SET ».

55
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

L’organigramme général pour programmer une interface graphique de dialogue


« homme/machine ».

Begin

Programmation de la figure principale

Programmation des menus et les sous menus

Programmation des axes

Programmation des contrôles

Programmation des fonctions d’appelles

End

56
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Maintenant, on va présenter les fonctions utilisées pour la programmation des


différents composants visuels sous MATLAB 6.5.

figure Réalisation de l’interface principale


uimenu Réalisation d’un menu ou un sous menu
axes Réalisation d’un axe
uicontrol Réalisation des contrôles

- la fonction « FIGURE » :
Syntaxe :
figure.
figure (‘ propriétés ’, ‘ valeurs ’ ).
fig = figure (‘ propriétés ’, ‘ valeurs ’ ).
Exemple :
fig = figure('Menu' ,'none',...
'Numbertitle' ,'off',...
'Name' ,'Démonstration...',...
'Resize' ,'on',...
'WindowStyle' ,'Normal',...
'DoubleBuffer','on',...
'Units' ,'Normalized');

- la fonction « UIMENU » :
Syntaxe :
uimenu (‘ propriétés ’, ‘ valeurs ’ ).
File = uimenu (‘ propriétés ’, ‘ valeurs ’ ).
Exemple :
% le menu principale (FILE)
FileMenu = uimenu(fig,'Label','File');
% le sous menu (Open)
OpenMenu = uimenu(FileMenu,'Label' ,'Open',...
'Accelerator' ,'o',...
'Checked' ,'off',...
'Separator' ,'off',...
'Visible' ,'on',...
'Call' ,'');

- la fonction « AXES » :
Syntaxe :
axes (‘ propriétés ’, ‘ valeurs ’ ).
Axe1 = axes (‘ propriétés ’, ‘ valeurs ’ ).
Exemple :
axe1 = axes('Units' ,'Normalized',...
'Position' ,[0.1 0.55 0.4 0.4]);

57
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

- la fonction « UICONTROL » :
uicontrol (‘ propriétés ’, ‘ valeurs ’ ).
Control1 = uicontrol (‘ propriétés ’, ‘ valeurs ’ ).
Exemple :
%=================================================================
% Les controles MATLAB
% Frame ============> Cadre
% Slider============> Bar de défilement
% Edit==============> Editeur de texte
% ListBox===========> liste de choix
% Text==============> Zone de texte statique
% Checkbox==========> case à coché
% Radio=============> case d'option
% Popupmenu=========> Menu sur la figure
% PushButton========> Bouton poussoir
% ToggleButton======> Interrupteur (on, off)
%=================================================================
% Le controle PushButton
BoutonPoussoir = uicontrol('Style' ,'Push',...
'Units' ,'Normalized',...
'Position' ,[0.6 0.12 0.15 0.06],...
'String' ,'MATLAB',...
'ToolTipString','Hamza Atoui',...
'Call' ,'');

Exemple de démonstration :
Démonstration.m :
fig = figure('Menu' ,'none',...
'Numbertitle' ,'off',...
'Name' ,'Démonstration...',...
'Resize' ,'on',...
'WindowStyle' ,'Normal',...
'DoubleBuffer','on',...
'Units' ,'Normalized');
%=======================================================
% Création de menus
% le menu principale (FILE)
FileMenu = uimenu(fig,'Label','File');
% les sous_menus FILE.Open , FILE.Save ,FILE.Quit
% le sous_menu (Open)
OpenMenu = uimenu(FileMenu,'Label' ,'Open',...
'Accelerator' ,'o',...
'Checked' ,'off',...
'Separator' ,'off',...
'Visible' ,'on',...
'Call' ,'');
% le sous_menu (Sive)
SaveMenu = uimenu(FileMenu,'Label' ,'Save',...
'Accelerator' ,'s',...
'Checked' ,'on',...
'Separator' ,'on',...
'Visible' ,'on',...
'Call' ,'');

58
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Démonstration.m (suite) :
%===============================================================
% Création des axes
axe1 = axes('Units' ,'Normalized',...
'Position' ,[0.1 0.55 0.4 0.4]);
axe2 = axes('Units' ,'Normalized',...
'Position' ,[0.55 0.55 0.4 0.4]);
%=========================================================================%
% Les controles MATLAB
% Frame ============> Cadre
% Slider============> Bar de défilement
% Edit==============> Editeur de texte
% ListBox===========> liste de choix
% Text==============> Zone de texte statique
% Checkbox==========> case à coché
% Radio=============> case d'option
% Popupmenu=========> Menu sur la figure
% PushButton========> Bouton poussoir
% ToggleButton======> Interrupteur (on,off)
%=========================================================================%
% La fonction principale de création d'un controle est:
% uicontrol('propriétés','valeurs')
% Le controle Frame
cadre = uicontrol('Style' ,'Frame',...
'BackGroundColor' ,[0.9 0.9 0.9],...%[R G B]
'Units' ,'Normalized',...
'Position' ,[0.1 0.1 0.85 0.3]);
% Le controle Slider
Bar1 = uicontrol('Style' ,'Slider',...
'Units' ,'Normalized',...
'Position' ,[0.1 0.43 0.4 0.05],...
'Max' ,100,...
'Min' ,1,...
'Value' ,25,...
'Call' ,'');
Bar2 = uicontrol('Style' ,'Slider',...
'Units' ,'Normalized',...
'Position' ,[0.55 0.43 0.4 0.05],...
'Max' ,100,...
'Min' ,1,...
'Value' ,75,...
'Call' ,'');
% Le controle Edit
Memo = uicontrol('Style' ,'Edit',...
'Units' ,'Normalized',...
'Position' ,[0.125 0.29 0.4 0.1],...
'Max' ,4,...
'String' ,strvcat('HBM Corporation','2006-2007'),...
'HorizontalAlignment','Center',... % or left, or right
'BackGroundColor' ,[1 1 1],...
'ForeGroundColor' ,[0 0 1],...
'Call' ,'');

59
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Démonstration.m (suite) :
Editeur = uicontrol('Style' ,'Edit',...
'Units' ,'Normalized',...
'Position' ,[0.125 0.225 0.4 0.05],...
'String' ,'ATOUI HAMZA',...
'HorizontalAlignment','left',...
'BackGroundColor' ,[1 1 1],...
'ForeGroundColor' ,[0 0 0],...
'Call' ,'');
% Le controle Listbox
Liste = uicontrol('Style' ,'listBox',...
'Units' ,'Normalized',...
'Position' ,[0.125 0.115 0.4 0.1],...
'String' ,'Yes|No|Oky|Simulink',...
'Value' ,2,...
'Call' ,'');
% Le controle Text
TexteStatique = uicontrol('Style' ,'Text',...
'Units' ,'Normalized',...
'Position' ,[0.6 0.325 0.325 0.05],...
'BackGroundColor',[.8 .8 .8],...
'ForeGroundColor',[1 0 0],...
'FontSize' ,14,...
'FontName' ,'Courier New',...
'String' ,'MATLAB MATHWORK');
% Le controle CheckBox
CaseCoche = uicontrol( 'Style' ,'CheckBox',...
'Units' ,'Normalized',...
'Position' ,[0.6 0.25 0.15 0.05],...
'BackGroundColor' ,[0.9 0.9 0.9],...
'String' ,'Couleur',...
'Value' ,1,...
'Call' ,'');
% Le controle Radio
CaseOption = uicontrol( 'Style' ,'radio',...
'Units' ,'Normalized',...
'Position' ,[0.75 0.25 0.15 0.05],...
'BackGroundColor' ,[0.9 0.9 0.9],...
'String' ,'Type',...
'Value' ,0,...
'Call' ,'');
% Le controle PopupMenu
MenuPopup = uicontrol('Style' ,'Popupmenu',...
'Units' ,'Normalized',...
'Position' ,[0.6 0.2 0.325 0.05],...
'String' , 'Joune|Magenta|Cyan|Rouge|Vert|Bleu',...
'BackGroundColor',[1 1 1],...
'Value' ,4,...
'Call' ,'');

60
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Démonstration.m (suite) :
% Le controle PushButton
BoutonPoussoir = uicontrol('Style' ,'Push',...
'Units' ,'Normalized',...
'Position' ,[0.6 0.12 0.15 0.06],...
'String' ,'MATLAB',...
'ToolTipString','Hamza Atoui',...
'Call' ,'');
% Le controle ToggleButton
interrupteur = uicontrol('Style' ,'Toggle',...
'Units' ,'Normalized',...
'Position' ,[0.775 0.12 0.15 0.06],...
'String' ,'SIMULASION',...
'Value' ,0,...
'Call' ,'');

61
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exercices :

Exercice 1 :
- Programmez une interface qui contient 2 champs de saisie, un
champ pour afficher le résultat de l’opération entre le champ1
et le champ2, un menu de choix pour choisir une des opérations
suivantes :(addition, soustraction), et un bouton pour faire
l’opération.
- Programmez la fonction d’appelle de bouton.

Exercice 2 :
- Programmez une interface qui contient un éditeur mémo pour la
saisie d’un texte, un champ de saisie et un bouton.
- Programmez la fonction de bouton qui fait le comptage du mot
indiqué par le champ de saisie et affiche le résultat dans une
boite de dialogue.

Exercice 3 :
- on doit réaliser un traceur des fonctions trigonométriques
suivantes (sin, cos, tan), on demande de programmer ce traceur
par votre conception .

Exercice 4 :
- Programmez le simulateur logique de TP TEC 464 des fonctions
(and , or, xor) d’une séquence des bits indiquée par l’utilisateur
(l’affichage sera par des cadres colorés).

Exercice 5 :
- Programmez une application sous MATLAB qui réalise les
opérations suivantes sur un vecteur ligne saisie par l’utilisation :
- La somme.
- La valeur moyenne.
- Le produit de tous les éléments.
- La différance élément par élément.
- Le tracer du vecteur par rapport au nombre des éléments.

62
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exercice 6 :
- on doit manipuler les fichiers de sauvegarde MATLAB « .mat »,
on demande de programmer un éditeur de texte qui contient le
menu suivant :
- l’ouverture d’un texte dans un fichier « .mat ».
- La sauvegarde d’une modification.
- Nouveau texte.
- Quitter.

Exercice 7 :
- Programmation d’un jeu de lumière par l’astuce des boucles
infinies.
- Contrôle d’un four par l’astuce des boucles temporisées.

15) Manipulation des fichiers sous MATLAB :


Les types de données étudiés jusqu’ici, servaient à décrire des informations situées en
mémoire. Comme son nom l’indique, le type fichier va nous permettre de manipuler
des informations situées sur un HDD, FD, et Flash disque… (Support externe). On
propose l’arbre suivant qui donne une idée sur les différentes fonctions utilisées pour
la gestion des fichiers sous MATLAB :

Ecriture
Fermeture Lecture « FWRITE »
« FCLOSE » « FREAD »

Ouverture Accès
« FOPEN » « FSEEK »

Manipulation
Lecture d’une ligne
des fichiers
dans un fichier de type Lecture et écriture
texte formatée
« FGETL, FGETS» « FSCANF,
FPRINTF »

Remettre le
Message et numéro
fichier à la
d’erreur de la dernière Position en
position initial Indique la fin
opération I/O cours
« FREWIND » de fichier
« FERROR » « FTELL »
« FEOF »

63
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Dans cette partie du cours, on utilise l’aide du MATLAB par « STARTÆHelp » pour
la syntaxe des différentes fonctions de manipulation des fichiers sous MATLAB.

Exercices :

Exercice 1 :
- Ecrire un programme qui permet de créer un fichier.
- Charger ce dernier par un tableau de N éléments « vecteur ».
- Après l’écriture de vecteur, on doit écrire un autre programme
qui fait l’ouverture de fichier créer dans la question 1 et lire le
tableau de N éléments dans un vecteur.

Exercice 2 :
- Ecrire un programme qui permet de copier le contenu d’un
fichier dans un autre.
- Faire le même travail de la question 1 avec un interface
graphique, on utilisant les fonctions « UIGETFILE,
UIPUTFILE » plus une boite de dialogue de type « WAITBAR »
pour indique l’état en cours de l’opération de transfert.

Exercice 3 :
- Ecrire un programme ou une interface qui permet de fusionner
deux fichiers de type texte dans un autre fichier.
- Après la fusion on demande d’afficher le contenu de fichier
fusionner.

Exercice 4 :
- Dans cet exercice on demande de programmer une interface qui
fait la gestion des fichiers texte comme des fichiers de base de
données (ajout d’un caractère, navigation,…).
- Les opérations demandées sont :
a- Ajouter un caractère.
b- Caractère précèdent.
c- Caractère suivant.
d- Aller vers le dernier caractère.
e- Aller vers le premier caractère.
f- Modifier un caractère.
g- Supprimer un caractère avec un message de confirmation.

64
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

16) Manipulation du port parallèle :


Les interfaces parallèles sont une carte électronique I/O qui fait l’échange de données
entre le µp et un périphérique en parallèle selon la taille de bus de données (8 ou 16
bits…). Les points d’accès aux I/O sont appelés PORTS.
- Le port parallèle :
Cette interface est généralement utilisée par les imprimantes, car elles utilisent
beaucoup de donnés. Cependant cette interface à une limite physique lié aux
problèmes de diaphonie entre les fils, ce qui à pour principale conséquence de limiter
la longueur des câbles parallèles. Au delà de 10 m on commence à avoir une
atténuation significative du signal. Ceci dit il existe des amplificateurs de signal qui
prennent généralement la forme de boîtier de partage auto commuté.
- Description physique:
Le port parallèle des PC se présente sous la forme d'une prise DB25 femelle.
13
25
12
24
11
23
10
22

21

20

19

18

17

16

15

14
9

1
- Description du brochage du connecteur DB25 F :

Broche Description E/S


1 -STROBE Sortie
2 +Bit de données 0 Sortie
3 +Bit de données 1 Sortie
4 +Bit de données 2 Sortie
5 +Bit de données 3 Sortie
6 +Bit de données 4 Sortie
7 +Bit de données 5 Sortie
8 +Bit de données 6 Sortie
9 +Bit de données 7 Sortie
10 -Accusé de réception Entrée
11 +Occupé Entrée
12 +Plus de papier Entrée
13 +Sélection Entrée
14 -Chargement automatique Sortie
15 -Erreur Entrée

65
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

16 -Initialisation de l'imprimante Sortie


17 -Sélection de l'entrée Sortie
18 -Retour du bit de données 0 (masse) Entrée
19 -Retour du bit de données1 (masse) Entrée
20 -Retour du bit de données 2 (masse) Entrée
21 -Retour du bit de données 3 (masse) Entrée
22 -Retour du bit de données 4 (masse) Entrée
23 -Retour du bit de données 5 (masse) Entrée
24 -Retour du bit de données 5 (masse) Entrée
25 -Retour du bit de données 7 (masse) Entrée

- Description des ports :


Il dispose 3 ports pour la communication avec l’imprimante, ces ports sont le
port DATA pour la transmission des caractères, le port STATUS pour indiquer l’état
l’imprimante, le port CONTROL pour contrôler l’échange de données.

Port DATA : est un port de données de taille 8 bits configuré en sortie dans la
version standard.

P9 P8 P7 P6 P5 P4 P3 P2
D7 D6 D5 D4 D3 D2 D1 D0
Port STATUS : est un port de 5 bits configuré en entrée.

P11 P10 P12 P13 P15 X X X


S7\ S6 S5 S4 S3
Port CONTROL : est un port de 4 bits configuré en sortie.

X X X X P17 P16 P14 P1

C3\ C2 C1\ C0\

Les adresses des ports parallèles implantés dans les PC compatible PC IBM :

Numéro de LPT Port DATA Port STATUS Port CONTROL


LPT1 0378H 0379H 037AH
LPT2 0278H 0279H 027AH
LPT3 03BCH 03BDH 03BEH

66
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

- Utilisation du port parallèle sous MATLAB 6.5 :


Dans cette partie on schématise l’utilisation par la représentation graphique suivante :

Création de l’objet
port parallèle
« DIGITALIO »

Déclaration des lignes


de chaque port
« ADDLINE »

Utilisation des lignes

Les lignes Les lignes


configurées en configurées en
entrée, on utilise sortie, on utilise
« GETVALUE » « PUTVALUE »

Après l’utilisation du
port parallèle on libère
par la fonction
« DETELE »

67
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exemple d’utilisation :
% Création de l'objet port parallèle
dio = digitalio('parallel',1); % "parallel" indique le hardware port //; "1" indique
% LPT1
display(dio);
% Déclaration des lignes
% port data en sortie dans la version "SPP" "standard'
dataport = addline(dio,0:7,0,'out');
display(dataport);
% "dio" c'est l'objet
% "0:7" vecteur des bits de registre de données
% "0" indique l'offset de registre de données par rapport à l'adresse de
% base du port LPT1
% "out" ou "in" indique le sens de transfert de données ou le registre
% port status en entrée
statusport = addline(dio,0:4,1,'in');
display(statusport);
% port control en sortie
controlport = addline(dio,0:3,2,'out');
display(controlport);
% on fait un programme de clignotement des LEDS relier au registre de
% donnée "dataport" répéter 20 fois
for k=1:20
disp(['Itération numéro : ' num2str(k)]);
putvalue(dataport,255); % on envoi 255 vers le port pour allume toutes les LEDS
pause(0.5); % délai de 500 ms
putvalue(dataport,0) % on envoi 0 vers le port pour éteinte toutes les LEDS
pause(0.5);
end

% libération du port parallèle


delete(dio);
disp('l''objet port parallèle est supprimé');

Exercices :
Exercice 1 :
- Ecrire un programme qui réalise le jeu de lumière suivant :
- Clignotement de toutes les LEDS.
- Défilement de droite à gauche.
- Défilement de gauche à droite.
- Clignotement 4/4 des LEDS

Exercice 2 :
- Ecrire un programme de transfert de données entre 2 PC à
travers le port parallèle. On suit les étapes suivantes :
- Ecrire une fonction qui envoi un octet avec accusé de réception.
- Ecrire une fonction qui reçu un octet avec accusé d’émission.
- Programmez deux interfaces, une pour l’émission et une autre
pour la réception.

68
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exercice 3 : « pour les meilleurs »


- Réalisez un interface électronique relier au port parallèle pour la
lecture et l’écriture dans une EEPROM de type 24Cxx avec un
programme réalise la tache de lecture/écriture. « Pour aider :
protocole I2C de Philips, l’eeprom 24C02 (DATASHEET) ».

17) Manipulation de la carte son & filtrage numérique sous MATLAB :


Avant de commencer, il faut définir la carte son, c’est une carte électronique qui
contient un microcontrôleur qui équipé deux composants sont « ANALOG TO
DIGITAL CONVERTER (ADC) » et « DIGITAL TO ANALOG
CONVERTER (DAC) », le premier (ADC) pour convertir un signal analogique à un
signal numérique sur N bits (N : précision de convertisseur) pour un fréquence
d’échantillonnage bien définie, on peut citer quelques fréquences « 8192, 11025,
22050, 44100 ». Mais pour le deuxième (DAC) pour convertir le signal numérique a
été traité précédemment par un logiciel (Software) à un signal analogique.

- Schéma fonctionnel d’une entrée analogique à convertir à un signal numérique


sur N bits dont la fréquence d’échantillonnage est Fs :

Fs

Capteur
Bloquer d’ordre
Pré ampli Echantillonneur
zéro

N bits
ADC

- Schéma fonctionnel d’une conversion numérique analogique :


Gain

N bits Filtre de
DAC reconstruction ou Amplificateur
d’interpolation

Fs Signal analogique

Charge

69
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Après cette représentation, on commence la manipulation de cette carte sous


MATLAB. Il y a 3 méthodes pour accéder à cette carte :

Accès

Par les fonctions Par l’objet de la


de fichiers son carte son
« WAVE »

Communique avec Communique


le HARD dont le avec le HARD
format est
« WAVE »

Groupe des fonctions de traitement du son « WAVE, AU»:


Audio input/output objects.
audioplayer - Windows audio player object.
audiorecorder - Windows audio recorder object.

Audio hardware drivers.


sound - Play vector as sound.
soundsc - Autoscale and play vector as sound.
wavplay - Play sound using Windows audio output device.
wavrecord - Record sound using Windows audio input device.

Audio file import and export.


auread - Read NeXT/SUN (".au") sound file.
auwrite - Write NeXT/SUN (".au") sound file.
wavread - Read Microsoft WAVE (".wav") sound file.
wavwrite - Write Microsoft WAVE (".wav") sound file.

70
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exemple :
Programme de test des fonctions des fichiers « WAVE » :
% Fréquence d'échantillonnage
Fs = 11025;
% Enregistrement pendant 2 seconds
y = wavrecord(Fs*2,Fs,'double');
% Après l'enregistrement on doit lancer le lecteur wave
wavplay(y,Fs);
% sauvegarde de vecteur son "y" dans un fichier "wav"
wavwrite(y,Fs,'WAVFILE');
%******************************************************
%******************************************************
% Lecture d'un fichier "wav"
[g,Fg] = wavread('sinfoni.wav');
wavplay(g,Fg);

- Filtrage numérique sous MATLAB :


Les filtres numériques présentent par rapport aux filtres analogiques les avantages
inconvénients suivants :
Avantages :
- Les filtres numériques sont insensibles aux conditions extérieures (chaleur,
humidité, etc.).

- Certains filtres numériques sont impossibles à réaliser de manière analogique


(exemple: les filtres FIR).

- Les filtres numériques ne sont pas sensibles aux non idéalités d'un
amplificateur opérationnel. Ainsi, un filtre IIR du 10ème ordre est tout à fait
envisageable (attention quand même au bruit de calcul !).

- La problématique du bruit change d'aspect: dans le filtrage numérique on parle


de 'bruit de quantification' et de 'bruit de calcul'. Le premier est lié au nombre
de bits employés pour la quantification (8 bits, 16 bits, etc.). Le second est
négligeable si l'unité de calcul est de type 'floating point'. De toute manière, le
bruit numérique est localisé: on sait d'où il vient et il reste stable.

Inconvénients :
- Les filtres numériques nécessitent un filtrage analogique anti-repliement à
l'échantillonnage et à la restitution.

- Les performances d'un filtre sont directement proportionnelles à la puissance


de l'unité de calcul (processeur ou DSP).

- Beaucoup de problèmes peuvent apparaître si l'unité de calcul est de type


'fixed point'. Les paramètres d'un filtre nécessitent parfois une double
précision pour être opérationnels, ce qui ralentit les performances.

On trouve essentiellement deux grandes familles de filtres numériques :


Filtres FIR Finite Impulse Response. Ces filtres non récursifs n'ont pas de contre-
réaction.

71
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Filtres IIR Infinite Impulse Response. Ces filtres récursifs ont une contre-réaction.
Quelques fonctions souvent utilisées pour l’opération du filtrage des signaux
numérique :
FIR filter design.
cremez - Complex and nonlinear phase equiripple FIR filter design.
fir1 - Window based FIR filter design - low, high, band, stop, multi.
fir2 - FIR arbitrary shape filter design using the frequency sampling method.
fircls - Constrained Least Squares filter design - arbitrary response.
fircls1 - Constrained Least Squares FIR filter design - low and highpass.
firgauss - FIR Gaussian digital filter design.
firls - Optimal least-squares FIR filter design.
firrcos - Raised cosine FIR filter design.
intfilt - Interpolation FIR filter design.
kaiserord - Kaiser window design based filter order estimation.
remez - Optimal Chebyshev-norm FIR filter design.
remezord - Remez design based filter order estimation.
sgolay - Savitzky-Golay FIR smoothing filter design.
IIR digital filter design.
butter - Butterworth filter design.
cheby1 - Chebyshev Type I filter design (passband ripple).
cheby2 - Chebyshev Type II filter design (stopband ripple).
ellip - Elliptic filter design.
maxflat - Generalized Butterworth lowpass filter design.
yulewalk - Yule-Walker filter design.
Filter analysis.
abs - Magnitude.
angle - Phase angle.
filternorm - Compute the 2-norm or inf-norm of a digital filter.
freqs - Laplace transform frequency response.
freqspace - Frequency spacing for frequency response.
freqz - Z-transform frequency response.
fvtool - Filter Visualization Tool.
grpdelay - Group delay.
impz - Discrete impulse response.
phasez - Digital filter phase response.
phasedelay - Phase delay of a digital filter.
unwrap - Unwrap phase.
zerophase - Zero-phase response of a real filter.
zplane - Discrete pole-zero plot.
Filter implementation.
conv - Convolution.
conv2 - 2-D convolution.
convmtx - Convolution matrix.
deconv - Deconvolution.
fftfilt - Overlap-add filter implementation.
filter - Filter implementation.
filter2 - Two-dimensional digital filtering.
filtfilt - Zero-phase version of filter.
filtic - Determine filter initial conditions.
latcfilt - Lattice filter implementation.
medfilt1 - 1-Dimensional median filtering.
sgolayfilt - Savitzky-Golay filter implementation.
sosfilt - Second-order sections (biquad) filter implementation.
upfirdn - Up sample, FIR filter, down sample.

72
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Exemple :
clear all,close all,clc
% Fréquence d'échantillonnage
Fs = 8000; % en Hertz
% on fait un enregistrement pendront une seconde
n = 1;
y = wavrecord(n*Fs,Fs,'double');
% on filtre le signal "y" par un filtre passe bande de type IIR,
% Création des coefficients du filtre par la fonction butter
ordre = 4;
bande = [500 4000]/Fs;
[num,den] = butter(ordre,bande);
figure, freqz(num,den,256); % repense fréquentielle de filtre pour 256 points
% l'opération de filtrage
g = filter(num,den,y);
% lecteur de signal son "y"
wavplay(y,Fs);
pause; % atteindre une touche de clavier
% lecteur de signal son "g"
wavplay(g,Fs);
% tracer des signaux "y" et "g" dont le nombre des échantillons à tracer est 100
figure,
subplot(211),plot(y(1:100));
subplot(212),plot(g(1:100));

Exercices :

Exercice 1 :
- Ecrire un programme de traitement du son dont les opérations à
réaliser sont :
1- L’enregistrement.
2- La sauvegarde et la lecture des fichiers son « wav ».
3- Le filtrage.
4- La segmentation.
5- Le lecteur « wavplay » pour les signaux (segmentés …).
6- L’affichage de différents signaux.

73
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

18) SIMULINK :
SIMULINK est un outil de MATLAB qui permet de remplacer les équations
mathématiques entre certaines variables par des blocs organisés en un schéma. Pour
ouvrir SIMULINK, cliquez sur l'icône présent dans la fenêtre principale de
MATLAB. Une boîte de dialogue contenant la liste des librairies (semblable à celle de
la figure 1) apparaît à l’écran.

La partie gauche de la boîte de dialogue montre les librairies, tandis que la portion
droite présente les blocs disponibles dans la librairie sélectionnée. Une courte
description du bloc sélectionné est affichée dans le haut de la fenêtre. Ce sont ces
blocs qui servent à la création des diagrammes, ou schémas blocs.

- Création des schémas blocs :


Les schémas blocs doivent être créés dans un fichier SIMULINK distinct, de type
« .mdl ». Pour créer un nouveau fichier de travail SIMULINK : faire File, New,
Model ou cliquer sur l'icône

Pour ouvrir un ancien fichier : faire File, Open ou cliquer sur l'icône

Pour insérer un bloc dans un fichier, il faut cliquer sur le bloc désiré puis le faire
glisser jusqu'à l'endroit approprié dans le fichier de travail, en maintenant le bouton
gauche de la souris enfoncé. Relâchez le bouton de la souris lorsque le bloc est placé à
l'endroit voulu. On peut rechercher un bloc de la liste en tapant une partie de son nom
dans la case blanche apparaissant en haut de la librairie, puis en appuyant sur
RETOUR.

Figure 1 - Liste des librairies de SIMULINK

74
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Une fois les blocs insérés dans le fichier, il faut les relier. Pour relier des blocs entre
eux, cliquez sur le « triangle » apparaissant sur le premier bloc, maintenez le bouton
gauche de la souris enfoncé et faites glisser le curseur jusqu'au « triangle » du second
bloc. Si le lien est réalisé adéquatement, une flèche pleine devrait apparaître. Si le trait
symbolisant le lien n'est pas un trait plein ou s'il comporte un double flèche en son
centre, c'est que le lien n'a pas été réalisé correctement. Il faut donc supprimer le trait
et recommencer.

Certaines versions de SIMULINK offrent un raccourci pour relier deux blocs, il


s’agit de :
1. cliquer sur le premier bloc,
2. maintenir la touche CTRL enfoncée,
3. cliquer sur le second bloc à raccorder.
Cette méthode crée automatiquement le trait. Le sens du lien ainsi créé dépend de
l'ordre dans lequel les blocs ont été sélectionnés.

- Ajustement des paramètres des blocs :


Une fois les blocs insérés dans le fichier, leurs paramètres doivent être ajustés. Ceci se
fait en double-cliquant sur un bloc. Une fenêtre de dialogue apparaît, dans laquelle on
insère les valeurs appropriées.
Il faut porter une attention particulière au bloc « Time Scope » (voir figure 2). Celui-
ci permet de visualiser les courbes résultant de la simulation et aussi d'enregistrer ces
données pour qu'elles soient récupérées dans MATLAB.
Voici les ajustements à faire :
1. double-cliquer sur le bloc « Time Scope ». Une fenêtre s'ouvre (voir figure 3 /
c'est là que seront affichées les courbes suite à la simulation),
2. cliquer sur l'icône Properties:
3. aller dans l'onglet Data History (voir figure 4a),
4. sélectionner Save data to workspace,²
5. au besoin, modifier le nom de variable « ScopeData » pour le nom voulu,
6. choisir le format Array.

Figure 2 - Bloc « Time Scope »

Figure 3 - Fenêtre du « Time Scope »

75
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Figure 4 - Les deux onglets permettant d'ajuster les paramètres du « Time Scope »

L'oscilloscope (« Time Scope ») ne conserve que les dernières données de la


simulation. Il est possible de fixer le nombre de points conservés en l'indiquant à la
suite de la mention Limit data points to last de la fenêtre Data History (figure 4a).
Par défaut, le nombre de points est fixé à 5000, ce qui s'avère généralement adéquat.

Notez qu'il est possible d'avoir plusieurs entrées dans le bloc « Time Scope ». Pour ce
faire, il s’agit de :
1. double-cliquer sur ce bloc,
2. cliquer sur le bouton Properties, dans le haut de la fenêtre ayant apparu,
3. sous l'onglet General, changer le nombre d'axes spécifiés (voir figure 4b).

- Ajustement des paramètres de la simulation :


Après avoir créé le schéma à exécuter, cliquez sur Simulation du menu dans le haut
de la fenêtre où se trouve le schéma, puis sélectionnez Normal. Ensuite, toujours dans
Simulation, il faut :
1. cliquer sur Simulation Parameters,
2. aller dans l'onglet Solver,
3. définir les temps de début et de fin de simulation (par défaut, ces temps sont 0s
et 10s respectivement),
4. choisir le mode de simulation: Type « Fixed-Step ».

Enfin, lorsque les paramètres sont entrés, la simulation peut être amorcée de la façon
suivante:
1. cliquer sur l'icône
2. ou aller dans l'item Simulation du menu et faire Start.

Le temps de simulation apparaît dans la case en bas du fichier.

76
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

- Récupération des données :


Pour récupérer les données générées par la simulation, il faut insérer dans le schéma
un bloc provenant de la librairie SIMULINK, Sinks. Les deux blocs les plus utilisés
sont le «Time Scope» et « To Workspace ». Ce dernier enregistre les données dans
MATLAB mais ne les affiche pas, contrairement à l'oscilloscope. Les ajustements de
l'oscilloscope ont été décrits à la section précédente. Pour le bloc « To Workspace », il
faut suivre les étapes suivantes (avant l'exécution de la simulation):
a. double-cliquer sur le bloc,
b. donner le nom de variable voulu,
c. fixer le nombre de points à conserver (Limit data points to last),
d. enregistrer le format à Array.
Une fois la simulation exécutée, on sauve les données dans des variables en écrivant
dans la fenêtre de commande MATLAB ou encore dans le M-File les commandes
suivantes:
t=ScopeData(:,1) ;
y=ScopeData(:,2) ;

Le nom ScopeData doit être remplacé par le nom de variable que l'on a choisi lorsque
l'on a ajusté les paramètres de l'oscilloscope ou du bloc « To Workspace ». Les
données de la première colonne de cette variable correspondent au temps où ont été
prélevés les échantillons, tandis que les valeurs de la deuxième colonne sont les
résultats eux-mêmes.

77
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

- Annexe : Répertoire des fonctions MATLAB par thème :

Il existe de très nombreuses fonctions MATLAB dont la description n’entre


par dans le cadre de cette formation. Nous proposons néanmoins une liste de certaines
d’entre elles, en les regroupant par thème. Le lecteur pourra ainsi trouver le mot-clé
permettant d’accéder à la page appropriée de l’aide en ligne.
Il y a également un certain nombre de fonctions très spécifiques, propres à un
domaine d’étude particulier. Ces fonctions, qui se présentent sous forme de fichiers
« .M », sont regroupées dans des bibliothèques appelées boîtes à outils
« TOOLBOXES ». Une « TOOLBOXES », en général, le résultat de la collaboration
d’équipes de recherche. Voici quelques domaines de recherches :
- Calcul formel.
- Communications.
- Contrôle (plusieurs modules).
- Finances.
- Identification (plusieurs modules).
- Logique floue.
- Analyse spectrale.
- Traitement de l’image.
- Réseaux de neurones.
- Optimisation.
- Equations aux dérivées partielles.
- Statistiques.
- Traitement du signal.
- Ondelettes.
Aide en ligne :
En saisissant « help » après l’invite, on obtient la liste des principaux
répertoires de l’aide en ligne :
matlab\general : Commandes générales.
matlab\ops : Opérations et caractères spéciaux.
matlab\lang : Langage de programmation.
matlab\elmat : Matrices et manipulations matricielles usuelles.
matlab\elfun : Fonctions mathématiques usuelles.
matlab\specfun : Fonctions mathématiques spécialisées.
matlab\datafun : Analyse de données – Transformations de Fourier.
matlab\polyfun : Polynômes et interpolation.
matlab\funfun : Fonctions et résolution d’équations différentielles.
matlab\sparfun : Traitement des matrices creuses.
matlab\graph2d : Représentations graphiques en 2 D.
matlab\graph3d : Représentations graphiques en 3 D.
matlab\specgraph : Représentations graphiques avancées.
matlab\graphics : Fonctions graphiques de bas niveau.
matlab\uitools : Interface graphique utilisateur (GUI).
matlab\strfun : Traitement des chaînes de caractères.
matlab\iofun : Entrées/sorties et fichiers.
matlab\timefun : Date et heure.
matlab\datatypes : Types et structures de données.
matlab\OS : Commandes systèmes.
matlab\demos : Commandes générales.
matlab\symbolic : Exemples et démonstration.

78
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Quelques commandes générales :


Gestion des variables et de l’espace mémoire
clear Efface les variables choisies de la mémoire
disp Permet d’afficher du texte ou des tableaux
length Fournit la dimension d’un vecteur
load Charge des variables depuis un fichier « .MAT »
pack Lance la défragmentation de l’espace mémoire de travail
save Sauvegarde de variable dans un fichier « .MAT »
size Fournit les dimensions d’une matrice
who, whos Liste toutes les variables connues de l’espace de travail

Fonctions logiques
all Détermine si tous les éléments de la matrice considérée sont
non nuls
any Détermine si l’un des éléments de la matrice considérée est
non nul
exist Détermine si la variable, la fonction ou le fichier considéré
existe
find Détermine les indices et la valeur des éléments non nuls d’un
tableau ou d’une matrice
is* Détermine un état
isa Détecte un objet d’une classe donnée
logical Convertit une valeur numérique en valeur logique

Fonctions binaires
bitand ET logique bit à bit
bitcmd Complément bit à bit
bitor OU logique bit à bit
bitmax Plus grand entier non signé représentable sur la machine
bitset Mise à 1 d’un bit à un emplacement donné
bitshift Décalage (à droite ou à gauche)
bitget Valeur d’un bit à une position donnée
bitxor OU EXCLUSIF bit à bit

Utilisation des fonctions


eval Interprète et évalue la chaîne de caractères
feval Lance l’évolution d’une fonction
function Définit une fonction dans un fichier « .M »
global Permet de déclarer des variables globales
nargchk Vérifie le nombre d’arguments passés à une fonction

Saisie interactive
input Interrompt l’exécution en attente d’une saisie de l’utilisateur
keyboard Interrompt l’exécution et donne le contrôle au clavier
menu Génère un menu de choix à destination de l’utilisateur
pause Interrompt temporairement l’exécution

79
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Programmation
break Interrompt l’exécution de la structure de contrôle courante
case Sélection multiple
else Aiguillage
elseif Aiguillage multiple
end Sert à délimiter la fin d’une instruction for, if, switch ou
while
error Provoque l’affichage du message d’erreur passé en argument
et l’interruption du programme
for Boucle inconditionnelle
if Branchement conditionnel
otherwise Introduit le traitement par défaut d’un switch
return Retour à la fonction appelante
switch Sélection multiple
warning Provoque l’affichage du message d’alerte passé en argument
while Boucle conditionnelle

Date et heure
calendar Retourne une matrice représentant le calendrier du mois
spécifié
clock Retourne la date et l’heure courante sous forme d’un vecteur
[année mois jour heur minutes secondes]
cputime Calcule le temps écoulé entre deux dates
date Retourne la date courante
datenum Convertit une date sous forme de chaîne en un nombre
datestr Convertit une date sous forme de nombre en une chaîne
datevec Sépare les composantes d’une date, donnée sous forme d’une
chaîne ou d’un nombre, en un vecteur [y m d h m s]
eomday Détermine le jour de la fin d’un mois
etime Calcule le temps (en secondes) écoulé entre deux dates
données sous forme de vecteur [y m d h m s]
now Retourne la date et l’heure courante sous forme d’un nombre
tic Déclenche la fonction de chronométrage
toc Arrête la fonction de chronométrage
weekday Retourne le jour de la semaine, sous forme d’un nombre ou
d’une chaîne, d’une date donnée

Constantes et variables spéciales


ans Dernier résultat calculé
computer Identifie le type de l’ordinateur sur lequel est exécuté
MATLAB
eps Précision relative des calculs menés en virgule flottante
flops Compte le nombre d’opérations élémentaires
i, j Unité imaginaire
inf Infini
inputname Nom de l’argument en entrée
NaN Désigne un résultat non numérique (Not a Number)
nargin Nombre d’arguments passés en entrées à une fonction

80
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Constantes et variables spéciales (suite)


nargout Nombre d’arguments passés en sortie par une fonction
pi Désigne la constante trigonométrique π
realmax Plus grand nombre flottant positif pouvant être représenté en
machine
realmin Plus petit nombre flottant négatif pouvant être représenté en
machine
varargin Liste d’arguments d’entrées contenant les arguments
optionnels d’appel d’une fonction
varargout Liste d’arguments de retour contenant les arguments
optionnels de retour d’une fonction

Manipulation sur les matrices


cat Permet la concaténation de tableaux
diag Permet la définition de matrices diagonales ou l’extraction de
la diagonale d’une matrice
fliplr Permutation circulaire des colonnes
flipud Permutation circulaire des lignes
repmat Permet la réplication d’une valeur dans une matrice
reshape Permet de transformer et redimensionner une matrice
rot90 Transformation équivalente à l’application successive de la
transposition et de flipud
tril Extrait le triangle inférieur d’une matrice
triu Extrait le triangle supérieur d’une matrice

Corrélation
corrcoef Coefficients de corrélation
cov Matrice de covariance

Filtrage et convolution
conv Convolution et produit de polynômes
conv2 Convolution bidimensionnelle
deconv Déconvolution et division de polynômes
filter Filtrage numérique avec filtres de type FIR et IIR
filter2 Filtrage numérique bidimensionnel

Transformation de Fourier
fft Transformée de Fourier rapide monodimensionnelle
fft2 Transformée de Fourier rapide bidimensionnelle
fftshift Permet le centrage du spectre d’une FFT
ifft Transformée de Fourier inverse monodimensionnelle
ifft2 Transformée de Fourier inverse bidimensionnelle

Différances finies
del2 Laplacien discret
diff Dérivation discrète
gradient Gradient numérique

81
Formation sur le logiciel MATLAB 6.5 par : ATOUI Hamza

Bibliographie :
- Traduction de l’édition originale anglaise Matlab Primer de K. Sigmon CRC
PRESS LLC 1998.
- MATLAB 5.2 & 5.3 et SIMULINK 2 & 3 pour étudiants ingénieurs « M.
Mokhtari » Springer 2000.
- Cours ELE2700 « ANALYSE DES SIGNAUX » INTRODUCTION À
MATLAB ET SIMULINK 2006.
- Cours de filtrage numérique par : « Denis Prêtre, dernière révision :
23/09/2004 ». l’école ARC INGENIERIE.

82

Vous aimerez peut-être aussi