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