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)
|
---|
33 | MultiBeamCyl(int nr=1024, int ns=4096, double posy=0.);
|
---|
34 | ~MultiBeamCyl();
|
---|
35 |
|
---|
36 | // Niveau de print de debug
|
---|
37 | inline void SetPrintLevel(int prl=0) { PrtLev=prl; }
|
---|
38 |
|
---|
39 | // Reponse angulaire pour un recepteur (cylindre+antenne)
|
---|
40 | // Modifier cette fonction pour tenir compte de la response angulaire
|
---|
41 | inline double AngResponse(double angx, double angy) { return 1.; }
|
---|
42 |
|
---|
43 | inline double getCylinderYPos() { return posY; }
|
---|
44 | // Specification de la frequence de base f0 et espacement des recepteurs
|
---|
45 | // freq_vrai = freq_BRSourceGen + f0
|
---|
46 | // pour f_vrai = 2, lambda = 0.5 et lambda/2 = 0.25
|
---|
47 | inline void SetBaseFreqDa(double f0=2., double a=0.25)
|
---|
48 | { freq0 = f0; Da = a; }
|
---|
49 |
|
---|
50 | // frequences reduites (entre 0 ... 0.5) , angle en radian, amp ~ 1
|
---|
51 | void SetSources(BRSourceGen* brs, bool ad=true);
|
---|
52 | inline void SetSources(BRSourceGen& brs)
|
---|
53 | { SetSources(&brs, false); }
|
---|
54 |
|
---|
55 | // Definition du sigma du bruit gaussien sur les echantillons
|
---|
56 | inline void SetNoiseSigma(double sig=0.) { signoise = sig; }
|
---|
57 | // Definition du sigma du jitter d'horloge (typ 0.01)
|
---|
58 | inline void SetTimeJitter(double tjit=0.) { timejitter = tjit; }
|
---|
59 | // Definition du sigma des offsets d'horloge entre recepteurs (typ 0.02)
|
---|
60 | inline void SetTimeOffsetSigma(double tsig=0.) { toffsig = tsig; }
|
---|
61 |
|
---|
62 | // Definition du gain et sigma de fluctuations de gain
|
---|
63 | // nzerogain: nb de recepteurs (choisis au hasard) avec gain mis a zero
|
---|
64 | void SetGains(double g=1., double sigg=0., int nzerogain=0);
|
---|
65 |
|
---|
66 | // Calcule les vecteurs de temps (0 1 2 ...ns-1)
|
---|
67 | void ComputeTimeVectors();
|
---|
68 | // Recalcule un nouveau vecteur temps - avec jitter
|
---|
69 | void NewTJitVector(int num=-1);
|
---|
70 |
|
---|
71 | // Calcul du vecteur signal (s(t)) - et les vecteurs TF
|
---|
72 | // pour le recepteur numero numdet
|
---|
73 | // si fgsignojit==true, on calcule aussi pour Temps_Sans_Jitter
|
---|
74 | int ComputeSignalVector(int numdet=0, bool fgsignojit=true);
|
---|
75 |
|
---|
76 | // Calcul de la matrice reconstruction du plan source (freq vs angle)
|
---|
77 | // fgzerocentre -> angle zero au mileiu de la matrice
|
---|
78 | void ReconstructSourcePlane(bool fgzerocentre=true);
|
---|
79 |
|
---|
80 | inline TMatrix< complex<r_4> > & getRecSrcPlane() { return cmplx_srcplane; }
|
---|
81 |
|
---|
82 | //-------------- Variables membres ------------
|
---|
83 | int NR, NS; // nb recepteurs, nb d'echantillons ds chaque paquet
|
---|
84 | double posY; // Position selon Y (E-O) de la ligne de recepteurs
|
---|
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 | Vector texact; // les temps exact
|
---|
92 | Vector tjitt; // temps avec jitter
|
---|
93 | Vector toffset; // Offset en temps entre recepteurs
|
---|
94 | double timejitter; // le sigma du jitter en temps des coups d'horloge
|
---|
95 | double toffsig; // sigma des offsets en temps
|
---|
96 |
|
---|
97 | BRSourceGen* src; // Les sources
|
---|
98 | bool adfg; // if true, delete src
|
---|
99 |
|
---|
100 | double signoise; // sigma du bruit additif (bruit ampli ... )
|
---|
101 |
|
---|
102 | TVector<r_4> gain; // Gain de chaque recepteur
|
---|
103 |
|
---|
104 | TVector<r_4> signal; // signal sans jitter en temps
|
---|
105 | TVector<r_4> sigjitt; // signal avec jitter en temps
|
---|
106 |
|
---|
107 | TVector< complex<r_4> > f_sig, f_sigjit; // TF des vecteurs signal , sigjitt
|
---|
108 |
|
---|
109 | TMatrix< complex<r_4> > cmplx_srcplane; // composantes complexe du plan-source reconstruit
|
---|
110 | // TMatrix<r_4> rec_srcplane; // Matrice plan source colonnes->angX, lignes->freq
|
---|
111 | };
|
---|
112 |
|
---|
113 |
|
---|
114 | #endif
|
---|