510 likes | 720 Views
Programmer avec Matlab I. Savoir-faire de l ’é cole doctorale 268 Langages et langues Universit é Paris III 31 janvier 2006 Pr é sent é par Martine Toda martine.toda @excite.co.jp. Mise en garde.
E N D
Programmer avec Matlab I Savoir-faire de l’école doctorale 268 Langages et langues Université Paris III 31 janvier 2006 Présenté par Martine Toda martine.toda@excite.co.jp
Mise en garde • Tous les exemples fournis ont été conçus dans un but pédagogique pour illustrer le fonctionnement de Matlab. • Les aspects mathématique outraitement du signal peuvent être inexacts. • Vérifiez tout si vous souhaitez utiliser le matériel mis à disposition dans un but scientifique.
Pourquoi programmer ? • Parce qu’il n’existe pas de logiciel qui permet de faire ce qu’on veut • Ex. Affichage de données articulatoires alignées avec les données acoustiques • Automatisation de tâches répétitives • segmentation et étiquetage de corpus écrits, • calculs, • écriture de fichiers sur un continuum, • création de stimuli sur un continuum, • affichage de plusieurs résultats dans le même format
Les 5 étapes de la programmation 0. Identification du problème • Subdivision du problème en tâchessimples et indépendantes • Planification des programmes en pseudo-code • Traduction en langage de programmation (ici, c’est Matlab) • Commenter ce code au fur et à mesure • Tester le programme par petits bouts et traquer les bugs
Exemple • Je veux créer un programme qui me permette de faire un test de perception (ABX) • Organigramme du programme (subdivision en tâches simples)
Exemple • Pseudo-code : Programme «création d’un stimuli sur un continuum avec deux paramètres» (commentaire : combiner la valeur du bruit de friction avec la valeur des formants) boucle1[ pour un F2 qui va de 800 à 2000 Hz avec des intervalles de 50 Hz boucle2[ et pour un bruit de friction qui va de 5000 à 8000 Hz concaténer le bruit avec la transition formantique ]boucle2 ]boucle1
Pourquoi utiliser Matlab ? (1) • C’est un logiciel de programmation facile à utiliser • Plusieurs fonctions prédéfinies pour analyser et représenter des données : on peut faire des choses élaborées avec très peux de code • Particulièrement adaptéà l’analyse du signal de parole • Il existe un module spécialisé d’analyse du signal (et de l’image) • Plusieurs fonctions prédéfinies (analyse spectrale, filtrage, etc.)
Pourquoi utiliser Matlab ? (2) • Création de belles figures • Figures stables (cf. Excel…) et esthétiques • Fonctions de lissages de courbes • Automatisation de la création de figures • Création d’interfaces pour analyser des données variées • Ex. Alignement de données acoustique et de données articulatoires
Où est installé Matlab • Au labo de phonétique (5 jetons – serveur : Média)
Démarrer Matlab • Lancement • Répertoire courant • Ligne de commande (langage interprété) • Fichiers programme (.m) • Fichiers de données (.mat) • L’aide et les démos • Programming and Data Types
Principes de la programmation • Un programme est une suite d’instructions • Les instructions contiennent des opérateurs, des mots-clefs ou des fonctions • Les instructions doivent respecter la syntaxe (de Matlab) • L’unité qui compose les instructions est l’expression. • L’expression peut contenir un littéral, une variable, une fonction (et ses arguments le cas échéant) ou une combinaison de ceux-ci. • L’expression évaluée va renvoyer une valeur.
Expressions • Littéraux Programming and Data Types: M-File Programming: Data Types • Nombres (type implicite) • Entiers 1, 40, 50394, -2,… • Flottants 0.0004, 4000.0,… • Décimaux 0.45, 4.6,… • 8 ou 16 bits, signés ou non signés • Caractères ‘a’, ‘1’ • Logiques True ou False • Matrices, cellules et chaînes de caractères • Variables mmax, a, … (le nom doit commencer par une lettre ; éviter d’utiliser les noms de fonction préexistantes) • Fonctions (avec ou sans argument) trouvemax, plot(x, y) • Opérateurs et mots clés = == > + - * ; : exit if-else-end • Programming and Data Types: M-File Programming: Operators
Quelques opérateurs et caractères spéciaux • Caractères spéciaux • () parenthèses • = affectation • , virgule • ; point virgule • % commentaire ou pour indiquer un format • : « jusqu’à» • Opérateurs arithmétiques • + addition • - soustraction • * multiplication • Opérateurs relationnels • == test d’égalité • > • Opérateurs logiques • & • ~
Quelques mots-clef • If…else…end • Break • Exit • Function • Pour connaître la liste exhaustive, taper iskeyword
Les fonctions prédéfinies dans Matlab • MATLAB Functions: Functions - By Category • MATLAB Functions: Functions - Alphabetical List • Les fonctions qu’on crée soi même s’utilisent exactement comme les fonctions prédéfinies.
Données structurées • Vecteurs et matrices • Chaînes de caractères • Cellules • Comment faire référence à chacun des éléments () {} • Opérations pour construire les matrices, chaînes et cellules [] {} vertcat() horzcat() • MATLAB Functions: Functions - By Category: Data Types
Démonstration 1 • Ligne de commande • Appel d’un programme • Opérateurs syntaxiques de base • Matrices et cellules • Qu’est-ce qui est quoi (variable, fonction, mot-clé, chaîne de caractère…) ? • A=[1 3 5 9], A=[1 3 5 9]; A, plot(A), close • B=A; B • ‘1’+’3’; 1+3 • C=[1 3 5 8]; A-C; A==C; plot(A, C), plot(A, C, ‘r’) • D=‘ceci est un test’; D • D(1), D(6), D(1:11), D(1:end) • E=num2str(A) • F=[1 2 3; 4 5 6; 7 8 9], F(2,3), G=[A, C] , H=[A; C] • I={‘ceci’, ‘est’, ‘une’, ‘cellule’}, I{2}, I{1}(4)
Boucles • Les boucles permettent d’itérer les mêmes opérations plusieurs fois sans les écrire plusieurs fois dans le programme • if …else …endsi … sinon … • for i=[a:b] …endpour … • while true… (break) …endtant que … • switch…case…endpour tel ou tel cas …
Démonstration • Boucles • Initialisation des variables si nécessaire • Couvrir tous les cas de figure : le cas général et les cas particuliers • demonstration demoif(nombre) demofor demowhile demoswitch(1 ou ‘1’)
Lecture et écriture de fichiers • Entrée-sortie standard • disp, input • Fichier de données • load, save • Fichier son • wavread, wavewrite • Fichier texte • fopen, fclose-> demonstration demofopen • fgetl, strtok, sscanf, findstr, strcmp…fid=fopen(‘articulatorydata.txt’), fgetl(fid)…
Créer des figures avec Matlab plot paramètres subplot axes figures handles callback uicontrol
La fenêtre ‘figure’ • Démonstration figure • Paramètres (name, position, color) MATLAB Functions: Figure Properties • gcf, get et set • get(gcf, ‘position’) • set(gcf, ‘position’, […])
L’affichage des données à l’intérieur des ‘axes’ (différent de ‘axis’) • Démonstration axes • Paramètres (title, fontsize, position, xlim, ylim, xlabel, ylabel, ) MATLAB Functions: Axes Properties • gca
plot (et plot3) • affiche un résultat (ouvre une fenêtre et crée des axes si nécessaire) • Démonstration plot(A), plot(A, B) • marqueurs et lignes ; propriétés : graf2d, hndlgraf • Subplot • exemple d’affichage 3Dgraf3d
Curve fitting Régression linéaire et coefficient de corrélation Approximation polynomiale, fonctions spline
Données acoustiques X données articulatoires figure hold on for i=1:60; plot(MSP(i,2),volpal(i,2),'marker','o'); end
Démonstration demoregression
Exercice 1 • Afficher sous forme de graphique des données contenues dans un fichier texte. (TF1.txt) • Parcourez un document texte structuré (articulatorydata.txt) et faites la liste pour l’entrée ‘forme de la langue’ pour chacune des consonnes, /s/, l’alvéolopalatale (‘c’) et la palatoalvéolaire ou rétroflèxe (‘sh’). • Reprendre les données acoustiques et articulatoires • afficher les différentes consonnes en couleurs différentes MATLAB Functions: ColorSpec et avec des marqueurs différents MATLAB Functions: Line Properties • afficher l’étiquette de la consonne (‘s’, ‘c’, ‘sh’) à la place du marqueur (MATLAB Functions: text)
Exercice 2 • Créez un programme avec Matlab qui permet de générer automatiquement un ensemble de fichiers de fonction d’aire sur un continuum. • Rappel : les 5 étapes de la programmation
0. Identification du problème • Je veux un continuum mais je suis trop paresseuse pour écrire tous les fichiers à la main. • De plus, comme je suis distraite, je ferais certainement des erreurs en le faisant à la main. • Je veux faire varier l’aire relative de deux tubes qui simulent un conduit vocal sans toucher à leur longueur. • Je veux que l’aire totale soit constante afin de simuler le volume constant de la langue.
1. Subdivision en tâches simples • Boucles me permettant d’obtenir un continuum • Ouverture de fichiers texte en écriture • Affichage des fonctions d’aire générées pour vérifier si elles correspondent bien à ce que je veux
2. Pseudo-code 3. Traduire en Matlab 4. Commenter 5. Débuguer
Exercice 3 • Créez un programme avec Matlab qui permet de présenter des stimuli dans un ordre aléatoire et d’enregistrer la réponse de l’utilisateur (dans un protocole ABX, par exemple). • rand input wavread… • Rappel : les 5 étapes de la programmation
Traitement du signal 1Analyse spectrale avec Matlab dft (fft) psd fenêtres autres méthodes échelle des fréquences rééchantillonage
Le son • fréquence d’échantillonage, longueur et durée • fréquence Nyquist • le fichier wav ([-1 1]) • demonstration demoson() demoson_tous
Estimation spectrale • Signal Processing Toolbox: Statistical Signal Processing: Spectral Estimation Method • demospectre(‘s1’)
Fenêtrage • Signal Processing Toolbox: Special Topics: Windows
spectrogramme • specgram specgramdemo
Traitement du signal 2Filtrage et lissage filtres curve fitting coefficient de corrélation lpc ar cepstral smoothing autres méthodes
Le filtrage • Enlever le bruit (ex. électromyographie) • Lisser les courbes dérivées (ex. données articulatoires) • Signal Processing Toolbox: Special Topics: Time-Domain Based Modeling • Signal Processing Toolbox: fdatool (et fvtool pour visualiser le filtre) • Signal Processing Toolbox: sptool
Démonstration • lpcdemolpc • filtrage demoderiv
Exercice 4 • Pour des données de mouvement d’un articulateur, calculer la vitesse et l’accélération. (Ou : pour un signal électroglottographique, la vitesse et l’accélération de l’ouverture et de la fermeture des cordes vocales) • Afin d’y voir plus clair, filtrer le signal pour enlever le bruit
Créer une interface avec Matlab guidedémonstration modification du code généré automatiquement