Tomato
OxSignCalculatorRealImag.h
Go to the documentation of this file.
1 
7 #ifndef Tomato_OXSIGNCALCULATORRealImag_H
8 #define Tomato_OXSIGNCALCULATORRealImag_H
9 
10 #include "OxSignCalculator.h"
11 #include "KWUtil.h"
12 
13 namespace Ox {
14 
21  template< typename MeasureType >
22  class SignCalculatorRealImag : public SignCalculator<MeasureType> {
23 
24  public:
25  virtual int calculateSign(){
26  return RealMagPhase2Signs(
27  this->getNSamples(),
28  this->getSigMag(),
29  this->getSigPha(),
30  this->getSignal(),
31  this->getSigns());
32  };
33 
34  static int RealMagPhase2Signs(
35  int nSamples,
36  const MeasureType* sigMag,
37  const MeasureType* sigPha,
38  MeasureType* signal,
39  MeasureType* signs);
40 
46 
47  };
48 
49  template<typename MeasureType>
50  int
53  int nSamples,
54  const MeasureType* sigMag,
55  const MeasureType* sigPha,
56  MeasureType* signal,
57  MeasureType* signs) {
58 
59 // for (int i = 0; i < nSamples; ++i) {
60 // signal[i] = sigMag[i];
61 // signs[i] = 0;
62 // }
63  //TODO: introduce arbitrary scaling, not only /4096
64 
65  if (sigPha) { // if phase available
66 
67  double sigPhaRefPi = M_PI * sigPha[nSamples - 1] / 4096; //get REFERENCE phase
68 
69  for (int i = 0; i < nSamples; ++i) {
70 
71  double sigPhaPi = M_PI * sigPha[i] / 4096; //get phase
72  double pha = sigPhaPi - sigPhaRefPi;
73  double realSig = sigMag[i] * cos(pha); //get real
74  double imagSig = -sigMag[i] * sin(pha); //get imag
75  //signal[i] = realSig;
76  if (realSig < 0) {
77  signal[i] = -sigMag[i];
78  signs[i] = -1;
79  } else {
80  signal[i] = sigMag[i];
81  signs[i] = 1;
82  }
83  }
84  } else {
85  return 1; // failure
86  }
87  return 0; // success
88  }
89 } //namespace Ox
90 
91 #endif //Tomato_OXSIGNCALCULATOR_H
virtual int calculateSign()
Definition: OxSignCalculatorRealImag.h:25
Definition: OxSignCalculatorRealImag.h:22
virtual SignCalculator< MeasureType > * newByCloning()
Definition: OxSignCalculatorRealImag.h:45
Definition: OxSignCalculator.h:21
Definition: OxCalculator.h:19