[SciPy-dev] Smooth filtering method
Andrew Straw
strawman at astraw.com
Sun Jan 22 11:02:05 EST 2006
Hi Hugo,
As for as the demos, you could certainly make pages in the new wiki's
Cookbook section. I think using matplotlib is perfectly fine.
A docstring guideline - perhaps you could write one? I'm sure it would
get corrected and included, but it's the initial effort that probably
most of the work.
Argument verification - I'm not sure what you mean. Could you post a
pseudo-code example? And again, this is probably a case where you might
have to do (most of) the work if you want it included.
Cheers!
Andrew
Hugo Gamboa wrote:
> I came across the need of a smoothing function for my processing
> tasks. In attach you can find a smooth.py that I think can useful, and
> could be introduced in the scipy signal package.
>
> In the process of preparing the code in order to be presentable for
> others I collected some scipy development guidelines questions:
>
> 1. Docstrings. Is there (or should exist) a docstring guideline for
> numpy/scipy? In this code I make an approach using items in the
> docstring like: input, output, example, see also and TODO. Is this too
> much. I my opinion a guideline could help newcomers (like me) to
> contribute with standardized documentation to scipy.
>
> 2. Demo methods. I find it interesting to have some of the functions
> accompanied by demo code for demonstration purposes. Have any one
> thought about the structure for such code. Could it be included in a
> demo directory like the tests directory? And is it pacific to use mpl
> in those demos?
>
> 3. Argument verification. Should a guideline for numpy argument
> verification be defined? What I me think is in a wiki page that
> describes the steps for standard verification of the arguments,
> pointing to some helper functions that do some of those tasks (like
> atleast_Xd).
>
> Best regards,
>
> Hugo Gamboa
>
>
>------------------------------------------------------------------------
>
>import numpy
>
>def smooth(x,window_len=10,window='hanning'):
> """smooth the data using a window with requested size.
>
> This method is based on the convolution of a scaled window with the signal.
> The signal is prepared by introducing reflected copies of the signal
> (with the window size) in both ends so that transient parts are minimized
> in the begining and end part of the output signal.
>
> inputs:
> x: the input signal
> window_len: the dimension of the smoothing window
> window: the type of window from 'flat', 'hanning', 'hamming', 'bartlett', 'blackman'
> flat window will produce a moving average smoothing.
>
> output:
> the smoothed signal
>
> example:
>
> t=linspace(-2,2,0.1)
> x=sin(t)+randn(len(t)*0.1
> y=smooth(x)
>
> see also:
>
> numpy.hanning, numpy.hamming, numpy.bartlett, numpy.blackman, numpy.convolve
> scipy.signal.lfilter
>
> TODO: the window parameter could be the window itself if a array instead of a string
> """
>
> if x.ndim != 1:
> raise ValueError, "smooth only accepts 1 dimension arrays."
>
> if x.size < window_len:
> raise ValueError, "Input vector needs to be bigger than window size."
>
>
>
> if not window in ['flat', 'hanning', 'hamming', 'bartlett', 'blackman']:
> raise ValueError, "Window is on of 'flat', 'hanning', 'hamming', 'bartlett', 'blackman'"
>
>
> s=numpy.r_[2*x[0]-x[window_len:1:-1],x,2*x[-1]-x[-1:-window_len:-1]]
>
> if window == 'flat': #moving average
> w=ones(window_len,'d')
> else:
> w=eval('numpy.'+window+'(window_len)')
>
> y=numpy.convolve(w/w.sum(),s,mode='same')
> return y[window_len-1:-window_len+1]
>
>
>
>
>from numpy import *
>from pylab import *
>
>def smooth_demo():
>
> t=linspace(-4,4,100)
> x=sin(t)
> xn=x+randn(len(t))*0.1
> y=smooth(x)
>
> ws=31
>
> subplot(211)
> plot(ones(ws))
>
> windows=['flat', 'hanning', 'hamming', 'bartlett', 'blackman']
>
> hold(True)
> for w in windows[1:]:
> eval('plot('+w+'(ws) )')
>
> axis([0,30,0,1.1])
>
> legend(windows)
> title("The smoothing windows")
> subplot(212)
> plot(x)
> plot(xn)
> for w in windows:
> plot(smooth(xn,10,w))
> l=['original signal', 'signal with noise']
> l.extend(windows)
>
> legend(l)
> title("Smoothing a noisy signal")
> show()
>
>
>if __name__=='__main__':
> smooth_demo()
>
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Scipy-dev mailing list
>Scipy-dev at scipy.net
>http://www.scipy.net/mailman/listinfo/scipy-dev
>
>
More information about the SciPy-Dev
mailing list