matlab, filter function

Travis Oliphant oliphant at ee.byu.edu
Tue Oct 17 17:55:54 EDT 2006


Kenny Ortmann wrote:

>just looking for some help, most of the time you guys are good with matlab 
>code, i am trying to use the filter function under this setting
>
>y = filter(b,a,X) filters the data in vector X with the filter described by 
>numerator coefficient vector b and denominator coefficient vector a. If a(1) 
>is not equal to 1, filter normalizes the filter coefficients by a(1). If 
>a(1) equals 0, filter returns an error.
>  
>

There is scipy.signal.lfilter which implements this algorithm.  It's doc 
string is

lfilter(b, a, x, axis=-1, zi=None)
    Filter data along one-dimension with an IIR or FIR filter.

    Description

      Filter a data sequence, x, using a digital filter.  This works for 
many
      fundamental data types (including Object type).  The filter is a 
direct
      form II transposed implementation of the standard difference equation
      (see "Algorithm").

    Inputs:

      b -- The numerator coefficient vector in a 1-D sequence.
      a -- The denominator coefficient vector in a 1-D sequence.  If a[0]
           is not 1, then both a and b are normalized by a[0].
      x -- An N-dimensional input array.
      axis -- The axis of the input data array along which to apply the
              linear filter. The filter is applied to each subarray along
              this axis (*Default* = -1)
      zi -- Initial conditions for the filter delays.  It is a vector
            (or array of vectors for an N-dimensional input) of length
            max(len(a),len(b)).  If zi=None or is not given then initial
            rest is assumed.  SEE signal.lfiltic for more information.

    Outputs: (y, {zf})

      y -- The output of the digital filter.
      zf -- If zi is None, this is not returned, otherwise, zf holds the
            final filter delay values.

    Algorithm:

      The filter function is implemented as a direct II transposed 
structure.
      This means that the filter implements

      y[n] = b[0]*x[n] + b[1]*x[n-1] + ... + b[nb]*x[n-nb]
                       - a[1]*y[n-1] + ... + a[na]*y[n-na]

      using the following difference equations:

      y[m] = b[0]*x[m] + z[0,m-1]
      z[0,m] = b[1]*x[m] + z[1,m-1] - a[1]*y[m]
      ...
      z[n-3,m] = b[n-2]*x[m] + z[n-2,m-1] - a[n-2]*y[m]
      z[n-2,m] = b[n-1]*x[m] - a[n-1]*y[m]

      where m is the output sample number and n=max(len(a),len(b)) is the
      model order.

      The rational transfer function describing this filter in the
      z-transform domain is
                                  -1               -nb
                      b[0] + b[1]z  + ... + b[nb] z
              Y(z) = ---------------------------------- X(z)
                                  -1               -na
                      a[0] + a[1]z  + ... + a[na] z


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642




More information about the NumPy-Discussion mailing list