source: Sophya/trunk/Cosmo/RadioBeam/mbeamcyl.h@ 3971

Last change on this file since 3971 was 3192, checked in by legoff, 19 years ago

input file read with DVcards by treccyl.cc

and by multiCylinders(char* filename)

using real units (meter and GHz)
using _ for member variables (e.g. x_)

File size: 4.5 KB
Line 
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
28class MultiBeamCyl {
29public :
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 // 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. );
35 ~MultiBeamCyl();
36
37 // Niveau de print de debug
38 inline void SetPrintLevel(int prl=0) { PrtLev_=prl; }
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
44 inline double getCylinderYPos() { return posY_; }
45 inline double getCylinderXPos() { return posX_; }
46
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)
51 { freq0_ = f0; Da_ = a; }
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
59 inline void SetNoiseSigma(double sig=0.) { signoise_ = sig; }
60 // Definition du sigma du jitter d'horloge (typ 0.01)
61 inline void SetTimeJitter(double tjit=0.) { timejitter_ = tjit; }
62 // Definition du sigma des offsets d'horloge entre recepteurs (typ 0.02)
63 inline void SetTimeOffsetSigma(double tsig=0.) { toffsig_ = tsig; }
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
83 inline TMatrix< complex<r_4> > & getRecSrcPlane() { return cmplx_srcplane_; }
84
85 //-------------- Variables membres ------------
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
89
90 int PrtLev_; // Niveau de print de debug
91
92 double Da_; // distance entre recepteurs
93 double freq0_; // frequence de base (freqvrai=f+freq0)
94
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
100
101 BRSourceGen* src_; // Les sources
102 bool adfg_; // if true, delete src
103
104 double signoise_; // sigma du bruit additif (bruit ampli ... )
105
106 TVector<r_4> gain_; // Gain de chaque recepteur
107
108 TVector<r_4> signal_; // signal sans jitter en temps
109 TVector<r_4> sigjitt_; // signal avec jitter en temps
110
111 TVector< complex<r_4> > f_sig_, f_sigjit_; // TF des vecteurs signal , sigjitt
112
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
115 };
116
117
118#endif
Note: See TracBrowser for help on using the repository browser.