Example of an SQ file for Sysquake
Programs for Sysquake, called SQ files, implement only the definition of figures and how the user can interact with them. Sysquake provides itself support for synchronizing the figures, zoom, undo/redo, and file management.
To show you how simple they can be, here is an SQ file which displays in the same figure the magnitude of the frequency response of a continuous-time system, and the same system sampled at a frequency you can manipulate with the mouse. The Shannon theorem, which states that the sample frequency should be at least two times higher than the bandwidth of the signal to be sampled in order to avoid loosing information (i.e. there should be enough samples to catch the fastest changes), and the aliasing which occurs when it is not verified, are much easier to understand than with a mathematical demonstration or with static figures.
Here is the code of this SQ file:
variable Ts // sample time init Ts = init // init handler for initial values figure "Frequency Response" // new figure definition draw drawFreq(Ts) // draw handler mousedrag Ts = dragFreq(_id, _x1) // manipulation handler functions {@ function Ts = init Ts = 0.2; subplots('Frequency Response'); function drawFreq(Ts) scale('linlin/logdb', [0,20*pi]); // default scale Ac = poly([-2,-1+10j,-1-10j]); // continuous-time t.f. Bc = Ac(end); // defined by its poles bodemag(Bc, Ac); // plot freq. response (Bd, Ad) = c2dm(Bc, Ac, Ts, 'z'); // -> discrete time dbodemag(Bd, Ad, Ts, 'r'); // plot freq. response in red line([1,0], pi / Ts, 'b', 1); // plot Nyquist freq. in blue // which can be manipulated function Ts = dragFreq(id, x) if ~same(id, 1) // not the Nyquist frequency cancel; // cancel the drag end Ts = pi / x; // new sample time @}
Open this file in Sysquake, move the Nyquist frequency (half the sample frequency, displayed as a vertical blue line) with the mouse, and here is what you will observe:
The lower the Nyquist frequency, the worse the sampled signal (in red) approximates the continuous-time signal (in black).