Diana Software
QNoisePowerSpectrumEstimator.cc
Go to the documentation of this file.
2 #include "QVectorC.hh"
3 
4 using namespace Diana;
5 
6 QNoisePowerSpectrumEstimator::QNoisePowerSpectrumEstimator(const int size, Diana::QFFT::WindowType w, int gain) : fTransformer(size)
7 {
8  fTransformer.SetWindowType(w, gain);
9  fNoisePowerSpectrum.Resize(size);
10  Clear();
11 }
13 {
14  const int size = fNoisePowerSpectrum.Size();
15  fNoisePowerSpectrum.Clear();
16  fNoisePowerSpectrum.Resize(size);
17  fNoisePowerSpectrum.Initialize(0);
18  fNumberOfPulses = 0;
19 }
20 
22 {
24  if(pulse.Size() != fNoisePowerSpectrum.Size()) return QERR_SIZE_NOT_MATCH;
25 
26  double mean = pulse.Sum(pulse.Size())/pulse.Size();
27  QVector meanPulse(pulse.Size()); meanPulse.Initialize(mean);
28  QVector zeroMeanPulse = pulse;
29  zeroMeanPulse -= meanPulse;
30 
31  QVectorC transformedPulse(pulse.Size());
32  int ierr = fTransformer.TransformToFreq(zeroMeanPulse, transformedPulse);
33  if(ierr != 0) return QERR_UNKNOWN_ERR;
34  QVector realPart = transformedPulse.Re();
35  QVector imagPart = transformedPulse.Im();
36  for (size_t k = 0; k < fNoisePowerSpectrum.Size(); k++) {
37  double magSquared = realPart[k]*realPart[k] + imagPart[k]*imagPart[k];
38  fNoisePowerSpectrum[k] += magSquared;
39  }
41  return err;
42 }
43 
45 {
46  if(fNumberOfPulses <= 0) return fNoisePowerSpectrum;
47  QVector ret = fNoisePowerSpectrum;
48  ret /= fNumberOfPulses;
49 
50  return ret;
51 }
err
Definition: CheckOF.C:114
@ QERR_UNKNOWN_ERR
Definition: QError.hh:108
@ QERR_SIZE_NOT_MATCH
Definition: QError.hh:31
@ QERR_SUCCESS
Definition: QError.hh:27
error class with error type and description
Definition: QError.hh:115
QNoisePowerSpectrumEstimator(const int size, Diana::QFFT::WindowType w, int coherentGain=2)
QError Add(const Diana::QVector &pulse)
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...