Comment utiliser MATLAB

Auteur : Jean-Paul Stromboni

Version : lundi 16 février 2004

Elèves :  ESSI 1, module SSI

Lieu : amphi est, 1heure, avec vidéoprojecteur et Matlab

Pourquoi apprendre Matlab ?

·         D’abord, c’est un outil réputé et utilisé dans plusieurs domaines des sciences de l’ingénieur (dont Traitement du Signal et des Images, Optimisation, Automatique)

·         Ensuite, nous allons l’utiliser dans le module SSI pour analyser et traiter les sons numériques

Objectif de la séance et du TP associé

Acquérir une compétence sur MATLAB et l’utiliser une première fois. En particulier, apprendre à  :

·         Utiliser la fenêtre interpréteur de MATLAB et exploiter l’éditeur de scripts

·         Créer un vecteur contenant un signal discret sur un laps de temps donné

·         Afficher, commenter et exploiter  la représentation temporelle d’un signal discret

·         Composer les signaux discrets dans MATLAB : accoler, additionner, multiplier, diviser

·         Lire et écrire des fichier wav – jouer des sons depuis MATLAB

·         Calculer et représenter la représentation fréquentielle ou spectre d’un signal

·         Ajouter de nouvelles fonctions à MATLAB à l’aide de scripts

·         Ultérieurement, selon le temps disponible, on verra comment créer des GUI (Graphic User Interface) avec la fonction ‘guide’ de Matlab pour présenter graphiquement et interactivement les résultats des calculs.

Utiliser l’interpréteur MATLAB

Caractéristiques de Matlab

Matlab signifie Matrix Laboratory, dans Matlab, tout est matrice et vecteur

Matlab contient un langage de scripts interprété.

Il est non typé, case sensitive, non formel, ne pas confondre avec Maple

La fenêtre interpréteur MATLAB

Il s’agit ci-dessous d’une copie d’écran d’une version antérieure de Matlab. Les deux lignes chargées à la suite du prompt ‘>>’ chargent un fichier wav et dessinent dans une fenêtre plot le signal associé :

 



 

Remarques :

La fenêtre interpréteur Matlab permet de rappeler et d’éditer la ligne de commande.

On admet directement certaines commandes MSDOS, telles que : pwd, cd, ls ou dir, …

Mieux, les lignes de commande débutant par le caractère ‘!’ permettent de donner des commandes à MSDOS.

Par exemple : ‘!cmd’, ouvre une fenêtre de commande MSDOS dans Matlab (faire exit pour terminer) 

Utiliser l’interpréteur

>> Te= 8000 ; % commentaire : noter le prompt, le terminateur

>> Te= 8000

>> Fe=1/8000

>> Fe

>> format long

>> Fe

>> help format % aide en ligne

Editer un script

On peut placer une suite d’instructions MATLAB dans un script (fichier d’extension .m, ou M-file).

Pour cela on lance l’éditeur/debugger dans le menu File/New ou Open, ou avec la commande edit.

Pour exécuter ensuite le script :

·         Depuis l’éditeur,

1.       utiliser la commande Run, raccourci F5

2.       ou bien sélectionner plusieurs lignes et utiliser ‘exécuter la sélection’ ou le raccourci clavier F9

·         Depuis l’interpréteur MATLAB, taper le nom du script dans la ligne de commande (après avoir au besoin mis à jour la variable PATH de MATLAB, menu File, fonction Set Path)

Exemple du script matrices.m:

On crée le script suivant sauvé dans matrices.m,on vérifie qu’il est dans le Path :

echo on

A= [1, 2 ; 3 4]

B= [0 ;1]

C= [1 0]

A’

Pour exécuter, dans la fenêtre MATLAB, faire

>> matrices

Essayer A, A’, B, … ces matrices sont dans le workspace de Matlab

Créer un signal discret (cree.m)

>> fe= 8000 %fréquence d’échantillonnage

>> temps= [0 : 1/fe : 2] ;

>> size(temps)

>> signal= 0.5*sin(2*pi*440*temps) ;

>> size(signal)

 

% définition explicite

>> rampe=[1, 2, 3, 4, 5] ;

>> rampe2= 1:2:10 ;

 

% vecteur constant

>> un=ones(size(signal))

 

% signal aléatoire

bruit= 0.1*rand(size(temps))

Modifier un signal discret (modif.m)

% accoler plusieurs signaux à la suite

s = [signal 0.5*signal 0.1*signal];

length(s)

 

% créer un signal stéréo

stereo=[signal ; 0.5*signal];

 

% extraire une partie d’un signal

>> s1= signal(1:25);

>> s2= signal(1 :10 :length(signal)) ;

>> signalinv=signal(length(signal) :-1 :1) ;

% quantification de l’amplitude

sigquant= 0.1*fix(signal/0.1) ;

 

% élever au carré

sig2= signal.^2 ;

Evaluer un signal discret (eval.m)

 

s=LA3

size(s) % déjà vu

length(s)

max(s)

min(s)

sum(s) % existe ?

 

% analyse statistique

mean(signal)

std(signal)

hist(signal,32)

Tracer un signal discret (trace.m)

Afficher la représentation temporelle usuelle

plot(temps,signal)

plot(temps,signal,’r*’)

xlabel(‘temps’)

ylabel(‘sinus’)

title(‘Représentation temporelle’)

grid

% autres types de tracés

stem(temps,s)

stairs(temps,s)

Zoomer sur un tracé(zoome.m)

%première méthode

stem(temps,signal)

axis([0 0.1 –2 2]) % arguments[xmin, xmax, ymin,ymax]

%seconde méthode

stem(temps,sig2)

zoom

zoom on

zoom off

%récupérer les limites du plot après un zoom

v=axis

Regrouper les tracés (groupe.m)

% plusieurs tracés dans un plot

plot(temps, signal,’r*’,temps, sig2,’b-‘)

legend(‘signal’,’signal carré’)

% superposition de tracés

hold on

hold off

hold

 

% utilisation de sous plots

subplot(2,1,1)

plot(temps, signal)

ylabel(‘signal’)

subplot(2,1,2)

ylabel(‘signal au carré’)

grid

Utiliser la souris (souris.m)

Pour mesurer deux points sur un tracé, par exemple le maximum et la période du signal précédent,

plot(temps(1 :10), signal(1 :10))

[x,y,bouton]=ginput(2)

 

Pour placer un texte sur un tracé avec la souris :

gtext(‘\leftarrow voici mon texte placé avec la souris’)

Pour utiliser l’écran et le clavier

disp([‘voici un nombre :’, num2str(randn(1))])

k = input(‘entrer une valeur de k’)

Opérer sur les composantes des signaux (opere.m)

Appliquer une enveloppe (produit composante à composante)

clc

t=0:.2:5;

stem(t,exp(-t).*sin(2*t));

xlabel('temps en seconde')

ylabel('signal échantillonné')

title('Signal Discret ou Echantillonné')

gtext('\leftarrow exp(-t)*sint(2*t),T=.2 seconde')

grid

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Diviser des signaux : exemple du sinus cardinal

x=-25:25;

sinccar=sin(x)./x;

% warning : division par zéro

sinccar(26)

% NaN not a number

sinccar(26)=1

plot(x,sinccar,’b*’) % puis plot(x,sincar) , grid

 

Série de Fourier (addition des composantes)

x=[0:99]/8000;

fourier=cos(2*pi*440*x)+ cos(6*pi*440*x)/9 + cos(10*pi*440*x)/25;

plot(x,fourier)

grid

Jouer un son (joue.m)

% il faut spécifier fe en second paramètre

sound(signal, fe)

sound(0.5*signal,fe)

sound( [signal, sig2],fe)

sound(signal, 2*fe)

sound(signal(1:2:length(signal)),fe)

Créer et lire des sons wav (lire.m)

Charge le son ‘chord.wav ‘ de Windows placé dans le répertoire courant et le met dans le vecteur y.

Puis, on trace y sur toute sa durée

[y,fs,b] = wavread(‘chord.wav‘) ;

fs, b

t=[0:length(y)-1]*(1/fs);

dure= t(length(t))

stem(t,y)

 

Crée le son wav dans monfichier.wav à partir du vecteur y et de la fréquence d’échantillonnage fs/2 sur 4 bit

wavwrite(y,fs/2,4,’monfichier.wav’)

sound(wavread(‘monfichier.wav’),fs/2)

Ajouter des fonctions MATLAB

Voici par exemple une fonction notepure à éditer impérativement dans un fichier nommé notepure.m (File/New/M-file) et présent dans le PATH

function [sdet]=notepure(note, ampl, f, fe, dure)

% la fonction permet de créer une note sinusoïdale d’amplitude, de fréquence

% et de durée paramétrables avec la fréquence d’échantillonnage fe.

% elle crée un fichier note.wav, joue la note, et retourne le vecteur sdet

% Noter que ce commentaire apparaît dans l’aide : help notepure

%

temps=[0: 1/fe : dure];

sdet= ampl*cos(2*pi*temps*f);

wavwrite( sdet, fe, 8, nom)

sdet= wavread( nom);

sound(sdet, fe)

stem(temps, sdet)

zoom on

end % est optionnel ici

 

Le nom du fichier  est impérativement le nom de la fonction principale : notepure.

Le fichier script  notepure.m doit être dans le PATH, la liste de chemins explorés, modifier au besoin avec la commande Set Path du menu File de MATLAB

Le end final est optionnel, car il y a une fonction unique dans le fichier.

Les commentaires à partir de la deuxième ligne apparaîtront dans l’aide de MATLAB, cela peut servir à documenter la nouvelle fonction créée dans Matlab.

Exemple d’utilisation depuis l’interpréteur MATLAB

notepure(Manote‘,0.5,440,8000,1) ; %quel est le son obtenu ? le fichier wav créé?

notepure(UneNote‘,0.5, 880, 8000,1) % qu’est ce qui change ?

TheNote= notepure(‘Toto‘,1, 440, 8000,1) % et là ?

Essayer help notepure

Calculer le spectre d’un signal discret (spectre.m)

[y,fs,b]=wavread('corbeille');

spec=fftshift(fft(y,4096)); % 4096 échantillons du signal

freq=-2048:2047;  

freq=freq*fs/4096; % 4096 fréquences réparties sur [-fs/2, fs/2[

plot(freq,abs(spec))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Est-ce que vous savez déjà ?

1.       Ce que signifie MATLAB ?

 

2.       Avec Matlab, comment ?

 

3.       Créer un vecteur t de durée 3 secondes et de fréquence d’échantillonnage 1000 Hz

 

4.       Créer le signal h(t)=0.5*exp(-10*t) sur 3 secondes échantillonné à 1 kHz dans un vecteur h

 

5.       Déterminer le maximum du vecteur h

 

6.       Que réalise x= h.*sin(100*pi*t) ?

 

7.       Constituer le signal discret tr obtenu en ajoutant les trois premiers harmoniques d’un signal triangulaire (harmoniques impairs, en 1/n^2) de fréquence 440 Hz

 

8.       Comment déterminer la fréquence d’échantillonnage d’un son wav avec Matlab ?

 

9.       Que réalisent sound(y,2*fe), sound(y,4*fe), sound(2*y,fe) ?

 

10.   Comment ajouter  une nouvelle fonction à Matlab ?

 

11.   Ce que représente le graphe ci-dessous ?

 

12.   comment fonctionnent les instructions hold, grid et zoom ?