Mathématiques du traitement du signal/Grapheur

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche

Grapheur[modifier | modifier le wikicode]

Un grapheur est un système informatique permettant de manipuler des graphes de traitements algorithmiques. Ils rendent possible le chaînage (l'assemblage) de modules (ou nœuds) algorithmiques, ainsi que leur exécution.

Un chapitre du mémoire d'habilitation à diriger les recherches de Jérôme Lacaille est très éclairant sur les grapheurs.

Exemple de grapheur en langage R[modifier | modifier le wikicode]

Un grapheur simple en langage R est disponible sous licence GNU sur le site PhiMaTeX de sourceforge ; sa dernière version est téléchargeable ici.

Ce grapheur est commenté afin d'exposer les points nécessaires au bon fonctionnement d'un tel système.

Format du graphe de traitement[modifier | modifier le wikicode]

Dans le cadre d'une implémentation en R, un graphe de traitement va être incarné par une liste de nœuds. Chaque nœud représentera un traitement. Il y aura un nœud supplémentaire (pompeusement appelé global-node) qui contiendra des informations globales sur le graphe de traitement (comme son mode d'exécution courant, ou le dernier chaînage exécuté).

Chaque nœud va avoir plusieurs propriétés, qui vont permettent de le décrire ; le minimum est :

  • un numéro d'identifiant unique : id
  • le nom du nœud (name), qui permet de s'y référer plus simplement que par son numéro d'id
  • la fonction algorithmique attachée au noeud : rfun
  • les paramètres du nœud : params, structuré en une liste de couples nom-valeur (name x value)
  • ses connexions vers d'autres nœuds : coutput
  • ses connections provenant d'autres noeuds : cinput ; il s'agit d'une matrice dont la n-ème ligne contient, pour la connexion n, le nom du module pointé (ou pointeur), suivi du numéro de la connexion concernée
  • sa mémoire interne : memory
  • la valeur du signal de sortie, lorsque c'est applicable : outputs

Il existe d'autres propriétés, qui sont manipulées par le grapheur lui-même :

  • verbose : qui détermine le niveau des sorties relatives au nœud qui seront dans le log
  • isStatic : qui fige le nœud
  • reset : qui signale que le nœud est en mode reset (cf plus loin)
  • buffer : qui signifie que le nœud est en mode buffeur

ces propriétés ne doivent être manipulées que par le grapheur.

En outre, le nœud global a des propriétés particulières, qui permettent au grapheur de savoir où il en est dans les traitements.

Manipulation des nœuds[modifier | modifier le wikicode]

Fabrication d'un nœud vide

# make node
makeNode <- function( id, ...) {
 z<-list(...);
 if(is.list(id)) {
   z$id = length(id)+1;
 }
 else {
   z$id = id;
   }
 return(z)
}

connecter deux nœuds au sein d'une liste de nœuds il s'agit de remplir les propriétés cinput et coutput des nœuds respectifs.

# connect nodes
connectNodes <- function( listOfNodes, first, second, inputField="cinput", outputField="coutput") {
 if( length(first)==1 )
   first = list(first, 1);
 if( length(second)==1 )
   second = list(second, 1);
 firstId  = getNodeId( listOfNodes, first1);
 secondId = getNodeId( listOfNodes, second1);
 out1     = listOfNodesfirstIdoutputField;
 in2      = listOfNodessecondIdinputField;
 out1     = rbind(out1, c(secondId, second2));
 in2      = rbind(in2 , c(firstId,  first2));
 listOfNodesfirstIdoutputField = out1;
 listOfNodessecondIdinputField = in2;
 return( listOfNodes)
}

Manipulation et exécution du graphe[modifier | modifier le wikicode]

Factorisation des fonctions[modifier | modifier le wikicode]

Exemples commentés[modifier | modifier le wikicode]

Voir la version graphique de l'enchaînement de traitements que nous allons suivre grâce à rgraph.r.

L'interface permettant d'importer des graphiques graphml (dessinés par yed, en utilisant son module graphml) dans rgraph est disponible dans awk sur PhiMaTeX.