| [3160] | 1 | #ifndef MBEAMCYL_H
 | 
|---|
 | 2 | #define MBEAMCYL_H
 | 
|---|
 | 3 | 
 | 
|---|
 | 4 | #include "machdefs.h"
 | 
|---|
 | 5 | #include "sopnamsp.h"
 | 
|---|
 | 6 | #include "tvector.h"
 | 
|---|
 | 7 | #include "brsrc.h"
 | 
|---|
 | 8 | 
 | 
|---|
 | 9 | /* 
 | 
|---|
 | 10 |    Classe de simulation simple pour estimer les effets de bruit 
 | 
|---|
 | 11 |    (ampli, ...) et decalages, bruit de phase d'horloge pour la 
 | 
|---|
 | 12 |    reconstruction de la position des sources (manip BAO-radio)
 | 
|---|
 | 13 |    R. Ansari - LAL      Sept 2006
 | 
|---|
 | 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 |    Donc, lambda=1  pour f = 1
 | 
|---|
 | 19 | 
 | 
|---|
 | 20 |    On specifie les frequences des sources (BRSourceGen) en frequence reduite
 | 
|---|
 | 21 |    dans la premiere zone de Nyquist (f = 0 ... 0.5) 
 | 
|---|
 | 22 |    Neanmoins, on a besoin de la frequence vrai des sources --> methode SetBaseFreqDa
 | 
|---|
 | 23 | */
 | 
|---|
 | 24 | 
 | 
|---|
 | 25 | 
 | 
|---|
 | 26 | //-----------------------------------------------------------------------
 | 
|---|
 | 27 | //--- Classe de reconstruction de plan source correspondant a un cylindre
 | 
|---|
 | 28 | class MultiBeamCyl {
 | 
|---|
 | 29 | public :
 | 
|---|
 | 30 |   // nr = nb de recepteurs (antennes) le long du cylindre
 | 
|---|
 | 31 |   // ns = nb d'echantillons en temps de chaque paquet
 | 
|---|
 | 32 |   // posy = position spatiale en Y pour chaque cylindre (unite ou lambda=1 pour f=1)
 | 
|---|
| [3192] | 33 |   // posx = position spatiale en X pour chaque cylindre (unite ou lambda=1 pour f=1)
 | 
|---|
 | 34 |  MultiBeamCyl(int nr=1024, int ns=4096, double posx=0., double posy=0. );
 | 
|---|
| [3160] | 35 |  ~MultiBeamCyl();
 | 
|---|
 | 36 | 
 | 
|---|
 | 37 |  // Niveau de print de debug
 | 
|---|
| [3192] | 38 |  inline void SetPrintLevel(int prl=0) { PrtLev_=prl; }
 | 
|---|
| [3160] | 39 | 
 | 
|---|
 | 40 |  // Reponse angulaire pour un recepteur (cylindre+antenne)
 | 
|---|
 | 41 |  // Modifier cette fonction pour tenir compte de la response angulaire
 | 
|---|
 | 42 |  inline double AngResponse(double angx, double angy) { return 1.; }
 | 
|---|
 | 43 | 
 | 
|---|
| [3192] | 44 |  inline double getCylinderYPos() { return posY_; }
 | 
|---|
 | 45 |  inline double getCylinderXPos() { return posX_; }
 | 
|---|
 | 46 | 
 | 
|---|
| [3160] | 47 |  // Specification de la frequence de base f0 et espacement des recepteurs
 | 
|---|
 | 48 |  // freq_vrai = freq_BRSourceGen + f0
 | 
|---|
 | 49 |  // pour f_vrai = 2, lambda = 0.5 et lambda/2 = 0.25
 | 
|---|
 | 50 |  inline void SetBaseFreqDa(double f0=2., double a=0.25) 
 | 
|---|
| [3192] | 51 |    {  freq0_ = f0;   Da_ = a; }
 | 
|---|
| [3160] | 52 | 
 | 
|---|
 | 53 |  // frequences reduites (entre 0 ... 0.5) , angle en radian, amp ~ 1
 | 
|---|
 | 54 |  void SetSources(BRSourceGen* brs, bool ad=true);
 | 
|---|
 | 55 |  inline void SetSources(BRSourceGen& brs)
 | 
|---|
 | 56 |    { SetSources(&brs, false); }
 | 
|---|
 | 57 | 
 | 
|---|
 | 58 |  // Definition du sigma du bruit gaussien sur les echantillons
 | 
|---|
| [3192] | 59 |  inline void SetNoiseSigma(double sig=0.) {  signoise_ = sig; }
 | 
|---|
| [3160] | 60 |  // Definition du sigma du jitter d'horloge (typ 0.01)
 | 
|---|
| [3192] | 61 |  inline void SetTimeJitter(double tjit=0.) { timejitter_ = tjit; } 
 | 
|---|
| [3160] | 62 |  // Definition du sigma des offsets d'horloge entre recepteurs (typ 0.02)
 | 
|---|
| [3192] | 63 |  inline void SetTimeOffsetSigma(double tsig=0.) { toffsig_ = tsig; }
 | 
|---|
| [3160] | 64 | 
 | 
|---|
 | 65 |  // Definition du gain et sigma de fluctuations de gain 
 | 
|---|
 | 66 |  // nzerogain: nb de recepteurs (choisis au hasard) avec gain mis a zero
 | 
|---|
 | 67 |  void SetGains(double g=1., double sigg=0., int nzerogain=0);
 | 
|---|
 | 68 | 
 | 
|---|
 | 69 |  // Calcule les vecteurs de temps (0 1 2 ...ns-1)
 | 
|---|
 | 70 |  void ComputeTimeVectors();
 | 
|---|
 | 71 |  // Recalcule un nouveau vecteur temps - avec jitter
 | 
|---|
 | 72 |  void NewTJitVector(int num=-1);
 | 
|---|
 | 73 | 
 | 
|---|
 | 74 |  // Calcul du vecteur signal (s(t)) -  et les vecteurs TF 
 | 
|---|
 | 75 |  // pour le recepteur numero numdet
 | 
|---|
 | 76 |  // si fgsignojit==true, on calcule aussi pour Temps_Sans_Jitter
 | 
|---|
 | 77 |  int ComputeSignalVector(int numdet=0, bool fgsignojit=true);
 | 
|---|
 | 78 | 
 | 
|---|
 | 79 |  // Calcul de la matrice reconstruction du plan source (freq vs angle)
 | 
|---|
 | 80 |  // fgzerocentre -> angle zero au mileiu de la matrice
 | 
|---|
 | 81 |  void ReconstructSourcePlane(bool fgzerocentre=true);
 | 
|---|
 | 82 | 
 | 
|---|
| [3192] | 83 |  inline  TMatrix< complex<r_4> > & getRecSrcPlane() { return cmplx_srcplane_; }
 | 
|---|
| [3160] | 84 | 
 | 
|---|
 | 85 |  //-------------- Variables membres ------------ 
 | 
|---|
| [3192] | 86 |  int NR_, NS_;  // nb recepteurs, nb d'echantillons ds chaque paquet
 | 
|---|
 | 87 |  double posX_;    // Position selon X (N-S) du premier recepteur du cylindre
 | 
|---|
 | 88 |  double posY_;    // Position selon Y (E-O) de la ligne de recepteurs
 | 
|---|
| [3160] | 89 | 
 | 
|---|
| [3192] | 90 |  int PrtLev_;   // Niveau de print de debug
 | 
|---|
| [3160] | 91 | 
 | 
|---|
| [3192] | 92 |  double Da_; // distance entre recepteurs
 | 
|---|
 | 93 |  double freq0_;  // frequence de base (freqvrai=f+freq0)
 | 
|---|
| [3160] | 94 |  
 | 
|---|
| [3192] | 95 |  Vector texact_;  // les temps exact
 | 
|---|
 | 96 |  Vector tjitt_;   // temps avec jitter
 | 
|---|
 | 97 |  Vector toffset_;  // Offset en temps entre recepteurs 
 | 
|---|
 | 98 |  double timejitter_; // le sigma du jitter en temps des coups d'horloge
 | 
|---|
 | 99 |  double toffsig_;    // sigma des offsets en temps
 | 
|---|
| [3160] | 100 |  
 | 
|---|
| [3192] | 101 |  BRSourceGen* src_;  // Les sources
 | 
|---|
 | 102 |  bool adfg_; // if true, delete src 
 | 
|---|
| [3160] | 103 | 
 | 
|---|
| [3192] | 104 |  double signoise_; // sigma du bruit additif (bruit ampli ... )
 | 
|---|
| [3160] | 105 |  
 | 
|---|
| [3192] | 106 |  TVector<r_4> gain_;  // Gain de chaque recepteur 
 | 
|---|
| [3160] | 107 | 
 | 
|---|
| [3192] | 108 |  TVector<r_4> signal_; // signal sans jitter en temps 
 | 
|---|
 | 109 |  TVector<r_4> sigjitt_; // signal avec jitter en temps
 | 
|---|
| [3160] | 110 | 
 | 
|---|
| [3192] | 111 |  TVector< complex<r_4> > f_sig_, f_sigjit_;  // TF des vecteurs signal , sigjitt
 | 
|---|
| [3160] | 112 | 
 | 
|---|
| [3192] | 113 |  TMatrix< complex<r_4> > cmplx_srcplane_; // composantes complexe du plan-source reconstruit
 | 
|---|
 | 114 |  // TMatrix<r_4> rec_srcplane_;  // Matrice plan source colonnes->angX, lignes->freq 
 | 
|---|
| [3160] | 115 |  };
 | 
|---|
 | 116 | 
 | 
|---|
 | 117 | 
 | 
|---|
 | 118 | #endif
 | 
|---|