|
|
'''
|
|
|
|
|
|
$Author$
|
|
|
$Id$
|
|
|
'''
|
|
|
|
|
|
import os, sys
|
|
|
import numpy
|
|
|
import time
|
|
|
import datetime
|
|
|
path = os.path.split(os.getcwd())[0]
|
|
|
sys.path.append(path)
|
|
|
|
|
|
from Data.JROData import Spectra, SpectraHeis
|
|
|
from IO.SpectraIO import SpectraWriter
|
|
|
from Graphics.schainPlotTypes import ScopeFigure, SpcFigure, RTIFigure
|
|
|
#from JRONoise import Noise
|
|
|
|
|
|
class SpectraProcessor:
|
|
|
'''
|
|
|
classdocs
|
|
|
'''
|
|
|
|
|
|
dataInObj = None
|
|
|
|
|
|
dataOutObj = None
|
|
|
|
|
|
noiseObj = None
|
|
|
|
|
|
integratorObjList = []
|
|
|
|
|
|
writerObjList = []
|
|
|
|
|
|
integratorObjIndex = None
|
|
|
|
|
|
writerObjIndex = None
|
|
|
|
|
|
profIndex = 0 # Se emplea cuando el objeto de entrada es un Voltage
|
|
|
|
|
|
firstdatatime = None
|
|
|
|
|
|
def __init__(self):
|
|
|
'''
|
|
|
Constructor
|
|
|
'''
|
|
|
|
|
|
self.integratorObjIndex = None
|
|
|
self.writerObjIndex = None
|
|
|
self.plotObjIndex = None
|
|
|
self.integratorOst = []
|
|
|
self.plotObjList = []
|
|
|
self.noiseObj = []
|
|
|
self.writerObjList = []
|
|
|
self.buffer = None
|
|
|
self.firstdatatime = None
|
|
|
self.profIndex = 0
|
|
|
|
|
|
def setup(self, dataInObj=None, dataOutObj=None, nFFTPoints=None, pairsList=None):
|
|
|
|
|
|
if dataInObj == None:
|
|
|
raise ValueError, "This SpectraProcessor.setup() function needs dataInObj input variable"
|
|
|
|
|
|
if dataInObj.type == "Voltage":
|
|
|
if nFFTPoints == None:
|
|
|
raise ValueError, "This SpectraProcessor.setup() function needs nFFTPoints input variable"
|
|
|
|
|
|
|
|
|
|
|
|
if dataInObj.type == "Spectra":
|
|
|
if nFFTPoints != None:
|
|
|
raise ValueError, "The nFFTPoints cannot be selected to this object type"
|
|
|
|
|
|
nFFTPoints = dataInObj.nFFTPoints
|
|
|
|
|
|
if pairsList == None:
|
|
|
pairsList = dataInObj.pairsList
|
|
|
|
|
|
if pairsList == None:
|
|
|
nPairs = 0
|
|
|
else:
|
|
|
nPairs = len(pairsList)
|
|
|
|
|
|
self.dataInObj = dataInObj
|
|
|
|
|
|
if dataOutObj == None:
|
|
|
dataOutObj = Spectra()
|
|
|
|
|
|
self.dataOutObj = dataOutObj
|
|
|
self.dataOutObj.nFFTPoints = nFFTPoints
|
|
|
self.dataOutObj.pairsList = pairsList
|
|
|
self.dataOutObj.nPairs = nPairs
|
|
|
|
|
|
return self.dataOutObj
|
|
|
|
|
|
def init(self):
|
|
|
|
|
|
self.dataOutObj.flagNoData = True
|
|
|
|
|
|
if self.dataInObj.flagNoData:
|
|
|
return 0
|
|
|
|
|
|
self.integratorObjIndex = 0
|
|
|
self.writerObjIndex = 0
|
|
|
self.plotObjIndex = 0
|
|
|
|
|
|
|
|
|
if self.dataInObj.type == "Spectra":
|
|
|
|
|
|
self.dataOutObj.copy(self.dataInObj)
|
|
|
self.dataOutObj.flagNoData = False
|
|
|
return
|
|
|
|
|
|
if self.dataInObj.type == "Voltage":
|
|
|
|
|
|
if self.buffer == None:
|
|
|
self.buffer = numpy.zeros((self.dataInObj.nChannels,
|
|
|
self.dataOutObj.nFFTPoints,
|
|
|
self.dataInObj.nHeights),
|
|
|
dtype='complex')
|
|
|
|
|
|
self.buffer[:,self.profIndex,:] = self.dataInObj.data
|
|
|
self.profIndex += 1
|
|
|
|
|
|
if self.firstdatatime == None:
|
|
|
self.firstdatatime = self.dataInObj.utctime
|
|
|
|
|
|
if self.profIndex == self.dataOutObj.nFFTPoints:
|
|
|
|
|
|
self.__updateObjFromInput()
|
|
|
self.__getFft()
|
|
|
|
|
|
self.dataOutObj.flagNoData = False
|
|
|
|
|
|
self.buffer = None
|
|
|
self.firstdatatime = None
|
|
|
self.profIndex = 0
|
|
|
|
|
|
return
|
|
|
|
|
|
#Other kind of data
|
|
|
raise ValueError, "The type object %(s) is not valid " %(self.dataOutObj.type)
|
|
|
|
|
|
def __getFft(self):
|
|
|
"""
|
|
|
Convierte valores de Voltaje a Spectra
|
|
|
|
|
|
Affected:
|
|
|
self.dataOutObj.data_spc
|
|
|
self.dataOutObj.data_cspc
|
|
|
self.dataOutObj.data_dc
|
|
|
self.dataOutObj.heightList
|
|
|
self.dataOutObj.m_BasicHeader
|
|
|
self.dataOutObj.m_ProcessingHeader
|
|
|
self.dataOutObj.radarControllerHeaderObj
|
|
|
self.dataOutObj.systemHeaderObj
|
|
|
self.profIndex
|
|
|
self.buffer
|
|
|
self.dataOutObj.flagNoData
|
|
|
self.dataOutObj.dtype
|
|
|
self.dataOutObj.nPairs
|
|
|
self.dataOutObj.nChannels
|
|
|
self.dataOutObj.nProfiles
|
|
|
self.dataOutObj.systemHeaderObj.numChannels
|
|
|
self.dataOutObj.m_ProcessingHeader.totalSpectra
|
|
|
self.dataOutObj.m_ProcessingHeader.profilesPerBlock
|
|
|
self.dataOutObj.m_ProcessingHeader.numHeights
|
|
|
self.dataOutObj.m_ProcessingHeader.spectraComb
|
|
|
self.dataOutObj.m_ProcessingHeader.shif_fft
|
|
|
"""
|
|
|
|
|
|
fft_volt = numpy.fft.fft(self.buffer,axis=1)
|
|
|
dc = fft_volt[:,0,:]
|
|
|
|
|
|
#calculo de self-spectra
|
|
|
fft_volt = numpy.fft.fftshift(fft_volt,axes=(1,))
|
|
|
spc = fft_volt * numpy.conjugate(fft_volt)
|
|
|
spc = spc.real
|
|
|
|
|
|
blocksize = 0
|
|
|
blocksize += dc.size
|
|
|
blocksize += spc.size
|
|
|
|
|
|
cspc = None
|
|
|
pairIndex = 0
|
|
|
if self.dataOutObj.pairsList != None:
|
|
|
#calculo de cross-spectra
|
|
|
cspc = numpy.zeros((self.dataOutObj.nPairs, self.dataOutObj.nFFTPoints, self.dataOutObj.nHeights), dtype='complex')
|
|
|
for pair in self.dataOutObj.pairsList:
|
|
|
cspc[pairIndex,:,:] = numpy.abs(fft_volt[pair[0],:,:] * numpy.conjugate(fft_volt[pair[1],:,:]))
|
|
|
pairIndex += 1
|
|
|
blocksize += cspc.size
|
|
|
|
|
|
self.dataOutObj.data_spc = spc
|
|
|
self.dataOutObj.data_cspc = cspc
|
|
|
self.dataOutObj.data_dc = dc
|
|
|
self.dataOutObj.blockSize = blocksize
|
|
|
|
|
|
# self.getNoise()
|
|
|
|
|
|
def __updateObjFromInput(self):
|
|
|
|
|
|
self.dataOutObj.radarControllerHeaderObj = self.dataInObj.radarControllerHeaderObj.copy()
|
|
|
self.dataOutObj.systemHeaderObj = self.dataInObj.systemHeaderObj.copy()
|
|
|
self.dataOutObj.channelList = self.dataInObj.channelList
|
|
|
self.dataOutObj.heightList = self.dataInObj.heightList
|
|
|
self.dataOutObj.dtype = self.dataInObj.dtype
|
|
|
self.dataOutObj.nHeights = self.dataInObj.nHeights
|
|
|
self.dataOutObj.nChannels = self.dataInObj.nChannels
|
|
|
self.dataOutObj.nBaud = self.dataInObj.nBaud
|
|
|
self.dataOutObj.nCode = self.dataInObj.nCode
|
|
|
self.dataOutObj.code = self.dataInObj.code
|
|
|
self.dataOutObj.nProfiles = self.dataOutObj.nFFTPoints
|
|
|
self.dataOutObj.channelIndexList = self.dataInObj.channelIndexList
|
|
|
self.dataOutObj.flagTimeBlock = self.dataInObj.flagTimeBlock
|
|
|
self.dataOutObj.utctime = self.firstdatatime
|
|
|
self.dataOutObj.flagDecodeData = self.dataInObj.flagDecodeData #asumo q la data esta decodificada
|
|
|
self.dataOutObj.flagDeflipData = self.dataInObj.flagDeflipData #asumo q la data esta sin flip
|
|
|
self.dataOutObj.flagShiftFFT = self.dataInObj.flagShiftFFT
|
|
|
self.dataOutObj.nCohInt = self.dataInObj.nCohInt
|
|
|
self.dataOutObj.nIncohInt = 1
|
|
|
self.dataOutObj.ippSeconds = self.dataInObj.ippSeconds
|
|
|
self.dataOutObj.timeInterval = self.dataInObj.timeInterval*self.dataOutObj.nFFTPoints
|
|
|
|
|
|
def addWriter(self, wrpath, blocksPerFile):
|
|
|
|
|
|
objWriter = SpectraWriter(self.dataOutObj)
|
|
|
objWriter.setup(wrpath, blocksPerFile)
|
|
|
self.writerObjList.append(objWriter)
|
|
|
|
|
|
def addIntegrator(self,N,timeInterval):
|
|
|
|
|
|
objIncohInt = IncoherentIntegration(N,timeInterval)
|
|
|
self.integratorObjList.append(objIncohInt)
|
|
|
|
|
|
def addCrossSpc(self, idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile):
|
|
|
crossSpcObj = CrossSpcFigure(idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile)
|
|
|
self.plotObjList.append(crossSpcObj)
|
|
|
|
|
|
def plotCrossSpc(self, idfigure=None,
|
|
|
xmin=None,
|
|
|
xmax=None,
|
|
|
ymin=None,
|
|
|
ymax=None,
|
|
|
minvalue=None,
|
|
|
maxvalue=None,
|
|
|
wintitle='',
|
|
|
driver='plplot',
|
|
|
colormap='br_green',
|
|
|
colorbar=True,
|
|
|
showprofile=False,
|
|
|
save=False,
|
|
|
gpath=None,
|
|
|
pairsList = None):
|
|
|
|
|
|
if self.dataOutObj.flagNoData:
|
|
|
return 0
|
|
|
|
|
|
if pairsList == None:
|
|
|
pairsList = self.dataOutObj.pairsList
|
|
|
|
|
|
nframes = len(pairsList)
|
|
|
|
|
|
x = numpy.arange(self.dataOutObj.nFFTPoints)
|
|
|
|
|
|
y = self.dataOutObj.heightList
|
|
|
|
|
|
data_spc = self.dataOutObj.data_spc
|
|
|
data_cspc = self.dataOutObj.data_cspc
|
|
|
|
|
|
data = []
|
|
|
|
|
|
|
|
|
if len(self.plotObjList) <= self.plotObjIndex:
|
|
|
self.addSpc(idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def addRti(self, idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile):
|
|
|
rtiObj = RTIFigure(idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile)
|
|
|
self.plotObjList.append(rtiObj)
|
|
|
|
|
|
def plotRti(self, idfigure=None,
|
|
|
starttime=None,
|
|
|
endtime=None,
|
|
|
rangemin=None,
|
|
|
rangemax=None,
|
|
|
minvalue=None,
|
|
|
maxvalue=None,
|
|
|
wintitle='',
|
|
|
driver='plplot',
|
|
|
colormap='br_greeen',
|
|
|
colorbar=True,
|
|
|
showprofile=False,
|
|
|
xrangestep=None,
|
|
|
save=False,
|
|
|
gpath=None,
|
|
|
ratio=1,
|
|
|
channelList=None):
|
|
|
|
|
|
if self.dataOutObj.flagNoData:
|
|
|
return 0
|
|
|
|
|
|
if channelList == None:
|
|
|
channelList = self.dataOutObj.channelList
|
|
|
|
|
|
nframes = len(channelList)
|
|
|
|
|
|
if len(self.plotObjList) <= self.plotObjIndex:
|
|
|
self.addRti(idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile)
|
|
|
|
|
|
data = 10.*numpy.log10(self.dataOutObj.data_spc[channelList,:,:])
|
|
|
|
|
|
data = numpy.average(data, axis=1)
|
|
|
|
|
|
currenttime = self.dataOutObj.utctime - time.timezone
|
|
|
|
|
|
range = self.dataOutObj.heightList
|
|
|
|
|
|
|
|
|
figuretitle = "RTI Plot for Spectra Data" #+ date
|
|
|
|
|
|
cleardata = False
|
|
|
|
|
|
deltax = self.dataOutObj.timeInterval
|
|
|
|
|
|
plotObj = self.plotObjList[self.plotObjIndex]
|
|
|
|
|
|
plotObj.plotPcolor(data=data,
|
|
|
x=currenttime,
|
|
|
y=range,
|
|
|
channelList=channelList,
|
|
|
xmin=starttime,
|
|
|
xmax=endtime,
|
|
|
ymin=rangemin,
|
|
|
ymax=rangemax,
|
|
|
minvalue=minvalue,
|
|
|
maxvalue=maxvalue,
|
|
|
figuretitle=figuretitle,
|
|
|
xrangestep=xrangestep,
|
|
|
deltax=deltax,
|
|
|
save=save,
|
|
|
gpath=gpath,
|
|
|
ratio=ratio,
|
|
|
cleardata=cleardata
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
self.plotObjIndex += 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def addSpc(self, idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile):
|
|
|
|
|
|
spcObj = SpcFigure(idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile)
|
|
|
self.plotObjList.append(spcObj)
|
|
|
|
|
|
def plotSpc(self, idfigure=None,
|
|
|
xmin=None,
|
|
|
xmax=None,
|
|
|
ymin=None,
|
|
|
ymax=None,
|
|
|
minvalue=None,
|
|
|
maxvalue=None,
|
|
|
wintitle='',
|
|
|
driver='plplot',
|
|
|
colormap='br_green',
|
|
|
colorbar=True,
|
|
|
showprofile=False,
|
|
|
save=False,
|
|
|
gpath=None,
|
|
|
ratio=1,
|
|
|
channelList=None):
|
|
|
|
|
|
if self.dataOutObj.flagNoData:
|
|
|
return 0
|
|
|
|
|
|
if channelList == None:
|
|
|
channelList = self.dataOutObj.channelList
|
|
|
|
|
|
nframes = len(channelList)
|
|
|
|
|
|
if len(self.plotObjList) <= self.plotObjIndex:
|
|
|
self.addSpc(idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile)
|
|
|
|
|
|
x = numpy.arange(self.dataOutObj.nFFTPoints)
|
|
|
|
|
|
y = self.dataOutObj.heightList
|
|
|
|
|
|
data = 10.*numpy.log10(self.dataOutObj.data_spc[channelList,:,:])
|
|
|
# noisedB = 10.*numpy.log10(noise)
|
|
|
noisedB = numpy.arange(len(channelList)+1)
|
|
|
noisedB = noisedB *1.2
|
|
|
titleList = []
|
|
|
for i in range(len(noisedB)):
|
|
|
title = "%.2f"%noisedB[i]
|
|
|
titleList.append(title)
|
|
|
|
|
|
thisdatetime = datetime.datetime.fromtimestamp(self.dataOutObj.utctime)
|
|
|
dateTime = "%s"%(thisdatetime.strftime("%d-%b-%Y %H:%M:%S"))
|
|
|
figuretitle = "Spc Radar Data: %s"%dateTime
|
|
|
|
|
|
cleardata = True
|
|
|
|
|
|
plotObj = self.plotObjList[self.plotObjIndex]
|
|
|
|
|
|
plotObj.plotPcolor(data=data,
|
|
|
x=x,
|
|
|
y=y,
|
|
|
channelList=channelList,
|
|
|
xmin=xmin,
|
|
|
xmax=xmax,
|
|
|
ymin=ymin,
|
|
|
ymax=ymax,
|
|
|
minvalue=minvalue,
|
|
|
maxvalue=maxvalue,
|
|
|
figuretitle=figuretitle,
|
|
|
xrangestep=None,
|
|
|
deltax=None,
|
|
|
save=save,
|
|
|
gpath=gpath,
|
|
|
cleardata=cleardata
|
|
|
)
|
|
|
|
|
|
self.plotObjIndex += 1
|
|
|
|
|
|
|
|
|
def writeData(self, wrpath, blocksPerFile):
|
|
|
|
|
|
if self.dataOutObj.flagNoData:
|
|
|
return 0
|
|
|
|
|
|
if len(self.writerObjList) <= self.writerObjIndex:
|
|
|
self.addWriter(wrpath, blocksPerFile)
|
|
|
|
|
|
self.writerObjList[self.writerObjIndex].putData()
|
|
|
|
|
|
self.writerObjIndex += 1
|
|
|
|
|
|
def integrator(self, N=None, timeInterval=None):
|
|
|
|
|
|
if self.dataOutObj.flagNoData:
|
|
|
return 0
|
|
|
|
|
|
if len(self.integratorObjList) <= self.integratorObjIndex:
|
|
|
self.addIntegrator(N,timeInterval)
|
|
|
|
|
|
myIncohIntObj = self.integratorObjList[self.integratorObjIndex]
|
|
|
myIncohIntObj.exe(data=self.dataOutObj.data_spc,datatime=self.dataOutObj.utctime)
|
|
|
|
|
|
if myIncohIntObj.isReady:
|
|
|
self.dataOutObj.data_spc = myIncohIntObj.data
|
|
|
self.dataOutObj.timeInterval *= myCohIntObj.nIncohInt
|
|
|
self.dataOutObj.nIncohInt = myIncohIntObj.navg * self.dataInObj.nIncohInt
|
|
|
self.dataOutObj.utctime = myIncohIntObj.firstdatatime
|
|
|
self.dataOutObj.flagNoData = False
|
|
|
|
|
|
"""Calcular el ruido"""
|
|
|
self.getNoise()
|
|
|
else:
|
|
|
self.dataOutObj.flagNoData = True
|
|
|
|
|
|
self.integratorObjIndex += 1
|
|
|
|
|
|
|
|
|
class SpectraHeisProcessor:
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
|
self.integratorObjIndex = None
|
|
|
self.writerObjIndex = None
|
|
|
self.plotObjIndex = None
|
|
|
self.integratorObjList = []
|
|
|
self.writerObjList = []
|
|
|
self.plotObjList = []
|
|
|
#self.noiseObj = Noise()
|
|
|
|
|
|
def setup(self, dataInObj, dataOutObj=None, nFFTPoints=None, pairList=None):
|
|
|
|
|
|
if nFFTPoints == None:
|
|
|
nFFTPoints = self.dataInObj.nHeights
|
|
|
|
|
|
self.dataInObj = dataInObj
|
|
|
|
|
|
if dataOutObj == None:
|
|
|
dataOutObj = SpectraHeis()
|
|
|
|
|
|
self.dataOutObj = dataOutObj
|
|
|
|
|
|
return self.dataOutObj
|
|
|
|
|
|
def init(self):
|
|
|
|
|
|
self.dataOutObj.flagNoData = True
|
|
|
|
|
|
if self.dataInObj.flagNoData:
|
|
|
return 0
|
|
|
|
|
|
self.integratorObjIndex = 0
|
|
|
self.writerObjIndex = 0
|
|
|
self.plotObjIndex = 0
|
|
|
|
|
|
if self.dataInObj.type == "Voltage":
|
|
|
self.__updateObjFromInput()
|
|
|
self.__getFft()
|
|
|
self.dataOutObj.flagNoData = False
|
|
|
return
|
|
|
|
|
|
#Other kind of data
|
|
|
if self.dataInObj.type == "SpectraHeis":
|
|
|
self.dataOutObj.copy(self.dataInObj)
|
|
|
self.dataOutObj.flagNoData = False
|
|
|
return
|
|
|
|
|
|
raise ValueError, "The type is not valid"
|
|
|
|
|
|
def __updateObjFromInput(self):
|
|
|
|
|
|
self.dataOutObj.radarControllerHeaderObj = self.dataInObj.radarControllerHeaderObj.copy()
|
|
|
self.dataOutObj.systemHeaderObj = self.dataInObj.systemHeaderObj.copy()
|
|
|
self.dataOutObj.channelList = self.dataInObj.channelList
|
|
|
self.dataOutObj.heightList = self.dataInObj.heightList
|
|
|
self.dataOutObj.dtype = self.dataInObj.dtype
|
|
|
self.dataOutObj.nHeights = self.dataInObj.nHeights
|
|
|
self.dataOutObj.nChannels = self.dataInObj.nChannels
|
|
|
self.dataOutObj.nBaud = self.dataInObj.nBaud
|
|
|
self.dataOutObj.nCode = self.dataInObj.nCode
|
|
|
self.dataOutObj.code = self.dataInObj.code
|
|
|
self.dataOutObj.nProfiles = 1
|
|
|
self.dataOutObj.nFFTPoints = self.dataInObj.nHeights
|
|
|
self.dataOutObj.channelIndexList = self.dataInObj.channelIndexList
|
|
|
self.dataOutObj.flagNoData = self.dataInObj.flagNoData
|
|
|
self.dataOutObj.flagTimeBlock = self.dataInObj.flagTimeBlock
|
|
|
self.dataOutObj.utctime = self.dataInObj.utctime
|
|
|
self.dataOutObj.flagDecodeData = self.dataInObj.flagDecodeData #asumo q la data esta decodificada
|
|
|
self.dataOutObj.flagDeflipData = self.dataInObj.flagDeflipData #asumo q la data esta sin flip
|
|
|
self.dataOutObj.flagShiftFFT = self.dataInObj.flagShiftFFT
|
|
|
self.dataOutObj.nIncohInt = 1
|
|
|
self.dataOutObj.ippSeconds= self.dataInObj.ippSeconds
|
|
|
|
|
|
# def addWriter(self,wrpath,blocksPerfile):
|
|
|
def addWriter(self,wrpath):
|
|
|
objWriter=SpectraHeisWriter(self.dataOutObj)
|
|
|
objWriter.setup(wrpath)
|
|
|
#objWriter.setup(wrpath,blocksPerfile)
|
|
|
self.writerObjList.append(objWriter)
|
|
|
|
|
|
# def writedata(self,wrpath,blocksPerfile):
|
|
|
def writedata(self,wrpath):
|
|
|
if self.dataOutObj.flagNoData:
|
|
|
return 0
|
|
|
|
|
|
if len(self.writerObjList) <= self.writerObjIndex:
|
|
|
#self.addWriter(wrpath, blocksPerFile)
|
|
|
self.addWriter(wrpath)
|
|
|
|
|
|
self.writerObjList[self.writerObjIndex].putData()
|
|
|
|
|
|
self.writerObjIndex += 1
|
|
|
|
|
|
def __getFft(self):
|
|
|
|
|
|
fft_volt = numpy.fft.fft(self.dataInObj.data, axis=1)
|
|
|
#print fft_volt
|
|
|
#calculo de self-spectra
|
|
|
fft_volt = numpy.fft.fftshift(fft_volt,axes=(1,))
|
|
|
|
|
|
spc = numpy.abs(fft_volt * numpy.conjugate(fft_volt))
|
|
|
self.dataOutObj.data_spc = spc
|
|
|
|
|
|
def getSpectra(self):
|
|
|
|
|
|
return self.dataOutObj.data_spc
|
|
|
|
|
|
def getFrecuencies(self):
|
|
|
|
|
|
print self.nFFTPoints
|
|
|
return numpy.arange(int(self.nFFTPoints))
|
|
|
|
|
|
def addIntegrator(self,N,timeInterval):
|
|
|
|
|
|
objIncohInt = IncoherentIntegration(N,timeInterval)
|
|
|
self.integratorObjList.append(objIncohInt)
|
|
|
|
|
|
def integrator(self, N=None, timeInterval=None):
|
|
|
|
|
|
if self.dataOutObj.flagNoData:
|
|
|
return 0
|
|
|
|
|
|
if len(self.integratorObjList) <= self.integratorObjIndex:
|
|
|
self.addIntegrator(N,timeInterval)
|
|
|
|
|
|
myIncohIntObj = self.integratorObjList[self.integratorObjIndex]
|
|
|
myIncohIntObj.exe(data=self.dataOutObj.data_spc,timeOfData=self.dataOutObj.utctime)
|
|
|
|
|
|
if myIncohIntObj.isReady:
|
|
|
self.dataOutObj.data_spc = myIncohIntObj.data
|
|
|
self.dataOutObj.nIncohInt = self.dataOutObj.nIncohInt*myIncohIntObj.navg
|
|
|
self.dataOutObj.flagNoData = False
|
|
|
|
|
|
#self.getNoise(type="hildebrand",parm=myIncohIntObj.navg)
|
|
|
# self.getNoise(type="sort", parm=16)
|
|
|
|
|
|
else:
|
|
|
self.dataOutObj.flagNoData = True
|
|
|
|
|
|
self.integratorObjIndex += 1
|
|
|
|
|
|
|
|
|
def addScope(self, idfigure, nframes, wintitle, driver):
|
|
|
|
|
|
if idfigure==None:
|
|
|
idfigure = self.plotObjIndex
|
|
|
|
|
|
scopeObj = ScopeFigure(idfigure, nframes, wintitle, driver)
|
|
|
self.plotObjList.append(scopeObj)
|
|
|
|
|
|
def plotScope(self,
|
|
|
idfigure=None,
|
|
|
minvalue=None,
|
|
|
maxvalue=None,
|
|
|
xmin=None,
|
|
|
xmax=None,
|
|
|
wintitle='',
|
|
|
driver='plplot',
|
|
|
save=False,
|
|
|
gpath=None,
|
|
|
titleList=None,
|
|
|
xlabelList=None,
|
|
|
ylabelList=None):
|
|
|
|
|
|
if self.dataOutObj.flagNoData:
|
|
|
return 0
|
|
|
|
|
|
nframes = len(self.dataOutObj.channelList)
|
|
|
|
|
|
if len(self.plotObjList) <= self.plotObjIndex:
|
|
|
self.addScope(idfigure, nframes, wintitle, driver)
|
|
|
|
|
|
|
|
|
data1D = self.dataOutObj.data_spc
|
|
|
|
|
|
x = numpy.arange(self.dataOutObj.nHeights)
|
|
|
|
|
|
thisDatetime = datetime.datetime.fromtimestamp(self.dataOutObj.utctime)
|
|
|
|
|
|
dateTime = "%s"%(thisDatetime.strftime("%d-%b-%Y %H:%M:%S"))
|
|
|
date = "%s"%(thisDatetime.strftime("%d-%b-%Y"))
|
|
|
|
|
|
figureTitle = "Scope Plot Radar Data: " + date
|
|
|
|
|
|
plotObj = self.plotObjList[self.plotObjIndex]
|
|
|
|
|
|
plotObj.plot1DArray(data1D,
|
|
|
x,
|
|
|
self.dataOutObj.channelList,
|
|
|
xmin,
|
|
|
xmax,
|
|
|
minvalue,
|
|
|
maxvalue,
|
|
|
figureTitle,
|
|
|
save,
|
|
|
gpath)
|
|
|
|
|
|
self.plotObjIndex += 1
|
|
|
|
|
|
def rti(self):
|
|
|
if self.dataOutObj.flagNoData:
|
|
|
return 0
|
|
|
|
|
|
data=numpy.average(self.dataOutObj.data_spc,axis=1)
|
|
|
data[0]
|
|
|
print data[0]
|
|
|
x = numpy.arange(100000)
|
|
|
|
|
|
print "test"
|
|
|
#print self.dataOutObj.data_spc.average(axis=1)
|
|
|
|
|
|
class IncoherentIntegration:
|
|
|
|
|
|
integ_counter = None
|
|
|
data = None
|
|
|
navg = None
|
|
|
buffer = None
|
|
|
nIncohInt = None
|
|
|
firstdatatime = None
|
|
|
|
|
|
def __init__(self, N = None, timeInterval = None):
|
|
|
"""
|
|
|
N
|
|
|
timeInterval - interval time [min], integer value
|
|
|
"""
|
|
|
|
|
|
self.data = None
|
|
|
self.navg = None
|
|
|
self.buffer = None
|
|
|
self.timeOut = None
|
|
|
self.exitCondition = False
|
|
|
self.isReady = False
|
|
|
self.nIncohInt = N
|
|
|
self.integ_counter = 0
|
|
|
self.firstdatatime = None
|
|
|
|
|
|
if timeInterval!=None:
|
|
|
self.timeIntervalInSeconds = timeInterval * 60. #if (type(timeInterval)!=integer) -> change this line
|
|
|
|
|
|
if ((timeInterval==None) and (N==None)):
|
|
|
print 'N = None ; timeInterval = None'
|
|
|
sys.exit(0)
|
|
|
elif timeInterval == None:
|
|
|
self.timeFlag = False
|
|
|
else:
|
|
|
self.timeFlag = True
|
|
|
|
|
|
|
|
|
def exe(self,data,datatime):
|
|
|
"""
|
|
|
data
|
|
|
|
|
|
datatime [seconds]
|
|
|
"""
|
|
|
if self.firstdatatime == None or self.isReady:
|
|
|
self.firstdatatime = datatime
|
|
|
|
|
|
if self.timeFlag:
|
|
|
if self.timeOut == None:
|
|
|
self.timeOut = datatime + self.timeIntervalInSeconds
|
|
|
|
|
|
if datatime < self.timeOut:
|
|
|
if self.buffer == None:
|
|
|
self.buffer = data
|
|
|
else:
|
|
|
self.buffer = self.buffer + data
|
|
|
self.integ_counter += 1
|
|
|
else:
|
|
|
self.exitCondition = True
|
|
|
|
|
|
else:
|
|
|
if self.integ_counter < self.nIncohInt:
|
|
|
if self.buffer == None:
|
|
|
self.buffer = data
|
|
|
else:
|
|
|
self.buffer = self.buffer + data
|
|
|
|
|
|
self.integ_counter += 1
|
|
|
|
|
|
if self.integ_counter == self.nIncohInt:
|
|
|
self.exitCondition = True
|
|
|
|
|
|
if self.exitCondition:
|
|
|
self.data = self.buffer
|
|
|
self.navg = self.integ_counter
|
|
|
self.isReady = True
|
|
|
self.buffer = None
|
|
|
self.timeOut = None
|
|
|
self.integ_counter = 0
|
|
|
self.exitCondition = False
|
|
|
|
|
|
if self.timeFlag:
|
|
|
self.buffer = data
|
|
|
self.timeOut = datatime + self.timeIntervalInSeconds
|
|
|
else:
|
|
|
self.isReady = False
|
|
|
|