## SIGTOOLS module
##
#Copyright (c) 2002 Travis Oliphant all rights reserved
#Oliphant.Travis@altavista.net
#Permission to use, modify, and distribute this software is given under the
#terms of the SciPy (BSD style) license.  See LICENSE.txt that came with
#this distribution for specifics.

I hope that this packages grows into a set of widely useful 1-D, 2-D,
3-D, etc. filtering routines in this collection.  To start it off I
have created C-code to do fast, general filtering of data.  Most
additional code to be added should probably be written in Python
unless a specific need for speed is needed.  If you have good routines
to add to this collection (in Python or in C) please send them to me.

So far this library has 4 C-code routines:
   (1) a general purpose N-D correlation.  This is almost like N-D
         convolution but performs no 180 degree flipping of either
	 input to the routine.  It takes two N-D arrays and returns
	 the correlation of the two arrays.  It is intended for use in
	 filtering large arrays with small kernels for blurring,
	 edge-detection, etc.  Zero-padding is used to handle
	 edges.

   (2) a general purpose N-D order-filter routine
         An order-filter takes a data array and a domain kernel with
         the same number of dimensions which has zero and non-zero
         entries.  Each output is the order_th element of a sorted
         list composed of the elements in the data array where the
         kernel window (centered on the output point) is non-zero.
         Zero-padding is used to handle the edges.

   (3) a 1-D linear filter.
         linear_filter is a replacement for MATLAB's filter function.
         It takes two 1-D arrays representing the numerator and
         denominator of the z-transform of a rational linear
         system. It then performs the filtering along the given
         axis of an N-D array.  Access to initial conditions on the
         Direct Form II Transposed system are provided.

   (4) a remez exchange algorithm.
         remez is Python wrapping for code from Erik Kvaleberg (itself a
         conversion to C of original code by Mcclellan) which
	 implements the Parks-McClellan algorithm for FIR optimal
         filter design.

In Python several more routines are defined:

convolveND  (performs 180 degree flipping of all axes)
wiener      (implements a wiener filter in N-D)
medfilt     (implements an N-D median filter)


All of these methods operate on arbitrary Python sequence objects (even
NumPy arrays of objects).

Due to popular request I have also included the numpyio module as part of
this package.  It compiles along with the sigtools code.

----------------------------------------
INSTALLATION
----------------------------------------

To install, copy Makefile.pre.in from your python installation directory
(mine is /usr/lib/python1.5/config/Makefile.pre.in) to this directory.

Type
make -f Makefile.pre.in boot
make

Copy the file to somewhere under $PYTHON/site-packages or somewhere
else on your path.

Please send me feedback, questions, and especially contributions.

CHANGELOG
============
Feb 5, 1999	First release just contains convolveND

Feb 8, 1999	Second release (0.20) added order_filterND

Feb 23, 1999    Third release (0.40) added linear_filter and remez
		routines.

May  1, 1999    Release 0.5.1 introduces the _signaltools.py module which
                has some filtering routines.  Fixed a small bug with complex
                filters that was preventing them from functioning.

July 10, 1999   Release 0.5.2 is incorporated now with multipack.  Changed
                the remez.c code to that from Erik Kvaleberg so that it
                could be incorporated into and LGPL package.  Placed remez
                code directly in _sigtoolsmodule.c
Travis Oliphant
oliphant.travis@ieee.org
