diff --git a/schainpy/model/io/jroIO_simulator.py b/schainpy/model/io/jroIO_simulator.py index 874843f..703734a 100644 --- a/schainpy/model/io/jroIO_simulator.py +++ b/schainpy/model/io/jroIO_simulator.py @@ -354,41 +354,27 @@ class SimulatorReader(JRODataReader, ProcessingUnit): InBuffer.imag[m_nR:m_nR+ps] = InBuffer.imag[m_nR:m_nR+ps]*(math.sin( self.fAngle)*5) InBuffer=InBuffer self.datablock[i][k]= InBuffer - #plot_cts(InBuffer,H0=H0,DH0=DH0) - #wave_fft(x=InBuffer,plot_show=True) - #time.sleep(1) + #················DOPPLER SIGNAL............................................... time_vec = numpy.linspace(0,(prof_gen-1)*ippSec,int(prof_gen))+self.nReadBlocks*ippSec*prof_gen+(self.nReadFiles-1)*ippSec*prof_gen fd = Fdoppler #+(600.0/120)*self.nReadBlocks d_signal = Adoppler*numpy.array(numpy.exp(1.0j*2.0*math.pi*fd*time_vec),dtype=numpy.complex64) #·············Señal con ancho espectral···················· - #specw_sig = numpy.zeros(int(prof_gen),dtype=complex) - #specw_sig.real[200:200+100] = 1*numpy.ones(100) - #specw_sig.imag[200:200+100] = 1*numpy.ones(100) - # w=2 - specw_sig = numpy.linspace(-149,150,300) - w = 3 - A = 10 - specw_sig = specw_sig/w - specw_sig = numpy.sinc(specw_sig) - specw_sig = A*numpy.array(specw_sig,dtype=numpy.complex64) + #specw_sig = numpy.linspace(-149,150,300) + #w = 8 + #A = 20 + #specw_sig = specw_sig/w + #specw_sig = numpy.sinc(specw_sig) + #specw_sig = A*numpy.array(specw_sig,dtype=numpy.complex64) #·················· DATABLOCK + DOPPLER···················· HD=int(Hdoppler/self.AcqDH_0) for i in range(12): self.datablock[0,:,HD+i]=self.datablock[0,:,HD+i]+ d_signal# RESULT - - HD=int(Hdoppler/self.AcqDH_0) - HD=int(HD/2) - for i in range(12): - self.datablock[0,:,HD+i]=self.datablock[0,:,HD+i]+ specw_sig*d_signal# RESULT - - ''' - a= numpy.zeros(10) - for i in range(10): - a[i]=i+self.nReadBlocks+20 - for i in a: - self.datablock[0,:,int(i)]=self.datablock[0,:,int(i)]+ d_signal # RESULT - ''' + #·················· DATABLOCK + DOPPLER*Sinc(x)···················· + #HD=int(Hdoppler/self.AcqDH_0) + #HD=int(HD/2) + #for i in range(12): + # self.datablock[0,:,HD+i]=self.datablock[0,:,HD+i]+ specw_sig*d_signal# RESULT def readBlock(self): diff --git a/schainpy/model/proc/jroproc_voltage.py b/schainpy/model/proc/jroproc_voltage.py index 4bc8b1f..0a25c23 100644 --- a/schainpy/model/proc/jroproc_voltage.py +++ b/schainpy/model/proc/jroproc_voltage.py @@ -1338,9 +1338,9 @@ class PulsePairVoltage(Operation): n, dataOut.nHeights), dtype='complex') - self.noise = numpy.zeros([self.__nch,self.__nHeis]) - for i in range(self.__nch): - self.noise[i]=dataOut.getNoise(channel=i) + #self.noise = numpy.zeros([self.__nch,self.__nHeis]) + #for i in range(self.__nch): + # self.noise[i]=dataOut.getNoise(channel=i) def putData(self,data): ''' @@ -1350,12 +1350,11 @@ class PulsePairVoltage(Operation): self.__profIndex += 1 return - def pushData(self): + def pushData(self,dataOut): ''' Return the PULSEPAIR and the profiles used in the operation Affected : self.__profileIndex ''' - if self.removeDC==True: mean = numpy.mean(self.__buffer,1) tmp = mean.reshape(self.__nch,1,self.__nHeis) @@ -1370,73 +1369,80 @@ class PulsePairVoltage(Operation): #angle = numpy.angle(numpy.sum(pair1,1))*180/(math.pi) data_velocity = (-1.0*self.lambda_/(4*math.pi*self.ippSec))*numpy.angle(lag_1)#self.ippSec*self.nCohInt + self.noise = numpy.zeros([self.__nch,self.__nHeis]) + for i in range(self.__nch): + self.noise[i]=dataOut.getNoise(channel=i) + lag_0 = lag_0.real/(self.n) lag_1 = lag_1/(self.n-1) R1 = numpy.abs(lag_1) S = (lag_0-self.noise) - #k = R1/S - #k = 1-k - #k =numpy.absolute(k) - #k =numpy.sqrt(k) + + data_snrPP = S/self.noise + data_snrPP = numpy.where(data_snrPP<0,1,data_snrPP) + L = S/R1 - #print("L",L[0]) L = numpy.where(L<0,1,L) L = numpy.log(L) + tmp = numpy.sqrt(numpy.absolute(L)) + data_specwidth = (self.lambda_/(2*math.sqrt(2)*math.pi*self.ippSec))*tmp*numpy.sign(L) #data_specwidth = (self.lambda_/(2*math.sqrt(2)*math.pi*self.ippSec))*k n = self.__profIndex self.__buffer = numpy.zeros((self.__nch, self.__nProf,self.__nHeis), dtype='complex') self.__profIndex = 0 - return data_intensity,data_velocity,data_specwidth,n + return data_intensity,data_velocity,data_snrPP,data_specwidth,n - def pulsePairbyProfiles(self,data): + def pulsePairbyProfiles(self,dataOut): self.__dataReady = False data_intensity = None data_velocity = None data_specwidth = None - self.putData(data) + data_snrPP = None + self.putData(data=dataOut.data) if self.__profIndex == self.n: #self.noise = numpy.zeros([self.__nch,self.__nHeis]) #for i in range(self.__nch): # self.noise[i]=data.getNoise(channel=i) #print(self.noise.shape) - data_intensity, data_velocity,data_specwidth, n = self.pushData() + data_intensity, data_velocity,data_snrPP,data_specwidth, n = self.pushData(dataOut=dataOut) self.__dataReady = True - return data_intensity, data_velocity,data_specwidth + return data_intensity, data_velocity,data_snrPP,data_specwidth - def pulsePairOp(self, data, datatime= None): + def pulsePairOp(self, dataOut, datatime= None): if self.__initime == None: self.__initime = datatime - - data_intensity, data_velocity,data_specwidth = self.pulsePairbyProfiles(data) + #print("hola") + data_intensity, data_velocity,data_snrPP,data_specwidth = self.pulsePairbyProfiles(dataOut) self.__lastdatatime = datatime if data_intensity is None: - return None, None,None, None + return None, None,None,None,None avgdatatime = self.__initime deltatime = datatime - self.__lastdatatime self.__initime = datatime - return data_intensity, data_velocity,data_specwidth,avgdatatime + return data_intensity, data_velocity,data_snrPP,data_specwidth,avgdatatime def run(self, dataOut,n = None,removeDC= False, overlapping= False,**kwargs): if not self.isConfig: self.setup(dataOut = dataOut, n = n , removeDC=removeDC , **kwargs) self.isConfig = True - data_intensity, data_velocity,data_specwidth, avgdatatime = self.pulsePairOp(dataOut.data, dataOut.utctime) + data_intensity, data_velocity,data_snrPP,data_specwidth, avgdatatime = self.pulsePairOp(dataOut, dataOut.utctime) dataOut.flagNoData = True if self.__dataReady: dataOut.nCohInt *= self.n dataOut.data_intensity = data_intensity #valor para intensidad dataOut.data_velocity = data_velocity #valor para velocidad + dataOut.data_snrPP = data_snrPP # valor para snr dataOut.data_specwidth = data_specwidth dataOut.PRFbyAngle = self.n #numero de PRF*cada angulo rotado que equivale a un tiempo. dataOut.utctime = avgdatatime