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

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

Cylinders have different x positions (NS).
This is taken into account in the signal phase shift
and in the exp() term when combining cylinders.
We can have more bins in x than antennas in one cylinder
to see the gain in resolution along x due to several cylinders at different x

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