4 //Adapted from Signal.hh in ilr (Simon)
6 #include "clitkCommon.h"
9 //include external library
15 #include "itkImageRegionConstIterator.h"
16 #include "itkPointSet.h"
17 // #include "itkBSplineScatteredDataPointSetToImageFilter.h"
26 //=====================================================================================
28 typedef double SignalValueType;
29 typedef vector< SignalValueType > SignalType;
30 typedef SignalType::iterator iterator;
31 typedef SignalType::const_iterator const_iterator;
32 typedef vector< complex<double> > SIGNAL_FFT_TYPE;
34 typedef itk::Image<double,1> ImageType;
35 typedef itk::Vector<double,1> VectorType;
36 typedef itk::Image<VectorType,1> VectorImageType;
38 //=====================================================================================
39 //Constructors - Destructors
40 Signal(){SetSamplingPeriod(1.);}
41 Signal(double sp):m_SamplingPeriod(sp){;}
42 Signal(const string fileName){Read(fileName);}
43 Signal(unsigned int size, SignalValueType voidValue=0.)
45 m_Data.resize(size,voidValue);
51 //=====================================================================================
53 void Read(string fileName);
54 void Read(string fileName, int col);
55 void ReadXDR(string fileName);
56 void Write(const string fileName);
58 //=====================================================================================
59 //Common vector properties for signals
60 unsigned int size() const {return m_Data.size();}
61 iterator begin(){return m_Data.begin();}
62 iterator end() {return m_Data.end();}
63 const_iterator begin() const {return m_Data.begin();}
64 const_iterator end() const {return m_Data.end();}
65 SignalValueType front() {return m_Data.front();}
66 SignalValueType back() {return m_Data.back();}
67 void push_back(SignalValueType value){return m_Data.push_back(value);}
68 void resize(unsigned int newSize){return m_Data.resize(newSize);}
69 void clear(){m_Data.clear();}
71 void print(ostream & os = cout, const int level = 0) const;
73 //=====================================================================================
75 SignalValueType& operator[](int index){return m_Data[index];}
76 const SignalValueType& operator[](int index) const {return m_Data[index];}
77 Signal & operator/=(Signal & d);
78 Signal & operator*=(Signal & d);
81 Signal Normalize(double newMin=0.,double newMax=1.);
82 vector<double> GetGlobalMinMax() const;
83 double GetGlobalMean() const;
84 Signal MovingAverageFilter ( unsigned int length);
85 Signal GaussLikeFilter ();
86 Signal NormalizeMeanStdDev(double newMean=0.5,double newStdDev=0.5);
87 Signal HighPassFilter (double sampPeriod, double cutOffFrequency );
88 Signal LowPassFilter (double sampPeriod, double cutOffFrequency );
89 double MaxFreq(const Signal &sig,SIGNAL_FFT_TYPE & fft);
90 void OneDForwardFourier(const Signal& input,SIGNAL_FFT_TYPE & fft);
91 void OneDBackwardFourier(SIGNAL_FFT_TYPE & fft, Signal &output);
92 Signal DetectLocalExtrema(unsigned int width);
95 Signal MonPhaseDE(double ee, double ei);
96 double SSD(const Signal &sig2) const;
97 Signal LinearlyInterpolateScatteredValues();
98 // Signal ApproximateScatteredValuesWithBSplines (unsigned int splineOrder, unsigned int numberOfControlPoints);
99 Signal LimitSignalRange();
101 void AddValue(double v);
102 void ComputeAugmentedSpace(Signal & outputX, Signal & outputY, unsigned int delay) const;
104 // double Compare(Signal & sigRef);
105 // int DerivateSigne( const_iterator & it) const;
106 // void CenteredFiniteDifferences(Signal & result,int order,int* weights);
107 // void FirstDerivate(Signal & result,int order);
108 // void SecondDerivate(Signal & result,int order);
110 // void Crop(unsigned int posmin, unsigned int posmax);
111 // void LinearResample(const unsigned int newSize);
114 //=====================================================================================
115 // Get and Set function
116 double GetSamplingPeriod() const {return m_SamplingPeriod;}
117 void SetSamplingPeriod(double sp){m_SamplingPeriod=sp;}
119 //=====================================================================================
120 //Conversion for using itk filters
121 Signal ConvertImageToSignal(ImageType::Pointer image);
122 ImageType::Pointer ConvertSignalToImage( Signal);
123 Signal ConvertVectorImageToSignal (VectorImageType::Pointer m);
127 double m_SamplingPeriod;