OpendTect  6.3
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 ________________________________________________________________________
10 
11 */
12 
13 #include "algomod.h"
14 #include "transform.h"
15 #include "paralleltask.h"
16 #include "factory.h"
17 
18 
19 namespace Fourier
20 {
21 
22 class FFTCC1D;
23 
30 public:
32  mDefaultFactoryInstanciationBase( "PFAFFT", tr("FFT") );
33  static ::Factory<CC>& factory();
34 
35  static CC* createDefault();
36 
37  CC();
38  void setNormalization(bool yn);
39  static float getNyqvist(float samplespacing);
40  static float getDf(float samplespacing,int nrsamples);
41  static void getFrequencies(float samplespacing,int nrsamples,
43  bool isFast(int sz) const;
44  virtual int getFastSize(int sz) const;
48  static void pfarc(int isign,int n,const float* rz,float_complex* cz);
49  static void pfacr(int isign,int n,const float_complex*,float* rz);
50  static int npfaro(int nmin, int nmax);
51  static int npfao(int nmin, int nmax);
52 
53 protected:
54  static uiString* legalInfo();
55  static void pfacc(char dir,int sz,int step,float_complex* signal);
63  static void pfacc(char dir,int sz,int step,int nr,const int* starts,
64  float_complex* signal);
65  static void pfacc(char dir,int sz,int step,int nr,int batchstep,
66  float_complex* signal);
67  static void pfacc(char dir,int sz,float_complex*);
68 
69  bool setup();
70  bool normalize_;
71 
72  Transform1D* createTransform() const;
73  mClass(Algo) CC1D : public GenericTransformND::Transform1D,
74  public ParallelTask
75  {
76  public:
77  CC1D();
78  ~CC1D();
79  bool init();
80  bool run(bool parallel)
81  { return executeParallel( parallel ); }
82  od_int64 nrIterations() const { return nr_; }
83  bool doPrepare(int);
84  bool doWork(od_int64 start, od_int64 stop, int );
85  void setNormalization(bool yn) { normalize_ = yn; }
86 
87  static int getFastSize(int sz);
90  protected:
91 
92  bool dopfa_;
93  char direction_;
95  bool normalize_;
97  };
98 };
99 
100 
107 {
108 public:
109  FFTCC1D();
110  FFTCC1D(const FFTCC1D&);
112 
113  ~FFTCC1D() { cleanUp(); }
114  bool setSize(int);
116  void setSample(int smp) { sample_ = smp; }
118  void setDir(bool forward) { forward_ = forward; }
119  void setNormalization(bool yn) { normalize_ = yn; }
120  bool run(float_complex* data);
121 
122  static int getFastSize(int sz);
123 
124 protected:
125 
126  void cleanUp();
127  bool getSizeFactors();
128  bool doFactor2() const;
130  bool doFactor4() const;
131  void doFactor3() const;
132  void doFactor5() const;
133  void doOtherFactor(int factor,int psz);
134  void doRotation(int psz) const;
135  bool doFinish();
136  bool setupPermutation();
137 
138  bool forward_;
140  int size_;
141  int sample_;
143  int extsz_;
144  int curf_;
145  int rmfid_;
146  int cycleid_;
147  float exp_;
148  float sin2_;
149 
151  float* rdata_;
152  float* idata_;
153  float* rtmp_;
154  float* itmp_;
155  float* cosv_;
156  float* sinv_;
161 };
162 
163 } // namespace Fourier
#define mExpClass(module)
Definition: commondefs.h:157
Does Fourier Transforms of any size.
Definition: fourier.h:28
int size_
Definition: fourier.h:140
int * permutation1_
Definition: fourier.h:158
float * itmp_
Definition: fourier.h:154
void setSample(int smp)
step of the data from input
Definition: fourier.h:116
void setDir(bool forward)
Definition: fourier.h:118
Definition: fourier.h:73
float * rtmp_
Definition: fourier.h:153
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
float * cosv_
Definition: fourier.h:155
#define mDefaultFactoryCreatorImpl(baseclss, clss)
Definition: factory.h:284
bool forward_
Definition: fourier.h:138
#define od_int64
Definition: plftypes.h:34
bool init()
char direction_
Definition: fourier.h:93
bool normalize_
Definition: fourier.h:139
int * permutation0_
Definition: fourier.h:157
Lets any 1D orthogonal transform (GenericTransformND::GenericTransform1D) be extended to ND...
Definition: transform.h:29
Computes 1D FFT for any size of data. This function is used internally by the ND computation.
Definition: fourier.h:106
~FFTCC1D()
Definition: fourier.h:113
Definition: uistring.h:88
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:64
bool dopfa_
Definition: fourier.h:92
od_int64 nrIterations() const
Definition: fourier.h:82
int extsz_
Definition: fourier.h:143
Set of pointers to objects.
Definition: commontypes.h:28
bool run(bool parallel)
Definition: fourier.h:80
#define mDefaultFactoryInstanciationBase(keywrd, usernm)
Definition: factory.h:278
int sample_
Definition: fourier.h:141
float * rdata_
Definition: fourier.h:151
float_complex * data_
Definition: fourier.h:150
std::complex< float > float_complex
Definition: odcomplex.h:16
TypeSet< int > permutfactors_
Definition: fourier.h:159
Definition: convolve2d.h:25
bool normalize_
Definition: fourier.h:70
int curf_
Definition: fourier.h:144
Definition: transform.h:84
float * sinv_
Definition: fourier.h:156
int cycleid_
Definition: fourier.h:146
int rmfid_
Definition: fourier.h:145
int higheststart_
Definition: fourier.h:94
int totalsmp_
Definition: fourier.h:142
float exp_
Definition: fourier.h:147
void setNormalization(bool yn)
Definition: fourier.h:119
ObjectSet< FFTCC1D > ffts_
Definition: fourier.h:96
bool normalize_
Definition: fourier.h:95
#define mClass(module)
Definition: commondefs.h:161
float * idata_
Definition: fourier.h:152
float sin2_
Definition: fourier.h:148
void setNormalization(bool yn)
Definition: fourier.h:85
TypeSet< int > factors_
Definition: fourier.h:160

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