@@ -7,6 +7,7 Created on Jul 3, 2014 | |||
|
7 | 7 | import os |
|
8 | 8 | import datetime |
|
9 | 9 | import numpy |
|
10 | import timeit | |
|
10 | 11 | from profilehooks import coverage, profile |
|
11 | 12 | from fractions import Fraction |
|
12 | 13 | |
@@ -19,6 +20,7 from schainpy.model.data.jroheaderIO import RadarControllerHeader, SystemHeader | |||
|
19 | 20 | from schainpy.model.data.jrodata import Voltage |
|
20 | 21 | from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation |
|
21 | 22 | from time import time |
|
23 | ||
|
22 | 24 | import cPickle |
|
23 | 25 | try: |
|
24 | 26 | import digital_rf |
@@ -79,7 +81,7 class DigitalRFReader(ProcessingUnit): | |||
|
79 | 81 | |
|
80 | 82 | self.dataOut.heightList = self.__firstHeigth + numpy.arange(self.__nSamples, dtype = numpy.float)*self.__deltaHeigth |
|
81 | 83 | |
|
82 |
self.dataOut.channelList = self.__channel |
|
|
84 | self.dataOut.channelList = range(self.__num_subchannels) | |
|
83 | 85 | |
|
84 | 86 | self.dataOut.blocksize = self.dataOut.getNChannels() * self.dataOut.getNHeights() |
|
85 | 87 | |
@@ -223,12 +225,19 class DigitalRFReader(ProcessingUnit): | |||
|
223 | 225 | |
|
224 | 226 | top_properties = self.digitalReadObj.get_properties(channelNameList[channelList[0]]) |
|
225 | 227 | |
|
228 | ||
|
229 | ||
|
230 | ||
|
231 | ||
|
232 | ||
|
233 | self.__num_subchannels = top_properties['num_subchannels'] | |
|
226 | 234 | self.__sample_rate = 1.0 * top_properties['sample_rate_numerator'] / top_properties['sample_rate_denominator'] |
|
227 | 235 | |
|
228 | 236 | # self.__samples_per_file = top_properties['samples_per_file'][0] |
|
229 | 237 | self.__deltaHeigth = 1e6*0.15/self.__sample_rate ## why 0.15? |
|
230 | 238 | |
|
231 | 239 | this_metadata_file = self.digitalReadObj.get_digital_metadata(channelNameList[channelList[0]]) |
|
240 | print this_metadata_file | |
|
232 | 241 | metadata_bounds = this_metadata_file.get_bounds() |
|
233 | 242 | self.fixed_metadata_dict = this_metadata_file.read(metadata_bounds[0])[metadata_bounds[0]] ## GET FIRST HEADER |
|
234 | 243 | self.__processingHeader = self.fixed_metadata_dict['processingHeader'] |
@@ -345,7 +354,7 class DigitalRFReader(ProcessingUnit): | |||
|
345 | 354 | |
|
346 | 355 | self.__thisUnixSample = long(startUTCSecond*self.__sample_rate) - self.__samples_to_read ## por que en el otro metodo lo primero q se hace es sumar samplestoread |
|
347 | 356 | |
|
348 |
self.__data_buffer = numpy.zeros((self.__n |
|
|
357 | self.__data_buffer = numpy.zeros((self.__num_subchannels, self.__samples_to_read), dtype = numpy.complex) | |
|
349 | 358 | |
|
350 | 359 | self.__setFileHeader() |
|
351 | 360 | self.isConfig = True |
@@ -413,28 +422,29 class DigitalRFReader(ProcessingUnit): | |||
|
413 | 422 | |
|
414 | 423 | dataOk = False |
|
415 | 424 | for thisChannelName in self.__channelNameList: ##TODO VARIOS CHANNELS? |
|
416 | try: | |
|
417 | result = self.digitalReadObj.read_vector_c81d(self.__thisUnixSample, | |
|
418 | self.__samples_to_read, | |
|
419 |
|
|
|
420 | except IOError, e: | |
|
421 |
|
|
|
422 | self.__flagDiscontinuousBlock = True | |
|
423 | print "[Reading] %s" %datetime.datetime.utcfromtimestamp(self.thisSecond - self.__timezone), e | |
|
424 | break | |
|
425 | for indexSubchannel in range(self.__num_subchannels): | |
|
426 | try: | |
|
427 | result = self.digitalReadObj.read_vector_c81d(self.__thisUnixSample, | |
|
428 | self.__samples_to_read, | |
|
429 | thisChannelName, sub_channel=indexSubchannel) | |
|
430 | except IOError, e: | |
|
431 | #read next profile | |
|
432 | self.__flagDiscontinuousBlock = True | |
|
433 | print "[Reading] %s" %datetime.datetime.utcfromtimestamp(self.thisSecond - self.__timezone), e | |
|
434 | break | |
|
425 | 435 | |
|
426 | if result.shape[0] != self.__samples_to_read: | |
|
427 | self.__flagDiscontinuousBlock = True | |
|
428 | print "[Reading] %s: Too few samples were found, just %d/%d samples" %(datetime.datetime.utcfromtimestamp(self.thisSecond - self.__timezone), | |
|
429 | result.shape[0], | |
|
430 | self.__samples_to_read) | |
|
431 | break | |
|
436 | if result.shape[0] != self.__samples_to_read: | |
|
437 | self.__flagDiscontinuousBlock = True | |
|
438 | print "[Reading] %s: Too few samples were found, just %d/%d samples" %(datetime.datetime.utcfromtimestamp(self.thisSecond - self.__timezone), | |
|
439 | result.shape[0], | |
|
440 | self.__samples_to_read) | |
|
441 | break | |
|
432 | 442 | |
|
433 |
self.__data_buffer[index |
|
|
443 | self.__data_buffer[indexSubchannel,:] = result*volt_scale | |
|
434 | 444 | |
|
435 | indexChannel += 1 | |
|
445 | indexChannel += 1 | |
|
436 | 446 | |
|
437 | dataOk = True | |
|
447 | dataOk = True | |
|
438 | 448 | |
|
439 | 449 | self.__utctime = self.__thisUnixSample/self.__sample_rate |
|
440 | 450 | |
@@ -601,12 +611,12 class DigitalRFWriter(Operation): | |||
|
601 | 611 | compression_level = 1 |
|
602 | 612 | checksum = False |
|
603 | 613 | is_complex = True |
|
604 |
num_subchannels = |
|
|
614 | num_subchannels = len(dataOut.channelList) | |
|
605 | 615 | is_continuous = True |
|
606 | 616 | marching_periods = False |
|
607 | 617 | |
|
608 | 618 | self.digitalWriteObj = digital_rf.DigitalRFWriter(path, self.__dtype, 100, |
|
609 |
100 |
|
|
619 | 100, start_global_index, | |
|
610 | 620 | sample_rate_numerator, sample_rate_denominator, uuid, compression_level, checksum, |
|
611 | 621 | is_complex, num_subchannels, is_continuous, marching_periods) |
|
612 | 622 | |
@@ -620,6 +630,8 class DigitalRFWriter(Operation): | |||
|
620 | 630 | |
|
621 | 631 | self.isConfig = True |
|
622 | 632 | self.currentSample = 0 |
|
633 | self.oldAverage = 0 | |
|
634 | self.count = 0 | |
|
623 | 635 | return |
|
624 | 636 | |
|
625 | 637 | def writeMetadata(self): |
@@ -638,7 +650,14 class DigitalRFWriter(Operation): | |||
|
638 | 650 | for channel in self.dataOut.channelList: |
|
639 | 651 | self.arr_data[i][channel]['r'] = self.dataOut.data[channel][i].real |
|
640 | 652 | self.arr_data[i][channel]['i'] = self.dataOut.data[channel][i].imag |
|
653 | t0 = time() | |
|
641 | 654 | self.digitalWriteObj.rf_write(self.arr_data) |
|
655 | self.executionTime = time() - t0 | |
|
656 | if self.oldAverage is None: self.oldAverage = self.executionTime | |
|
657 | self.oldAverage = (self.executionTime + self.count*self.oldAverage) / (self.count + 1.0) | |
|
658 | self.count = self.count + 1.0 | |
|
659 | if self.oldAverage is None: self.oldAverage = self.executionTime | |
|
660 | ||
|
642 | 661 | return |
|
643 | 662 | |
|
644 | 663 | def run(self, dataOut, frequency=49.92e6, path=None, **kwargs): |
@@ -661,6 +680,7 class DigitalRFWriter(Operation): | |||
|
661 | 680 | |
|
662 | 681 | def close(self): |
|
663 | 682 | print '[Writing] - Closing files ' |
|
683 | print 'Average of writing to digital rf format is ', self.oldAverage * 1000 | |
|
664 | 684 | try: |
|
665 | 685 | self.digitalWriteObj.close() |
|
666 | 686 | except: |
@@ -1,1 +1,1 | |||
|
1 | <Project description="Segundo Test" id="191" name="test01"><ReadUnit datatype="VoltageReader" id="1911" inputId="0" name="VoltageReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="VoltageReader" /><Parameter format="str" id="191112" name="path" value="/home/jchavez/jicamarca/jro_data/rawdata" /><Parameter format="date" id="191113" name="startDate" value="2010/10/28" /><Parameter format="date" id="191114" name="endDate" value="2017/10/28" /><Parameter format="time" id="191115" name="startTime" value="00:00:00" /><Parameter format="time" id="191116" name="endTime" value="23:59:59" /><Parameter format="int" id="191118" name="online" value="0" /><Parameter format="int" id="191119" name="walk" value="0" /></Operation><Operation id="19112" name="printNumberOfBlock" priority="2" type="self" /></ReadUnit><ProcUnit datatype="VoltageProc" id="1912" inputId="1911" name="VoltageProc"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="DigitalRFWriter" priority="2" type="other"><Parameter format="str" id="191221" name="path" value="/media/jchavez/DATA/mocked_data/voltage" /></Operation></ProcUnit></Project> No newline at end of file | |
|
1 | <Project description="Testing USRP data reader" id="191" name="test01"><ReadUnit datatype="DigitalRF" id="1911" inputId="0" name="DigitalRFReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="DigitalRF" /><Parameter format="str" id="191112" name="path" value="/home/jchavez/jicamarca/mocked_data" /><Parameter format="date" id="191113" name="startDate" value="2000/07/03" /><Parameter format="date" id="191114" name="endDate" value="2017/07/03" /><Parameter format="time" id="191115" name="startTime" value="00:00:00" /><Parameter format="time" id="191116" name="endTime" value="23:59:59" /><Parameter format="int" id="191118" name="online" value="0" /></Operation></ReadUnit><ProcUnit datatype="Voltage" id="1912" inputId="1911" name="VoltageProc"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="Scope" priority="2" type="external"><Parameter format="int" id="191221" name="id" value="121" /><Parameter format="str" id="191222" name="wintitle" value="Scope" /></Operation></ProcUnit></Project> No newline at end of file |
General Comments 0
You need to be logged in to leave comments.
Login now