commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 01/04: gr-qtgui: Adding gr_spectrogram_plot


From: git
Subject: [Commit-gnuradio] [gnuradio] 01/04: gr-qtgui: Adding gr_spectrogram_plot script. Reads sample rate and data type from header and launches appropriate plotter
Date: Sun, 4 Jan 2015 20:47:53 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

trondeau pushed a commit to branch master
in repository gnuradio.

commit 4ec1ab5487a7555c534d7c9768b853995f0ea8f8
Author: Paul Garver <address@hidden>
Date:   Tue Dec 2 10:30:21 2014 -0500

    gr-qtgui: Adding gr_spectrogram_plot script.  Reads sample rate and data 
type from header and launches appropriate plotter
---
 gr-qtgui/apps/CMakeLists.txt      |   1 +
 gr-qtgui/apps/gr_spectrogram_plot | 190 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 191 insertions(+)

diff --git a/gr-qtgui/apps/CMakeLists.txt b/gr-qtgui/apps/CMakeLists.txt
index 05accc6..3c64cb6 100644
--- a/gr-qtgui/apps/CMakeLists.txt
+++ b/gr-qtgui/apps/CMakeLists.txt
@@ -55,6 +55,7 @@ GR_PYTHON_INSTALL(
     gr_spectrogram_plot_i
     gr_spectrogram_plot_s
     gr_spectrogram_plot_b
+    gr_spectrogram_plot
     gr_constellation_plot
     DESTINATION ${GR_RUNTIME_DIR}
     COMPONENT "qtgui_python"
diff --git a/gr-qtgui/apps/gr_spectrogram_plot 
b/gr-qtgui/apps/gr_spectrogram_plot
new file mode 100755
index 0000000..73ccd2f
--- /dev/null
+++ b/gr-qtgui/apps/gr_spectrogram_plot
@@ -0,0 +1,190 @@
+#!/usr/bin/env python
+#
+# Copyright 2012,2013 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.
+#
+
+from gnuradio import gr
+from gnuradio import blocks
+from gnuradio import filter
+import pmt
+from gnuradio.blocks import parse_file_metadata
+import scipy
+import sys
+import os
+
+try:
+    import gnuradio.qtgui.plot_spectrogram_base as plot_base
+except ImportError:
+    import plot_spectrogram_base as plot_base
+
+try:
+    from gnuradio import qtgui
+    from PyQt4 import QtGui, QtCore
+    import sip
+except ImportError:
+    print "Error: Program requires PyQt4 and gr-qtgui."
+    sys.exit(1)
+
+class spectrogram_plot_c(plot_base.plot_base):
+    def __init__(self, filelist, fc, samp_rate, psdsize, start,
+                 nsamples, max_nsamples, avg=1.0):
+        plot_base.plot_base.__init__(self, filelist, fc, samp_rate,
+                                     psdsize, start, nsamples,
+                                     max_nsamples, avg)
+        self.read_samples = plot_base.read_samples_c
+        self.dsize = gr.sizeof_gr_complex
+        self.src_type = blocks.vector_source_c
+        self.gui_snk = qtgui.waterfall_sink_c(self._psd_size,
+                       filter.firdes.WIN_BLACKMAN_hARRIS,self._center_freq, 
+                       self._samp_rate,"GNU Radio Spectrogram Plot (CPX 
Float)", 
+                       self._nsigs)
+        self.setup()
+
+class spectrogram_plot_f(plot_base.plot_base):
+    def __init__(self, filelist, fc, samp_rate, psdsize, start,
+                 nsamples, max_nsamples, avg=1.0):
+        plot_base.plot_base.__init__(self, filelist, fc, samp_rate,
+                                     psdsize, start, nsamples,
+                                     max_nsamples, avg)
+        self.read_samples = plot_base.read_samples_f
+        self.dsize = gr.sizeof_float
+        self.src_type = blocks.vector_source_f
+        self.gui_snk = qtgui.waterfall_sink_f(self._psd_size, 
+                       filter.firdes.WIN_BLACKMAN_hARRIS,self._center_freq, 
+                       self._samp_rate,
+                       "GNU Radio Spectrogram Plot (float)", 
+                       self._nsigs)
+        self.setup()
+
+class spectrogram_plot_b(plot_base.plot_base):
+    def __init__(self, filelist, fc, samp_rate, psdsize, start,
+                 nsamples, max_nsamples, avg=1.0):
+        plot_base.plot_base.__init__(self, filelist, fc, samp_rate,
+                                     psdsize, start, nsamples,
+                                     max_nsamples, avg)
+        self.read_samples = plot_base.read_samples_b
+        self.dsize = gr.sizeof_float
+        self.src_type = plot_base.source_chars_to_float
+        self.gui_snk = qtgui.waterfall_sink_f(self._psd_size, 
+                       filter.firdes.WIN_BLACKMAN_hARRIS,self._center_freq, 
+                       self._samp_rate, "GNU Radio Spectrogram Plot (bin)", 
+                       self._nsigs)
+        self.setup()
+
+class spectrogram_plot_i(plot_base.plot_base):
+    def __init__(self, filelist, fc, samp_rate, psdsize, start,
+                 nsamples, max_nsamples, avg=1.0):
+        plot_base.plot_base.__init__(self, filelist, fc, samp_rate,
+                                     psdsize, start, nsamples,
+                                     max_nsamples, avg)
+        self.dsize = gr.sizeof_float
+        self.src_type = plot_base.source_ints_to_float
+        self.gui_snk = qtgui.waterfall_sink_f(self._psd_size, 
+                       filter.firdes.WIN_BLACKMAN_hARRIS,
+                       self._center_freq, self._samp_rate,
+                       "GNU Radio Spectrogram Plot (int)", 
+                       self._nsigs)
+        self.setup()
+
+def read_header(filelist):
+   filename = filelist[0] + '.hdr'
+   try:
+      handle = open(filename,"rb")
+   except IOError:
+      return 
+   hdr_start = handle.tell()
+   header_str = handle.read(parse_file_metadata.HEADER_LENGTH)
+   if( len(header_str) == 0 ):
+      return
+   # String to PMT Conversion
+   try:
+      header = pmt.deserialize_str(header_str)
+   except RuntimeError:
+      sys.stderr.write("Can't deserialize header: invalid/corrupt data\n")
+      sys.exit(1)
+   info = parse_file_metadata.parse_header(header,False)
+   return info
+   
+def main():
+   description = 'Plots the spectrogram (waterfall) of a file with detached 
header.'  
+   description += ' Assumes header is <input_filename>.hdr'
+   (options, args) = plot_base.setup_options(description)
+   filelist = list(args)
+   # Attempt to read the header information
+   info = read_header(filelist)
+   # If no header, quit
+   if not info:
+      sys.stderr.write('Header not found\n')
+      sys.exit(1)
+      
+   max_nsamples = plot_base.find_max_nsamples(filelist)
+   srate = info["rx_rate"]
+
+   # Dispatch the proper function
+   # Complex Types
+   if(info["cplx"] == True):
+      if( info["type"] == "float" ):
+         tb = spectrogram_plot_c(filelist,
+                            options.center_frequency,srate,
+                            options.psd_size,
+                            options.start, options.nsamples, max_nsamples,
+                            options.average);
+      else:
+         sys.stderr.write("Complex File Type " + info["type"]+ " not 
supported.\n")
+   # Real Types
+   else:
+      if( info["type"] == "bytes" ):
+         tb = spectrogram_plot_b(filelist,
+                            options.center_frequency,srate,
+                            options.psd_size,
+                            options.start, options.nsamples, max_nsamples,
+                            options.average);
+      elif( info["type"] == "int" ):
+         tb = spectrogram_plot_i(filelist,
+                            options.center_frequency,srate,
+                            options.psd_size,
+                            options.start, options.nsamples, max_nsamples,
+                            options.average);
+      elif( info["type"] == "float" ):
+         tb = spectrogram_plot_f(filelist,
+                            options.center_frequency,srate,
+                            options.psd_size,
+                            options.start, options.nsamples, max_nsamples,
+                            options.average);
+      elif( info["type"] == "short" ):
+         tb = spectrogram_plot_s(filelist,
+                            options.center_frequency,srate,
+                            options.psd_size,
+                            options.start, options.nsamples, max_nsamples,
+                            options.average);
+      else:
+        sys.stderr.write("Real File Type " + info["type"] + " not supported\n")
+   main_box = plot_base.plot_spectrogram_form(tb, 'GNU Radio Spectrogram Plot')
+   main_box.show()
+
+   tb.run()
+   tb.qapp.exec_()
+
+if __name__ == "__main__":
+    try:
+        main()
+    except KeyboardInterrupt:
+        pass
+



reply via email to

[Prev in Thread] Current Thread [Next in Thread]