View Raw SPL
/* generate pulse train from pulse edges */
gpulse(s)
{
        local s1, s1, idx, p;

        /* find pulse edges */
        s1 = find(s != 0);

        if (length(s1) > 0)
        {
                if (length(s1) > 1)
                {
                        /* start and stop pulses */
                        s2 = decimate(s1, 2, 2);
                        s1 = decimate(s1, 2, 1);
                }
                else
                {
                        /* one pulse, extend to end */
                        s2 = {length(s)};
                }

                /* generate pulse start and lengths */
                idx = colextract(1..length(s), s1, s2 - s1 + 1);

                p = zeros(length(s), 1);

                /* set pulse */
                p[idx] = 1;
        }
        else
        {
                /* no pulse edges */
                p = zeros(length(s), 1);
        }

        /* deltax, xoffset and units */
        p.deltax  = s.deltax;
        p.xoffset = s.xoffset;
        p.hunits  = s.hunits;
        p.vunits  = s.vunits;

        return(p);
}