View Raw SPL
/* formula for windowing funstions */
_winfunform(ser, winfn, winc, dc, sym)
{
        local evalstr, dataser, addsym;

        /* undefine old macros if they exist - runtime */
        undefmacro("kaiser");
        undefmacro("hamming");
        undefmacro("hanning");

        /* remove mean */
        if (dc)
        {
                dataser = sprintf("demean(%s)", ser);
        }
        else
        {
                dataser = ser;
        }

        if (winfn == _nonestr || winfn == "None")
        {
                evalstr = dataser;
        }
        else if (winc == 0)
        {
                evalstr = sprintf("%s(%s", winfn, dataser);
        }
        else
        {
                evalstr = sprintf("%s(%s, %d", winfn, dataser, winc);
        }

        /* symmetry flag */
        if (evalstr != dataser)
        {
                if (winfn == "Flattop")
                {
                        addsym = sym != 1;
                }
                else
                {
                        addsym = sym != 0;
                }

                if (addsym)
                {
                        evalstr = sprintf('%s, "%s")' , evalstr, _winfunform_sym(sym));
                }
                else
                {
                        evalstr = sprintf('%s)', evalstr);
                }
        }

        return(evalstr);
}


/* symmetry flag */
_winfunform_sym(sym)
{
        local s;

        switch (sym)
        {
                case 0:
                default:
                        s = "symmetric";
                        break;

                case 1:
                        s= "periodic";
                        break;

                case 2:
                        s = "direct";
                        break;
        }
        return(s);
}