TD 1 : Introduction à Octave I. Aide en ligne II. Vecteurs et Matrices

publicité
TD 1 : Introduction à Octave
Ce TD à pour objectif de présenter le logiciel de calcul numérique Octave. Ce gratuiciel
fonctionne sous Linux et peut être télécharger à l’adresse suivante : http://www.octave.org/
L’essentiel de la syntaxe et des commandes d’Octave est compatible avec le logiciel Matlab
très largement répandu pour le développement d’applications dans le domaine du calcul et du
traitement numérique.
I. Aide en ligne
La commande help
permet d'obtenir une aide sur l'ensemble des commandes disponibles sous octave.
Octave:1> help
Appelée avec en paramètre une nom de commande, elle renvoie une explication sur le
fonctionnement de cette commande. Par exemple :
Octave:2> help help
II. Vecteurs et Matrices
Initialisation d'un vecteur :
octave:1> x=(1:10); construit la liste des valeurs entières comprises entre 1 et 10 et
l'associe à la variable x.
octave:2> x=(2:3:11); construit la liste des valeurs entières comprises entre 2 et 11 en
progressant de 3 en 3 et l'associe à la variable x = 2 5 8 11
octave:3> x=[ 5 3 9 45 4 5 9 ]; initialise la variable x avec la liste des valeurs
passées en paramètre.
Récupération d'une valeur d'un vecteur : x(2) représente la seconde valeur du vecteur.
ATTENTION : sous Octave, le premier indice d'un vecteur est toujours 1
Exemple :
octave:4> x=[ 5 3 9 45 4 5 9 ]
x =
5 3 9 45 4 5 9
octave:5> x(2)
ans = 3
octave:6> x(1)
ans = 5
Initialisation d'une matrice
La liste des valeurs est donnée ligne par ligne, les lignes étant séparées par des points-virgule.
Exemple :
octave:7> y = [1 2 3; 4 5 6; 7 8 9; 10 11 12]
y =
1
2
3
4
5
6
7
10
8
11
9
12
Initialisation partielle
octave:8> % recopie de la 2eme colonne de y dans la 3eme
colonne de y
octave:9> y(:,3)=y(:,2);
octave:10> y
y =
1
2
2
4
5
5
7
8
8
10
11
11
III. Expressions
Suppression de la sortie écran des résultats
Pour éviter qu'une commande ou une initialisation renvoie une ou plusieurs valeurs à l'écran,
on ajoute un point-virgule en fin de ligne.
Exemple :
octave:11> a=1
a = 1
octave:12> b = a + 1
b = 2
octave:13> c = b + 1;
Commentaires
Pour signaler un commentaire, il suffit de placer un symbole de pourcentage "%" en début de
ligne
Opérateurs et constantes arithmétiques
Constantes :
•
•
pi,
i, j (imaginaires pour les complexes)
Exemple
octave:14> pi
pi = 3.1416
octave:15> i
i = 0 + 1i
octave:16> j
j = 0 + 1i
Opérateurs d'addition, soustractions, multiplication, division, puissance, et modulo :
+, -, *, /, ^, mod
Exemple
octave:17> mod(5,2)
ans = 1
octave:18> 5/2
ans = 2.5000
Toncature : arrondi à l’entier inférieur, supérieur, le plus proche
floor, ceil, round
Exemple
octave:19> floor(5/2)
ans = 2
Opérateurs de comparaison
<, >, <=, >=, = =, ~= (différent)
Les valeurs de conditions sont : Vrai = 1 et Faux = 0
Exemple :
octave:20> a~=b
ans = 1
octave:21> a==b
ans = 0
Opérateurs logiques
& : ET
| : OU
~ : NON
Exemple :
octave:22> (a==b)&(a~=b)
ans = 0
octave:23> (a==b)|(a~=b)
ans = 1
octave:24> ~(a==b)
ans = 1
Opérations sur les matrices
•
•
•
•
Transposée : A'
Addition, Multiplication : A + B, A * B
Multiplication par un scalaire : A * k, A / k
multiplication et division élément par élément : A .* B, A ./ B
Exemple :
octave:25> y=[1 2]’
y =
1
2
Structures algorithmiques
Exemples de boucles
for i=1:longueur_signal
p=sig(i)
end
for i=1:largeur_image
for j=1:hauteur_image
p=img(i,j);
end
end
i=1;
while i<largeur_image
j=1;
while j<hauteur_image
p=img(i,j);
j=j+1;
end
i=i+1;
end
Exemples de branchements conditionnels
if condition
action;
endif
ou encore
if condition
action1;
else
action2;
endif
ou encore
if condition1
action1;
elseif condition2
action2;
endif
IV Quelques commandes
zeros : crée un tableau initialisé avec des zéros
Exemple
% matrice 3x3
octave:26> zeros(3)
ans =
0
0
0
0
0
0
0
0
0
% matrice 1x3
octave:27> zeros(1,3)
ans =
0
0
0
ones : idem que zeros en initialisant le tableau avec des uns
rand : idem que zeros en initialisant avec des nombres tirés aléatoirement de manière
uniforme entre 0 et 1.
Exemple
octave:28> rand(1,3)
ans =
0.9501
0.2311
0.6068
sqrt : racine carrée (square root)
Exemples
octave:29> sqrt(9)
ans = 3
octave:30> sqrt(-1)
ans = 0 + 1.0000i
abs : valeur absolue ou module d'un nombre complexe
Exemples :
octave:31> abs(-1)
ans = 1
octave:32> abs(0 + 1.0000i)
ans = 1
exp, log, log10, sin, cos,tan : fonctions logarithmiques et trigonométriques de
base
size : dimensions d'un vecteur ou d'une matrice
Exemple :
octave:33> m=zeros(2,3)
m =
0
0
0
0
0
0
octave:34> size(m)
ans =
2
3
octave:35> a = [ 1 2 3 74 5 ]
a =
1
2
3
octave:36> size(a)
ans =
1
5
74
5
fft : transformée de Fourier
Exemples :
octave:37> fft([1 2 1 2 1 2 1 2])
ans =
12
0
0
0
-4
0
0
0
octave:38> fft([56 123 45 789 65 0 784 554])
ans =
1.0e+003 *
Columns 1 through 4
2.4160
-0.0882 + 0.4859i -0.7080 + 1.2200i
0.0702 - 0.9921i
Columns 5 through 8
-0.5160
0.0702 + 0.9921i -0.7080 - 1.2200i
0.0882 - 0.4859i
cov : calcul de la matrice de covariance
Exemple :
octave:39> cov([1 2 ; 2 1])
ans =
0.5000
-0.5000
-0.5000
0.5000
std : écart-type
octave:40> std([ 1 5 1 5 1 5 1 5])
ans =
1.5119
clear : supprime de la mémoire une ou toutes les variables
Exemple :
octave:41> a=1;
octave:42> b=2;
octave:43> a
a = 1
octave:44> clear a
octave:45> a
error : `a’ undefined near line 18 column 1
octave:46> b
b = 2
octave:47> clear
octave:48> b
error : `b’ undefined near line 20 column 1
-
V Function
Il est possible de créer des programmes de manière à ce qu'ils se comportent comme une
commande Octave par la suite. Pour cela :
•
dans un fichier texte, écrire l'entête permettant d'assurer le passage des paramètres suivi
du programme de la commande. L'entête est de la forme :
function nom_de_la_commande(liste des paramètres envoyés à la commande)
suivi du programme de la commande
Par exemple :
function res=essai(x)
n=size(x);
a=n(1);
b=n(2);
res=[a b];
endfunction
•
sauvegarder ensuite le fichier dans le "répertoire courant" d’Octave avec l'extension .m
(par exemple essai.m).
Si le fichier n'est pas sauvegardé dans le répertoire courant, il faut le signaler à
l'environnement de programmation Octave avant de faire appel à la nouvelle
commande. Il est ainsi possible de créer un répertoire regroupant toutes les commandes
que vous souhaitez en signalant à chaque ouverture de session Octave que le répertoire
courant est celui que vous indiquerez au système en utilisant la commande cd.
Exemple
octave:49>cd /home/chezmoi/octave/mescommandes/
Par défaut, Octave explore également tous les répertoires répertoriés dans la variable
$PATH de l’environnement LINUX/UNIX de l’utilisateur pour trouver le code
correspondant à une commande appelée.
VI Fonctions graphiques
plot : affiche les données sous forme de courbes
Exemple :
» a=[1 5 8; 5 6 9; 7 5 1]
a=
1 5
5 6
7 5
» plot(a)
»
8
9
1
En sortie, un graphique apparaît ou chaque colonne est associée à une courbe de couleur
différente.
hold on : A chaque fois qu'on lance une commande graphique, l'ancienne figure est effacée
pour être remplacée par la nouvelle. Pour superposer les graphiques, on peut utiliser la
commande hold on.
Par exemple, pour afficher sur la même figure les vecteurs a et b :
» a=[1 5 9];
» b=[8 4 3];
» plot(a);
» hold on;
» plot(b);
Exercice 1 : Indiquer comment, sous Octave, on peut produire un signal numérique sinusoïdal
de 256 échantillons dont les valeurs sont comprises entre 3 et 12, à raison de 8 échantillons
par période.
Exercice 2 : Indiquer comment modifier ce signal pour simuler un bruit aléatoire additionnel
d’amplitude +/- 3.
Exercice 3 : Un Convertisseur Numérique Analogique parfaitement linéaire génère un signal
électrique de tension variable comprise entre 0 et 10 volts.
Question 1 : Ecrire la fonction « quantum(b) » sous Octave qui, étant donné le nombre de bit
b sur lequel s’exprime les valeurs numériques en entrée, renvoie la tension correspondant à la
valeur 1.
Question 2 : Ecrire la fonction « tension(s) » sous Octave qui, à partir du signal numérique s,
produit les tensions successives du signal électrique correspondant. Le nombre de bit utilisé
pour le codage du signal électrique est déterminé comme étant la puissance de 2
immédiatement supérieure au maximum du signal numérique (on suppose que les valeurs
numériques sont toutes des entiers positifs ou nuls).
Question 3 : Un lissage des tensions est appliqué sur le signal électrique de sortie du CNA en
remplaçant chaque valeur par la moyenne de la valeur qui la précède et qui la suit dans le
signal. Ecrire la fonction « lissage(t) » sous Octave qui réalise cette opération sur le signal
électrique t.
Exercice 4 : on s’intéresse maintenant à un Convertisseur Analogique Numérique
parfaitement linéaire. Ecrire la fonction CAN(t,b) qui, étant donnée les valeurs successives
(positives ou nulles) de la tension du signal électrique t en entrée, et le nombre de bits b des
valeurs numériques en sortie, renvoie le signal numérique correspondant de manière à ce que
la tension maximale de t corresponde à la valeur maximale qui peut être codée sur b bits.
Exercice 5 : Ecrire une fonction « weber(r, imin, imax) » sous octave qui, étant donné la
valeur du r du ratio de Weber, le niveau d’intensité minimale imin et le niveau d’intensité
maximale imax du dispositif de restitution, renvoie le nombre de bits nécessaires pour coder
l’information d’intensité sur ce dispositif. imin et imax sont ici des valeurs entières.
TP 1 : Prise en main d’Octave
Le but de ce TP est de mieux appréhender le logiciel Octave. Pour cela, après vous être
connecté, lancer octave dans une fenêtre système, puis tester les exemples du support de TD.
Reprendre ensuite les exercices en apportant les modifications suivantes :
Exercices 1 et 2 : en utilisant la commande randn, produire un bruit additionnel gaussien
(suivant une loi normale). Utiliser l’aide en ligne si besoin est.
Exercice 3 : afficher sur une même figure la courbe représentant la tension avant et après
lissage.
Exercice 4 : afficher sur une même figure la courbe représentant le signal numérique pour
différentes valeurs de b
Téléchargement