Commandes Matlab pour Traitement des Signaux
Commandes Matlab pour Traitement des Signaux
2. Formats
Il existe plusieurs types de format d'affichage dans Matlab. Voici ceux que l'on utilise le plus couramment.
On propose ici une liste (non-exhaustif) de commandes Matlab avec une description très succincte. Pour 3. Fichiers script ou fichiers de commandes
obtenir plus de détail sur les commandes disponibles en Matlab, allez dans le menu help et sélectionner Les fichiers script sont simplement des fichiers de texte (ASCII) avec un suffixe .m (nom_programme.m par
Matlab help. Vous pourrez ainsi accéder aux listes des fonctions contenues dans les différentes librairies exemple). Ces fichiers sont utiles pour pouvoir écrire des programmes Matlab. Cela permet également
Matlab (signal processing toolbox, statistics toolbox, symbolic math toolbox, …). d’éviter de devoir entrer une suite de commandes une par une à chaque utilisation ou correction du code. Pour
générer un fichier *.m, allez dans File, puis New, puis M-file. Ecrivez ensuite dans le fichier les commandes
Vous pouvez également obtenir de l’aide à partir la fenêtre de commande. Pour cela, taper la commande Matlab les unes sous les autres, et sauvegardez. Tapez nom_programme (sans le .m !) dans la fenetre de
help donne une liste des répertoires des fonctions Matlab. commande MATLAB pour exécuter le script.
help nom donne de l'information sur un répertoire, une commande ou
une fonction appelée nom. Exemple : suite.m
% calcule les dix premiers termes Commentaire descriptif
Lorsque vous ne vous souvenez plus du nom exact d’une fonction, il est possible de le retrouver en utilisant % de la suite u (n+1) = 4 u n (1-u n)
clear On initialise. Important pour ne pas utiliser des variables déjà
la commande help premières_lettres_fonction +(touche tabulation). Une liste de fonction commençant par les
affectées.
lettres indiquées vous sera alors proposée. x = sqrt(2)/2; On initialise la variable du programme.
>> help sav for i = 1:10 On va répéter 10 fois les commandes suivantes.
save save_system saveas savedlg saveload saveobj savtoner x = 4 * x * (1-x) On itère sur x la fonction : on obtiendra donc une suite
un+1 = 4un(1_un), n = 0; :::; 9, partant de u0 = p2=2.
1. Commandes de type calculatrice end On termine la boucle.
Les commandes Matlab peuvent être tapées directement dans la fenêtre de commande. La touche Enter Les 10 premiers termes termes de la suite sont affichés
permet de les exécuter. dans la fenêtre principale.
En entête du fichier, il est important de mettre des commentaires pour permettre la reconnaissance du
6 + 3.4 effectue l'opération demandée.
programme. Pour cela, il suffit de commencer la ligne par le signe %. On peut également mettre des
x = -2.34/21 le résultat de l'opération est affecté à la variable x.
commentaires en cours de programme.
y=x*3 création de y.
le point virgule (;) terminer la commande par ; supprime l'affichage du résultat.
4. Fichiers function
x permet d'afficher la variable x.
Les fichiers function ont une syntaxe plus rigoureuse que les fichiers script. En effet, tout comme pour une
y = 1 + y^3 opération de mise à une certaine puissance.
fonction mathématique, un fichier function possède des arguments d'entrée et des arguments de sortie. Ces
remarquer que y a changé, sa première écriture est oubliée.
fichiers sont également munis du suffixe .m.
On utilise très souvent cette réaffectation d'une variable.
who affichage des variables de l’espace de travail. Les variables
À la différence des fichiers script, les variables à l'intérieur d'un fichier function ne sont pas disponibles à
définies sont stockées dans l'espace de travail et peuvent être
l'extérieur. On dit qu'elles sont locales.
utilisées dans les calculs subséquents.
whos affichage détaillé des variables de l’espace de travail.
Fichier fonc.m
clear permet d'effacer toutes les variables de la session. % Un exemple de fichier FUNCTION
y = cos(x) utilisation de la fonction cosinus. % ------------------------------
variable = ' chaîne_de_caractères' de la même façon que l'on peut créer des variables function y = fonc(x)
numériques, on peut définir dans Matlab des variables dont le y = x .^ 2;
contenu est une chaîne de caractères Il est préférable d'utiliser le même nom de fichier que celui de la fonction elle-même.
(attention : on écrit ‘ ’’ ’ pour le caractère ‘).
» fonc(2)
Remarques ans =
Attention, en programmation MATLAB, les minuscules et les majuscules sont des caractères différents. 4
Si vous voulez rappeler une commande précédemment tapée, il vous suffit d'utiliser les flèches du curseur ↑
(revient aux commandes précédentes) et ↓ (affiche les commandes suivantes).
2
x(i1:i2) = [] supprime les coordonnées i1 à i2 de x.
On peut aussi placer le résultat dans une autre variable: [x,y] concatène les vecteurs x et y.
» b = fonc(5) (espace ou , entre les vecteurs) => en ligne.
b = ( ; entre les vecteurs) => en colonne.
25 x' passe d’un vecteur ligne à un vecteur colonne et inversément.
x+y on peut sommer deux vecteurs de même taille.
x*y' produit scalaire des vecteurs x et y.
ou encore puisque l'on peut utiliser des vecteurs: x.*y produit scalaire des vecteurs x et y (autre méthode).
» vecteur = [ 1 2 3];
» reponse = fonc(vecteur) Remarque
reponse = En matlab l’indice 0 n’existe pas ! x(0)=erreur. Premier element : x(1).
1 4 9
7. Matrices
La syntaxe plus générale des fichiers function est la suivante: size(A) pour connaître la dimension de la variable A (qui peut-être
function [y1, y2, y3, ... yn] = fonc2(x1,x2,x3,... xm) une matrice, un vecteur ou un scalaire). Donne un vecteur
ligne de taille 2 donnant le nombre de lignes et le nombre de
Par exemple dans le fichier «cercle.m» on a programmé le périmètre et l'aire colonnes de A.
d'un cercle en fonction de son rayon: A(i,j) coefficient d'ordre (i; j) de A.
function [peri, aire] = cercle(R) A(i1:i2,:) lignes i1 à i2 de A.
%
% argument d'entree: A(i1:i2,:)=[] supprimer les lignes i1 à i2 de A.
% le rayon: R A(:,j1:j2) colonnes j1 à j2 de A.
% arguments de sortie: A(:,j1:j2)=[] supprime les colonnes j1 à j2 de A.
% le perimetre: peri A(:) concatène les colonnes de A en un seul vecteur colonne.
% l'aire: aire diag(A) coefficients diagonaux de A sous forme
peri = 2 * pi * R; d'un vecteur colonne.
aire = pi * R.^2;
8. Opérations matricielles
Remarque A' transposée de A.
À la différence des fichiers script, les variables à l'intérieur d'un fichier function ne sont pas disponibles à rank(A) rang de A.
inv(A) inverse de A.
l'extérieur. On dit qu'elles sont locales.
expm(A) exponentielle de A.
det(A) déterminant de A.
trace(A) trace de A.
5. Communication avec l’utilisateur poly(A) polynôme caractéristique de A.
disp('Ceci est un test') affiche "Ceci est un test" sur l'écran. eig(A) valeurs propres de A.
x = input('Valeur de x = ') afficher sur l'écran "Valeur de x = " [U,D]=eig(A) vecteurs propres et valeurs propres de A.
et attendre qu'un nombre soit tapé sur le clavier. reshape(A,n,m) change la taille de la matrice A.
+- addition, soustraction.
6. Vecteurs *^ multiplication, puissance (matricielles).
n:m nombres de n à m par pas de 1. .* .^ multiplication, puissance terme à terme.
(A>n) renvoie une matrice de mème taille que A avec
x = 1:50 on crée le vecteur x. des 1 à la place des coefficients de A qui sont plus grands
n:p:m m nombres de n à m par pas de p. que n, et 0 sinon.
y = [Link] le vecteur y contient les entiers 1; 3;…; 99, find(A>n) renvoie les indices pour lesquels la propriété est vérifiée.
construit avec un pas 2. A\b solution de A * x = b.
t = [3 2.5 -6] création d'un vecteur ligne quelconque b/A solution de x * A = b.
(espace ou , entre les nombres). ./ division terme à terme.
t = [3 ;2.5 ;-6] création d'un vecteur colonne quelconque
( ; entre les nombres). 9. Valeurs particulières
x(i) ième coordonnée de x (i ≥ 1). pi π
y(12) donne la douzième composante de y. inf ∞
x(i1:i2) coordonnées i1 à i2 de x. NaN Not a Number .
z = Y(4:17) z est composé de la 4ième _a la 17ième (utile pour signaler une valeur manquante dans un tableau)
coordonnées de Y . isnan teste si une variable vaut NaN.
length(z) taille du vecteur.
3 4
10. Matrices particulières
zeros(m,n) matrice nulle de taille m x n (zeros(m)=matrice carrée mxm). 14. Graphiques de dimension 3
ones(m,n) matrice de taille m x n dont tous les coefficients valent 1. plot3(X, 2*cos(X), 5*sin(X)) tracé en 3 dimensions d'une courbe.
eye(n) matrice identité de taille n x n. contour courbes de niveaux en projection.
diag(x) matrice diagonale dont la diagonale est le vecteur x. contour3 courbes de niveaux en dimension 3.
rand(m,n) matrice de taille m x n _a coefficients uniformes sur [0; 1]. meshgrid grille de présentation.
randn(m,n) matrice de taille m x n à coefficients de loi normale N(0; 1). mesh représenter des points sur une grille.
meshc grille et courbes de niveaux.
11. Fonctions élémentaires surf représenter une surface.
abs (= valeur absolue ou module d’un nombre complexe), angle, conj, sqrt, exp, log (=logarithme népérien), surfc surface et courbe de niveau.
sin, cos, tan, asin, acos, atan, round, ceil (arrondit à la valeur supérieure), floor (arrondit à la valeur
inférieure). 15. Différentiation
diff dérivée.
12. Fonctions vectorielles polyder dérivée d'un polynôme.
max maximum gradient gradient.
min minimum del2 laplacien en dimension 2.
sort tri par ordre croissant
sum somme 16. Intégration
prod produit trapz méthode des trapèzes.
cumsum sommes cumulées quad méthode de Simpson.
cumprod produits cumulés quad8 méthode de Newton-Cotes.
mean moyenne
median médiane 17. Résolutions et optimisation
std écart type fzero équations à une variable.
roots racines d'un polynôme.
13. Graphiques de dimension 2 fmin minimum sur une variable.
plot(x) trace les n points (x(1) , …. x(n)), et les relie dans l'ordre. fmins minimum sur plusieurs variables.
plot(x,’r’,y,’+’) trace les signaux x avec une ligne rouge et y à l’aide d’un +
sur chaque point. 18. Programmation
legend ('x','y') ajoute des légendes aux 2 courbes.
plot(x, y) trace les n points de coordonnées (x(1); y(1)); …; (x(n); y(n)), boucle for
et les relie dans l'ordre. for i=1:100
plot(x, y, 'c*') impression sans relier les points mais en les affichant par wt = 24*i*0.01;
des * de couleur cyan. x(i)=12.5*cos(wt+pi/6);
notez qu’une nouvelle figure efface l'ancienne. end
hold permet de conserver les anciennes figures.
title('Deux courbes') met un titre à la figure.
xlabel('Valeurs de x') axe des abscisses.
deux boucles for
figure(2) on crée une nouvelle feuille graphique. for i=1:5
fplot représenter des fonctions. for j=1:20
polar représenter en coordonnées polaires. amp=i*1.2;
quiver champ de vecteurs. wt=j*0.05;
bar diagramme en bâtons. v(i,j)=amp*sin(wt);
hist histogramme. end
- -- : -. . + * o x types de courbes. end
ymcrgbwk couleurs.
boucle while
Pour conserver un graphe, allez avec la souris dans file, puis save as et donner un nom (par exemple, n=1;
mafigure). La figure sera conservée comme fichier [Link], et il suffira d'aller dans open pour la refaire while n<100
apparaître dans une autre feuille graphique. On peut aussi imprimer la figure en allant avec la souris dans x=n*0.05;
file, puis print, puis choisissez soit une impression directe (printer), soit la sauvegarder comme fichier y(n)=5.75*cos(x);
z(n)=-3.4*sin(x);
postscript, imprimable à loisir.
n=n+1;
end
clf efface la dernière figure.
close ferme la dernière fenêtre de figure.
figure(1) appelle la figure(1). boucle if ... elseif ... else
n=input('Donner un nombre positif ');
close all ferme toutes les fenêtres de figure.
if rem(n,3)==0
print permet d'imprimer directement un graphique Matlab.
5 6
disp('Ce nombre est divisible par 3')
elseif rem(n,5)==0 23. Traitement du signal
disp('Ce nombre est divisible par 5') a. Différents types de signaux
else t=0 :deltat :n ; x=sin(2*pi*f*t) ; signal sinusoïdal de fréquence maximale f et de Fe=1/delat.
disp('Ce nombre n''est pas divisible par 3 ou par 5')
x=exp(-[0 :n]) ; n points d’une exponentiel réelle.
end
x=[1 1 1 1] ; 4 points d’un signal rectangulaire.
x(1 :20) =0 ; x(1)=1 ;x(11)=1,x(21)=1 ; train périodique d’impulsions (peigne de Dirac). Ici 3
19. Opérateurs logiques impulsions unités de période 10.
== = x=rand(n,1) signal (pseudo-)aléatoire de longueur n
~= ≠ à distribution uniforme. Matrice nx1.
< < x=randn(n,1) signal (pseudo-)aléatoire de longueur n
> > à distribution normale (gaussienne). Matrice nx1.
<= ≤
>= ≥ pseudo-aléatoire = imitant des signaux aléatoires mais générés de façon déterministe.
& et
| ou b. Opérations sur les signaux
~ non
xor ou exclusif
Produit de convolution de deux vecteurs
En considérant un signal x(k) de longueur X et un signal g(k) de longueur G, on vérifie facilement que la
20. Sauvegarde de données longueur du signal y(k)=x(k)*g(k) est X+G-1.
Lorsqu'on ferme une session Matlab, les variables sont effacées. Un moyen de les sauvegarder est le
suivant.
En pratique : x(k)=signal d’entrée
y(k)=signal de sortie
save vect t x sauve des variables. On sauvegarde dans un fichier que l'on
appelle vect les vecteurs t et x. Le fichier s'appellera [Link] g(k)=réponse impulsionnelle d’un système
et sera créé dans le répertoire courant.
save –ascii sauve en format ascii. convol.m
clear t x efface seulement les deux vecteurs t et x. (who pour vérifier) function y=convol(x,g)
clear efface toutes les variables affectées. X = length(x);
G = length(g);
load vect charge des variables. En chargeant le fichier [Link], les
K = X+G-1;
variables t et x sont réaffectées. y(1:K)=0;
x(X+1:K)=0;
21. Ecriture et lecture dans des fichiers for k=1:K
fopen ouvre un fichier ('w' en écriture, 'r' en lecture). for l=k-G:k-1
fprintf écrit des données dans un format spécifié. if l>=0
fscanf lit des données dans un format spécifié. y(k)=y(k)+x(l+1)*g(k-l);
fclose ferme un fichier. end
end
22. Probabilité et statistiques end
bar diagramme en bâtons.
hist(x) histogramme du signal x (=image de la distribution). 10 bins. y=conv(x,g) fonction de convolution disponible en Matlab.
hist(x,n) histogramme du signal sur n bins.
mean moyenne. c. Transformée de Fourier
median médiane. fft calcule le spectre entre 0 et Fe
std écart-type. Fe = fréquence d'échantillonnage.
cov covariance. fftshift décale le spectre pour l’obtenir sur la fenêtre principale.
rand générateur de signal (pseudo-)aléatoire fenêtre principale= –Fe/2 à +Fe/2.
à distribution uniforme.
randn générateur de signal (pseudo-)aléatoire X=abs(fftshift(fft(x))) spectre d’amplitude du signal x.
à distribution normale (gaussienne).
(moyenne=0, variance=1 et déviation standard=1)
2 x
erf fonction erf ( x) =
π ∫
o
exp(−t 2 )dt
7 8
d. Echantillonnage d’un signal
t=1 :deltat :n ; deltat = ∆t = intervalle temporel.
Fe=1/delat ; Fe=fréquence d’échantillonnage.