00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef AOK_H
00020 #define AOK_H
00021
00022 #include "Typedefs.h"
00023 #include "Debug.h"
00024
00025 class AOK {
00026 protected:
00027
00028 int _windowSize;
00029 int _hopSize;
00030 int _fftSize;
00031 Real _normVolume;
00032
00033
00034 int itemp;
00035 int xlen, tlen, nraf,tlag,nlag,mfft,nrad, nphi, nits;
00036 int slen,fftlen;
00037 int tstep,fstep,outct;
00038
00039 int maxrad[100000];
00040
00041
00042 char name[10];
00043
00044
00045 Real pi, rtemp, rtemp1, rtemp2, mu, forget;
00046 Real vol;
00047 Real outdelay;
00048 Real xr[100000],xi[100000];
00049 Real rectafr[70000];
00050 Real rectafi[70000];
00051 Real rectafm2[70000];
00052 Real polafm2[70000];
00053 Real rectrotr[70000];
00054 Real rectroti[70000];
00055 Real req[70000];
00056 Real pheq[70000];
00057 Real plag[70000];
00058 Real ptheta[70000];
00059 Real sigma[100000];
00060 Real rar[100000],rai[100000];
00061 Real rarN[70000];
00062 Real raiN[70000];
00063 Real tfslicer[100000];
00064 Real tfslicei[100000];
00065
00066 public:
00067 AOK(int windowSize, int hopSize, int fftSize, Real normVolume = 3.0);
00068
00069 ~AOK();
00070
00071 void setup();
00072
00073 void process(const MatrixXC& frames, MatrixXR* timeFreqRep);
00074
00075 void reset();
00076
00077 int frameSize() const;
00078
00079 int fftSize() const;
00080
00081 protected:
00082 void fft(int n, int m, Real x[], Real y[]);
00083
00084 int po2(int n);
00085
00086 int power(int x, int n);
00087
00088 void kfill(int len, Real k, Real x[]);
00089
00090 void cshift(int len, Real x[]);
00091
00092 Real cmr(Real xr, Real xi, Real yr, Real yi);
00093
00094 Real cmi(Real xr, Real xi, Real yr, Real yi);
00095
00096 Real ccmr(Real xr, Real xi, Real yr, Real yi);
00097
00098 Real ccmi(Real xr, Real xi, Real yr, Real yi);
00099
00100 void rectamake(int nlag, int n, Real forget, Real ar[], Real ai[], Real arN[], Real aiN[]);
00101
00102 void pthetamake(int nrad, int nphi, int ntheta, Real ptheta[], int maxrad[]);
00103
00104 void plagmake(int nrad, int nphi, int nlag, Real plag[]);
00105
00106 void rectopol(int nraf, int nlag, int nrad, int nphi, Real req[], Real pheq[]);
00107
00108 void rectrotmake(int nraf, int nlag, Real outdelay, Real rectrotr[], Real rectroti[]);
00109
00110 void rectaf(Real xr[], Real xi[] , int laglen, int freqlen, Real alphar[], Real alphai[], Real alpharN[], Real alphaiN[], Real afr[], Real afi[]);
00111
00112 void polafint(int nrad, int nphi, int ntheta, int maxrad[], int nlag, Real plag[], Real ptheta[], Real rectafm2[], Real polafm2[]);
00113
00114 Real mklag(int nrad, int nphi, int nlag, int iphi, int jrad);
00115
00116 Real rectkern(int itau, int itheta, int ntheta, int nphi, Real req[], Real pheq[], Real sigma[]);
00117
00118 void sigupdate(int nrad, int nphi, int nits, Real vol, Real mu0, int maxrad[], Real polafm2[], Real sigma[]);
00119
00120 void mkmag2(int tlen, Real xr[], Real xi[], Real xm2[]);
00121 };
00122
00123 #endif