Logo Coherent WaveBurst  
Reference Guide
Logo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Haar.cc
Go to the documentation of this file.
1 // Wavelet Analysis Tool
2 //--------------------------------------------------------------------
3 // Implementation of
4 // the Haar wavelet transform using lifting scheme
5 // References:
6 // A.Cohen, I.Daubechies, J.Feauveau Bases of compactly supported wavelets
7 // Comm. Pure. Appl. Math. 45, 485-560, 1992
8 // W. Sweldens - Building your own wavelets at home
9 //--------------------------------------------------------------------
10 //$Id: Haar.cc,v 1.3 2004/07/12 07:05:20 jzweizig Exp $
11 
12 #define BIORTHOGONAL_CC
13 
14 #include "Haar.hh"
15 
16 //namespace datacondAPI {
17 //namespace wat {
18 
19 ClassImp(Haar<double>)
20 
21 // constructors
22 
23 template<class DataType_t> Haar<DataType_t>::
24 Haar(const Wavelet &w) :
25 WaveDWT<DataType_t>(w)
26 {
27  this->m_WaveType = HAAR;
28 }
29 
30 template<class DataType_t> Haar<DataType_t>::
32 WaveDWT<DataType_t>(w)
33 {
34  this->m_WaveType = HAAR;
35 }
36 
37 template<class DataType_t> Haar<DataType_t>::
38 Haar(int tree) :
39 WaveDWT<DataType_t>(1,1,tree,B_CYCLE)
40 {
41  this->m_WaveType = HAAR;
42 }
43 
44 // destructor
45 template<class DataType_t>
47 { }
48 
49 // clone
50 template<class DataType_t>
52 {
53  return new Haar<DataType_t>(*this);
54 }
55 
56 // decompose function does one step of forward transformation.
57 // <level> input parameter is the level to be transformed
58 // <layer> input parameter is the layer to be transformed.
59 template<class DataType_t>
60 void Haar<DataType_t>::forward(int level,int layer)
61 {
62  level++; // increment level (next level now)
63  register int stride = 1<<level; // stride parameter
64 
65  unsigned int i;
66  double sq2 = sqrt(2.);
67 
68  register DataType_t *dataA;
69  register DataType_t *dataD;
70 
71  dataA=this->pWWS+this->getOffset(level,layer<<1); // pointer to approximation layer
72  dataD=this->pWWS+this->getOffset(level,(layer<<1)+1); // pointer to detail layer
73 
74 // predict
75  for(i=0; i<this->nWWS; i+=stride) {
76  *(dataD+i) -= *(dataA+i);
77  }
78 
79 // update
80  for(i=0; i<this->nWWS; i+=stride) {
81  *(dataA+i) += *(dataD+i) * 0.5;
82  }
83 
84 // normalization
85  for(i=0; i<this->nWWS; i+=stride) {
86  *(dataA+i) *= sq2;
87  *(dataD+i) /= sq2;
88  }
89 
90 }
91 
92 // reconstruct function does one step of inverse transformation.
93 // <level> input parameter is the level to be reconstructed
94 // <layer> input parameter is the layer to be reconstructed.
95 template<class DataType_t>
96 void Haar<DataType_t>::inverse(int level,int layer)
97 {
98  level++; // increment level (next level now)
99  register int stride = 1<<level; // stride parameter
100 
101  unsigned int i;
102  double sq2 = sqrt(2.);
103 
104  register DataType_t *dataA;
105  register DataType_t *dataD;
106 
107  dataA=this->pWWS+this->getOffset(level,layer<<1); // pointer to approximation layer
108  dataD=this->pWWS+this->getOffset(level,(layer<<1)+1); // pointer to detail layer
109 
110 // undo normalization
111  for(i=0; i<this->nWWS; i+=stride) {
112  *(dataA+i) /= sq2;
113  *(dataD+i) *= sq2;
114  }
115 
116 // undo update
117  for(i=0; i<this->nWWS; i+=stride) {
118  *(dataA+i) -= *(dataD+i) * 0.5;
119  }
120 
121 // undo predict
122  for(i=0; i<this->nWWS; i+=stride) {
123  *(dataD+i) += *(dataA+i);
124  }
125 
126 }
127 
128 // instantiations
129 
130 #define CLASS_INSTANTIATION(class_) template class Haar< class_ >;
131 
132 CLASS_INSTANTIATION(float)
133 CLASS_INSTANTIATION(double)
134 //CLASS_INSTANTIATION(std::complex<float>)
135 //CLASS_INSTANTIATION(std::complex<double>)
136 
137 #undef CLASS_INSTANTIATION
138 
139 //template Haar<float>::
140 //Haar(const Haar<float> &);
141 //template Haar<double>::
142 //Haar(const Haar<double> &);
143 
144 //} // end namespace wat
145 //} // end namespace datacondAPI
146 
147 
148 
149 
150 
151 
TTree * tree
Definition: TimeSortTree.C:20
Haar(int tree=0)
Definition: Haar.cc:38
Definition: Wavelet.hh:26
void inverse(int level, int layer)
Definition: Haar.cc:96
virtual ~Haar()
Definition: Haar.cc:46
virtual Haar * Clone() const
return: Wavelet* - duplicate of *this, allocated on heap
Definition: Haar.cc:51
i drho i
wavearray< double > w
Definition: Test1.C:27
Definition: Haar.hh:20
#define CLASS_INSTANTIATION(class_)
Definition: Haar.cc:130
enum WAVETYPE m_WaveType
Definition: Wavelet.hh:88
void forward(int level, int layer)
Definition: Haar.cc:60