en fr

Exemple de fichier SQ pour Sysquake

Les programmes pour Sysquake, appelés fichiers SQ, ne comportent que la définition des figures et la façon dont l'utilisateur interagit avec elles. Sysquake gère automatiquement la synchronisation des figure, le zoom, la fonction d'annulation et les fichiers.

Pour vous montrer à quel point les fichiers SQ peuvent être simples, en voici un qui affiche dans la même figure l'amplitude de la réponse harmonique d'un système à temps continu et celle de sa version échantillonnée à une fréquence que vous pouvez ajuster avec la souris. Le théorème de Shannon, qui dit que la fréquence d'échantillonnage doit être au moins deux fois plus élevée que la bande passante du signal à échantillonner pour éviter de perdre de l'information (cela revient à dire qu'il faut assez d'échantillons pour enregistrer les changements les plus rapides), et l'effet de repliement spectral qui se produit quand il n'est pas respecté, sont bien plus faciles à comprendre qu'avec une démonstration mathématique ou des figures statiques.

Voici le code de ce fichier SQ:

variable Ts      // période d'échantillonnage

init Ts = init   // gestionnaire d'initialisation

figure "Frequency Response"       // définition de figure
draw drawFreq(Ts)                 // gestionnaire d'affichage
mousedrag Ts = dragFreq(_id, _x1) // gestionnaire de manipulation avec la souris

functions
{@
function Ts = init
  Ts = 0.2;
  subplots('Frequency Response');

function drawFreq(Ts)
  scale('linlin/logdb', [0,20*pi]);  // échelle par défaut
  Ac = poly([-2,-1+10j,-1-10j]); // fonction de transfert temps continu
  Bc = Ac(end);                  //  définie par ses pôles
  bodemag(Bc, Ac);               // affichage de la réponse harmonique
  (Bd, Ad) = c2dm(Bc, Ac, Ts, 'z');  // échantillonnage
  dbodemag(Bd, Ad, Ts, 'r');     // réponse harmonique en rouge
  line([1,0], pi / Ts, 'b', 1);  // fréquence de Nyquist affichée comme
                                 //  une droite bleue qu'on peut manipuler

function Ts = dragFreq(id, x)
  if ~same(id, 1)                // pas la fréquence de Nyquist
    cancel;                      // on annule la manipulation
  end
  Ts = pi / x;                   // nouvelle période d'échantillonnage
@}

Ouvrez ce fichier avec Sysquake, déplacez la fréquence de Nyquist (moitié de la fréquence d'échantillonnage, représentée par une ligne verticale bleue) avec la souris, et voici ce que vous pouvez observer:

Plus la fréquence de Nyquist est basse, moins bien le signal échantillonné (en rouge) approxime le signal continu (en noir).