17. Représentation graphique des capacités du moniteur

Pour tracer le diagramme de mode d'un moniteur, il vous faudra le programme gnuplot (un logiciel libre de tracé graphique) et l'outil modeplot, un script shell/gnuplot qui tracera le diagramme sur la base des caractéristiques de votre moniteur, fournies comme options sur la ligne de commande.

Voici le listing du script modeplot :

  #!/bin/sh
  #
  # modeplot -- crée un graphe X des modes moniteurs disponibles
  #
  # Invoquez `modeplot -?' pour afficher les options de contrôle.
  #

  # Description du moniteur. Bande passante en MHz, fréquences horizontales
  # en kHz et fréquences verticales en Hz.
  TITLE="Viewsonic 21PS"
  BANDWIDTH=185
  MINHSF=31
  MAXHSF=85
  MINVSF=50
  MAXVSF=160
  ASPECT="4/3"
  vesa=72.5       # fréq. de rafraîchissement min. recommandée VESA

  while [ "$1" != "" ]
  do
          case $1 in
          -t) TITLE="$2"; shift;;
          -b) BANDWIDTH="$2"; shift;;
          -h) MINHSF="$2" MAXHSF="$3"; shift; shift;;
          -v) MINVSF="$2" MAXVSF="$3"; shift; shift;;
          -a) ASPECT="$2"; shift;;
          -g) GNUOPTS="$2"; shift;;
          -?) cat <<EOF
  options de contrôle de modeplot :

  -t "<description>"  nom du moniteur            défaut : "Viewsonic 21PS"
  -b <nn>                 bande passante en MHz      défaut : 185
  -h <min> <max>          HSF min & max (kHz)        défaut : 31 85
  -v <min> <max>          VSF min & max (Hz)         défaut : 50 160
  -a <aspect ratio>       proportions de l'image     défaut : 4/3
  -g "<options>"      options à transmettre à gnuplot

  La présence des paramètres -b, -h et -v est requise, -a, -t, -g sont
  optionnels.  Vous pouvez utiliser -g pour transmettre un nom de
  périphérique à gnuplot de façon à ce que (par exemple) les sorties
  produites par modeplot puissent être redirigées vers une imprimante.
  Voyez gnuplot(1) pour de plus amples détails.

  L'outil modeplot a été conçu par Eric S. Raymond <esr@thyrsus.com> sur
  base d'une analyse et d'un code original par Martin Lottermoser
  <Martin.Lottermoser@mch.sni.de>

  Voici modeplot $Revision: 1.20 $
  EOF
                  exit;;
          esac
          shift
  done

  gnuplot $GNUOPTS <<EOF
  set title "$TITLE Mode Plot"

  # Nombres magiques.  Malheureusement, le graphe est très sensible à toute
  # modification de ceux-ci, et ils pourraient être loin de la vérité dans
  # le cas de certains moniteurs.  Il nous faut déterminer des valeurs afin
  # d'obtenir même une approximation du diagramme de mode. Ces valeurs
  # proviennent d'une comparaison de nombreux exemples fournis dans la base
  # de données ModeDB.
  F1 = 1.30       # facteur de conversion résol. horiz. -> largeur de trame
  F2 = 1.05       # facteur de conversion résol. vertic. -> hauteur de trame

  # Définition de fonctions
  # (multiplier par 1.0 force l'arithmétique en nombres réels)
  ac = (1.0*$ASPECT)*F1/F2
  refresh(hsync, dcf) = ac * (hsync**2)/(1.0*dcf)
  dotclock(hsync, rr) = ac * (hsync**2)/(1.0*rr)
  resolution(hv, dcf) = dcf * (10**6)/(hv * F1 * F2)

  # Place les légendes le long des axes
  set xlabel 'DCF (MHz)'
  set ylabel 'RR (Hz)' 6  # Place la légende juste au-dessus de l'axe des Y

  # Génère le diagramme
  set grid
  set label "VB" at $BANDWIDTH+1, ($MAXVSF + $MINVSF) / 2 left
  set arrow from $BANDWIDTH, $MINVSF to $BANDWIDTH, $MAXVSF nohead
  set label "max VSF" at 1, $MAXVSF-1.5
  set arrow from 0, $MAXVSF to $BANDWIDTH, $MAXVSF nohead
  set label "min VSF" at 1, $MINVSF-1.5
  set arrow from 0, $MINVSF to $BANDWIDTH, $MINVSF nohead
  set label "min HSF" at dotclock($MINHSF, $MAXVSF+17), $MAXVSF + 17 right
  set label "max HSF" at dotclock($MAXHSF, $MAXVSF+17), $MAXVSF + 17 right
  set label "VESA $vesa" at 1, $vesa-1.5
  set arrow from 0, $vesa to $BANDWIDTH, $vesa nohead # style -1
  plot [dcf=0:1.1*$BANDWIDTH] [$MINVSF-10:$MAXVSF+20] \
    refresh($MINHSF, dcf) notitle with lines 1, \
    refresh($MAXHSF, dcf) notitle with lines 1, \
    resolution(640*480,   dcf) title "640x480  " with points 2, \
    resolution(800*600,   dcf) title "800x600  " with points 3, \
    resolution(1024*768,  dcf) title "1024x768 " with points 4, \
    resolution(1280*1024, dcf) title "1280x1024" with points 5, \
    resolution(1600*1280, dcf) title "1600x1200" with points 6

  pause 9999
  EOF

Une fois que vous êtes sûr d'avoir correctement installé modeplot et le programme gnuplot, il vous faudra réunir les caractéristiques suivantes de votre moniteur :

Le programme de tracé doit faire quelques suppositions simplificatrices qui ne sont pas nécessairement correctes. C'est la raison pour laquelle le diagramme résultant n'est qu'une description relativement grossière. Ces suppositions sont les suivantes :

En première approximation, prenez F1 = 1.30 et F2 = 1.05 (voyez la section Calcul de la taille de trame).

Maintenant considérez une fréquence de synchronisation particulière, HSF. Sur base des présupposés que nous venons de mentionner, la valeur que prendra la fréquence pilote DCF déterminera déjà la fréquence de rafraîchissement RR, c'est-à-dire que pour toute valeur de HSF il y a une fonction RR(DCF). Celle-ci peut s'obtenir comme suit.

La fréquence de rafraîchissement est égale à la fréquence pilote divisée par le produit des longueurs de trame :

	RR = DCF / (HFL * VFL)		(*)

D'autre part, la longueur de trame horizontale est égale à la fréquence pilote divisée par la fréquence de synchronisation horizontale :

	HFL = DCF / HSF			(**)

Il est possible de réduire VFL à HFL au moyen des deux suppositions mentionnées plus haut :

	VFL = F2 * VR
	    = F2 * (HR / AR)
	    = (F2/F1) * HFL / AR	(***)

En insérant (**) et (***) dans (*) nous obtenons :

	RR = DCF / ((F2/F1) * HFL**2 / AR)
	   = (F1/F2) * AR * DCF * (HSF/DCF)**2
	   = (F1/F2) * AR * HSF**2 / DCF

Pour des valeurs fixes de HSF, F1, F2 et AR, cette formule se traduit par une hyperbole dans notre diagramme. Si nous traçons deux courbes de ce type pour les fréquences de synchronisation horizontale minimum et maximum nous obtenons les deux limites restantes de la région des solutions permises.

Les lignes droites qui traversent la région des capacités représentent des résolutions particulières. Ceci est basé sur (*) et la deuxième supposition :

	RR = DCF / (HFL * VFL) = DCF / (F1 * HR * F2 * VR)

En traçant de telles droites pour chacune des résolutions qui vous intéressent, vous pourrez immédiatement extraire du graphe les relations possibles entre résolution, fréquence pilote et fréquence de rafraîchissement dont le moniteur est capable. Remarquez que ces lignes ne dépendent pas des caractéristiques réelles du moniteur, mais bien de notre seconde supposition.

L'outil modeplot vous offre une manière très simple de faire cela. Tapez modeplot -? pour afficher ses options de contrôle. Une invocation usuelle ressemble à ceci :

	modeplot -t "Swan SW617" -b 85 -v 50 90 -h 31 58

Le paramètre -b spécifie la bande passante vidéo ; -v et -h définissent les gammes de fréquences de synchronisation horizontale et verticale.

Lorsque vous consulterez le graphique produit par modeplot, conservez toujours présent à l'esprit le fait qu'il n'offre qu'une description approximative. Par exemple, il ignore les limitations imposées à HFL dues à ce qu'une largeur d'impulsion de synchronisation minimum est requise, et sa précision ne peut dépasser celle de nos suppositions. Il ne peut dès lors remplacer un calcul détaillé (incluant une certaine dose de magie noire) tel celui que nous avons présenté dans la section Synthèse. Il devrait, cependant, vous offrir une meilleure perception de ce qui est possible et des concessions que cela implique.