OpendTect  6.6
wavelettrans.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*@+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: Kristofer Tingdahl
8  Date: 10-12-1999
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 @$*/
13 
14 #include "algomod.h"
15 #include "transform.h"
16 #include "enums.h"
17 #include "arraynd.h"
18 #include "arrayndimpl.h"
19 #include "fourier.h"
20 #include "ranges.h"
21 
32 {
33 public:
34  enum WaveletType { Haar, Daubechies4, Daubechies6,
35  Daubechies8, Daubechies10,
36  Daubechies12, Daubechies14,
37  Daubechies16, Daubechies18,
38  Daubechies20, Beylkin, Coiflet1,
39  Coiflet2, Coiflet3, Coiflet4,
40  Coiflet5, Symmlet4, Symmlet5,
41  Symmlet6, Symmlet7, Symmlet8,
42  Symmlet9, Symmlet10, Vaidyanathan };
43 
45 
46  static void getInfo(WaveletType tp,int& len,TypeSet<float>&);
47 
48  static const float haar[3];
49 
50  static const float daub4[5];
51  static const float daub6[7];
52  static const float daub8[9];
53  static const float daub10[11];
54  static const float daub12[13];
55  static const float daub14[15];
56  static const float daub16[17];
57  static const float daub18[19];
58  static const float daub20[21];
59 
60  static const float beylkin[19];
61 
62  static const float coiflet1[7];
63  static const float coiflet2[13];
64  static const float coiflet3[19];
65  static const float coiflet4[25];
66  static const float coiflet5[31];
67 
68  static const float symmlet4[9];
69  static const float symmlet5[11];
70  static const float symmlet6[13];
71  static const float symmlet7[15];
72  static const float symmlet8[17];
73  static const float symmlet9[19];
74  static const float symmlet10[21];
75 
76  static const float vaidyanathan[25];
77 
78  static bool isCplx( WaveletType );
79 };
80 
81 
87 {
88 public:
90  bool setup();
91 
92 protected:
93 
95  {
96  public:
97 
98  bool init();
99  bool run(bool);
101  : cc_( 0 )
102  , cr_( 0 )
103  , wt_( WaveletTransform::Haar )
104  {}
105 
106  ~FilterWT1D() { delete [] cr_; delete [] cc_; }
107 
109  protected:
110 
111 #include "templ_wavlttransimpl.h"
112 
114 
115  float* cc_; // Filter Parameters
116  float* cr_;
118  int joff_;
119  int ioff_;
120  };
121 
123  { return new FilterWT1D; }
124 
126 };
127 
128 
134 {
135 public:
136  CWT();
137  ~CWT();
138 
139  bool init();
140 
141 
142  enum WaveletType { Morlet, Gaussian, MexicanHat };
144 
146 
148  { freqrg_ = rg; }
149  void setDeltaT( float dt ) { dt_ = dt; }
150 
151  bool setInputInfo(const ArrayNDInfo&);
152  const ArrayNDInfo& getInputInfo() const { return *info_; }
153 
154  bool real2real() const { return true; }
155  bool real2complex() const { return false; }
156  bool complex2real() const { return false; }
157  bool complex2complex() const { return true; }
158 
159  bool biDirectional() const { return false; }
160  bool setDir(bool forw);
161  bool getDir() const { return true; }
162 
163 
165  ArrayND<float>& ) const
166  { return false; }
168  ArrayND<float_complex>& ) const
169  { return false; }
171  ArrayND<float>& output);
172 
173  float getScale(int ns,float dt,float freq) const;
174 
175  void setFreqIdxs( const TypeSet<int>& outfreqidxs )
176  { outfreqidxs_ = outfreqidxs; }
177 
178 protected:
179 
180  struct CWTWavelets
181  {
183 
184  void createWavelet(WaveletType,int nrsamples,
185  float scale);
186  const TypeSet<float>* getWavelet(float scale) const;
190 
191 
194  };
195 
196 
198 
199  bool isPossible(int sz) const;
200  bool isFast( int ) const { return true; }
201 
202  void transform(int,float,int,
205 
208 
210 
211  bool inited_;
212  float dt_;
214 
217 };
218 
CWT::dt_
float dt_
Definition: wavelettrans.h:212
CWT::CWTWavelets::createMexhatWavelet
void createMexhatWavelet(int, float, TypeSet< float > &)
CWT::wt_
WaveletType wt_
Definition: wavelettrans.h:213
CWT::transform
bool transform(const ArrayND< float_complex > &, ArrayND< float_complex > &) const
Definition: wavelettrans.h:167
CWT::biDirectional
bool biDirectional() const
Definition: wavelettrans.h:159
CWT::fft_
Fourier::CC * fft_
Definition: wavelettrans.h:206
DWT::FilterWT1D::wt_
WaveletTransform::WaveletType wt_
Definition: wavelettrans.h:113
WaveletTransform::Daubechies14
@ Daubechies14
Definition: wavelettrans.h:36
CWT::CWTWavelets::CWTWavelets
CWTWavelets()
Definition: wavelettrans.h:182
fourier.h
CWT::getDir
bool getDir() const
Definition: wavelettrans.h:161
ArrayNDInfo
Contains the information about the size of ArrayND, and in what order the data is stored (if accessab...
Definition: arrayndinfo.h:25
DWT::FilterWT1D::cc_
float * cc_
Definition: wavelettrans.h:115
Fourier::CC
Does Fourier Transforms of any size.
Definition: fourier.h:30
DWT::FilterWT1D::FilterWT1D
FilterWT1D()
Definition: wavelettrans.h:100
Array1DImpl< float_complex >
WaveletTransform::isCplx
static bool isCplx(WaveletType)
CWT::complex2real
bool complex2real() const
Definition: wavelettrans.h:156
CWT::CWTWavelets::wavelets_
TypeSet< TypeSet< float > > wavelets_
Definition: wavelettrans.h:193
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
DWT::FilterWT1D::filtersz_
int filtersz_
Definition: wavelettrans.h:117
CWT
Continuous Wavelet Transform.
Definition: wavelettrans.h:134
CWT::transform
bool transform(const ArrayND< float > &, ArrayND< float > &) const
Definition: wavelettrans.h:164
DWT
Discrete Wavelet Transform.
Definition: wavelettrans.h:87
CWT::CWT
CWT()
WaveletTransform::Daubechies18
@ Daubechies18
Definition: wavelettrans.h:37
CWT::transform
bool transform(const ArrayND< float_complex > &input, ArrayND< float > &output)
DWT::wt_
WaveletTransform::WaveletType wt_
Definition: wavelettrans.h:125
CWT::setTransformRange
void setTransformRange(const StepInterval< float > &rg)
Definition: wavelettrans.h:147
CWT::setWavelet
void setWavelet(CWT::WaveletType)
CWT::complex2complex
bool complex2complex() const
Definition: wavelettrans.h:157
CWT::ifft_
Fourier::CC * ifft_
Definition: wavelettrans.h:207
arrayndimpl.h
GenericTransformND::Transform1D
Definition: transform.h:86
CWT::real2real
bool real2real() const
Definition: wavelettrans.h:154
DWT::FilterWT1D::ioff_
int ioff_
Definition: wavelettrans.h:119
CWT::setInputInfo
bool setInputInfo(const ArrayNDInfo &)
GenericTransformND
Lets any 1D orthogonal transform (GenericTransformND::GenericTransform1D) be extended to ND....
Definition: transform.h:31
DWT::createTransform
Transform1D * createTransform() const
Definition: wavelettrans.h:122
DWT::setup
bool setup()
CWT::mDeclareEnumUtils
mDeclareEnumUtils(WaveletType)
arraynd.h
DWT::FilterWT1D
Definition: wavelettrans.h:95
CWT::~CWT
~CWT()
StepInterval< float >
DWT::FilterWT1D::cr_
float * cr_
Definition: wavelettrans.h:116
CWT::CWTWavelets::getWavelet
const TypeSet< float > * getWavelet(float scale) const
CWT::CWTWavelets
Definition: wavelettrans.h:181
CWT::getInputInfo
const ArrayNDInfo & getInputInfo() const
Definition: wavelettrans.h:152
CWT::inited_
bool inited_
Definition: wavelettrans.h:211
DWT::FilterWT1D::run
bool run(bool)
CWT::getScale
float getScale(int ns, float dt, float freq) const
CWT::isFast
bool isFast(int) const
Definition: wavelettrans.h:200
WaveletTransform::Symmlet8
@ Symmlet8
Definition: wavelettrans.h:41
CWT::info_
ArrayNDInfo * info_
Definition: wavelettrans.h:209
CWT::setFreqIdxs
void setFreqIdxs(const TypeSet< int > &outfreqidxs)
Definition: wavelettrans.h:175
CWT::CWTWavelets::createWavelet
void createWavelet(WaveletType, int nrsamples, float scale)
WaveletTransform::Daubechies8
@ Daubechies8
Definition: wavelettrans.h:35
CWT::init
bool init()
CWT::outfreqidxs_
TypeSet< int > outfreqidxs_
Definition: wavelettrans.h:216
CWT::WaveletType
WaveletType
Definition: wavelettrans.h:142
CWT::transform
void transform(int, float, int, const Array1DImpl< float_complex > &, Array2DImpl< float > &)
DWT::FilterWT1D::joff_
int joff_
Definition: wavelettrans.h:118
CWT::setDeltaT
void setDeltaT(float dt)
Definition: wavelettrans.h:149
WaveletTransform
WaveletTransform is a ND wavelet transform.
Definition: wavelettrans.h:32
CWT::isPossible
bool isPossible(int sz) const
WaveletTransform::mDeclareEnumUtils
mDeclareEnumUtils(WaveletType)
templ_wavlttransimpl.h
CWT::setDir
bool setDir(bool forw)
WaveletTransform::Daubechies20
@ Daubechies20
Definition: wavelettrans.h:38
Array2DImpl< float >
CWT::wvlts_
CWTWavelets wvlts_
Definition: wavelettrans.h:197
DWT::FilterWT1D::init
bool init()
WaveletTransform::getInfo
static void getInfo(WaveletType tp, int &len, TypeSet< float > &)
DWT::DWT
DWT(WaveletTransform::WaveletType)
enums.h
DWT::FilterWT1D::~FilterWT1D
~FilterWT1D()
Definition: wavelettrans.h:106
ArrayND< float >
CWT::freqrg_
StepInterval< float > freqrg_
Definition: wavelettrans.h:215
transform.h
CWT::CWTWavelets::scales_
TypeSet< float > scales_
Definition: wavelettrans.h:192
WaveletTransform::Symmlet5
@ Symmlet5
Definition: wavelettrans.h:40
WaveletTransform::WaveletType
WaveletType
Definition: wavelettrans.h:34
ranges.h
CWT::CWTWavelets::createMorletWavelet
void createMorletWavelet(int, float, TypeSet< float > &)
DWT::FilterWT1D::setWaveletType
void setWaveletType(WaveletTransform::WaveletType)
TypeSet< float >
WaveletTransform::Coiflet4
@ Coiflet4
Definition: wavelettrans.h:39
CWT::real2complex
bool real2complex() const
Definition: wavelettrans.h:155
CWT::CWTWavelets::createGaussWavelet
void createGaussWavelet(int, float, TypeSet< float > &)

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2021