View Raw SPL
/* shift DC (first) point to middle of series */
ITERATE welchshift(s)
{
        local nr, nc, rmid, reven, t, xv;

        if (argc < 2)
        {
                if (argc < 1) error(sprintf("%s - input series required", __FUNC__));
        }

        /* numrows and numcols */
        (nr, nc) = size(s);

        /* get row midpoints */
        rmid = ceil((nr + 1) / 2);
        reven = nr % 2 == 0;

        /* series - flip each half of all the rows */
        t = concat(extract(s, rmid + 1, -1), extract(s, 1, rmid));

        if (isxy(s))
        {
                xv = xvals(s);
                xv = concat(extract(xv, rmid + 1, -1) - deltax(s) * length(s), extract(xv, 1, rmid));
                t = xy(xv, t);
        }


        /* fixup offset for even or odd rows */
        setdeltax(t, deltax(s));
        setxoffset(t, xoffset(s) - ((rmid - reven - 1)) * deltax(t));

        return(t);
}