commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r8045 - gnuradio/branches/developers/michaelld/wxgui/g


From: michaelld
Subject: [Commit-gnuradio] r8045 - gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python
Date: Wed, 19 Mar 2008 08:32:13 -0600 (MDT)

Author: michaelld
Date: 2008-03-19 08:32:13 -0600 (Wed, 19 Mar 2008)
New Revision: 8045

Modified:
   gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/fftsink2.py
   
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/numbersink2.py
   
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/scopesink2.py
   
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/waterfallsink2.py
Log:
Refactored into YY_base, YY_f, and YY_c classes, such that all the
latter 2 classes do is call the base class and it sorts out the real
or complex connectivity.

Now passes through 'size' correctly to the WX widget.



Modified: 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/fftsink2.py
===================================================================
--- 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/fftsink2.py    
    2008-03-19 13:06:57 UTC (rev 8044)
+++ 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/fftsink2.py    
    2008-03-19 14:32:13 UTC (rev 8045)
@@ -32,16 +32,15 @@
 
 # classes to handle fft sink
 
-class fft_sink_base(object):
-    def __init__(self, input_is_real=False, baseband_freq=0, y_per_div=10, 
-                 y_divs=8, ref_level=50,
-                 sample_rate=1, fft_size=512,
-                 fft_rate=default_fft_rate,
-                 average=False, avg_alpha=None, title='', peak_hold=False):
+class fft_sink_base (gr.hier_block2):
+    def __init__ (self, input_is_real, parent, size, title,
+                  baseband_freq, ref_scale, y_per_div, y_divs,
+                  ref_level, sample_rate, fft_size, fft_rate,
+                  average, avg_alpha, peak_hold):
 
         # initialize common attributes
         self.baseband_freq = baseband_freq
-        self.y_per_div=y_per_div
+        self.y_per_div = y_per_div
         self.y_divs = y_divs
         self.ref_level = ref_level
         self.sample_rate = sample_rate
@@ -55,8 +54,53 @@
         self.title = title
         self.peak_hold = peak_hold
         self.input_is_real = input_is_real
-        self.msgq = gr.msg_queue(2)         # queue that holds a maximum of 2 
messages
 
+        # queue that holds a maximum of 2 messages
+        self.msgq = gr.msg_queue (2)
+
+        if input_is_real:
+            data_item_size = gr.sizeof_float
+            fft_func = gr.fft_vfc
+            cr_str = "f"
+        else:
+            data_item_size = gr.sizeof_gr_complex
+            fft_func = gr.fft_vcc
+            cr_str = "c"
+
+        gr.hier_block2.__init__ (self, "fft_sink_" + cr_str,
+                                gr.io_signature (1, 1, data_item_size),
+                                gr.io_signature (0, 0, 0))
+                               
+        self.s2p = gr.stream_to_vector (data_item_size, self.fft_size)
+        self.one_in_n = gr.keep_one_in_n (data_item_size * self.fft_size,
+                                          max (1, int (self.sample_rate /
+                                                       self.fft_size /
+                                                       self.fft_rate)))
+        mywindow = window.blackmanharris (self.fft_size)
+        self.fft = fft_func (self.fft_size, True, mywindow)
+        self.c2mag = gr.complex_to_mag (self.fft_size)
+        self.avg = gr.single_pole_iir_filter_ff (1.0, self.fft_size)
+
+        # FIXME  We need to add 3dB to all bins but the DC bin
+        power = 0
+        for tap in mywindow:
+            power += tap * tap
+        self.log = gr.nlog10_ff (20, self.fft_size,
+                                 # Adjust for number of bins
+                                -10.0 * math.log10 (self.fft_size)
+                                 # Adjust for windowing loss
+                                -10.0 * math.log10 (power / self.fft_size)
+                                 # Adjust for reference scale
+                                -20.0 * math.log10 (ref_scale / 2))
+
+        self.sink = gr.message_sink (gr.sizeof_float * self.fft_size,
+                                     self.msgq, True)
+       self.connect (self, self.s2p, self.one_in_n, self.fft,
+                      self.c2mag, self.avg, self.log, self.sink)
+
+        self.win = fft_window (self, parent, size=size)
+        self.set_average (self.average)
+
     def set_y_per_div(self, y_per_div):
         self.y_per_div = y_per_div
 
@@ -91,92 +135,32 @@
         self.one_in_n.set_n(max(1, 
int(self.sample_rate/self.fft_size/self.fft_rate)))
         
 
-class fft_sink_f(gr.hier_block2, fft_sink_base):
-    def __init__(self, parent, baseband_freq=0, ref_scale=2.0,
-                 y_per_div=10, y_divs=8, ref_level=50, sample_rate=1, 
fft_size=512,
-                 fft_rate=default_fft_rate, average=False, avg_alpha=None,
-                 title='', size=default_fftsink_size, peak_hold=False):
+class fft_sink_f (fft_sink_base):
+    def __init__ (self, parent, baseband_freq=0, ref_scale=2.0,
+                  y_per_div=10, y_divs=8, ref_level=50, sample_rate=1,
+                  fft_size=512, fft_rate=default_fft_rate,
+                  average=False, avg_alpha=None, title='',
+                  size=default_fftsink_size, peak_hold=False):
 
-        gr.hier_block2.__init__(self, "fft_sink_f",
-                                gr.io_signature(1, 1, gr.sizeof_float),
-                                gr.io_signature(0,0,0))
+        fft_sink_base.__init__ (self, True, parent, size, title,
+                                baseband_freq, ref_scale, y_per_div,
+                                y_divs, ref_level, sample_rate,
+                                fft_size, fft_rate, average,
+                                avg_alpha, peak_hold)
 
-        fft_sink_base.__init__(self, input_is_real=True, 
baseband_freq=baseband_freq,
-                               y_per_div=y_per_div, y_divs=y_divs, 
ref_level=ref_level,
-                               sample_rate=sample_rate, fft_size=fft_size,
-                               fft_rate=fft_rate,
-                               average=average, avg_alpha=avg_alpha, 
title=title,
-                               peak_hold=peak_hold)
-                               
-        self.s2p = gr.stream_to_vector(gr.sizeof_float, self.fft_size)
-        self.one_in_n = gr.keep_one_in_n(gr.sizeof_float * self.fft_size,
-                                         max(1, 
int(self.sample_rate/self.fft_size/self.fft_rate)))
-        
-        mywindow = window.blackmanharris(self.fft_size)
-        self.fft = gr.fft_vfc(self.fft_size, True, mywindow)
-        power = 0
-        for tap in mywindow:
-            power += tap*tap
-            
-        self.c2mag = gr.complex_to_mag(self.fft_size)
-        self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size)
+class fft_sink_c (fft_sink_base):
+    def __init__ (self, parent, baseband_freq=0, ref_scale=2.0,
+                  y_per_div=10, y_divs=8, ref_level=50, sample_rate=1,
+                  fft_size=512, fft_rate=default_fft_rate,
+                  average=False, avg_alpha=None, title='',
+                  size=default_fftsink_size, peak_hold=False):
 
-        # FIXME  We need to add 3dB to all bins but the DC bin
-        self.log = gr.nlog10_ff(20, self.fft_size,
-                               -10*math.log10(self.fft_size)           # 
Adjust for number of bins
-                              -10*math.log10(power/self.fft_size)      # 
Adjust for windowing loss
-                              -20*math.log10(ref_scale/2))             # 
Adjust for reference scale
-                              
-        self.sink = gr.message_sink(gr.sizeof_float * self.fft_size, 
self.msgq, True)
-       self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2mag, 
self.avg, self.log, self.sink)
+        fft_sink_base.__init__ (self, False, parent, size, title,
+                                baseband_freq, ref_scale, y_per_div,
+                                y_divs, ref_level, sample_rate,
+                                fft_size, fft_rate, average,
+                                avg_alpha, peak_hold)
 
-        self.win = fft_window(self, parent, size=size)
-        self.set_average(self.average)
-
-
-class fft_sink_c(gr.hier_block2, fft_sink_base):
-    def __init__(self, parent, baseband_freq=0, ref_scale=2.0,
-                 y_per_div=10, y_divs=8, ref_level=50, sample_rate=1, 
fft_size=512,
-                 fft_rate=default_fft_rate, average=False, avg_alpha=None,
-                 title='', size=default_fftsink_size, peak_hold=False):
-
-        gr.hier_block2.__init__(self, "fft_sink_c",
-                                gr.io_signature(1, 1, gr.sizeof_gr_complex),
-                                gr.io_signature(0,0,0))
-
-        fft_sink_base.__init__(self, input_is_real=False, 
baseband_freq=baseband_freq,
-                               y_per_div=y_per_div, y_divs=y_divs, 
ref_level=ref_level,
-                               sample_rate=sample_rate, fft_size=fft_size,
-                               fft_rate=fft_rate,
-                               average=average, avg_alpha=avg_alpha, 
title=title,
-                               peak_hold=peak_hold)
-
-        self.s2p = gr.stream_to_vector(gr.sizeof_gr_complex, self.fft_size)
-        self.one_in_n = gr.keep_one_in_n(gr.sizeof_gr_complex * self.fft_size,
-                                         max(1, 
int(self.sample_rate/self.fft_size/self.fft_rate)))
-        
-        mywindow = window.blackmanharris(self.fft_size)
-        self.fft = gr.fft_vcc(self.fft_size, True, mywindow)
-        power = 0
-        for tap in mywindow:
-            power += tap*tap
-            
-        self.c2mag = gr.complex_to_mag(self.fft_size)
-        self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size)
-
-        # FIXME  We need to add 3dB to all bins but the DC bin
-        self.log = gr.nlog10_ff(20, self.fft_size,
-                                -10*math.log10(self.fft_size)          # 
Adjust for number of bins
-                               -10*math.log10(power/self.fft_size)     # 
Adjust for windowing loss
-                               -20*math.log10(ref_scale/2))            # 
Adjust for reference scale
-                               
-        self.sink = gr.message_sink(gr.sizeof_float * self.fft_size, 
self.msgq, True)
-       self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2mag, 
self.avg, self.log, self.sink)
-
-        self.win = fft_window(self, parent, size=size)
-        self.set_average(self.average)
-
-
 # ------------------------------------------------------------------------
 
 class fft_window (plot.PlotCanvas):

Modified: 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/numbersink2.py
===================================================================
--- 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/numbersink2.py 
    2008-03-19 13:06:57 UTC (rev 8044)
+++ 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/numbersink2.py 
    2008-03-19 14:32:13 UTC (rev 8045)
@@ -32,11 +32,11 @@
 
 # classes to handle number sink
 
-class number_sink_base(object):
-    def __init__(self, input_is_real=False, unit='',base_value=0, 
minval=-100.0,maxval=100.0,factor=1.0,decimal_places=10, ref_level=50,
-                 sample_rate=1, 
-                 number_rate=default_number_rate,
-                 average=False, avg_alpha=None, label='', peak_hold=False):
+class number_sink_base (gr.hier_block2):
+    def __init__ (self, input_is_real, parent, size, label, unit,
+                  base_value, minval, maxval, factor, decimal_places,
+                  ref_level, sample_rate, number_rate, average,
+                  avg_alpha, peak_hold):
 
         # initialize common attributes
         self.unit=unit
@@ -48,8 +48,7 @@
         self.decimal_places=decimal_places
         self.ref_level = ref_level
         self.sample_rate = sample_rate
-        number_size=1
-        self.number_size = number_size
+        self.number_size = number_size = 1
         self.number_rate = number_rate
         self.average = average
         if avg_alpha is None:
@@ -60,8 +59,32 @@
         self.peak_hold = peak_hold
         self.show_gauge = True
         self.input_is_real = input_is_real
-        self.msgq = gr.msg_queue(2)         # queue that holds a maximum of 2 
messages
+        # queue that holds a maximum of 2 messages
+        self.msgq = gr.msg_queue(2)
 
+        if input_is_real:
+            data_item_size = gr.sizeof_float
+            avg_func = gr.single_pole_iir_filter_ff
+            cr_str = "f"
+        else:
+            data_item_size = gr.sizeof_gr_complex
+            avg_func = gr.single_pole_iir_filter_cc
+            cr_str = "c"
+
+       gr.hier_block2.__init__ (self, "number_sink_" + cr_str,
+                                 gr.io_signature (1, 1, data_item_size),
+                                 gr.io_signature (0, 0, 0))
+
+        self.avg = avg_func (1.0, number_size)
+        self.one_in_n = gr.keep_one_in_n (data_item_size,
+                                          max (1, int (sample_rate /
+                                                       number_rate)))
+        self.sink = gr.message_sink (data_item_size, self.msgq, True)
+        self.connect (self, self.avg, self.one_in_n, self.sink)
+
+        self.win = number_window (self, parent, size=size, label=label)
+        self.set_average (self.average)
+
     def set_decimal_places(self, decimal_places):
         self.decimal_places = decimal_places
 
@@ -94,64 +117,31 @@
 
     def set_base_value(self, base_value):
         self.base_value = base_value
-        
 
-class number_sink_f(gr.hier_block2, number_sink_base):
-    def __init__(self, parent, 
unit='',base_value=0,minval=-100.0,maxval=100.0,factor=1.0,
-                 decimal_places=10, ref_level=50, sample_rate=1, 
-                 number_rate=default_number_rate, average=False, 
avg_alpha=None,
-                 label='', size=default_numbersink_size, peak_hold=False):
+class number_sink_f (number_sink_base):
+    def __init__ (self, parent, unit='', base_value=0, minval=-100.0,
+                  maxval=100.0, factor=1.0, decimal_places=10, ref_level=50,
+                  sample_rate=1, number_rate=default_number_rate,
+                  average=False, avg_alpha=None, label='',
+                  size=default_numbersink_size, peak_hold=False):
 
-       gr.hier_block2.__init__(self, "number_sink_f",
-                               gr.io_signature(1, 1, gr.sizeof_float), # Input 
signature
-                               gr.io_signature(0, 0, 0))               # 
Output signature
+        number_sink_base.__init__ (self, True, parent, size, label, unit,
+                                   base_value, minval, maxval, factor,
+                                   decimal_places, ref_level, sample_rate,
+                                   number_rate, average, avg_alpha, peak_hold)
 
-        number_sink_base.__init__(self, unit=unit, input_is_real=True, 
base_value=base_value,
-                               minval=minval,maxval=maxval,factor=factor,
-                               decimal_places=decimal_places, 
ref_level=ref_level,
-                               sample_rate=sample_rate, 
number_rate=number_rate,
-                               average=average, avg_alpha=avg_alpha, 
label=label,
-                               peak_hold=peak_hold)
-         
-        number_size=1                      
-        one_in_n = gr.keep_one_in_n(gr.sizeof_float,
-                                    max(1, int(sample_rate/number_rate)))
-            
-        self.avg = gr.single_pole_iir_filter_ff(1.0, number_size)
-        sink = gr.message_sink(gr.sizeof_float , self.msgq, True)
-        self.connect(self, self.avg, one_in_n, sink)
+class number_sink_c (number_sink_base):
+    def __init__ (self, parent, unit='', base_value=0, minval=-100.0,
+                  maxval=100.0, factor=1.0, decimal_places=10, ref_level=50,
+                  sample_rate=1, number_rate=default_number_rate,
+                  average=False, avg_alpha=None, label='',
+                  size=default_numbersink_size, peak_hold=False):
 
-        self.win = number_window(self, parent, size=size,label=label)
-        self.set_average(self.average)
+        number_sink_base.__init__ (self, False, parent, size, label, unit,
+                                   base_value, minval, maxval, factor,
+                                   decimal_places, ref_level, sample_rate,
+                                   number_rate, average, avg_alpha, peak_hold)
 
-class number_sink_c(gr.hier_block2, number_sink_base):
-    def __init__(self, parent, 
unit='',base_value=0,minval=-100.0,maxval=100.0,factor=1.0,
-                 decimal_places=10, ref_level=50, sample_rate=1,
-                 number_rate=default_number_rate, average=False, 
avg_alpha=None,
-                 label='', size=default_numbersink_size, peak_hold=False):
-
-       gr.hier_block2.__init__(self, "number_sink_c",
-                               gr.io_signature(1, 1, gr.sizeof_gr_complex), # 
Input signature
-                               gr.io_signature(0, 0, 0))                    # 
Output signature
-
-        number_sink_base.__init__(self, unit=unit, input_is_real=False, 
base_value=base_value,factor=factor,
-                               
minval=minval,maxval=maxval,decimal_places=decimal_places, ref_level=ref_level,
-                               sample_rate=sample_rate, 
number_rate=number_rate,
-                               average=average, avg_alpha=avg_alpha, 
label=label,
-                               peak_hold=peak_hold)
-
-        number_size=1                      
-        one_in_n = gr.keep_one_in_n(gr.sizeof_gr_complex,
-                                    max(1, int(sample_rate/number_rate)))
-            
-        self.avg = gr.single_pole_iir_filter_cc(1.0, number_size)
-        sink = gr.message_sink(gr.sizeof_gr_complex , self.msgq, True)
-        self.connect(self, self.avg, one_in_n, sink)
-
-        self.win = number_window(self, parent, size=size,label=label)
-        self.set_average(self.average)
-
-
 # ------------------------------------------------------------------------
 
 class static_text_window (wx.StaticText): #plot.PlotCanvas):

Modified: 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/scopesink2.py
===================================================================
--- 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/scopesink2.py  
    2008-03-19 13:06:57 UTC (rev 8044)
+++ 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/scopesink2.py  
    2008-03-19 14:32:13 UTC (rev 8045)
@@ -33,56 +33,68 @@
 
 # classes to handle scope sink
 
-class scope_sink_f(gr.hier_block2):
-    def __init__(self, parent, title='', sample_rate=1,
-                 size=default_scopesink_size, frame_decim=default_frame_decim,
-                 v_scale=default_v_scale, t_scale=None, num_inputs=1):
+class scope_sink_base (gr.hier_block2):
+    def __init__ (self, input_is_real, parent, size, title, sample_rate,
+                  frame_decim, v_scale, t_scale, num_inputs):
 
-        gr.hier_block2.__init__(self, "scope_sink_f",
-                                gr.io_signature(num_inputs, num_inputs, 
gr.sizeof_float),
-                                gr.io_signature(0,0,0))
+        if input_is_real:
+            data_item_size = gr.sizeof_float
+            cr_str = "f"
+        else:
+            data_item_size = gr.sizeof_gr_complex
+            cr_str = "c"
 
-        msgq = gr.msg_queue(2)         # message queue that holds at most 2 
messages
-        self.guts = gr.oscope_sink_f(sample_rate, msgq)
-        for i in range(num_inputs):        
-          self.connect((self, i), (self.guts, i))
+        gr.hier_block2.__init__ (self, "scope_sink_" + cr_str,
+                                gr.io_signature (num_inputs, num_inputs,
+                                                 data_item_size),
+                                gr.io_signature (0, 0, 0))
 
-        self.win = scope_window(win_info (msgq, sample_rate, frame_decim,
-                                          v_scale, t_scale, self.guts, title), 
parent)
+        # message queue that holds at most 2 messages
+        msgq = gr.msg_queue (2)
 
-    def set_sample_rate(self, sample_rate):
-        self.guts.set_sample_rate(sample_rate)
-        self.win.info.set_sample_rate(sample_rate)
+        self.guts = gr.oscope_sink_f (sample_rate, msgq)
+        for i in range (num_inputs):
+            if input_is_real:
+                self.connect ((self, i), (self.guts, i))
+            else:
+                c2f = gr.complex_to_float ()  
+                self.connect ((self, i), c2f)
+                self.connect ((c2f, 0), (self.guts, (2 * i) + 0))
+                self.connect ((c2f, 1), (self.guts, (2 * i) + 1))
+        wi = win_info (msgq, sample_rate, frame_decim,
+                       v_scale, t_scale, self.guts, title)
+        self.win = scope_window (wi, parent, size=size)
 
-class scope_sink_c(gr.hier_block2):
-    def __init__(self, parent, title='', sample_rate=1,
-                 size=default_scopesink_size, frame_decim=default_frame_decim,
-                 v_scale=default_v_scale, t_scale=None, num_inputs=1):
+    def set_sample_rate (self, sample_rate):
+        self.guts.set_sample_rate (sample_rate)
+        self.win.info.set_sample_rate (sample_rate)
 
-        gr.hier_block2.__init__(self, "scope_sink_c",
-                                gr.io_signature(num_inputs, num_inputs, 
gr.sizeof_gr_complex),
-                                gr.io_signature(0,0,0))
+class scope_sink_f (scope_sink_base):
+    def __init__ (self, parent, title='', sample_rate=1,
+                  size=default_scopesink_size,
+                  frame_decim=default_frame_decim,
+                  v_scale=default_v_scale, t_scale=None, num_inputs=1):
 
-        msgq = gr.msg_queue(2)         # message queue that holds at most 2 
messages
-        self.guts = gr.oscope_sink_f(sample_rate, msgq)
-        for i in range(num_inputs):      
-               c2f = gr.complex_to_float()  
-               self.connect((self, i), c2f)
-               self.connect((c2f, 0), (self.guts, 2*i+0))
-               self.connect((c2f, 1), (self.guts, 2*i+1))
-        
-        self.win = scope_window(win_info(msgq, sample_rate, frame_decim,
-                                         v_scale, t_scale, self.guts, title), 
parent)
-        
-    def set_sample_rate(self, sample_rate):
-        self.guts.set_sample_rate(sample_rate)
-        self.win.info.set_sample_rate(sample_rate)
+        scope_sink_base.__init__ (self, True, parent, size, title,
+                                  sample_rate, frame_decim, v_scale,
+                                  t_scale, num_inputs)
 
+class scope_sink_c (scope_sink_base):
+    def __init__ (self, parent, title='', sample_rate=1,
+                  size=default_scopesink_size,
+                  frame_decim=default_frame_decim,
+                  v_scale=default_v_scale, t_scale=None, num_inputs=1):
+
+        scope_sink_base.__init__ (self, False, parent, size, title,
+                                  sample_rate, frame_decim, v_scale,
+                                  t_scale, num_inputs)
+
 class constellation_sink(scope_sink_c):
     def __init__(self, parent, title='Constellation', sample_rate=1,
                  size=default_scopesink_size, frame_decim=default_frame_decim):
-        scope_sink_c.__init__(self, parent=parent, title=title, 
sample_rate=sample_rate,
-                 size=size, frame_decim=frame_decim)
+        scope_sink_c.__init__(self, parent=parent, title=title,
+                              sample_rate=sample_rate,
+                              size=size, frame_decim=frame_decim)
         self.win.info.xy = True        #constellation mode
 
 # ========================================================================
@@ -181,7 +193,6 @@
         return self.marker
 
 class scope_window (wx.Panel):
-
     def __init__ (self, info, parent, id = -1,
                   pos = wx.DefaultPosition, size = wx.DefaultSize, name = ""):
         wx.Panel.__init__ (self, parent, -1)

Modified: 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/waterfallsink2.py
===================================================================
--- 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/waterfallsink2.py
  2008-03-19 13:06:57 UTC (rev 8044)
+++ 
gnuradio/branches/developers/michaelld/wxgui/gr-wxgui/src/python/waterfallsink2.py
  2008-03-19 14:32:13 UTC (rev 8045)
@@ -32,11 +32,12 @@
 
 # classes to handle waterfall sink
 
-class waterfall_sink_base(object):
-    def __init__(self, input_is_real=False, baseband_freq=0,
-                 sample_rate=1, fft_size=512,
-                 fft_rate=default_fft_rate,
-                 average=False, avg_alpha=None, title=''):
+class waterfall_sink_base (gr.hier_block2):
+    def __init__ (self, input_is_real, parent, size, title,
+                  baseband_freq, y_per_div, ref_level, sample_rate,
+                  fft_size, fft_rate, average, avg_alpha):
+        # unused inputs (even if saved), right now (some commented out)
+        #  title, y_per_div, ref_level
 
         # initialize common attributes
         self.baseband_freq = baseband_freq
@@ -50,8 +51,42 @@
             self.avg_alpha = avg_alpha
         self.title = title
         self.input_is_real = input_is_real
-        self.msgq = gr.msg_queue(2)         # queue up to 2 messages
 
+        # message queue that holds at most 2 messages
+        self.msgq = gr.msg_queue(2)
+
+        if input_is_real:
+            data_item_size = gr.sizeof_float
+            fft_func = gr.fft_vfc
+            cr_str = "f"
+        else:
+            data_item_size = gr.sizeof_gr_complex
+            fft_func = gr.fft_vcc
+            cr_str = "c"
+
+        gr.hier_block2.__init__ (self, "waterfall_sink_" + cr_str,
+                                 gr.io_signature (1, 1, data_item_size),
+                                 gr.io_signature (0, 0, 0))
+
+        self.s2p = gr.serial_to_parallel (data_item_size, self.fft_size)
+        self.one_in_n = gr.keep_one_in_n (data_item_size * self.fft_size,
+                                          max (1, int (self.sample_rate /
+                                                       self.fft_size /
+                                                       self.fft_rate)))
+        mywindow = window.blackmanharris (self.fft_size)
+        self.fft = fft_func (self.fft_size, True, mywindow)
+        self.c2mag = gr.complex_to_mag (self.fft_size)
+        self.avg = gr.single_pole_iir_filter_ff (1.0, self.fft_size)
+        self.log = gr.nlog10_ff (20, self.fft_size,
+                                 -20.0 * math.log10 (self.fft_size))
+        self.sink = gr.message_sink (gr.sizeof_float * self.fft_size,
+                                     self.msgq, True)
+       self.connect (self, self.s2p, self.one_in_n, self.fft,
+                      self.c2mag, self.avg, self.log, self.sink)
+
+        self.win = waterfall_window (self, parent, size=size)
+        self.set_average (self.average)
+
     def set_average(self, average):
         self.average = average
         if average:
@@ -71,69 +106,29 @@
 
     def _set_n(self):
         self.one_in_n.set_n(max(1, 
int(self.sample_rate/self.fft_size/self.fft_rate)))
-        
-class waterfall_sink_f(gr.hier_block2, waterfall_sink_base):
-    def __init__(self, parent, baseband_freq=0,
-                 y_per_div=10, ref_level=50, sample_rate=1, fft_size=512,
-                 fft_rate=default_fft_rate, average=False, avg_alpha=None,
-                 title='', size=default_fftsink_size):
 
-        gr.hier_block2.__init__(self, "waterfall_sink_f",
-                                gr.io_signature(1, 1, gr.sizeof_float),
-                                gr.io_signature(0,0,0))
+class waterfall_sink_f (waterfall_sink_base):
+    def __init__ (self, parent, baseband_freq=0,
+                  y_per_div=10, ref_level=50, sample_rate=1, fft_size=512,
+                  fft_rate=default_fft_rate, average=False, avg_alpha=None,
+                  title='', size=default_fftsink_size):
 
-        waterfall_sink_base.__init__(self, input_is_real=True, 
baseband_freq=baseband_freq,
-                               sample_rate=sample_rate, fft_size=fft_size,
-                               fft_rate=fft_rate,
-                               average=average, avg_alpha=avg_alpha, 
title=title)
-                               
-        self.s2p = gr.serial_to_parallel(gr.sizeof_float, self.fft_size)
-        self.one_in_n = gr.keep_one_in_n(gr.sizeof_float * self.fft_size,
-                                         max(1, 
int(self.sample_rate/self.fft_size/self.fft_rate)))
-        
-        mywindow = window.blackmanharris(self.fft_size)
-        self.fft = gr.fft_vfc(self.fft_size, True, mywindow)
-        self.c2mag = gr.complex_to_mag(self.fft_size)
-        self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size)
-        self.log = gr.nlog10_ff(20, self.fft_size, 
-20*math.log10(self.fft_size))
-        self.sink = gr.message_sink(gr.sizeof_float * self.fft_size, 
self.msgq, True)
-       self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2mag, 
self.avg, self.log, self.sink)
+        waterfall_sink_base.__init__ (self, True, parent, size, title,
+                                      baseband_freq, y_per_div, ref_level,
+                                      sample_rate, fft_size, fft_rate,
+                                      average, avg_alpha)
 
-        self.win = waterfall_window(self, parent, size=size)
-        self.set_average(self.average)
+class waterfall_sink_c (waterfall_sink_base):
+    def __init__ (self, parent, baseband_freq=0,
+                  y_per_div=10, ref_level=50, sample_rate=1, fft_size=512,
+                  fft_rate=default_fft_rate, average=False, avg_alpha=None, 
+                  title='', size=default_fftsink_size):
 
+        waterfall_sink_base.__init__ (self, False, parent, size, title,
+                                      baseband_freq, y_per_div, ref_level,
+                                      sample_rate, fft_size, fft_rate,
+                                      average, avg_alpha)
 
-class waterfall_sink_c(gr.hier_block2, waterfall_sink_base):
-    def __init__(self, parent, baseband_freq=0,
-                 y_per_div=10, ref_level=50, sample_rate=1, fft_size=512,
-                 fft_rate=default_fft_rate, average=False, avg_alpha=None, 
-                 title='', size=default_fftsink_size):
-
-        gr.hier_block2.__init__(self, "waterfall_sink_c",
-                                gr.io_signature(1, 1, gr.sizeof_gr_complex),
-                                gr.io_signature(0,0,0))
-
-        waterfall_sink_base.__init__(self, input_is_real=False, 
baseband_freq=baseband_freq,
-                                     sample_rate=sample_rate, 
fft_size=fft_size,
-                                     fft_rate=fft_rate,
-                                     average=average, avg_alpha=avg_alpha, 
title=title)
-
-        self.s2p = gr.serial_to_parallel(gr.sizeof_gr_complex, self.fft_size)
-        self.one_in_n = gr.keep_one_in_n(gr.sizeof_gr_complex * self.fft_size,
-                                         max(1, 
int(self.sample_rate/self.fft_size/self.fft_rate)))
-        
-        mywindow = window.blackmanharris(self.fft_size)
-        self.fft = gr.fft_vcc(self.fft_size, True, mywindow)
-        self.c2mag = gr.complex_to_mag(self.fft_size)
-        self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size)
-        self.log = gr.nlog10_ff(20, self.fft_size, 
-20*math.log10(self.fft_size))
-        self.sink = gr.message_sink(gr.sizeof_float * self.fft_size, 
self.msgq, True)
-       self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2mag, 
self.avg, self.log, self.sink)
-
-        self.win = waterfall_window(self, parent, size=size)
-        self.set_average(self.average)
-
-
 # ------------------------------------------------------------------------
 
 class waterfall_window (wx.Panel):





reply via email to

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