[3160] | 1 | #ifndef MULTICYL_H
|
---|
| 2 | #define MULTICYL_H
|
---|
| 3 |
|
---|
| 4 | #include "machdefs.h"
|
---|
| 5 | #include "sopnamsp.h"
|
---|
| 6 | #include "mbeamcyl.h"
|
---|
| 7 |
|
---|
| 8 | /*
|
---|
| 9 | Projet BAORadio / HSHS
|
---|
| 10 | Programme de simulation pour reconstruction de lobe radio.
|
---|
| 11 | Reconstruction de lobe a partir de plusieurs cylindres
|
---|
| 12 |
|
---|
| 13 | R. Ansari - LAL Jan 2007
|
---|
| 14 |
|
---|
| 15 | Note : On travaille ds un systeme sans dimension
|
---|
| 16 | unite de temps = 1 = temps d'echantillonnage (f_echant = 1)
|
---|
| 17 | vitesse de propagation (c) = 1
|
---|
| 18 | */
|
---|
| 19 |
|
---|
| 20 |
|
---|
| 21 | //-----------------------------------------------------------------------
|
---|
| 22 | //--- Classe de reconstruction de plan source correspondant a un cylindre
|
---|
| 23 | class MultiCylinders {
|
---|
| 24 | public :
|
---|
| 25 | // nr = nb de recepteurs
|
---|
| 26 | // ns = nb d'echantillons en temps de chaque paquet
|
---|
| 27 | MultiCylinders(int nr=256, int ns=1024);
|
---|
| 28 | ~MultiCylinders();
|
---|
| 29 |
|
---|
| 30 | // Niveau de print de debug
|
---|
| 31 | inline void SetPrintLevel(int prl=0) { PrtLev=prl; }
|
---|
| 32 |
|
---|
| 33 | // Ajout d'un cylindre, en position posY
|
---|
| 34 | inline int AddCylinder(double posy)
|
---|
| 35 | { mCyl.push_back( new MultiBeamCyl(NR, NS, posy) ); return mCyl.size(); }
|
---|
| 36 |
|
---|
| 37 | MultiBeamCyl & GetCylinder(int i);
|
---|
| 38 |
|
---|
| 39 | // Specification de la frequence de base f0 et espacement des recepteurs
|
---|
| 40 | inline void SetBaseFreqDa(double f0=2., double a=0.25)
|
---|
| 41 | { freq0 = f0; Da = a; }
|
---|
| 42 |
|
---|
| 43 | // frequences reduites (entre 0 ... 0.5) , angle en radian, amp ~ 1
|
---|
| 44 | void SetSources(BRSourceGen* brs, bool ad=true);
|
---|
| 45 | inline void SetSources(BRSourceGen& brs)
|
---|
| 46 | { SetSources(&brs, false); }
|
---|
| 47 |
|
---|
| 48 | // Definition du sigma du bruit gaussien sur les echantillons
|
---|
| 49 | inline void SetNoiseSigma(double sig=0.) { signoise = sig; }
|
---|
| 50 | // Definition du sigma du jitter d'horloge (typ 0.01)
|
---|
| 51 | inline void SetTimeJitter(double tjit=0.) { timejitter = tjit; }
|
---|
| 52 | // Definition du sigma des offsets d'horloge entre recepteurs (typ 0.02)
|
---|
| 53 | inline void SetTimeOffsetSigma(double tsig=0.) { toffsig = tsig; }
|
---|
| 54 |
|
---|
| 55 | // Definition du gain et sigma de fluctuations de gain
|
---|
| 56 | // nzerogain: nb de recepteurs (choisis au hasard) avec gain mis a zero
|
---|
| 57 | inline void SetGains(double g=1., double sigg=0., int nzerogain=0)
|
---|
| 58 | { gain=g; siggain=sigg; ngainzero = nzerogain; }
|
---|
| 59 |
|
---|
| 60 |
|
---|
| 61 | // Fait la configuration des cylindres, et reconstruit le plan source
|
---|
| 62 | // pour chaque cylindre
|
---|
| 63 | void ReconstructCylinderPlaneS(bool fgzerocentre=true);
|
---|
| 64 |
|
---|
| 65 | // Reconstruction de la boite 3D des sources
|
---|
| 66 | // - halfny : nb de bin en angY = 2*halfny+1
|
---|
| 67 | // - stepangy : pas en angle Y (radian) 1 arcmin= 0.00029 rad (~Pi/11000)
|
---|
| 68 | // Cette methode appelle ReconstructCylinderPlaneS(true);
|
---|
| 69 | void ReconstructSourceBox(int halfny=15, double stepangy=M_PI/10000);
|
---|
| 70 |
|
---|
| 71 |
|
---|
| 72 | // Pour recuperer une tranche reconstruite angX, angY
|
---|
| 73 | // avec la moyenne des modules entre kfmin <= k (selon z) <= kfmax
|
---|
| 74 | TMatrix< r_4 > getRecXYSlice(int kfmin, int kfmax);
|
---|
| 75 |
|
---|
| 76 | // Acces a la boite 3D de sources reconstruite
|
---|
| 77 | inline TArray< complex<r_4> > & getRecSrcBox() { return cmplx_srcbox; }
|
---|
| 78 |
|
---|
| 79 | // Configure chaque cylindre a partir des parametres de la classe
|
---|
| 80 | // est appele automatiquement par ReconstructCylinderPlaneS
|
---|
| 81 | void ConfigureCylinders();
|
---|
| 82 |
|
---|
| 83 | //-------------- Variables membres ------------
|
---|
| 84 | int NR, NS; // nb recepteurs, nb d'echantillons ds chaque paquet
|
---|
| 85 |
|
---|
| 86 | int PrtLev; // Niveau de print de debug
|
---|
| 87 |
|
---|
| 88 | double Da; // distance entre recepteurs
|
---|
| 89 | double freq0; // frequence de base (freqvrai=f+freq0)
|
---|
| 90 |
|
---|
| 91 | double timejitter; // le sigma du jitter en temps des coups d'horloge
|
---|
| 92 | double toffsig; // sigma des offsets en temps
|
---|
| 93 |
|
---|
| 94 | BRSourceGen* src; // Les sources
|
---|
| 95 | bool adfg; // if true, delete src
|
---|
| 96 |
|
---|
| 97 | double signoise; // sigma du bruit additif (bruit ampli ... )
|
---|
| 98 | double gain, siggain;
|
---|
| 99 | int ngainzero;
|
---|
| 100 |
|
---|
| 101 | vector<MultiBeamCyl *> mCyl; // Les differents cylindres
|
---|
| 102 |
|
---|
| 103 | TArray< complex<r_4> > cmplx_srcbox; // boite3D des sources (angX,Y,freq) reconstruit
|
---|
| 104 | };
|
---|
| 105 |
|
---|
| 106 |
|
---|
| 107 | #endif
|
---|