** Date Started: June 2000
**
** This is part of the CTSim program
-** Copyright (C) 1983-2000 Kevin Rosenberg
+** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: procsignal.h,v 1.5 2000/09/02 05:10:39 kevin Exp $
+** $Id: procsignal.h,v 1.13 2001/01/28 19:10:18 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
#include <complex>
-
class SignalFilter;
class SGP;
+typedef std::complex<double> CTSimComplex;
+
+
class ProcessSignal {
public:
static const int FILTER_METHOD_INVALID;
static const int FILTER_GENERATION_DIRECT;
static const int FILTER_GENERATION_INVERSE_FOURIER;
+ enum {
+ FORWARD = -1,
+ BACKWARD = 1,
+ };
+
ProcessSignal (const char* szFilterName, const char* szFilterMethodName,double bw, double signalIncrement, int n, double param, const char* szDomainName, const char* szFilterGenerationName, const int zeropad = 0, const int preinterpolationFactor = 1, const int iTraceLevel = Trace::TRACE_NONE, int iGeometry = Scanner::GEOMETRY_PARALLEL, double dFocalLength = 1., SGP* pSGP = NULL);
~ProcessSignal();
void filterSignal (const float input[], double output[]) const;
bool fail(void) const {return m_fail;}
- const string& failMessage(void) const {return m_failMessage;}
+ const std::string& failMessage(void) const {return m_failMessage;}
void setTraceLevel (int traceLevel) {m_traceLevel = traceLevel; }
// transforms using direct trigometric calculation
static void finiteFourierTransform (const double input[], double output[], const int n, const int direction);
- static void finiteFourierTransform (const double input[], complex<double> output[], const int n, const int direction);
- static void finiteFourierTransform (const complex<double> input[], complex<double> output[], const int n, const int direction);
- static void finiteFourierTransform (const complex<double> input[], double output[], const int n, const int direction);
-
-
- static void shuffleNaturalToFourierOrder (double* pdVector, const int n);
+ static void finiteFourierTransform (const double input[], std::complex<double> output[], const int n, const int direction);
+ static void finiteFourierTransform (const std::complex<double> input[], std::complex<double> output[], const int n, const int direction);
+ static void finiteFourierTransform (const std::complex<double> input[], double output[], const int n, const int direction);
- static void shuffleFourierToNaturalOrder (double* pdVector, const int n);
private:
- string m_nameFilterMethod;
- string m_nameFilterGeneration;
+ std::string m_nameFilterMethod;
+ std::string m_nameFilterGeneration;
int m_idFilterMethod;
int m_idFilterGeneration;
int m_nSignalPoints;
double m_dFocalLength;
bool m_fail;
- string m_failMessage;
+ std::string m_failMessage;
static const char* s_aszFilterMethodName[];
static const char* s_aszFilterMethodTitle[];
// transforms that use precalculated trig tables, therefore don't
// require number of data points (n) as an argument
- void finiteFourierTransform (const double input[], complex<double> output[], const int direction) const;
- void finiteFourierTransform (const complex<double> input[], complex<double> output[], const int direction) const;
- void finiteFourierTransform (const complex<double> input[], double output[], const int direction) const;
+ void finiteFourierTransform (const double input[], std::complex<double> output[], const int direction) const;
+ void finiteFourierTransform (const std::complex<double> input[], std::complex<double> output[], const int direction) const;
+ void finiteFourierTransform (const std::complex<double> input[], double output[], const int direction) const;
double convolve (const double func[], const double filter[], const double dx, const int n, const int np) const;
double convolve (const double f[], const double dx, const int n, const int np) const;