sawtooth(t, w, duty)
{
local t0, t1, tp, dx, s;
if (argc < 3)
{
if (argc < 2)
{
if (argc < 1) error("sawtooth - input series required");
w = 1.0;
}
duty = 100;
}
dx = deltax(t);
duty /= 100;
tp = t / (2 * pi);
t0 = tp - floor(tp);
t1 = t0 / duty;
s = zeros(length(tp), 1);
if (w > 0)
{
s = (t1 <= w && t0 < duty) * t1 / w;
}
if (w < 1)
{
s += (t1 > w && t0 < duty) * (1 - t1) / (1 - w);
}
/* rescale -1 to 1 */
s = 2 * (s - 0.5);
if (isarray(t))
{
s = xy(t, s);
}
return(s);
}