Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

DZone's Guide to

Port To Python/scipy Of GNU Octave's Function Decimate.m

·
Free Resource

Comment (0)

Save
{{ articles[0].views | formatCount}} Views
```// description of your code here

```
#!/usr/local/bin/python
# -*- coding: utf-8 -*-

"""port to python of the GNU Octave function decimate.m"""

from scipy.signal import cheby1, firwin, lfilter

def decimate(x, q, n=None, ftype='iir', axis=-1):
"""downsample the signal x by an integer factor q, using an order n filter

By default, an order 8 Chebyshev type I filter is used or a 30 point FIR
filter with hamming window if ftype is 'fir'.

(port to python of the GNU Octave function decimate.)

Inputs:
x -- the signal to be downsampled (N-dimensional array)
q -- the downsampling factor
n -- order of the filter (1 less than the length of the filter for a
'fir' filter)
ftype -- type of the filter; can be 'iir' or 'fir'
axis -- the axis along which the filter should be applied

Outputs:
y -- the downsampled signal

"""

if type(q) != type(1):
raise Error, "q should be an integer"

if n is None:
if ftype == 'fir':
n = 30
else:
n = 8
if ftype == 'fir':
b = firwin(n+1, 1./q, window='hamming')
y = lfilter(b, 1., x, axis=axis)
else:
(b, a) = cheby1(n, 0.05, 0.8/q)

y = lfilter(b, a, x, axis=axis)

return y.swapaxes(0,axis)[::q].swapaxes(0,axis)
``````
Topics:

Comment (0)

Save
{{ articles[0].views | formatCount}} Views

Opinions expressed by DZone contributors are their own.