spike.plugins.sg — spike 0.99.23 documentation

# Source code for spike.plugins.sg

    #!/usr/bin/env python
    # encoding: utf-8

    """set of function Savitsky-Golay smoothing

    """

    from __future__ import print_function
    from spike import NPKError
    from spike.NPKData import NPKData_plugin
    from spike.util.signal_tools import findnoiselevel

    ########################################################################
    def sg(npkd, window_size, order, deriv=0, axis=0):
        """applies Savitzky-Golay of order filter to data
        window_size : int
            the length of the window. Must be an odd integer number.
        order : int
            the order of the polynomial used in the filtering.
            Must be less than `window_size` - 1.
        deriv: int
            the order of the derivative to compute (default = 0 means only smoothing)
        axis: int
            the axis on which the filter is to be applied, default is fastest varying dimension
        """
        import spike.Algo.savitzky_golay as sgm
        todo = npkd.test_axis(axis)
        m = sgm.sgolay_coef(window_size, order, deriv=0)
        if npkd.dim == 1:
            npkd.set_buffer( sgm.sgolay_comp(npkd.get_buffer(), m, window_size) )
        elif npkd.dim == 2:
            if todo == 2:
                for i in xrange(npkd.size1):
                    npkd.buffer[i,:] = sgm.sgolay_comp(npkd.buffer[i,:], m, window_size)
            elif todo == 1:
                for i in xrange(1,npkd.size2):
                    npkd.buffer[:,i] = sgm.sgolay_comp(npkd.buffer[:,i], m, window_size)
        else:
            raise NPKError("a faire")
        return npkd

    ########################################################################
    def sg2D(npkd, window_size, order, deriv=None):
        """applies a 2D Savitzky-Golay of order filter to data
        window_size : int
            the length of the square window. Must be an odd integer number.
        order : int
            the order of the polynomial used in the filtering.
            Must be less than `window_size` - 1.
        deriv: None, 'col', or 'row'.   'both' mode does not work.
            the direction of the derivative to compute (default = None means only smoothing)
        can be applied to a 2D only.
        """
        import spike.Algo.savitzky_golay as sgm
        npkd.check2D()
        npkd.set_buffer( sgm.savitzky_golay2D(npkd.get_buffer(), window_size, order, derivative=deriv) )
        return npkd

    NPKData_plugin("sg", sg)
    NPKData_plugin("sg2D", sg2D)