View Raw SPL
/*****************************************************************************
*                                                                            *
*   MEDFILT1.SPL Copyright (C) 2013 DSP Development Corporation              *
*                               All Rights Reserved                          *
*                                                                            *
*   Author:      Randy Race                                                  *
*                                                                            *
*   Synopsis:    Median filtering of a series                                *
*                                                                            *
*   Revisions:    4 Jun 2013  RRR  Creation                                  *
*                                                                            *
*****************************************************************************/

#if @HELP_MEDFILT1

    MEDFILT1

    Purpose: Performs median filtering of a series.

    Syntax:  MEDFILT1(series, n)

              series - the input series

                   n - an integer, the block size

    Returns: A series or table

    Example:

             W1: 1..5
             W2: medfilt1(w1, 3)

             returns the series {1, 2, 3, 4, 4}

    Remarks:
             MEDFILT1 computes a moving median similar to MOVMEDIAN where
             the beginning and end points of the series are assumed to be
             zero.

             See MEDFILT to perform 2D median filtering on an array or image.

    See Also:
             Medfilt
             Median
             Movmedian
#endif


/* modified moving median for a series */
ITERATE medfilt1(s, kernel, blocksize)
{
        local start;

        /* unused blocksize parameter for compatibility */
        if (argc < 2)
        {
                if (argc < 1) error("medfilt1 - input series required");

                kernel = 3;
        }

        /* extraction start */
        start = (kernel > 0) ? ceil(kernel / 2) : 1;

        /* extract end segments from movmedian result */
        return(extract(movmedian(s, kernel, 0), start, length(s), 0.0));
}