#ifndef FRVLINFILT #define FRVLINFILT #ifndef _POSIX_SOURCE #define _POSIX_SOURCE #endif /*---------------------------------------------------------------------------*/ /* FrvLinFilt.h Created May 2001 Author Isidoro Ferrante */ /*---------------------------------------------------------------------------*/ #include "FrameL.h" #ifdef __cplusplus extern "C" { #endif typedef struct FrvLinFilt FrvLinFilt; struct FrvLinFilt { /*--------------------- input data -------------*/ double * a; /* filter coefficients (see definition below) */ double * ym; /* internal coefficient */ double * b; /* filter coefficients (see definition below) */ double * xm; /* internal coefficient */ int na; int mb; struct FrVect *output; /* vector to hold the last data chunk */ char error[256]; /* hold error message if any */ int nCall; /* number of call for the algorithms */ char *name; /* name to be use to build linked list */ FRBOOL outputIsInput; /* if FR_YES the output vector is the input one */ FrvLinFilt *next; /* to build linked list */ }; void FrvLinFiltFree(FrvLinFilt* filter); int FrvLinFiltProc(FrvLinFilt *filter, FrVect *vect); int FrvLinFiltInit(FrvLinFilt* filter, FrVect *vect); FrvLinFilt *FrvLinFiltNew(double * a, double * b, int na, int mb); void FrvLinFiltSetIni(FrvLinFilt* filter, double * ym, double * xm); FrvLinFilt *FrvLinFiltMult(FrvLinFilt* filter2, FrvLinFilt* filter1); FrvLinFilt *FrvLinFiltCopy(FrvLinFilt * filter0); FrvLinFilt *FrvLinFiltAddZP(FrvLinFilt * filter0, double fase, double modulo, int type); void FrvLinFiltSetGain(FrvLinFilt* filter, double freq, double gain ); int FrvButtOrder(double fp,double fs,double tp,double ts,double *wc); void FrvButtFilt(int N, double wc, double * a, double * b); void FrvButtCell(double wc, int k, int N, double * a, double * b); FrvLinFilt *FrvLinFiltButt( double fp, double fs, double tp, double ts, int order, double fc); void FrvLinFiltButtLowToHigh(FrvLinFilt * filter); #ifdef __cplusplus } #endif #endif