def eval(self,**kwargs): """ evaluate the link Parameters ---------- applywav :boolean Apply waveform to H force : list Force the computation (['sig','ray','Ct','H']) AND save (replace previous computations) alg : 1|'old'|'exp'|'exp2' version of run for signature si_progress: bollean ( False) display progression bar for signatures diffraction : boolean (False) takes into consideration diffraction points ra_number_mirror_cf : int rays.to3D number of ceil/floor reflexions ra_ceil_H: float, (default []) ceil height . If [] : Layout max ceil height If 0 : only floor reflection (outdoor case) If -1 : neither ceil nor floor reflection (2D case) ra_vectorized: boolean (True) if True used the (2015 new) vectorized approach to determine 2drays Returns ------- ak : ndarray alpha_k tk : ndarray tau_k Notes ----- update self.ak and self.tk self.ak : ndarray alpha_k self.tk : ndarray tau_k Examples -------- .. plot:: :include-source: >>> from pylayers.simul.link import * >>> L=DLink(verbose=False) >>> aktk = L.eval() See Also -------- pylayers.antprop.signature pylayers.antprop.rays Experimental ------------ alg = 2015 | 20152 (best) vectorized signature research si_reverb : number of reverb in source/target cycle if alg=2015 """ defaults={ 'applywav':True, 'si_progress':False, 'diffraction':True, 'ra_vectorized':True, 'ra_ceil_H':[], 'ra_number_mirror_cf':1, 'force':[], 'alg':1, 'si_reverb':4, 'threshold':0.1, 'verbose':[], } for key, value in defaults.items(): if key not in kwargs: kwargs[key]=value if 'cutoff' not in kwargs: kwargs['cutoff']=self.cutoff else: self.cutoff=kwargs['cutoff'] if 'force' in kwargs: if not isinstance(kwargs['force'],list): if kwargs['force'] == True : kwargs['force'] = ['sig','ray','Ct','H'] else : kwargs['force'] = [] if kwargs['verbose'] != []: self.verbose=kwargs['verbose'] # must be placed after all the init !!!! if self.verbose : print "checkh5" self.checkh5() ############ # Signatures ############ if self.verbose : print "Start Signatures" tic = time.time() Si = Signatures(self.L,self.ca,self.cb,cutoff=kwargs['cutoff']) if (self.dexist['sig']['exist'] and not ('sig' in kwargs['force'])): self.load(Si,self.dexist['sig']['grpname']) if self.verbose : print "load signature" else : if kwargs['alg']==1: Si.run(cutoff=kwargs['cutoff'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold'], progress=kwargs['si_progress']) if self.verbose : print "default algorithm" if kwargs['alg']=='exp': TMP=Si.run_exp(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if self.verbose : print "experimental (ex 2015)" if kwargs['alg']=='exp2': TMP=Si.run_exp2(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if self.verbose : print "algo exp2 ( ex 20152)" #Si.run6(diffraction=kwargs['diffraction']) # save sig self.save(Si,'sig',self.dexist['sig']['grpname'],force = kwargs['force']) self.Si = Si toc = time.time() if self.verbose : print "Stop signature",toc-tic ############ # Rays ############ if self.verbose : print "Start Rays" tic = time.time() R = Rays(self.a,self.b) if self.dexist['ray']['exist'] and not ('ray' in kwargs['force']): self.load(R,self.dexist['ray']['grpname']) else : # perform computation ... # ... with vetorized ray evaluation approach if kwargs['ra_vectorized']: r2d = Si.raysv(self.a,self.b) # ... or with original and slow approach ( to be removed in a near future) else : r2d = Si.rays(self.a,self.b) if kwargs['ra_ceil_H'] == []: ceilheight = self.L.maxheight else: ceilheight = kwargs['ra_ceil_H'] R = r2d.to3D(self.L,H=ceilheight, N=kwargs['ra_number_mirror_cf']) R.locbas(self.L) # ...and save R.fillinter(self.L) C = Ctilde() C = R.eval(self.fGHz) self.save(R,'ray',self.dexist['ray']['grpname'],force = kwargs['force']) self.R = R toc = time.time() if self.verbose : print "Stop rays",toc-tic if self.R.nray == 0: raise NameError('No rays have been found. Try to re-run the simulation with a higher S.cutoff ') ############ # Ctilde ############ if self.dexist['Ct']['exist'] and not ('Ct' in kwargs['force']): C=Ctilde() self.load(C,self.dexist['Ct']['grpname']) else : #if not hasattr(R,'I'): # Ctilde... # Find an other criteria in order to decide whether the R has # already been evaluated #pdb.set_trace() C = R.eval(self.fGHz) # ...save Ct self.save(C,'Ct',self.dexist['Ct']['grpname'],force = kwargs['force']) self.C = C ############ # H ############ H = Tchannel() if self.dexist['H']['exist'] and not ('H' in kwargs['force']): self.load(H,self.dexist['H']['grpname']) else : # Ctilde antenna Cl=C.locbas(Tt=self.Ta, Tr=self.Tb) #T channel H = C.prop2tran(a=self.Aa,b=self.Ab,Friis=True,debug=True) self.save(H,'H',self.dexist['H']['grpname'],force = kwargs['force']) self.H = H if kwargs['applywav']: if self.H.isFriis: self.ir = self.H.get_cir(self.wav.sf) else: self.ir = self.H.get_cir(self.wav.sfg) return self.H.ak, self.H.tk
def eval(self,**kwargs): """ Evaluate the link Parameters ---------- applywav :boolean Apply waveform to H force : list Force the computation (['sig','ray','Ct','H']) AND save (replace previous computations) si_algo : str ('old'|'new') signature.run algo type 'old' : call propaths2 'new' : call procone2 alg : 5 | 7 version of run for signature si_mt: boolean Multi thread version of algo version 7 si_progress: bollean ( False) display progression bar for signatures diffraction : boolean (False) takes into consideration diffraction points ra_number_mirror_cf : int rays.to3D number of ceil/floor reflexions ra_ceil_height_meter: float, ceil height ra_vectorized: boolean (True) if True used the (2015 new) vectorized approach to determine 2drays Returns ------- ak : ndarray alpha_k tk : ndarray tau_k Notes ----- update self.ak and self.tk self.ak : ndarray alpha_k self.tk : ndarray tau_k Examples -------- .. plot:: :include-source: >>> from pylayers.simul.link import * >>> L=DLink(verbose=False) >>> aktk = L.eval() See Also -------- pylayers.antprop.signature pylayers.antprop.rays Experimental ------------ alg = 2015 | 20152 (best) vectorized signature research si_reverb : number of reverb in source/target cycle if alg=2015 """ defaults={ 'applywav':True, 'si_algo':'old', 'si_mt':False, 'si_progress':False, 'diffraction':False, 'ra_vectorized':False, 'ra_ceil_height_meter':3, 'ra_number_mirror_cf':1, 'force':[], 'alg':7, 'si_reverb':4, 'threshold':0.1, } for key, value in defaults.items(): if key not in kwargs: kwargs[key]=value if 'cutoff' not in kwargs: kwargs['cutoff']=self.cutoff else: self.cutoff=kwargs['cutoff'] if 'force' in kwargs: if not isinstance(kwargs['force'],list): if kwargs['force'] == True : kwargs['force'] = ['sig','ray','Ct','H'] else : kwargs['force'] = [] # must be placed after all the init !!!! self.checkh5() ############ # Signatures ############ Si = Signatures(self.L,self.ca,self.cb,cutoff=kwargs['cutoff']) if (self.dexist['sig']['exist'] and not ('sig' in kwargs['force'])): self.load(Si,self.dexist['sig']['grpname']) else : if kwargs['alg']==2015: TMP=Si.run2015(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if kwargs['alg']==20152: TMP=Si.run2015_2(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if kwargs['alg']==5: Si.run5(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], progress=kwargs['si_progress']) if kwargs['alg']==7: if kwargs['si_mt']==7: Si.run7mt(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold'], progress=kwargs['si_progress']) else : Si.run7(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold'], progress=kwargs['si_progress']) #Si.run6(diffraction=kwargs['diffraction']) # save sig self.save(Si,'sig',self.dexist['sig']['grpname'],force = kwargs['force']) self.Si = Si ############ # Rays ############ R = Rays(self.a,self.b) if self.dexist['ray']['exist'] and not ('ray' in kwargs['force']): self.load(R,self.dexist['ray']['grpname']) else : # perform computation ... # ... with vetorized ray evaluation approach if kwargs['ra_vectorized']: r2d = Si.raysv(self.a,self.b) # ... or with original and slow approach ( to be removed in a near future) else : r2d = Si.rays(self.a,self.b) R = r2d.to3D(self.L,H=self.L.maxheight, N=kwargs['ra_number_mirror_cf']) R.locbas(self.L) # ...and save self.save(R,'ray',self.dexist['ray']['grpname'],force = kwargs['force']) self.R = R if self.R.nray == 0: raise NameError('No rays have been found. Try to re-run the simulation with a higher S.cutoff ') ############ # Ctilde ############ C=Ctilde() if self.dexist['Ct']['exist'] and not ('Ct' in kwargs['force']): self.load(C,self.dexist['Ct']['grpname']) else : R.fillinter(self.L) # Ctilde... C = R.eval(self.fGHz) # ...save Ct self.save(C,'Ct',self.dexist['Ct']['grpname'],force = kwargs['force']) self.C = C ############ # H ############ H = Tchannel() if self.dexist['H']['exist'] and not ('H' in kwargs['force']): self.load(H,self.dexist['H']['grpname']) else : # Ctilde antenna Cl=C.locbas(Tt=self.Ta, Tr=self.Tb) #T channel H = C.prop2tran(a=self.Aa,b=self.Ab,Friis=True,debug=True) self.save(H,'H',self.dexist['H']['grpname'],force = kwargs['force']) self.H = H if kwargs['applywav']: if self.H.isFriis: self.ir = self.H.applywavB(self.wav.sf) else: self.ir = self.H.applywavB(self.wav.sfg) return self.H.ak, self.H.tk
def __init__(self, **kwargs): """ deterministic link evaluation Parameters ---------- L : Layout Layout to be used a : np.ndarray (3,) position of a device dev_a b : np.ndarray (3,) position of a device dev_b Aa : Antenna Antenna of device dev_a Ab : Antenna Antenna of device dev_b Ta : np.ndarray (3,3) Rotation matrice of Antenna of device dev_a relative to global Layout scene Tb : np.ndarray (3,3) Rotation matrice of Antenna of device dev_b relative to global Layout scene fGHz : np.ndarray (Nf,) frequency range of Nf points used for evaluation of channel wav : Waveform Waveform to be applied on the channel save_idx : int number to identify the h5 file generated Advanced (change only if you really know what you do !) save_opt : list (['sig','ray','Ct','H']) information to be saved in the Links h5 file. Should never be Modified ! force_create : Boolean (False) forcecreating the h5py file (if already exist, will be erased) Notes ----- All simulations are stored into a unique file in your <PyProject>/output directory using the following convention: Links_<save_idx>_<LayoutFilename>.h5 where <save_idx> is an integer number to distinguish different links simulations and <LayoutFilename> is the Layout used for the link simulation. Dataset organisation: Links_<idx>_<Layout_name>.h5 | |/sig/si_ID#0/ | /si_ID#1/ | ... | |/ray/ray_ID#0/ | /ray_ID#1/ | ... | |/Ct/Ct_ID#0/ | /Ct_ID#1/ | ... | |/H/H_ID#0/ | /H_ID#1/ | ... | | |p_map |c_map |f_map |A_map |T_map Roots Dataset : c_map : Cycles (Nc x 3) p_map : Positions (Np x 3) f_map : Frequency (Nf x 3) T_map : Rotation matrices (Nt x 3) A_map : Antenna name (Na x 3) Groups and subgroups: Signature identifier (si_ID#N): ca_cb_cutoff Ray identifier (ray_ID#N): cutoff_ua_ub Ctilde identifier (Ct_ID#N): ua_ub_uf H identifier (H_ID#N): ua_ub_uf_uTa_uTb_uAa_uAb with ca : cycle number of a cb : cycle number of b cutoff : signature.run cutoff ua : indice of a position in 'p_map' position dataset ub : indice of a position in 'p_map' position dataset uf : indice of freq position in 'f_map' frequency dataset uTa : indice of a position in 'T_map' Rotation dataset uTb : indice of a position in 'T_map' Rotation dataset uAa : indice of a position in 'A_map' Antenna name dataset uAb : indice of b position in 'A_map' Antenna name dataset Examples -------- >>> from pylayers.simul.link import * >>> L = DLink(verbose=False) >>> aktk = L.eval() """ Link.__init__(self) defaults={ 'L':Layout(), 'a':np.array(()), 'b':np.array(()), 'Aa':Antenna(typ='Omni'), 'Ab':Antenna(typ='Omni'), 'Ta':np.eye(3), 'Tb':np.eye(3), 'fGHz':[], 'wav':wvf.Waveform(), 'cutoff':3, 'save_opt':['sig','ray','Ct','H'], 'save_idx':0, 'force_create':False, 'verbose':True, 'graph':'tcvirw' } self._ca=-1 self._cb=-1 specset = ['a','b','Aa','Ab','Ta','Tb','L','fGHz','wav'] # set default attribute for key, value in defaults.items(): if key not in kwargs: if key in specset : setattr(self,'_'+key,value) else : setattr(self,key,value) else : if key in specset : setattr(self,'_'+key,kwargs[key]) else : setattr(self,key,kwargs[key]) force=self.force_create delattr(self,'force_create') if self.fGHz == []: self.initfreq() else : pass try: self._Lname = self._L.filename except: self._L=Layout(self._L) self._Lname = self._L.filename ########### # Transmitter and Receiver positions ########### self.tx = RadioNode(name = '', typ = 'tx', _fileini = 'radiotx.ini', ) self.rx = RadioNode(name = '', typ = 'rx', _fileini = 'radiorx.ini', ) self.filename = 'Links_' + str(self.save_idx) + '_' + self._Lname + '.h5' filenameh5 = pyu.getlong(self.filename,pstruc['DIRLNK']) # check if save file alreasdy exists if not os.path.exists(filenameh5) or force: print 'Links save file for ' + self.L.filename + ' does not exist.' print 'Creating file. You\'ll see this message only once per Layout' self.save_init(filenameh5) # dictionnary data exists self.dexist={'sig':{'exist':False,'grpname':''}, 'ray':{'exist':False,'grpname':''}, 'Ct':{'exist':False,'grpname':''}, 'H':{'exist':False,'grpname':''} } try: self.L.dumpr() except: print('This is the first time the Layout is used. Graphs have to be built. Please Wait') self.L.build(graph=self.graph) self.L.dumpw() #self.L.build() ########### # init pos & cycles # # If a and b are not specified # they are chosen as center of gravity of cycle 0 # ########### if len(self.a)==0: self.ca = 1 # self.a = self.L.cy2pt(self.ca) else: if len(kwargs['a']) ==2: a=np.r_[kwargs['a'],1.0] else: a=kwargs['a'] self.a = a # self.ca = self.L.pt2cy(self.a) if len(self.b)==0: if len(self.L.Gt.node)>2: self.cb = 2 else: self.cb = 1 # self.b = self.L.cy2pt(self.cb) else: if len(kwargs['b']) ==2: b=np.r_[kwargs['b'],1.0] else: b=kwargs['b'] self.b = b # self.cb = self.L.pt2cy(self.b) ########### # init freq # TODO Check where it is used redundant with fGHz ########### #self.fmin = self.fGHz[0] #self.fmax = self.fGHz[-1] #self.fstep = self.fGHz[1]-self.fGHz[0] self.Si = Signatures(self.L,self.ca,self.cb,cutoff=self.cutoff) self.R = Rays(self.a,self.b) self.C = Ctilde() self.H = Tchannel()
def eval(self,**kwargs): """ evaluate the link Parameters ---------- applywav :boolean Apply waveform to H force : list Force the computation (['sig','ray','Ct','H']) AND save (replace previous computations) si_algo : str ('old'|'new') signature.run algo type 'old' : call propaths2 'new' : call procone2 alg : 5|7 version of run for signature si_mt: boolean Multi thread version of algo version 7 si_progress: bollean ( False) display progression bar for signatures diffraction : boolean (False) takes into consideration diffraction points ra_number_mirror_cf : int rays.to3D number of ceil/floor reflexions ra_ceil_H: float, (default []) ceil height . If [] : Layout max ceil height ra_vectorized: boolean (True) if True used the (2015 new) vectorized approach to determine 2drays Returns ------- ak : ndarray alpha_k tk : ndarray tau_k Notes ----- update self.ak and self.tk self.ak : ndarray alpha_k self.tk : ndarray tau_k Examples -------- .. plot:: :include-source: >>> from pylayers.simul.link import * >>> L=DLink(verbose=False) >>> aktk = L.eval() See Also -------- pylayers.antprop.signature pylayers.antprop.rays Experimental ------------ alg = 2015 | 20152 (best) vectorized signature research si_reverb : number of reverb in source/target cycle if alg=2015 """ defaults={ 'applywav':True, 'si_algo':'old', 'si_mt':False, 'si_progress':False, 'diffraction':True, 'ra_vectorized':True, 'ra_ceil_H':[], 'ra_number_mirror_cf':1, 'force':[], 'alg':7, 'si_reverb':4, 'threshold':0.1, 'verbose':[], } for key, value in defaults.items(): if key not in kwargs: kwargs[key]=value if 'cutoff' not in kwargs: kwargs['cutoff']=self.cutoff else: self.cutoff=kwargs['cutoff'] if 'force' in kwargs: if not isinstance(kwargs['force'],list): if kwargs['force'] == True : kwargs['force'] = ['sig','ray','Ct','H'] else : kwargs['force'] = [] if kwargs['verbose'] != []: self.verbose=kwargs['verbose'] # must be placed after all the init !!!! if self.verbose : print "checkh5" self.checkh5() ############ # Signatures ############ if self.verbose : print "Start Signatures" tic = time.time() Si = Signatures(self.L,self.ca,self.cb,cutoff=kwargs['cutoff']) if (self.dexist['sig']['exist'] and not ('sig' in kwargs['force'])): self.load(Si,self.dexist['sig']['grpname']) if self.verbose : print "load signature" else : if kwargs['alg']==2015: TMP=Si.run2015(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if self.verbose : print "algo 2015" if kwargs['alg']==20152: TMP=Si.run2015_2(cutoff=kwargs['cutoff'], cutoffbound=kwargs['si_reverb']) if self.verbose : print "algo 20152" if kwargs['alg']==5: Si.run5(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], progress=kwargs['si_progress']) if self.verbose : print "algo 5" if kwargs['alg']==7: if kwargs['si_mt']==7: Si.run7mt(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold'], progress=kwargs['si_progress']) if self.verbose : print "algo 7 , si_mt" else : Si.run7(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold'], progress=kwargs['si_progress']) if self.verbose : print "algo 7" #Si.run6(diffraction=kwargs['diffraction']) # save sig self.save(Si,'sig',self.dexist['sig']['grpname'],force = kwargs['force']) self.Si = Si toc = time.time() if self.verbose : print "Stop signature",toc-tic ############ # Rays ############ if self.verbose : print "Start Rays" tic = time.time() R = Rays(self.a,self.b) if self.dexist['ray']['exist'] and not ('ray' in kwargs['force']): self.load(R,self.dexist['ray']['grpname']) else : # perform computation ... # ... with vetorized ray evaluation approach if kwargs['ra_vectorized']: r2d = Si.raysv(self.a,self.b) # ... or with original and slow approach ( to be removed in a near future) else : r2d = Si.rays(self.a,self.b) if kwargs['ra_ceil_H'] == []: ceilheight = self.L.maxheight else: ceilheight = kwargs['ra_ceil_H'] R = r2d.to3D(self.L,H=ceilheight, N=kwargs['ra_number_mirror_cf']) R.locbas(self.L) # ...and save R.fillinter(self.L) C=Ctilde() C = R.eval(self.fGHz) self.save(R,'ray',self.dexist['ray']['grpname'],force = kwargs['force']) self.R = R toc = time.time() if self.verbose : print "Stop rays",toc-tic if self.R.nray == 0: raise NameError('No rays have been found. Try to re-run the simulation with a higher S.cutoff ') ############ # Ctilde ############ if self.dexist['Ct']['exist'] and not ('Ct' in kwargs['force']): C=Ctilde() self.load(C,self.dexist['Ct']['grpname']) else : if not hasattr(R,'I'): # Ctilde... C = R.eval(self.fGHz) # ...save Ct self.save(C,'Ct',self.dexist['Ct']['grpname'],force = kwargs['force']) self.C = C ############ # H ############ H = Tchannel() if self.dexist['H']['exist'] and not ('H' in kwargs['force']): self.load(H,self.dexist['H']['grpname']) else : # Ctilde antenna Cl=C.locbas(Tt=self.Ta, Tr=self.Tb) #T channel H = C.prop2tran(a=self.Aa,b=self.Ab,Friis=True,debug=True) self.save(H,'H',self.dexist['H']['grpname'],force = kwargs['force']) self.H = H if kwargs['applywav']: if self.H.isFriis: self.ir = self.H.get_cir(self.wav.sf) else: self.ir = self.H.get_cir(self.wav.sfg) return self.H.ak, self.H.tk
def eval(self,**kwargs): """ Evaluate the link Parameters ---------- force : boolean Force the computation (even if obj already exists) AND save (replace previous computations) si_algo : str ('old'|'new') signature.run algo type ra_ceil_height_meter : int rays.to3D ceil height in meters ra_number_mirror_cf : int rays.to3D number of ceil/floor reflexions Returns ------- ak : ndarray alpha_k tk : ndarray tau_k Notes ----- update self.ak and self.tk self.ak : ndarray alpha_k self.tk : ndarray tau_k Examples -------- .. plot:: :include-source: >>> from pylayers.simul.link import * >>> L=DLink(verbose=False) >>> aktk = L.eval() See Also -------- pylayers.antprop.signature pylayers.antprop.rays """ defaults={ 'output':['sig','ray','Ct','H'], 'si_algo':'old', 'diffraction':False, 'ra_ceil_height_meter':3, 'ra_number_mirror_cf':1, 'force':False, 'alg':7, 'threshold':0.1, } for key, value in defaults.items(): if key not in kwargs: kwargs[key]=value self.checkh5() if 'cutoff' not in kwargs: kwargs['cutoff']=self.cutoff ############ # Signatures ############ Si = Signatures(self.L,self.ca,self.cb,cutoff=kwargs['cutoff']) if self.dexist['sig']['exist'] and not kwargs['force']: self.load(Si,self.dexist['sig']['grpname']) else : if kwargs['alg']==5: Si.run5(cutoff=kwargs['cutoff'],algo=kwargs['si_algo'],diffraction=kwargs['diffraction']) if kwargs['alg']==7: Si.run7(cutoff=kwargs['cutoff'], algo=kwargs['si_algo'], diffraction=kwargs['diffraction'], threshold=kwargs['threshold']) #Si.run6(diffraction=kwargs['diffraction']) # save sig self.save(Si,'sig',self.dexist['sig']['grpname'],force = kwargs['force']) self.Si = Si ############ # Rays ############ R = Rays(self.a,self.b) if self.dexist['ray']['exist'] and not kwargs['force']: self.load(R,self.dexist['ray']['grpname']) else : # perform computation ... r2d = Si.rays(self.a,self.b) R = r2d.to3D(self.L,H=kwargs['ra_ceil_height_meter'], N=kwargs['ra_number_mirror_cf']) R.locbas(self.L) # ...and save self.save(R,'ray',self.dexist['ray']['grpname'],force = kwargs['force']) self.R = R if self.R.nray == 0: raise NameError('No rays have been found. Try to re-run the simulation with a higher S.cutoff ') ############ # Ctilde ############ C=Ctilde() if self.dexist['Ct']['exist'] and not kwargs['force']: self.load(C,self.dexist['Ct']['grpname']) else : R.fillinter(self.L) # Ctilde... C = R.eval(self.fGHz) # ...save Ct self.save(C,'Ct',self.dexist['Ct']['grpname'],force = kwargs['force']) self.C = C ############ # H ############ H=Tchannel() if self.dexist['H']['exist'] and not kwargs['force']: self.load(H,self.dexist['H']['grpname']) else : # Ctilde antenna Cl=C.locbas(Tt=self.Ta, Tr=self.Tb) #T channel H = C.prop2tran(a=self.Aa,b=self.Ab,Friis=True) self.save(H,'H',self.dexist['H']['grpname'],force = kwargs['force']) self.H = H return self.H.ak, self.H.tk
tx = array([759, 1114, 1.0]) rx = array([767, 1114, 1.5]) S.tx.clear() S.rx.clear() S.tx.point(tx) S.rx.point(rx) # get cycle from coordinates Ctx = S.L.pt2cy(S.tx.position[:, 0]) Crx = S.L.pt2cy(S.rx.position[:, 0]) fGHz = np.arange(2, 11, 0.1) wav = wvf.Waveform(fcGHz=5, bandGHz=3) # # Dans un sens # tic = time.time() Si1 = Signatures(S.L, Ctx, Crx) # Si1.run4(cutoff=5,algo='old') Si1.run(diffraction=False) toc = time.time() print "signature ", toc - tic tic = time.time() r2d = Si1.rays(tx, rx) print "2D rays ", tic - toc r3d1 = r2d.to3D(S.L) toc = time.time() print "3D rays ", toc - tic r3d1.locbas(S.L) tic = time.time() print "3D rays locbas", tic - toc r3d1.fillinter(S.L) toc = time.time()
S.L.build() tx=array([759,1114,1.0]) rx=array([767,1114,1.5]) S.tx.clear() S.rx.clear() S.tx.point(tx) S.rx.point(rx) # get cycle from coordinates Ctx = S.L.pt2cy(S.tx.position[:,0]) Crx = S.L.pt2cy(S.rx.position[:,0]) fGHz=np.arange(2,11,0.1) wav = wvf.Waveform(fcGHz=5,bandGHz=3) # # Dans un sens # Si1 = Signatures(S.L,Ctx,Crx) #Si1.run4(cutoff=5,algo='old') Si1.run5(diffraction=False) toc = time.time() print "signature ",toc-tic tic = time.time() r2d = Si1.rays(tx,rx) print "2D rays ",tic-toc r3d1 = r2d.to3D(S.L) toc = time.time() print "3D rays ",toc-tic r3d1.locbas(S.L) tic = time.time() print "3D rays locbas",tic-toc r3d1.fillinter(S.L) toc = time.time()