OpendTect  6.6
fourier.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: K. Tingdahl/Y. Liu
8  Date: August 2001
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 */
13 
14 #include "algomod.h"
15 #include "transform.h"
16 #include "paralleltask.h"
17 #include "factory.h"
18 
19 
20 namespace Fourier
21 {
22 
23 class FFTCC1D;
24 
31 public:
33  mDefaultFactoryInstanciationBase( "PFAFFT", tr("FFT") );
34  static ::Factory<CC>& factory();
35 
36  static CC* createDefault();
37 
38  CC();
39  void setNormalization(bool yn);
40  static float getNyqvist(float samplespacing);
41  static float getDf(float samplespacing,int nrsamples);
42  static void getFrequencies(float samplespacing,int nrsamples,
44  bool isFast(int sz) const;
45  virtual int getFastSize(int sz) const;
49  static void pfarc(int isign,int n,const float* rz,float_complex* cz);
50  static void pfacr(int isign,int n,const float_complex*,float* rz);
51  static int npfaro(int nmin, int nmax);
52  static int npfao(int nmin, int nmax);
53 
54 protected:
55  static uiString* legalInfo();
56  static void pfacc(char dir,int sz,int step,float_complex* signal);
64  static void pfacc(char dir,int sz,int step,int nr,const int* starts,
65  float_complex* signal);
66  static void pfacc(char dir,int sz,int step,int nr,int batchstep,
67  float_complex* signal);
68  static void pfacc(char dir,int sz,float_complex*);
69 
70  bool setup();
71  bool normalize_;
72 
75  public ParallelTask
76  {
77  public:
78  CC1D();
79  ~CC1D();
80  bool init();
81  bool run(bool parallel)
82  { return executeParallel( parallel ); }
83  od_int64 nrIterations() const { return nr_; }
84  bool doPrepare(int);
85  bool doWork(od_int64 start, od_int64 stop, int );
86  void setNormalization(bool yn) { normalize_ = yn; }
87 
88  static int getFastSize(int sz);
91  protected:
92 
93  bool dopfa_;
94  char direction_;
96  bool normalize_;
98  };
99 };
100 
101 
108 {
109 public:
111  FFTCC1D(const FFTCC1D&);
113 
114  ~FFTCC1D() { cleanUp(); }
115  bool setSize(int);
117  void setSample(int smp) { sample_ = smp; }
119  void setDir(bool forward) { forward_ = forward; }
120  void setNormalization(bool yn) { normalize_ = yn; }
121  bool run(float_complex* data);
122 
123  static int getFastSize(int sz);
124 
125 protected:
126 
127  void cleanUp();
129  bool doFactor2() const;
131  bool doFactor4() const;
132  void doFactor3() const;
133  void doFactor5() const;
134  void doOtherFactor(int factor,int psz);
135  void doRotation(int psz) const;
136  bool doFinish();
138 
139  bool forward_;
141  int size_;
142  int sample_;
144  int extsz_;
145  int curf_;
146  int rmfid_;
147  int cycleid_;
148  float exp_;
149  float sin2_;
150 
152  float* rdata_;
153  float* idata_;
154  float* rtmp_;
155  float* itmp_;
156  float* cosv_;
157  float* sinv_;
162 };
163 
164 } // namespace Fourier
165 
Fourier::CC::setup
bool setup()
Fourier::CC::npfao
static int npfao(int nmin, int nmax)
Fourier::CC::pfacc
static void pfacc(char dir, int sz, int step, int nr, int batchstep, float_complex *signal)
Fourier::CC::createDefault
static CC * createDefault()
Fourier::CC::CC1D::doWork
bool doWork(od_int64 start, od_int64 stop, int)
Fourier::CC::CC1D::CC1D
CC1D()
Fourier::FFTCC1D::FFTCC1D
FFTCC1D()
Fourier::CC::CC1D::run
bool run(bool parallel)
Definition: fourier.h:81
float_complex
std::complex< float > float_complex
Definition: odcomplex.h:17
Fourier::FFTCC1D::doRotation
void doRotation(int psz) const
factory.h
Fourier::FFTCC1D::~FFTCC1D
~FFTCC1D()
Definition: fourier.h:114
Fourier::FFTCC1D::doFactor4
bool doFactor4() const
ObjectSet
Set of pointers to objects.
Definition: commontypes.h:31
Fourier::CC::normalize_
bool normalize_
Definition: fourier.h:71
Fourier::CC
Does Fourier Transforms of any size.
Definition: fourier.h:30
Fourier::FFTCC1D::factors_
TypeSet< int > factors_
Definition: fourier.h:161
Fourier::FFTCC1D::curf_
int curf_
Definition: fourier.h:145
od_int64
#define od_int64
Definition: plftypes.h:35
Fourier::FFTCC1D::cycleid_
int cycleid_
Definition: fourier.h:147
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Fourier::FFTCC1D::itmp_
float * itmp_
Definition: fourier.h:155
Fourier::FFTCC1D::extsz_
int extsz_
Definition: fourier.h:144
Fourier::CC::mDefaultFactoryInstanciationBase
mDefaultFactoryInstanciationBase("PFAFFT", tr("FFT"))
Fourier::CC::pfacc
static void pfacc(char dir, int sz, int step, float_complex *signal)
Fourier::FFTCC1D::totalsmp_
int totalsmp_
Definition: fourier.h:143
Fourier::FFTCC1D::exp_
float exp_
Definition: fourier.h:148
Fourier::CC::pfacc
static void pfacc(char dir, int sz, float_complex *)
Fourier::CC::CC1D::~CC1D
~CC1D()
Fourier::CC::CC1D
Definition: fourier.h:76
Fourier::CC::pfarc
static void pfarc(int isign, int n, const float *rz, float_complex *cz)
Fourier::FFTCC1D::FFTCC1D
FFTCC1D(const FFTCC1D &)
Not implemented, just here to make linker complain.
Fourier::CC::CC1D::nrIterations
od_int64 nrIterations() const
Definition: fourier.h:83
Fourier::FFTCC1D::cosv_
float * cosv_
Definition: fourier.h:156
GenericTransformND::Transform1D
Definition: transform.h:86
Fourier::CC::factory
static ::Factory< CC > & factory()
GenericTransformND
Lets any 1D orthogonal transform (GenericTransformND::GenericTransform1D) be extended to ND....
Definition: transform.h:31
Fourier::CC::getFastSize
virtual int getFastSize(int sz) const
Fourier::CC::legalInfo
static uiString * legalInfo()
Fourier::FFTCC1D::idata_
float * idata_
Definition: fourier.h:153
Fourier::FFTCC1D::normalize_
bool normalize_
Definition: fourier.h:140
Fourier::CC::CC1D::direction_
char direction_
Definition: fourier.h:94
Fourier
Definition: convolve2d.h:26
Fourier::CC::mODTextTranslationClass
mODTextTranslationClass(CC)
Fourier::FFTCC1D
Computes 1D FFT for any size of data. This function is used internally by the ND computation.
Definition: fourier.h:108
Fourier::CC::CC
CC()
Fourier::CC::CC1D::init
bool init()
Fourier::CC::CC1D::ffts_
ObjectSet< FFTCC1D > ffts_
Definition: fourier.h:97
Fourier::CC::CC1D::normalize_
bool normalize_
Definition: fourier.h:96
Fourier::FFTCC1D::setSize
bool setSize(int)
the size of fft to be calculated
Fourier::FFTCC1D::doFactor5
void doFactor5() const
Fourier::FFTCC1D::sinv_
float * sinv_
Definition: fourier.h:157
mClass
#define mClass(module)
Definition: commondefs.h:181
Fourier::FFTCC1D::run
bool run(float_complex *data)
Fourier::FFTCC1D::setDir
void setDir(bool forward)
Definition: fourier.h:119
Fourier::FFTCC1D::permutation1_
int * permutation1_
Definition: fourier.h:159
Fourier::FFTCC1D::doOtherFactor
void doOtherFactor(int factor, int psz)
Fourier::FFTCC1D::rmfid_
int rmfid_
Definition: fourier.h:146
Fourier::CC::mDefaultFactoryCreatorImpl
mDefaultFactoryCreatorImpl(CC, CC)
Fourier::CC::getFrequencies
static void getFrequencies(float samplespacing, int nrsamples, TypeSet< float > &)
Fourier::FFTCC1D::rtmp_
float * rtmp_
Definition: fourier.h:154
Fourier::CC::CC1D::getFastSize
static int getFastSize(int sz)
Fourier::FFTCC1D::setSample
void setSample(int smp)
step of the data from input
Definition: fourier.h:117
Fourier::CC::setNormalization
void setNormalization(bool yn)
Fourier::CC::getNyqvist
static float getNyqvist(float samplespacing)
ParallelTask
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:66
Fourier::FFTCC1D::forward_
bool forward_
Definition: fourier.h:139
Fourier::FFTCC1D::rdata_
float * rdata_
Definition: fourier.h:152
Fourier::FFTCC1D::data_
float_complex * data_
Definition: fourier.h:151
Fourier::CC::pfacr
static void pfacr(int isign, int n, const float_complex *, float *rz)
Fourier::FFTCC1D::sin2_
float sin2_
Definition: fourier.h:149
Fourier::CC::CC1D::doPrepare
bool doPrepare(int)
uiString
String that is able to hold international (UTF-8) strings for the user interface.
Definition: uistring.h:121
Fourier::CC::CC1D::dopfa_
bool dopfa_
Definition: fourier.h:93
Fourier::CC::CC1D::setNormalization
void setNormalization(bool yn)
Definition: fourier.h:86
Fourier::CC::pfacc
static void pfacc(char dir, int sz, int step, int nr, const int *starts, float_complex *signal)
transform.h
Fourier::FFTCC1D::permutfactors_
TypeSet< int > permutfactors_
Definition: fourier.h:160
Fourier::FFTCC1D::getSizeFactors
bool getSizeFactors()
Fourier::FFTCC1D::doFactor2
bool doFactor2() const
ret true means the whole FFT is over
Fourier::CC::CC1D::higheststart_
int higheststart_
Definition: fourier.h:95
Fourier::FFTCC1D::permutation0_
int * permutation0_
Definition: fourier.h:158
Fourier::FFTCC1D::size_
int size_
Definition: fourier.h:141
Fourier::FFTCC1D::doFactor3
void doFactor3() const
Fourier::CC::createTransform
Transform1D * createTransform() const
Fourier::FFTCC1D::cleanUp
void cleanUp()
Fourier::CC::npfaro
static int npfaro(int nmin, int nmax)
Fourier::CC::getDf
static float getDf(float samplespacing, int nrsamples)
paralleltask.h
Fourier::FFTCC1D::sample_
int sample_
Definition: fourier.h:142
Fourier::CC::isFast
bool isFast(int sz) const
Fourier::FFTCC1D::setNormalization
void setNormalization(bool yn)
Definition: fourier.h:120
Fourier::FFTCC1D::getFastSize
static int getFastSize(int sz)
Fourier::FFTCC1D::doFinish
bool doFinish()
Fourier::FFTCC1D::setupPermutation
bool setupPermutation()
TypeSet< float >

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