##// END OF EJS Templates
prueba de con ancho espectral y adicion de snr
avaldez -
r1307:7a6e3ce2f2d5
parent child
Show More
@@ -354,41 +354,27 class SimulatorReader(JRODataReader, ProcessingUnit):
354 354 InBuffer.imag[m_nR:m_nR+ps] = InBuffer.imag[m_nR:m_nR+ps]*(math.sin( self.fAngle)*5)
355 355 InBuffer=InBuffer
356 356 self.datablock[i][k]= InBuffer
357 #plot_cts(InBuffer,H0=H0,DH0=DH0)
358 #wave_fft(x=InBuffer,plot_show=True)
359 #time.sleep(1)
357
360 358 #Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·DOPPLER SIGNAL...............................................
361 359 time_vec = numpy.linspace(0,(prof_gen-1)*ippSec,int(prof_gen))+self.nReadBlocks*ippSec*prof_gen+(self.nReadFiles-1)*ippSec*prof_gen
362 360 fd = Fdoppler #+(600.0/120)*self.nReadBlocks
363 361 d_signal = Adoppler*numpy.array(numpy.exp(1.0j*2.0*math.pi*fd*time_vec),dtype=numpy.complex64)
364 362 #Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·SeΓ±al con ancho espectralΒ·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·
365 #specw_sig = numpy.zeros(int(prof_gen),dtype=complex)
366 #specw_sig.real[200:200+100] = 1*numpy.ones(100)
367 #specw_sig.imag[200:200+100] = 1*numpy.ones(100)
368 # w=2
369 specw_sig = numpy.linspace(-149,150,300)
370 w = 3
371 A = 10
372 specw_sig = specw_sig/w
373 specw_sig = numpy.sinc(specw_sig)
374 specw_sig = A*numpy.array(specw_sig,dtype=numpy.complex64)
363 #specw_sig = numpy.linspace(-149,150,300)
364 #w = 8
365 #A = 20
366 #specw_sig = specw_sig/w
367 #specw_sig = numpy.sinc(specw_sig)
368 #specw_sig = A*numpy.array(specw_sig,dtype=numpy.complex64)
375 369 #Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β· DATABLOCK + DOPPLERΒ·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·
376 370 HD=int(Hdoppler/self.AcqDH_0)
377 371 for i in range(12):
378 372 self.datablock[0,:,HD+i]=self.datablock[0,:,HD+i]+ d_signal# RESULT
379
380 HD=int(Hdoppler/self.AcqDH_0)
381 HD=int(HD/2)
382 for i in range(12):
383 self.datablock[0,:,HD+i]=self.datablock[0,:,HD+i]+ specw_sig*d_signal# RESULT
384
385 '''
386 a= numpy.zeros(10)
387 for i in range(10):
388 a[i]=i+self.nReadBlocks+20
389 for i in a:
390 self.datablock[0,:,int(i)]=self.datablock[0,:,int(i)]+ d_signal # RESULT
391 '''
373 #Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β· DATABLOCK + DOPPLER*Sinc(x)Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·
374 #HD=int(Hdoppler/self.AcqDH_0)
375 #HD=int(HD/2)
376 #for i in range(12):
377 # self.datablock[0,:,HD+i]=self.datablock[0,:,HD+i]+ specw_sig*d_signal# RESULT
392 378
393 379 def readBlock(self):
394 380
@@ -1338,9 +1338,9 class PulsePairVoltage(Operation):
1338 1338 n,
1339 1339 dataOut.nHeights),
1340 1340 dtype='complex')
1341 self.noise = numpy.zeros([self.__nch,self.__nHeis])
1342 for i in range(self.__nch):
1343 self.noise[i]=dataOut.getNoise(channel=i)
1341 #self.noise = numpy.zeros([self.__nch,self.__nHeis])
1342 #for i in range(self.__nch):
1343 # self.noise[i]=dataOut.getNoise(channel=i)
1344 1344
1345 1345 def putData(self,data):
1346 1346 '''
@@ -1350,12 +1350,11 class PulsePairVoltage(Operation):
1350 1350 self.__profIndex += 1
1351 1351 return
1352 1352
1353 def pushData(self):
1353 def pushData(self,dataOut):
1354 1354 '''
1355 1355 Return the PULSEPAIR and the profiles used in the operation
1356 1356 Affected : self.__profileIndex
1357 1357 '''
1358
1359 1358 if self.removeDC==True:
1360 1359 mean = numpy.mean(self.__buffer,1)
1361 1360 tmp = mean.reshape(self.__nch,1,self.__nHeis)
@@ -1370,73 +1369,80 class PulsePairVoltage(Operation):
1370 1369 #angle = numpy.angle(numpy.sum(pair1,1))*180/(math.pi)
1371 1370 data_velocity = (-1.0*self.lambda_/(4*math.pi*self.ippSec))*numpy.angle(lag_1)#self.ippSec*self.nCohInt
1372 1371
1372 self.noise = numpy.zeros([self.__nch,self.__nHeis])
1373 for i in range(self.__nch):
1374 self.noise[i]=dataOut.getNoise(channel=i)
1375
1373 1376 lag_0 = lag_0.real/(self.n)
1374 1377 lag_1 = lag_1/(self.n-1)
1375 1378 R1 = numpy.abs(lag_1)
1376 1379 S = (lag_0-self.noise)
1377 #k = R1/S
1378 #k = 1-k
1379 #k =numpy.absolute(k)
1380 #k =numpy.sqrt(k)
1380
1381 data_snrPP = S/self.noise
1382 data_snrPP = numpy.where(data_snrPP<0,1,data_snrPP)
1383
1381 1384 L = S/R1
1382 #print("L",L[0])
1383 1385 L = numpy.where(L<0,1,L)
1384 1386 L = numpy.log(L)
1387
1385 1388 tmp = numpy.sqrt(numpy.absolute(L))
1389
1386 1390 data_specwidth = (self.lambda_/(2*math.sqrt(2)*math.pi*self.ippSec))*tmp*numpy.sign(L)
1387 1391 #data_specwidth = (self.lambda_/(2*math.sqrt(2)*math.pi*self.ippSec))*k
1388 1392 n = self.__profIndex
1389 1393
1390 1394 self.__buffer = numpy.zeros((self.__nch, self.__nProf,self.__nHeis), dtype='complex')
1391 1395 self.__profIndex = 0
1392 return data_intensity,data_velocity,data_specwidth,n
1396 return data_intensity,data_velocity,data_snrPP,data_specwidth,n
1393 1397
1394 def pulsePairbyProfiles(self,data):
1398 def pulsePairbyProfiles(self,dataOut):
1395 1399
1396 1400 self.__dataReady = False
1397 1401 data_intensity = None
1398 1402 data_velocity = None
1399 1403 data_specwidth = None
1400 self.putData(data)
1404 data_snrPP = None
1405 self.putData(data=dataOut.data)
1401 1406 if self.__profIndex == self.n:
1402 1407 #self.noise = numpy.zeros([self.__nch,self.__nHeis])
1403 1408 #for i in range(self.__nch):
1404 1409 # self.noise[i]=data.getNoise(channel=i)
1405 1410 #print(self.noise.shape)
1406 data_intensity, data_velocity,data_specwidth, n = self.pushData()
1411 data_intensity, data_velocity,data_snrPP,data_specwidth, n = self.pushData(dataOut=dataOut)
1407 1412 self.__dataReady = True
1408 1413
1409 return data_intensity, data_velocity,data_specwidth
1414 return data_intensity, data_velocity,data_snrPP,data_specwidth
1410 1415
1411 def pulsePairOp(self, data, datatime= None):
1416 def pulsePairOp(self, dataOut, datatime= None):
1412 1417
1413 1418 if self.__initime == None:
1414 1419 self.__initime = datatime
1415
1416 data_intensity, data_velocity,data_specwidth = self.pulsePairbyProfiles(data)
1420 #print("hola")
1421 data_intensity, data_velocity,data_snrPP,data_specwidth = self.pulsePairbyProfiles(dataOut)
1417 1422 self.__lastdatatime = datatime
1418 1423
1419 1424 if data_intensity is None:
1420 return None, None,None, None
1425 return None, None,None,None,None
1421 1426
1422 1427 avgdatatime = self.__initime
1423 1428 deltatime = datatime - self.__lastdatatime
1424 1429 self.__initime = datatime
1425 1430
1426 return data_intensity, data_velocity,data_specwidth,avgdatatime
1431 return data_intensity, data_velocity,data_snrPP,data_specwidth,avgdatatime
1427 1432
1428 1433 def run(self, dataOut,n = None,removeDC= False, overlapping= False,**kwargs):
1429 1434
1430 1435 if not self.isConfig:
1431 1436 self.setup(dataOut = dataOut, n = n , removeDC=removeDC , **kwargs)
1432 1437 self.isConfig = True
1433 data_intensity, data_velocity,data_specwidth, avgdatatime = self.pulsePairOp(dataOut.data, dataOut.utctime)
1438 data_intensity, data_velocity,data_snrPP,data_specwidth, avgdatatime = self.pulsePairOp(dataOut, dataOut.utctime)
1434 1439 dataOut.flagNoData = True
1435 1440
1436 1441 if self.__dataReady:
1437 1442 dataOut.nCohInt *= self.n
1438 1443 dataOut.data_intensity = data_intensity #valor para intensidad
1439 1444 dataOut.data_velocity = data_velocity #valor para velocidad
1445 dataOut.data_snrPP = data_snrPP # valor para snr
1440 1446 dataOut.data_specwidth = data_specwidth
1441 1447 dataOut.PRFbyAngle = self.n #numero de PRF*cada angulo rotado que equivale a un tiempo.
1442 1448 dataOut.utctime = avgdatatime
General Comments 0
You need to be logged in to leave comments. Login now