[SciPy-user] High-pass filtering

Travis Oliphant oliphant at ee.byu.edu
Wed May 12 15:56:10 CDT 2004


Jesper Larsen wrote:

>Dear scipy mailing list,
>
>I would like to perform a high-pass filtering of a simple timeseries of 
>floats. I'm not really sure how to do that using numarray and scipy. Can 
>anyone post a simple example of how to do that? I have no special preferences 
>for window type.
>
>  
>

SciPy uses Numeric and doesn't require numarray (it can use numarray 
objects as inputs which will be treated as Python sequences and can be 
slow).

What kind of high-pass filter are you looking for.  Simple FIR filters 
are quite simple to design and give linear phase.  Other IIR filters are 
available.  I'll show you how to design a high-pass FIR filter using the 
remez algorithm (you could also look at signal.firwin for windowed 
filter design (but remez is usually a better solution).

Let T be the sample distance and must be defined

F = 1.0/T  
bands = array([0,0.5,0.6,1])*F/2  # this places band-edges
gain = [0,1]  # high-pass filter
N = 25  # length of FIR filter
b = signal.remez(N, bands, gain,Hz=F)

w,h = signal.freqz(b,1)  # this will show you the filter
xplt.plot(w/pi*F/2,abs(h))

To filter a time series you can use

out = signal.lfilter(b,[1],in_)

Or simply
out = signal.convolve(in_,b)[:-(N-1)]

You can get different transients using

out = signal.convolve(in_,b,'same') (cuts off on both ends)


Good luck,

-Travis O.




More information about the SciPy-user mailing list