andrew@0: /* andrew@0: Copyright (C) 2003 Paul Brossier andrew@0: andrew@0: This program is free software; you can redistribute it and/or modify andrew@0: it under the terms of the GNU General Public License as published by andrew@0: the Free Software Foundation; either version 2 of the License, or andrew@0: (at your option) any later version. andrew@0: andrew@0: This program is distributed in the hope that it will be useful, andrew@0: but WITHOUT ANY WARRANTY; without even the implied warranty of andrew@0: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the andrew@0: GNU General Public License for more details. andrew@0: andrew@0: You should have received a copy of the GNU General Public License andrew@0: along with this program; if not, write to the Free Software andrew@0: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. andrew@0: andrew@0: */ andrew@0: andrew@0: #ifndef BIQUAD_H andrew@0: #define BIQUAD_H andrew@0: andrew@0: /** \file andrew@0: andrew@0: Second order Infinite Impulse Response filter andrew@0: andrew@0: This file implements a normalised biquad filter (second order IIR): andrew@0: andrew@0: \f$ y[n] = b_1 x[n] + b_2 x[n-1] + b_3 x[n-2] - a_2 y[n-1] - a_3 y[n-2] \f$ andrew@0: andrew@0: The filtfilt version runs the filter twice, forward and backward, to andrew@0: compensate the phase shifting of the forward operation. andrew@0: andrew@0: */ andrew@0: andrew@0: #ifdef __cplusplus andrew@0: extern "C" { andrew@0: #endif andrew@0: andrew@0: /** biquad filter object */ andrew@0: typedef struct _aubio_biquad_t aubio_biquad_t; andrew@0: andrew@0: /** filter input vector andrew@0: andrew@0: \param b biquad object as returned by new_aubio_biquad andrew@0: \param in input vector to filter andrew@0: andrew@0: */ andrew@0: void aubio_biquad_do(aubio_biquad_t * b, fvec_t * in); andrew@0: /** filter input vector forward and backward andrew@0: andrew@0: \param b biquad object as returned by new_aubio_biquad andrew@0: \param in input vector to filter andrew@0: \param tmp memory space to use for computation andrew@0: andrew@0: */ andrew@0: void aubio_biquad_do_filtfilt(aubio_biquad_t * b, fvec_t * in, fvec_t * tmp); andrew@0: /** create new biquad filter andrew@0: andrew@0: \param b1 forward filter coefficient andrew@0: \param b2 forward filter coefficient andrew@0: \param b3 forward filter coefficient andrew@0: \param a2 feedback filter coefficient andrew@0: \param a3 feedback filter coefficient andrew@0: andrew@0: */ andrew@0: aubio_biquad_t * new_aubio_biquad(lsmp_t b1, lsmp_t b2, lsmp_t b3, lsmp_t a2, lsmp_t a3); andrew@0: andrew@0: /** delete biquad filter andrew@0: andrew@0: \param b biquad object to delete andrew@0: andrew@0: */ andrew@0: void del_aubio_biquad(aubio_biquad_t * b); andrew@0: andrew@0: #ifdef __cplusplus andrew@0: } andrew@0: #endif andrew@0: andrew@0: #endif /*BIQUAD_H*/