View Raw SPL
/* driver for xmovavg, xmovrms, etc. */
xmovfun(s, funname, fun, xdur, ramp = 1, dof = nan, flag1 = "", flag2 = "", flag3 = "")
{
local n, y;
/* hurdles */
if (argc < 3)
{
if (argc < 2)
{
error(sprintf("%s - series and X duration required", funname));
}
ramp = 1;
}
if (xdur < 0) error(sprintf("%s - xdur must be > %g", funname, 0.0));
if (isstring(dof))
{
if (isstring(flag1) && strlen(flag1) == 0)
{
flag1 = dof;
}
else if (isstring(flag2) && strlen(flag2) == 0)
{
flag2 = dof;
}
else if (isstring(flag3) && strlen(flag3) == 0)
{
flag3 = dof;
}
dof = nan;
}
if (isstring(ramp))
{
if (isstring(flag1) && strlen(flag1) == 0)
{
flag1 = ramp;
}
else if (isstring(flag2) && strlen(flag2) == 0)
{
flag2 = ramp;
}
else if (isstring(flag3) && strlen(flag3) == 0)
{
flag3 = ramp;
}
ramp = 1;
}
/* convert interval to number of samples */
n = xtoidx(s, xdur, 0);
/* moving fun calculation */
if (isnavalue(ramp))
{
/* skip ramp flag */
if (isnavalue(dof))
{
/* skip dof */
y = feval(fun, s, n, flag1, flag2, flag3);
}
else
{
y = feval(fun, s, n, dof, flag1, flag2, flag3);
}
}
else if (isnavalue(dof))
{
/* skip dof */
y = feval(fun, s, n, ramp, flag1, flag2, flag3);
}
else
{
y = feval(fun, s, n, ramp, dof, flag1, flag2, flag3);
}
return(y);
}