diff options
Diffstat (limited to 'gr-qtgui/apps/gr_time_plot_c')
-rwxr-xr-x | gr-qtgui/apps/gr_time_plot_c | 141 |
1 files changed, 25 insertions, 116 deletions
diff --git a/gr-qtgui/apps/gr_time_plot_c b/gr-qtgui/apps/gr_time_plot_c index 2f27623e5..4450a2074 100755 --- a/gr-qtgui/apps/gr_time_plot_c +++ b/gr-qtgui/apps/gr_time_plot_c @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2012 Free Software Foundation, Inc. +# Copyright 2012,2013 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,9 +21,12 @@ # from gnuradio import gr -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import os, sys +import scipy + +try: + import gnuradio.qtgui.plot_time_base as plot_base +except ImportError: + import plot_time_base as plot_base try: from gnuradio import qtgui @@ -33,127 +36,33 @@ except ImportError: print "Error: Program requires PyQt4 and gr-qtgui." sys.exit(1) -try: - import scipy -except ImportError: - print "Error: Scipy required (www.scipy.org)." - sys.exit(1) - -try: - from gnuradio.qtgui.plot_form import * -except ImportError: - from plot_form import * - -def read_samples(filename, start, in_size): - # Read in_size number of samples from file - fhandle = open(filename, 'r') - fhandle.seek(start*gr.sizeof_gr_complex, 0) - data = scipy.fromfile(fhandle, dtype=scipy.complex64, count=in_size) - data = data.tolist() - fhandle.close() - - if(len(data) < in_size): - print "Warning: read in {0} samples but asked for {1} samples.".format( - len(data), in_size) - - return data - -class my_top_block(gr.top_block): - def __init__(self, filelist, samp_rate, start, nsamples, max_nsamples): - gr.top_block.__init__(self) - - self._filelist = filelist - self._samp_rate = samp_rate - self._start = start - self._max_nsamps = max_nsamples - self._nsigs = len(self._filelist) - - if(nsamples is None): - self._nsamps = max_nsamples - else: - self._nsamps = nsamples - - self.qapp = QtGui.QApplication(sys.argv) - - self.skip = gr.skiphead(gr.sizeof_gr_complex, self._start) +class plot_time_c(plot_base.plot_base): + def __init__(self, filelist, samp_rate, + start, nsamples, max_nsamples, + auto_scale): + plot_base.plot_base.__init__(self, filelist, samp_rate, + start, nsamples, max_nsamples, + auto_scale) + self.read_samples = plot_base.read_samples_c + self.dsize = gr.sizeof_gr_complex + self.src_type = gr.vector_source_c self.gui_snk = qtgui.time_sink_c(self._nsamps, self._samp_rate, "GNU Radio Time Plot", self._nsigs) - n = 0 - self.srcs = list() - for f in filelist: - data = read_samples(f, self._start, self._nsamps) - self.srcs.append(gr.vector_source_c(data)) - - # Set default labels based on file names - fname = f.split("/")[-1] - self.gui_snk.set_line_label(n, "Re{{{0}}}".format(fname)) - self.gui_snk.set_line_label(n+1, "Im{{{0}}}".format(fname)) - n += 2 - - self.connect(self.srcs[0], self.skip) - self.connect(self.skip, (self.gui_snk, 0)) - - for i,s in enumerate(self.srcs[1:]): - self.connect(s, (self.gui_snk, i+1)) - - self.gui_snk.set_update_time(0); - - # Get Python Qt references - pyQt = self.gui_snk.pyqwidget() - self.pyWin = sip.wrapinstance(pyQt, QtGui.QWidget) - - def get_gui(self): - return self.pyWin - - def reset(self, newstart, newnsamps): - self.stop() - self.wait() - - self._start = newstart - - for s,f in zip(self.srcs, self._filelist): - data = read_samples(f, self._start, newnsamps) - s.set_data(data) - if(len(data) < newnsamps): - newnsamps = len(data) - - self._nsamps = newnsamps - self.gui_snk.set_nsamps(self._nsamps) - - self.start() + self._nsigs *= 2 # complex plots have real/imag + self.setup() def main(): description = "Plots a list of files on a scope plot. Files are a binary list of complex floats." - parser = OptionParser(option_class=eng_option, description=description, - conflict_handler="resolve") - parser.add_option("-N", "--nsamples", type="int", default=None, - help="Set the number of samples to display [default=prints entire file]") - parser.add_option("-S", "--start", type="int", default=0, - help="Starting sample number [default=%default]") - parser.add_option("-r", "--sample-rate", type="eng_float", default=1.0, - help="Set the sample rate of the signal [default=%default]") - (options, args) = parser.parse_args() - - if(len(args) < 1): - parser.print_help() - sys.exit(0) + (options, args) = plot_base.setup_options(description) filelist = list(args) + max_nsamples = plot_base.find_max_nsamples(filelist) - nsamples = options.nsamples - - # Find the smallest number of samples in all files and use that as - # a maximum value possible. - filesizes = [] - for f in filelist: - if(os.path.exists(f)): - filesizes.append(os.path.getsize(f) / gr.sizeof_gr_complex) - max_nsamples = min(filesizes) - - tb = my_top_block(filelist, options.sample_rate, - options.start, nsamples, max_nsamples); + tb = plot_time_c(filelist, options.sample_rate, + options.start, options.nsamples, max_nsamples, + not options.no_auto_scale) - main_box = dialog_box(tb, 'GNU Radio Time Plot') + main_box = plot_base.plot_time_form(tb, 'GNU Radio Time Plot') main_box.show() tb.run() |