00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _GRIIRFILTER_H_
00024 #define _GRIIRFILTER_H_
00025
00026 #include <VrDecimatingSigProc.h>
00027 #include <gr_iir.h>
00028
00036 template<class iType, class oType, class taptype>
00037 class GrIIRfilter : public VrDecimatingSigProc<iType,oType>
00038 {
00039 public:
00043 GrIIRfilter (int decimation_factor,const vector<taptype> intaps,
00044 const vector<taptype> outtaps);
00045
00046 virtual const char *name () { return "GrIIRfilter"; }
00047 virtual void initialize ();
00048 virtual int work (VrSampleRange output, void *o[],
00049 VrSampleRange inputs[], void *i[]);
00050
00051 protected:
00052 gr_iir<oType,iType,taptype> _iir;
00053 };
00054
00055
00056 template<class iType, class oType, class taptype>
00057 GrIIRfilter<iType, oType, taptype>::GrIIRfilter (int decimation_factor,
00058 const vector <taptype> intaps,
00059 const vector <taptype> outtaps)
00060 : VrDecimatingSigProc<iType, oType>(1, decimation_factor),
00061 _iir (intaps,outtaps)
00062
00063 {
00064 }
00065
00066 template<class iType, class oType, class taptype> void
00067 GrIIRfilter<iType, oType, taptype>::initialize ()
00068 {
00069 }
00070
00071 template<class iType, class oType, class taptype> int
00072 GrIIRfilter<iType, oType, taptype>::work (VrSampleRange output, void *ao[],
00073 VrSampleRange inputs[], void *ai[])
00074 {
00075 iType *in = (iType *) ai[0];
00076 oType *out = (oType *) ao[0];
00077
00078 _iir.filterN (out, in, output.size);
00079
00080 return output.size;
00081 }
00082
00083
00084 #endif