HARDT - The Ham Radio DSP Toolkit
hgaussianfilter.h
1 #ifndef __HGAUSSIANFILTER_H
2 #define __HGAUSSIANFILTER_H
3 
8 #include "hfilter.h"
9 #include "hwriter.h"
10 #include "hwriterconsumer.h"
11 #include "hreader.h"
12 #include "hprobe.h"
13 
14 #include <complex>
15 
16 template <class T>
17 class HGaussianFilter : public HFilter<T>
18 {
19  private:
20 
21  size_t _blocksize;
22  int _strength;
23  int _n;
24  int _blocks;
26 
27  std::complex<double>* _response;
28  HFft<T>* _fft;
29 
30  void Init() {
31  if( _blocksize % _n != 0 ) {
32  HError("%d is not dividable into %d chunks", _blocksize, _n);
33  throw new HInitializationException("Blocksize can not be divided equally by the fft size");
34  }
35 
36  _response = new std::complex<double>[_n];
37 
38  _win = new HRectangularWindow<T>();
39  _fft = new HFft<T>(_n, _win);
40 
41  _blocks = _blocksize / _n;
42  }
43 
44  public:
45 
53  HGaussianFilter(HWriter<T>* writer, size_t blocksize, int strength, int n, HProbe<T>* probe = NULL):
54  HFilter<T>(writer, blocksize, probe),
55  _blocksize(blocksize),
56  _strength(strength),
57  _n(n) {
58  Init();
59  }
60 
68  HGaussianFilter(HWriterConsumer<T>* consumer, size_t blocksize, int strength, int n, HProbe<T>* probe = NULL):
69  HFilter<T>(consumer, blocksize, probe),
70  _blocksize(blocksize),
71  _strength(strength),
72  _n(n) {
73  Init();
74  }
75 
83  HGaussianFilter(HReader<T>* reader, size_t blocksize, int strength, int n, HProbe<T>* probe = NULL):
84  HFilter<T>(reader, blocksize, probe),
85  _blocksize(blocksize),
86  _strength(strength),
87  _n(n) {
88  Init();
89  }
90 
93  delete _response;
94  delete _fft;
95  delete _win;
96  }
97 
99  void Filter(T* src, T* dest, size_t blocksize);
100 };
101 
102 #endif
HRectangularWindow
Definition: hrectangularwindow.h:10
HGaussianFilter::HGaussianFilter
HGaussianFilter(HWriterConsumer< T > *consumer, size_t blocksize, int strength, int n, HProbe< T > *probe=NULL)
Definition: hgaussianfilter.h:68
HGaussianFilter::HGaussianFilter
HGaussianFilter(HWriter< T > *writer, size_t blocksize, int strength, int n, HProbe< T > *probe=NULL)
Definition: hgaussianfilter.h:53
HGaussianFilter::HGaussianFilter
HGaussianFilter(HReader< T > *reader, size_t blocksize, int strength, int n, HProbe< T > *probe=NULL)
Definition: hgaussianfilter.h:83
HWriter
Definition: hwriter.h:10
HFilter
Definition: hfilter.h:14
HInitializationException
Definition: hexceptions.h:39
HGaussianFilter
Definition: hgaussianfilter.h:17
HReader
Definition: hreader.h:24
HGaussianFilter::~HGaussianFilter
~HGaussianFilter()
Definition: hgaussianfilter.h:92
HProbe
Definition: hprobe.h:10
HFft
Definition: hfft.h:12
HGaussianFilter::Filter
void Filter(T *src, T *dest, size_t blocksize)
Definition: hgaussianfilter.cpp:7
HWriterConsumer
Definition: hwriterconsumer.h:8