From 6c7ee8932b84fa5dca0c88d7d80f2efe0aa30a06 Mon Sep 17 00:00:00 2001 From: jcorgan Date: Fri, 1 Feb 2008 16:48:00 +0000 Subject: Moved gnuradio-core/src/utils/ plotting scripts into gr-utils, with some rework. The gr_plot_data.py class installs into the gnuradio namespace as gnuradio.plot_data, and the remainder of the scripts install into $prefix/bin. git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@7536 221aa14e-8319-0410-a670-987f0aec2ac5 --- gr-utils/src/python/plot_data.py | 168 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 gr-utils/src/python/plot_data.py (limited to 'gr-utils/src/python/plot_data.py') diff --git a/gr-utils/src/python/plot_data.py b/gr-utils/src/python/plot_data.py new file mode 100644 index 000000000..7c79e1714 --- /dev/null +++ b/gr-utils/src/python/plot_data.py @@ -0,0 +1,168 @@ +# +# Copyright 2007,2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +try: + import scipy +except ImportError: + print "Please install SciPy to run this script (http://www.scipy.org/)" + raise SystemExit, 1 + +try: + from pylab import * +except ImportError: + print "Please install Matplotlib to run this script (http://matplotlib.sourceforge.net/)" + raise SystemExit, 1 + +from optparse import OptionParser + +matplotlib.interactive(True) +matplotlib.use('TkAgg') + +class plot_data: + def __init__(self, datatype, filenames, options): + self.hfile = list() + self.legend_text = list() + for f in filenames: + self.hfile.append(open(f, "r")) + self.legend_text.append(f) + + self.block_length = options.block + self.start = options.start + self.sample_rate = options.sample_rate + + self.datatype = datatype + self.sizeof_data = datatype().nbytes # number of bytes per sample in file + + self.axis_font_size = 16 + self.label_font_size = 18 + self.title_font_size = 20 + self.text_size = 22 + + # Setup PLOT + self.fig = figure(1, figsize=(16, 9), facecolor='w') + rcParams['xtick.labelsize'] = self.axis_font_size + rcParams['ytick.labelsize'] = self.axis_font_size + + self.text_file_pos = figtext(0.10, 0.88, "File Position: ", weight="heavy", size=self.text_size) + self.text_block = figtext(0.40, 0.88, ("Block Size: %d" % self.block_length), + weight="heavy", size=self.text_size) + self.text_sr = figtext(0.60, 0.88, ("Sample Rate: %.2f" % self.sample_rate), + weight="heavy", size=self.text_size) + self.make_plots() + + self.button_left_axes = self.fig.add_axes([0.45, 0.01, 0.05, 0.05], frameon=True) + self.button_left = Button(self.button_left_axes, "<") + self.button_left_callback = self.button_left.on_clicked(self.button_left_click) + + self.button_right_axes = self.fig.add_axes([0.50, 0.01, 0.05, 0.05], frameon=True) + self.button_right = Button(self.button_right_axes, ">") + self.button_right_callback = self.button_right.on_clicked(self.button_right_click) + + self.xlim = self.sp_f.get_xlim() + + self.manager = get_current_fig_manager() + connect('key_press_event', self.click) + show() + + def get_data(self, hfile): + self.text_file_pos.set_text("File Position: %d" % (hfile.tell()//self.sizeof_data)) + f = scipy.fromfile(hfile, dtype=self.datatype, count=self.block_length) + #print "Read in %d items" % len(self.f) + if(len(f) == 0): + print "End of File" + else: + self.f = f + self.time = [i*(1/self.sample_rate) for i in range(len(self.f))] + + def make_plots(self): + self.sp_f = self.fig.add_subplot(2,1,1, position=[0.075, 0.2, 0.875, 0.6]) + self.sp_f.set_title(("Amplitude"), fontsize=self.title_font_size, fontweight="bold") + self.sp_f.set_xlabel("Time (s)", fontsize=self.label_font_size, fontweight="bold") + self.sp_f.set_ylabel("Amplitude (V)", fontsize=self.label_font_size, fontweight="bold") + self.plot_f = list() + + maxval = -1e12 + minval = 1e12 + + for hf in self.hfile: + # if specified on the command-line, set file pointer + hf.seek(self.sizeof_data*self.start, 1) + + self.get_data(hf) + + # Subplot for real and imaginary parts of signal + self.plot_f += plot(self.time, self.f, 'o-') + maxval = max(maxval, max(self.f)) + minval = min(minval, min(self.f)) + + self.sp_f.set_ylim([1.5*minval, 1.5*maxval]) + + self.leg = self.sp_f.legend(self.plot_f, self.legend_text) + + draw() + + def update_plots(self): + maxval = -1e12 + minval = 1e12 + for hf,p in zip(self.hfile,self.plot_f): + self.get_data(hf) + p.set_data([self.time, self.f]) + maxval = max(maxval, max(self.f)) + minval = min(minval, min(self.f)) + + self.sp_f.set_ylim([1.5*minval, 1.5*maxval]) + + draw() + + def click(self, event): + forward_valid_keys = [" ", "down", "right"] + backward_valid_keys = ["up", "left"] + + if(find(event.key, forward_valid_keys)): + self.step_forward() + + elif(find(event.key, backward_valid_keys)): + self.step_backward() + + def button_left_click(self, event): + self.step_backward() + + def button_right_click(self, event): + self.step_forward() + + def step_forward(self): + self.update_plots() + + def step_backward(self): + for hf in self.hfile: + # Step back in file position + if(hf.tell() >= 2*self.sizeof_data*self.block_length ): + hf.seek(-2*self.sizeof_data*self.block_length, 1) + else: + hf.seek(-hf.tell(),1) + self.update_plots() + + +def find(item_in, list_search): + try: + return list_search.index(item_in) != None + except ValueError: + return False -- cgit From a0d13b42bfb3fd081d77e9d73cf4db9695a6d88b Mon Sep 17 00:00:00 2001 From: trondeau Date: Wed, 12 Aug 2009 03:39:03 +0000 Subject: Merging trondeau/pfb r11249:11581 into trunk. This adds a few polyphase filterbank implementations that do (integer) decimation, (integer) interpolation, arbitrary resampling, and channelizing. gnuradio-example/python/pfb includes a number of different examples of how to use these blocks. git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@11583 221aa14e-8319-0410-a670-987f0aec2ac5 --- gr-utils/src/python/plot_data.py | 3 --- 1 file changed, 3 deletions(-) (limited to 'gr-utils/src/python/plot_data.py') diff --git a/gr-utils/src/python/plot_data.py b/gr-utils/src/python/plot_data.py index 7c79e1714..08cdd6030 100644 --- a/gr-utils/src/python/plot_data.py +++ b/gr-utils/src/python/plot_data.py @@ -33,9 +33,6 @@ except ImportError: from optparse import OptionParser -matplotlib.interactive(True) -matplotlib.use('TkAgg') - class plot_data: def __init__(self, datatype, filenames, options): self.hfile = list() -- cgit From 4f4268311488f88c2f20f31ba9d4615b522b946a Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Sat, 15 Jan 2011 17:48:02 -0500 Subject: Fixing up other plotting tools for data read errors. --- gr-utils/src/python/plot_data.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'gr-utils/src/python/plot_data.py') diff --git a/gr-utils/src/python/plot_data.py b/gr-utils/src/python/plot_data.py index 08cdd6030..15012e589 100644 --- a/gr-utils/src/python/plot_data.py +++ b/gr-utils/src/python/plot_data.py @@ -1,5 +1,5 @@ # -# Copyright 2007,2008 Free Software Foundation, Inc. +# Copyright 2007,2008,2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -81,13 +81,13 @@ class plot_data: def get_data(self, hfile): self.text_file_pos.set_text("File Position: %d" % (hfile.tell()//self.sizeof_data)) - f = scipy.fromfile(hfile, dtype=self.datatype, count=self.block_length) - #print "Read in %d items" % len(self.f) - if(len(f) == 0): + try: + f = scipy.fromfile(hfile, dtype=self.datatype, count=self.block_length) + except MemoryError: print "End of File" else: - self.f = f - self.time = [i*(1/self.sample_rate) for i in range(len(self.f))] + self.f = scipy.array(f) + self.time = scipy.array([i*(1/self.sample_rate) for i in range(len(self.f))]) def make_plots(self): self.sp_f = self.fig.add_subplot(2,1,1, position=[0.075, 0.2, 0.875, 0.6]) @@ -107,8 +107,8 @@ class plot_data: # Subplot for real and imaginary parts of signal self.plot_f += plot(self.time, self.f, 'o-') - maxval = max(maxval, max(self.f)) - minval = min(minval, min(self.f)) + maxval = max(maxval, self.f.max()) + minval = min(minval, self.f.min()) self.sp_f.set_ylim([1.5*minval, 1.5*maxval]) @@ -122,8 +122,8 @@ class plot_data: for hf,p in zip(self.hfile,self.plot_f): self.get_data(hf) p.set_data([self.time, self.f]) - maxval = max(maxval, max(self.f)) - minval = min(minval, min(self.f)) + maxval = max(maxval, self.f.max()) + minval = min(minval, self.f.min()) self.sp_f.set_ylim([1.5*minval, 1.5*maxval]) -- cgit From f919f9dcbb54a08e6e26d6c229ce92fb784fa1b2 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Fri, 13 Apr 2012 18:36:53 -0400 Subject: Removed whitespace and added dtools/bin/remove-whitespace as a tool to do this in the future. The sed script was provided by Moritz Fischer. --- gr-utils/src/python/plot_data.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'gr-utils/src/python/plot_data.py') diff --git a/gr-utils/src/python/plot_data.py b/gr-utils/src/python/plot_data.py index 15012e589..242ca2a4b 100644 --- a/gr-utils/src/python/plot_data.py +++ b/gr-utils/src/python/plot_data.py @@ -1,23 +1,23 @@ # # Copyright 2007,2008,2011 Free Software Foundation, Inc. -# +# # This file is part of GNU Radio -# +# # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. -# +# # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. -# +# try: import scipy @@ -57,7 +57,7 @@ class plot_data: self.fig = figure(1, figsize=(16, 9), facecolor='w') rcParams['xtick.labelsize'] = self.axis_font_size rcParams['ytick.labelsize'] = self.axis_font_size - + self.text_file_pos = figtext(0.10, 0.88, "File Position: ", weight="heavy", size=self.text_size) self.text_block = figtext(0.40, 0.88, ("Block Size: %d" % self.block_length), weight="heavy", size=self.text_size) @@ -78,7 +78,7 @@ class plot_data: self.manager = get_current_fig_manager() connect('key_press_event', self.click) show() - + def get_data(self, hfile): self.text_file_pos.set_text("File Position: %d" % (hfile.tell()//self.sizeof_data)) try: @@ -88,7 +88,7 @@ class plot_data: else: self.f = scipy.array(f) self.time = scipy.array([i*(1/self.sample_rate) for i in range(len(self.f))]) - + def make_plots(self): self.sp_f = self.fig.add_subplot(2,1,1, position=[0.075, 0.2, 0.875, 0.6]) self.sp_f.set_title(("Amplitude"), fontsize=self.title_font_size, fontweight="bold") @@ -104,7 +104,7 @@ class plot_data: hf.seek(self.sizeof_data*self.start, 1) self.get_data(hf) - + # Subplot for real and imaginary parts of signal self.plot_f += plot(self.time, self.f, 'o-') maxval = max(maxval, self.f.max()) @@ -126,16 +126,16 @@ class plot_data: minval = min(minval, self.f.min()) self.sp_f.set_ylim([1.5*minval, 1.5*maxval]) - + draw() - + def click(self, event): forward_valid_keys = [" ", "down", "right"] backward_valid_keys = ["up", "left"] if(find(event.key, forward_valid_keys)): self.step_forward() - + elif(find(event.key, backward_valid_keys)): self.step_backward() @@ -156,7 +156,7 @@ class plot_data: else: hf.seek(-hf.tell(),1) self.update_plots() - + def find(item_in, list_search): try: -- cgit