Added reference scaling to fftsink2. Default behavior is unchanged.
authorjcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5>
Thu, 28 Feb 2008 19:03:55 +0000 (19:03 +0000)
committerjcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5>
Thu, 28 Feb 2008 19:03:55 +0000 (19:03 +0000)
The new parameter 'ref_scale', defaulting to 1.0, represents a 0 dB
y-axis value.

Updated usrp_fft.py to display dBFS by setting ref_scale to 32768.0
and ref_level to 0.  This results in the full 100 dB of dynamic range
being displayed.

Updated some gnuradio-examples to use the new parameter.

git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@7863 221aa14e-8319-0410-a670-987f0aec2ac5

gnuradio-examples/python/audio/audio_fft.py
gnuradio-examples/python/usrp/usrp_am_mw_rcv.py
gnuradio-examples/python/usrp/usrp_nbfm_rcv.py
gnuradio-examples/python/usrp/usrp_wfm_rcv.py
gnuradio-examples/python/usrp/usrp_wfm_rcv_pll.py
gnuradio-examples/python/usrp/usrp_wfm_rcv_sca.py
gnuradio-examples/python/usrp/usrp_wxapt_rcv.py
gr-utils/src/python/usrp_fft.py
gr-wxgui/src/python/fftsink2.py

index f7f1c2e8c0a428afbcc1829ef6d7e26e12038fd0..960e0f94d5ef776f96068af653d71dad4e892611 100755 (executable)
@@ -61,7 +61,8 @@ class app_top_block(stdgui2.std_top_block):
         elif options.oscilloscope:
             self.scope = scopesink2.scope_sink_f(panel, sample_rate=sample_rate)
         else:
-            self.scope = fftsink2.fft_sink_f (panel, fft_size=1024, sample_rate=sample_rate, fft_rate=30)
+            self.scope = fftsink2.fft_sink_f (panel, fft_size=1024, sample_rate=sample_rate, fft_rate=30,
+                                             ref_scale=1.0, ref_level=0, y_divs=12)
 
        self.src = audio.source (sample_rate, options.audio_input)
 
index c99fb3072c39fba926964eca16a83e142bf6804d..b1135598501429bf9e2b7a16a28e51472a4f1225 100755 (executable)
@@ -178,7 +178,8 @@ class wfm_rx_block (stdgui2.std_top_block):
 
         if 1:
             self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
-                                               fft_size=512, sample_rate=usrp_rate)
+                                               fft_size=512, sample_rate=usrp_rate,
+                                              ref_scale=32768.0, ref_level=0.0, y_divs=12)
             self.connect (self.u, self.src_fft)
             vbox.Add (self.src_fft.win, 4, wx.EXPAND)
 
@@ -198,7 +199,7 @@ class wfm_rx_block (stdgui2.std_top_block):
         if 1:
             audio_fft = fftsink2.fft_sink_f(self.panel, title="Audio",
                                                   fft_size=512, sample_rate=audio_rate,
-                                                  y_per_div=10, ref_level=-20)
+                                                  y_per_div=10, ref_level=20)
             self.connect (self.audio_filt, audio_fft)
             vbox.Add (audio_fft.win, 4, wx.EXPAND)
 
index 7aa45575d6a1ef5cfb69ad35f3a715da225331d4..4c66fc970864a792cdd423085c512348f4820632 100755 (executable)
@@ -102,7 +102,7 @@ class my_top_block (stdgui2.std_top_block):
         if 1 and not(no_gui):
             self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
                                                fft_size=512, sample_rate=self.rxpath.if_rate,
-                                               ref_level=80, y_per_div=20)
+                                               ref_scale=32768.0, ref_level=0, y_per_div=10, y_divs=12)
             self.connect (self.rxpath.u, self.src_fft)
             vbox.Add (self.src_fft.win, 4, wx.EXPAND)
         if 1 and not(no_gui):
index 40e4d8384ee91596008f85b0fe031772d06a5112..5655d19b50103a2a2a1205235992931d57bb3c3e 100755 (executable)
@@ -150,7 +150,8 @@ class wfm_rx_block (stdgui2.std_top_block):
 
         if 1:
             self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
-                                               fft_size=512, sample_rate=usrp_rate)
+                                               fft_size=512, sample_rate=usrp_rate,
+                                              ref_scale=32768.0, ref_level=0, y_divs=12)
             self.connect (self.u, self.src_fft)
             vbox.Add (self.src_fft.win, 4, wx.EXPAND)
 
index a85bcdbf4e4625ac9661dc0474e9c3a6be62044b..bc79fb8109fc5c26f65479b6bc1ac232e653fe6d 100755 (executable)
@@ -167,7 +167,8 @@ class wfm_rx_block (stdgui2.std_top_block):
 
         if 1:
             self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
-                                               fft_size=512, sample_rate=usrp_rate)
+                                               fft_size=512, sample_rate=usrp_rate,
+                                              ref_scale=32768.0, ref_level=0, y_divs=12)
             self.connect (self.u, self.src_fft)
             vbox.Add (self.src_fft.win, 4, wx.EXPAND)
 
index 1d39c7691bb3af6ba68b54a74c5281db2b3f4f0a..75bbc0acd6941feaca546a1f86f3d69cb2f291f8 100755 (executable)
@@ -228,7 +228,8 @@ class wfm_rx_sca_block (stdgui2.std_top_block):
 
         if 1:
             self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
-                                               fft_size=512, sample_rate=usrp_rate)
+                                               fft_size=512, sample_rate=usrp_rate,
+                                              ref_scale=32768.0, ref_level=0, y_divs=12)
             self.connect (self.u, self.src_fft)
             vbox.Add (self.src_fft.win, 4, wx.EXPAND)
 
index 983e3ec98d7589aa1921b1fdf4743f38d593f0b7..11b8c431f27f697eadf1e0abcbd19fde4f445772 100755 (executable)
@@ -148,7 +148,8 @@ class wxapt_rx_block (stdgui2.std_top_block):
 
         if 1:
             self.src_fft = fftsink2.fft_sink_c (self.panel, title="Data from USRP",
-                                               fft_size=512, sample_rate=usrp_rate)
+                                               fft_size=512, sample_rate=usrp_rate,
+                                              ref_scale=32768.0, ref_level=0, y_divs=12)
             self.connect (self.u, self.src_fft)
             vbox.Add (self.src_fft.win, 4, wx.EXPAND)
 
index d549dd4e3939578e6fe9d7fc40c33bc85be85c35..30a06911ae8270be1fdc2e52e4dd4c7da2170eea 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2004,2005,2007 Free Software Foundation, Inc.
+# Copyright 2004,2005,2007,2008 Free Software Foundation, Inc.
 # 
 # This file is part of GNU Radio
 # 
@@ -115,7 +115,8 @@ class app_top_block(stdgui2.std_top_block):
         elif options.oscilloscope:
             self.scope = scopesink2.scope_sink_c(panel, sample_rate=input_rate)
         else:
-            self.scope = fftsink2.fft_sink_c (panel, fft_size=1024, sample_rate=input_rate, y_divs = 10)
+            self.scope = fftsink2.fft_sink_c (panel, fft_size=1024, sample_rate=input_rate, 
+                                             ref_scale=32768.0, ref_level=0.0, y_divs = 10)
 
         self.connect(self.u, self.scope)
 
index 70ec002e9300ccb29691534ab118154eebd96b4b..b9e1a47f3cd26027714c9bfc08240e9357058b48 100755 (executable)
@@ -91,7 +91,7 @@ class fft_sink_base(object):
         
 
 class fft_sink_f(gr.hier_block2, fft_sink_base):
-    def __init__(self, parent, baseband_freq=0,
+    def __init__(self, parent, baseband_freq=0, ref_scale=1.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):
@@ -122,7 +122,10 @@ class fft_sink_f(gr.hier_block2, fft_sink_base):
 
         # FIXME  We need to add 3dB to all bins but the DC bin
         self.log = gr.nlog10_ff(20, self.fft_size,
-                               -20*math.log10(self.fft_size)-10*math.log10(power/self.fft_size))
+                               -20*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))               # 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)
 
@@ -131,7 +134,7 @@ class fft_sink_f(gr.hier_block2, fft_sink_base):
 
 
 class fft_sink_c(gr.hier_block2, fft_sink_base):
-    def __init__(self, parent, baseband_freq=0,
+    def __init__(self, parent, baseband_freq=0, ref_scale=1.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):
@@ -162,7 +165,10 @@ class fft_sink_c(gr.hier_block2, fft_sink_base):
 
         # FIXME  We need to add 3dB to all bins but the DC bin
         self.log = gr.nlog10_ff(20, self.fft_size,
-                                -20*math.log10(self.fft_size)-10*math.log10(power/self.fft_size))
+                                -20*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))              # 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)