Applied patch from Josh Blum. Adds multiple input specification to constructor for...
[debian/gnuradio] / gr-wxgui / src / python / fftsink2.py
index 6de0718805c5b75a825561a32e51889f1b68c1d3..1499a3bb3f2d12159aad519dd3992b23d2cfad7e 100755 (executable)
@@ -1,12 +1,12 @@
 #!/usr/bin/env python
 #
-# Copyright 2003,2004,2005,2006 Free Software Foundation, Inc.
+# Copyright 2003,2004,2005,2006,2007 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 2, or (at your option)
+# 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,
@@ -24,7 +24,7 @@ from gnuradio import gr, gru, window
 from gnuradio.wxgui import stdgui2
 import wx
 import gnuradio.wxgui.plot as plot
-import Numeric
+import numpy
 import threading
 import math    
 
@@ -106,37 +106,25 @@ class fft_sink_f(gr.hier_block2, fft_sink_base):
                                average=average, avg_alpha=avg_alpha, title=title,
                                peak_hold=peak_hold)
                                
-        self.define_component("s2p", gr.stream_to_vector(gr.sizeof_float, self.fft_size))
+        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)))
-        self.define_component("one_in_n", self.one_in_n)
         
         mywindow = window.blackmanharris(self.fft_size)
-        self.define_component("fft", gr.fft_vfc(self.fft_size, True, mywindow))
+        self.fft = gr.fft_vfc(self.fft_size, True, mywindow)
         power = 0
         for tap in mywindow:
             power += tap*tap
             
-        self.define_component("c2mag", gr.complex_to_mag(self.fft_size))
+        self.c2mag = gr.complex_to_mag(self.fft_size)
         self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size)
-        self.define_component("avg", self.avg)
 
         # FIXME  We need to add 3dB to all bins but the DC bin
-        self.define_component("log", gr.nlog10_ff(20, self.fft_size,
-                                     -20*math.log10(self.fft_size)-10*math.log10(power/self.fft_size)))
-        self.define_component("sink", gr.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True))
-
-
-        # Ultimately this will be
-        # self.connect("self s2p one_in_n fft c2mag avg log sink")
-        self.connect("self", 0, "s2p", 0)
-        self.connect("s2p", 0, "one_in_n", 0)
-        self.connect("one_in_n", 0, "fft", 0)
-        self.connect("fft", 0, "c2mag", 0)
-        self.connect("c2mag", 0, "avg", 0)
-        self.connect("avg", 0, "log", 0)
-        self.connect("log", 0, "sink", 0)
-                              
+        self.log = gr.nlog10_ff(20, self.fft_size,
+                               -20*math.log10(self.fft_size)-10*math.log10(power/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 = fft_window(self, parent, size=size)
         self.set_average(self.average)
 
@@ -158,35 +146,24 @@ class fft_sink_c(gr.hier_block2, fft_sink_base):
                                average=average, avg_alpha=avg_alpha, title=title,
                                peak_hold=peak_hold)
 
-        self.define_component("s2p", gr.stream_to_vector(gr.sizeof_gr_complex, self.fft_size))
+        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)))
-        self.define_component("one_in_n", self.one_in_n)
         
         mywindow = window.blackmanharris(self.fft_size)
-        self.define_component("fft", gr.fft_vcc(self.fft_size, True, mywindow))
+        self.fft = gr.fft_vcc(self.fft_size, True, mywindow)
         power = 0
         for tap in mywindow:
             power += tap*tap
             
-        self.define_component("c2mag", gr.complex_to_mag(self.fft_size))
+        self.c2mag = gr.complex_to_mag(self.fft_size)
         self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size)
-        self.define_component("avg", self.avg)
 
         # FIXME  We need to add 3dB to all bins but the DC bin
-        self.define_component("log", gr.nlog10_ff(20, self.fft_size,
-                                     -20*math.log10(self.fft_size)-10*math.log10(power/self.fft_size)))
-        self.define_component("sink", gr.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True))
-
-        # Ultimately this will be
-        # self.connect("self s2p one_in_n fft c2mag avg log sink")
-        self.connect("self", 0, "s2p", 0)
-        self.connect("s2p", 0, "one_in_n", 0)
-        self.connect("one_in_n", 0, "fft", 0)
-        self.connect("fft", 0, "c2mag", 0)
-        self.connect("c2mag", 0, "avg", 0)
-        self.connect("avg", 0, "log", 0)
-        self.connect("log", 0, "sink", 0)
+        self.log = gr.nlog10_ff(20, self.fft_size,
+                                -20*math.log10(self.fft_size)-10*math.log10(power/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 = fft_window(self, parent, size=size)
         self.set_average(self.average)
@@ -232,7 +209,7 @@ class input_watcher (threading.Thread):
                 start = itemsize * (nitems - 1)
                 s = s[start:start+itemsize]
 
-            complex_data = Numeric.fromstring (s, Numeric.Float32)
+            complex_data = numpy.fromstring (s, numpy.float32)
             de = DataEvent (complex_data)
             wx.PostEvent (self.event_receiver, de)
             del de
@@ -275,7 +252,7 @@ class fft_window (plot.PlotCanvas):
             if self.peak_vals is None:
                 self.peak_vals = dB
             else:
-                self.peak_vals = Numeric.maximum(dB, self.peak_vals)
+                self.peak_vals = numpy.maximum(dB, self.peak_vals)
                 dB = self.peak_vals
 
         x = max(abs(self.fftsink.sample_rate), abs(self.fftsink.baseband_freq))
@@ -290,20 +267,20 @@ class fft_window (plot.PlotCanvas):
             units = "kHz"
 
         if self.fftsink.input_is_real:     # only plot 1/2 the points
-            x_vals = ((Numeric.arrayrange (L/2)
+            x_vals = ((numpy.arange (L/2)
                        * (self.fftsink.sample_rate * sf / L))
                       + self.fftsink.baseband_freq * sf)
-            points = Numeric.zeros((len(x_vals), 2), Numeric.Float64)
+            points = numpy.zeros((len(x_vals), 2), numpy.float64)
             points[:,0] = x_vals
             points[:,1] = dB[0:L/2]
         else:
             # the "negative freqs" are in the second half of the array
-            x_vals = ((Numeric.arrayrange (-L/2, L/2)
+            x_vals = ((numpy.arange (-L/2, L/2)
                        * (self.fftsink.sample_rate * sf / L))
                       + self.fftsink.baseband_freq * sf)
-            points = Numeric.zeros((len(x_vals), 2), Numeric.Float64)
+            points = numpy.zeros((len(x_vals), 2), numpy.float64)
             points[:,0] = x_vals
-            points[:,1] = Numeric.concatenate ((dB[L/2:], dB[0:L/2]))
+            points[:,1] = numpy.concatenate ((dB[L/2:], dB[0:L/2]))
 
 
         lines = plot.PolyLine (points, colour='BLUE')
@@ -475,12 +452,7 @@ class test_app_block (stdgui2.std_top_block):
                             ref_level=0, y_per_div=20)
         vbox.Add (sink1.win, 1, wx.EXPAND)
 
-        self.define_component("src1", src1)
-        self.define_component("thr1", thr1)
-        self.define_component("sink1", sink1)
-
-        self.connect ("src1", 0, "thr1", 0)
-        self.connect ("thr1", 0, "sink1", 0)
+       self.connect(src1, thr1, sink1)
 
         #src2 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 2e3, 1)
         src2 = gr.sig_source_f (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1)
@@ -490,16 +462,10 @@ class test_app_block (stdgui2.std_top_block):
                             ref_level=0, y_per_div=20)
         vbox.Add (sink2.win, 1, wx.EXPAND)
 
-        self.define_component("src2", src2)
-        self.define_component("thr2", thr2)
-        self.define_component("sink2", sink2)
-        
-        self.connect ("src2", 0, "thr2", 0)
-        self.connect ("thr2", 0, "sink2", 0)
+       self.connect(src2, thr2, sink2)
 
 def main ():
-    app = stdgui2.stdapp (test_app_block,
-                         "FFT Sink Test App")
+    app = stdgui2.stdapp (test_app_block, "FFT Sink Test App")
     app.MainLoop ()
 
 if __name__ == '__main__':