| [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 | 
|---|