HARDT - The Ham Radio DSP Toolkit
htranslatebyfour.h
1 #ifndef __HTRANSLATEBYFOUR_H
2 #define __HTRANSLATEBYFOUR_H
3 
4 #include "hfilter.h"
5 #include "hwriter.h"
6 #include "hwriterconsumer.h"
7 #include "hreader.h"
8 #include "hprobe.h"
9 
33 template <class T>
34 class HTranslateByFour : public HFilter<T>
35 {
36  private:
37 
38  bool _isQ;
39 
40  static void DoFilter(T* src, T* dest, size_t blocksize, bool isQ);
41 
42  public:
43 
45  HTranslateByFour(HWriter<T>* writer, size_t blocksize, bool isQ = false, HProbe<T>* probe = NULL):
46  HFilter<T>(writer, blocksize, probe),
47  _isQ(isQ) {}
48 
50  HTranslateByFour(HWriterConsumer<T>* consumer, size_t blocksize, bool isQ = false, HProbe<T>* probe = NULL):
51  HFilter<T>(consumer, blocksize, probe),
52  _isQ(isQ) {}
53 
55  HTranslateByFour(HReader<T>* reader, size_t blocksize, bool isQ = false, HProbe<T>* probe = NULL):
56  HFilter<T>(reader, blocksize, probe),
57  _isQ(isQ) {}
58 
61 
63  void Filter(T* src, T* dest, size_t blocksize) {
64  HTranslateByFour<T>::DoFilter(src, dest, blocksize, _isQ);
65  }
66 
72  void SetIsQ(bool isQ) {
73  _isQ = isQ;
74  }
75 
77  static void Translate(T* src, std::complex<T>* dest, size_t blocksize) {
78  T* IChannel;
79  T* QChannel;
80 
81  IChannel = new T[blocksize];
82  QChannel = new T[blocksize];
83 
84  HTranslateByFour<T>::DoFilter(src, IChannel, blocksize, false);
85  HTranslateByFour<T>::DoFilter(src, QChannel, blocksize, true);
86 
87  for( int i = 0; i < blocksize; i++ ) {
88  dest[i] = std::complex<T>(IChannel[i], QChannel[i]);
89  }
90 
91  delete IChannel;
92  delete QChannel;
93  }
94 
96  static void Translate(T* src, std::complex<double>* dest, size_t blocksize) {
97  T* IChannel;
98  T* QChannel;
99 
100  IChannel = new T[blocksize];
101  QChannel = new T[blocksize];
102 
103  HTranslateByFour<T>::DoFilter(src, IChannel, blocksize, false);
104  HTranslateByFour<T>::DoFilter(src, QChannel, blocksize, true);
105 
106  for( int i = 0; i < blocksize; i++ ) {
107  dest[i] = std::complex<double>((double) IChannel[i], (double) QChannel[i]);
108  }
109  }
110 };
111 
112 #endif
HTranslateByFour::HTranslateByFour
HTranslateByFour(HWriterConsumer< T > *consumer, size_t blocksize, bool isQ=false, HProbe< T > *probe=NULL)
Definition: htranslatebyfour.h:50
HTranslateByFour::HTranslateByFour
HTranslateByFour(HReader< T > *reader, size_t blocksize, bool isQ=false, HProbe< T > *probe=NULL)
Definition: htranslatebyfour.h:55
HTranslateByFour::Translate
static void Translate(T *src, std::complex< double > *dest, size_t blocksize)
Definition: htranslatebyfour.h:96
HTranslateByFour::~HTranslateByFour
~HTranslateByFour()
Definition: htranslatebyfour.h:60
HWriter
Definition: hwriter.h:10
HFilter
Definition: hfilter.h:14
HTranslateByFour
Definition: htranslatebyfour.h:34
HTranslateByFour::SetIsQ
void SetIsQ(bool isQ)
Definition: htranslatebyfour.h:72
HReader
Definition: hreader.h:24
HTranslateByFour::HTranslateByFour
HTranslateByFour(HWriter< T > *writer, size_t blocksize, bool isQ=false, HProbe< T > *probe=NULL)
Definition: htranslatebyfour.h:45
HProbe
Definition: hprobe.h:10
HTranslateByFour::Filter
void Filter(T *src, T *dest, size_t blocksize)
Definition: htranslatebyfour.h:63
HTranslateByFour::Translate
static void Translate(T *src, std::complex< T > *dest, size_t blocksize)
Definition: htranslatebyfour.h:77
HWriterConsumer
Definition: hwriterconsumer.h:8