HARDT - The Ham Radio DSP Toolkit
hhumfilter.h
1 #ifndef __HLOWPASSCOMBFILTER_H
2 #define __HLOWPASSCOMBFILTER_H
3 
4 #include "hcombfilter.h"
5 
15 template <class T>
16 class HHumFilter : public HCombFilter<T>
17 {
18  private:
19 
20  HBiQuadFilter<HLowpassBiQuad<T>, T>* _feedbackFilter;
21  HBiQuadFilter<HHighpassBiQuad<T>, T>* _outputFilter;
22  T* _buffer;
23  T dest[1];
24 
25  T FeedBack(T* src)
26  {
27  _feedbackFilter->Filter(src, dest, 1);
28  return *dest;
29  }
30 
31  public:
32 
34  HHumFilter(HWriter<T>* writer, H_SAMPLE_RATE rate, int frequency, int cutoffFrequency, size_t blocksize, HProbe<T>* probe = NULL):
35  HCombFilter<T>(writer, rate, frequency, -0.5, blocksize, probe)
36  {
37  HLog("HHumFilter(HWriter*, %d, %d, %d, %d)", rate, frequency, cutoffFrequency, blocksize);
38  _feedbackFilter = new HBiQuadFilter<HLowpassBiQuad<T>, T>((HReader<T>*) NULL, cutoffFrequency, rate, 0.5, 0, 1);
39  _outputFilter = new HBiQuadFilter<HHighpassBiQuad<T>, T>((HReader<T>*) NULL, cutoffFrequency, rate, 0.6, 0, 1, probe);
40  _buffer = new T[blocksize];
41  }
42 
44  HHumFilter(HWriterConsumer<T>* consumer, H_SAMPLE_RATE rate, int frequency, int cutoffFrequency, size_t blocksize, HProbe<T>* probe = NULL):
45  HCombFilter<T>(consumer, rate, frequency, -0.5, blocksize, probe)
46  {
47  HLog("HHumFilter(HWriter*, %d, %d, %d, %d)", rate, frequency, cutoffFrequency, blocksize);
48  _feedbackFilter = new HBiQuadFilter<HLowpassBiQuad<T>, T>((HReader<T>*) NULL, cutoffFrequency, rate, 0.5, 0, 1);
49  _outputFilter = new HBiQuadFilter<HHighpassBiQuad<T>, T>((HReader<T>*) NULL, cutoffFrequency, rate, 0.6, 0, 1, probe);
50  _buffer = new T[blocksize];
51  }
52 
54  HHumFilter(HReader<T>* reader, H_SAMPLE_RATE rate, int frequency, int cutoffFrequency, size_t blocksize, HProbe<T>* probe = NULL):
55  HCombFilter<T>(reader, rate, frequency, -0.5, blocksize, probe)
56  {
57  HLog("HHumFilter(HReader*, %d, %d, %d, %d)", rate, frequency, cutoffFrequency, blocksize);
58  _feedbackFilter = new HBiQuadFilter<HLowpassBiQuad<T>, T>((HReader<T>*) NULL, cutoffFrequency, rate, 0.5, 0, 1);
59  _outputFilter = new HBiQuadFilter<HHighpassBiQuad<T>, T>((HReader<T>*) NULL, cutoffFrequency, rate, 0.6, 0, 1, probe);
60  _buffer = new T[blocksize];
61  }
62 
65  {
66  delete _feedbackFilter;
67  delete _outputFilter;
68  delete _buffer;
69  }
70 
72  void Filter(T* src, T* dest, size_t blocksize)
73  {
74  HCombFilter<T>::Filter(src, _buffer, blocksize);
75  _outputFilter->Filter(_buffer, dest, blocksize);
76  }
77 };
78 
79 #endif
HCombFilter
Definition: hcombfilter.h:13
HHumFilter::HHumFilter
HHumFilter(HWriter< T > *writer, H_SAMPLE_RATE rate, int frequency, int cutoffFrequency, size_t blocksize, HProbe< T > *probe=NULL)
Definition: hhumfilter.h:34
HBiQuadFilter
Definition: hbiquadfilter.h:11
HHumFilter::Filter
void Filter(T *src, T *dest, size_t blocksize)
Definition: hhumfilter.h:72
HWriter
Definition: hwriter.h:10
HCombFilter::Filter
virtual void Filter(T *src, T *dest, size_t blocksize)
Definition: hcombfilter.cpp:144
HHumFilter::HHumFilter
HHumFilter(HReader< T > *reader, H_SAMPLE_RATE rate, int frequency, int cutoffFrequency, size_t blocksize, HProbe< T > *probe=NULL)
Definition: hhumfilter.h:54
HReader
Definition: hreader.h:24
HProbe
Definition: hprobe.h:10
HHumFilter::HHumFilter
HHumFilter(HWriterConsumer< T > *consumer, H_SAMPLE_RATE rate, int frequency, int cutoffFrequency, size_t blocksize, HProbe< T > *probe=NULL)
Definition: hhumfilter.h:44
HHumFilter
Definition: hhumfilter.h:16
HBiQuadFilter::Filter
virtual void Filter(T *src, T *dest, size_t blocksize)
Definition: hbiquadfilter.h:38
HHumFilter::~HHumFilter
~HHumFilter()
Definition: hhumfilter.h:64
HWriterConsumer
Definition: hwriterconsumer.h:8