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);
}