HARDT - The Ham Radio DSP Toolkit
hiirfilter.h
1 #ifndef __HIIRFILTER_H
2 #define __HIIRFILTER_H
3 
4 #include <fstream>
5 
15 template <class T>
16 class HIirFilter : public HFilter<T>
17 {
18  private:
19 
20  float* _aCoefficients;
21  float* _bCoefficients;
22  int _length;
23  int _firstLength;
24  T* _taps;
25  float* _output;
26 
27  protected:
28 
30  void Init(float* coefficients, int length);
31 
32  public:
33 
35  HIirFilter(HWriter<T>* writer, float* coefficients, int length, size_t blocksize, HProbe<T>* prope = NULL);
36 
38  HIirFilter(HWriterConsumer<T>* consumer, float* coefficients, int length, size_t blocksize, HProbe<T>* probe = NULL);
39 
41  HIirFilter(HReader<T>* reader, float* coefficients, int length, size_t blocksize, HProbe<T>* probe = NULL);
42 
44  ~HIirFilter();
45 
47  virtual void Filter(T* src, T* dest, size_t blocksize);
48 
51  void SetCoefficients(float* coefficients, int length);
52 
55  std::vector<float> GetCoefficients()
56  {
57  std::vector<float> coefficients;
58  for( int i = 0; i <= _length; i++ )
59  {
60  coefficients.push_back(_bCoefficients[i]);
61  }
62  for( int i = 0; i < _length; i++ )
63  {
64  coefficients.push_back(_aCoefficients[i]);
65  }
66  return coefficients;
67  }
68 
70  static HIirFilter<T>* Create(HWriter<T>* writer, size_t blocksize, char* coeffsFilename)
71  {
72  std::vector<float> coeffs = HFilter<T>::ReadCoeffsFromFile(coeffsFilename);
73 
74  return new HIirFilter<T>(writer, coeffs.data(), coeffs.size(), blocksize);
75  }
76 
78  static HIirFilter<T>* Create(HWriterConsumer<T>* consumer, size_t blocksize, char* coeffsFilename)
79  {
80  std::vector<float> coeffs = HFilter<T>::ReadCoeffsFromFile(coeffsFilename);
81 
82  return new HIirFilter<T>(consumer, coeffs.data(), coeffs.size(), blocksize);
83  }
84 
86  static HIirFilter<T>* Create(HReader<T>* reader, size_t blocksize, char* coeffsFilename)
87  {
88  std::vector<float> coeffs = HFilter<T>::ReadCoeffsFromFile(coeffsFilename);
89 
90  return new HIirFilter<T>(reader, coeffs.data(), coeffs.size(), blocksize);
91  }
92 };
93 
94 #endif
HIirFilter::Create
static HIirFilter< T > * Create(HWriter< T > *writer, size_t blocksize, char *coeffsFilename)
Definition: hiirfilter.h:70
HIirFilter::Filter
virtual void Filter(T *src, T *dest, size_t blocksize)
Definition: hiirfilter.cpp:94
HIirFilter::Create
static HIirFilter< T > * Create(HWriterConsumer< T > *consumer, size_t blocksize, char *coeffsFilename)
Definition: hiirfilter.h:78
HIirFilter
Definition: hiirfilter.h:16
HIirFilter::Create
static HIirFilter< T > * Create(HReader< T > *reader, size_t blocksize, char *coeffsFilename)
Definition: hiirfilter.h:86
HWriter
Definition: hwriter.h:10
HIirFilter::~HIirFilter
~HIirFilter()
Definition: hiirfilter.cpp:84
HFilter
Definition: hfilter.h:14
HFilter::ReadCoeffsFromFile
static std::vector< float > ReadCoeffsFromFile(std::string filename)
Definition: hfilter.h:204
HIirFilter::SetCoefficients
void SetCoefficients(float *coefficients, int length)
Definition: hiirfilter.cpp:144
HReader
Definition: hreader.h:24
HProbe
Definition: hprobe.h:10
HIirFilter::Init
void Init(float *coefficients, int length)
Definition: hiirfilter.cpp:42
HIirFilter::GetCoefficients
std::vector< float > GetCoefficients()
Definition: hiirfilter.h:55
HIirFilter::HIirFilter
HIirFilter(HWriter< T > *writer, float *coefficients, int length, size_t blocksize, HProbe< T > *prope=NULL)
Definition: hiirfilter.cpp:7
HWriterConsumer
Definition: hwriterconsumer.h:8