HARDT - The Ham Radio DSP Toolkit
hcascadedbiquadfilter.h
1 #ifndef __HCASCADEDBIQUADFILTER_H
2 #define __HCASCADEDBIQUADFILTER_H
3 
4 #include "hwriter.h"
5 #include "hwriterconsumer.h"
6 #include "hprobe.h"
7 #include "hreader.h"
8 
27 template <class T>
28 class HCascadedBiQuadFilter: public HReader<T>, public HWriter<T>, public HWriterConsumer<T>
29 {
30  private:
31 
32  bool _isReader;
33  bool _isWriter;
34 
35  int _blocksize;
36 
37  HIirFilter<T>** _filters;
38  int _filterCount;
39  int _firstLength;
40 
41  void Init(int length);
42 
43  void SetWriter(HWriter<T>* writer);
44 
45  public:
46 
48  HCascadedBiQuadFilter(HWriter<T>* writer, float* coefficients, int length, size_t blocksize, HProbe<T>* probe = NULL);
49 
51  HCascadedBiQuadFilter(HWriterConsumer<T>* consumer, float* coefficients, int length, size_t blocksize, HProbe<T>* probe = NULL);
52 
54  HCascadedBiQuadFilter(HReader<T>* reader, float* coefficients, int length, size_t blocksize, HProbe<T>* probe = NULL);
55 
57  HCascadedBiQuadFilter(HWriter<T>* writer, std::vector<float*> biquadCoefficients, size_t blocksize, HProbe<T>* probe = NULL);
58 
60  HCascadedBiQuadFilter(HWriterConsumer<T>* consumer, std::vector<float*> biquadCoefficients, size_t blocksize, HProbe<T>* probe = NULL);
61 
63  HCascadedBiQuadFilter(HReader<T>* reader, std::vector<float*> biquadCoefficients, size_t blocksize, HProbe<T>* probe = NULL);
64 
67 
69  int Write(T* src, size_t blocksize);
70 
72  int Read(T* dest, size_t blocksize);
73 
75  bool Start();
76 
78  bool Stop();
79 
81  void SetCoefficients(float* coefficients, int length);
82 
84  static HCascadedBiQuadFilter<T>* Create(HWriter<T>* writer, size_t blocksize, char* coeffsFilename)
85  {
86  std::vector<float> coeffs = HFilter<T>::ReadCoeffsFromFile(coeffsFilename);
87 
88  return new HCascadedBiQuadFilter<T>(writer, coeffs.data(), coeffs.size(), blocksize);
89  }
90 
92  static HCascadedBiQuadFilter<T>* Create(HWriterConsumer<T>* consumer, size_t blocksize, char* coeffsFilename)
93  {
94  std::vector<float> coeffs = HFilter<T>::ReadCoeffsFromFile(coeffsFilename);
95 
96  return new HCascadedBiQuadFilter<T>(consumer, coeffs.data(), coeffs.size(), blocksize);
97  }
98 
100  static HCascadedBiQuadFilter<T>* Create(HReader<T>* reader, size_t blocksize, char* coeffsFilename)
101  {
102  std::vector<float> coeffs = HFilter<T>::ReadCoeffsFromFile(coeffsFilename);
103 
104  return new HCascadedBiQuadFilter<T>(reader, coeffs.data(), coeffs.size(), blocksize);
105  }
106 
108  bool Command(HCommand* command) {
109  if( _filterCount > 0 ) {
110  return _filters[0]->Command(command);
111  }
112  return true;
113  }
114 };
115 
116 #endif
HCascadedBiQuadFilter::Create
static HCascadedBiQuadFilter< T > * Create(HReader< T > *reader, size_t blocksize, char *coeffsFilename)
Definition: hcascadedbiquadfilter.h:100
HCascadedBiQuadFilter::Create
static HCascadedBiQuadFilter< T > * Create(HWriterConsumer< T > *consumer, size_t blocksize, char *coeffsFilename)
Definition: hcascadedbiquadfilter.h:92
HCascadedBiQuadFilter::Stop
bool Stop()
Definition: hcascadedbiquadfilter.cpp:235
HIirFilter
Definition: hiirfilter.h:16
HCascadedBiQuadFilter::SetCoefficients
void SetCoefficients(float *coefficients, int length)
Definition: hcascadedbiquadfilter.cpp:251
HCascadedBiQuadFilter::Command
bool Command(HCommand *command)
Definition: hcascadedbiquadfilter.h:108
HCascadedBiQuadFilter::Start
bool Start()
Definition: hcascadedbiquadfilter.cpp:219
HWriter
Definition: hwriter.h:10
HFilter::Command
bool Command(HCommand *command)
Definition: hfilter.h:173
HFilter::ReadCoeffsFromFile
static std::vector< float > ReadCoeffsFromFile(std::string filename)
Definition: hfilter.h:204
HCascadedBiQuadFilter::Create
static HCascadedBiQuadFilter< T > * Create(HWriter< T > *writer, size_t blocksize, char *coeffsFilename)
Definition: hcascadedbiquadfilter.h:84
HReader
Definition: hreader.h:24
HCascadedBiQuadFilter::~HCascadedBiQuadFilter
~HCascadedBiQuadFilter()
Definition: hcascadedbiquadfilter.cpp:184
HProbe
Definition: hprobe.h:10
HCommand
Definition: hcommand.h:81
HCascadedBiQuadFilter
Definition: hcascadedbiquadfilter.h:28
HCascadedBiQuadFilter::HCascadedBiQuadFilter
HCascadedBiQuadFilter(HWriter< T > *writer, float *coefficients, int length, size_t blocksize, HProbe< T > *probe=NULL)
Definition: hcascadedbiquadfilter.cpp:14
HCascadedBiQuadFilter::Write
int Write(T *src, size_t blocksize)
Definition: hcascadedbiquadfilter.cpp:195
HCascadedBiQuadFilter::Read
int Read(T *dest, size_t blocksize)
Definition: hcascadedbiquadfilter.cpp:207
HWriterConsumer
Definition: hwriterconsumer.h:8