summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Blum2009-09-02 14:18:28 -0700
committerJosh Blum2009-09-02 14:18:28 -0700
commita70c291e3cd4fc3d51f2eebb6b39cdb9d46862da (patch)
tree4daa6284894acfe3ee4f0b3d6fe543d46a569760
parenteb1d1b5cfb474b087d41337356efc0cdb7342f28 (diff)
downloadgnuradio-a70c291e3cd4fc3d51f2eebb6b39cdb9d46862da.tar.gz
gnuradio-a70c291e3cd4fc3d51f2eebb6b39cdb9d46862da.tar.bz2
gnuradio-a70c291e3cd4fc3d51f2eebb6b39cdb9d46862da.zip
waterfall and fft use a common autoscale function
-rw-r--r--gr-wxgui/src/python/common.py25
-rw-r--r--gr-wxgui/src/python/fft_window.py12
-rw-r--r--gr-wxgui/src/python/waterfall_window.py12
3 files changed, 26 insertions, 23 deletions
diff --git a/gr-wxgui/src/python/common.py b/gr-wxgui/src/python/common.py
index d555a1f05..9c97ce1ec 100644
--- a/gr-wxgui/src/python/common.py
+++ b/gr-wxgui/src/python/common.py
@@ -137,6 +137,25 @@ def get_min_max(samples):
scale_factor = 3
mean = numpy.average(samples)
rms = numpy.max([scale_factor*((numpy.sum((samples-mean)**2)/len(samples))**.5), .1])
- min = mean - rms
- max = mean + rms
- return min, max
+ min_val = mean - rms
+ max_val = mean + rms
+ return min_val, max_val
+
+def get_min_max_fft(fft_samps):
+ """
+ Get the minimum and maximum bounds for an array of fft samples.
+ @param samples the array of real values
+ @return a tuple of min, max
+ """
+ #get the peak level (max of the samples)
+ peak_level = numpy.max(fft_samps)
+ #separate noise samples
+ noise_samps = numpy.sort(fft_samps)[:len(fft_samps)/2]
+ #get the noise floor
+ noise_floor = numpy.average(noise_samps)
+ #get the noise deviation
+ noise_dev = numpy.std(noise_samps)
+ #determine the maximum and minimum levels
+ max_level = peak_level
+ min_level = noise_floor - abs(2*noise_dev)
+ return min_level, max_level
diff --git a/gr-wxgui/src/python/fft_window.py b/gr-wxgui/src/python/fft_window.py
index 4c575f1a6..237c8940c 100644
--- a/gr-wxgui/src/python/fft_window.py
+++ b/gr-wxgui/src/python/fft_window.py
@@ -254,17 +254,7 @@ class fft_window(wx.Panel, pubsub.pubsub):
Set the dynamic range and reference level.
"""
if not len(self.samples): return
- #get the peak level (max of the samples)
- peak_level = numpy.max(self.samples)
- #separate noise samples
- noise_samps = numpy.sort(self.samples)[:len(self.samples)/2]
- #get the noise floor
- noise_floor = numpy.average(noise_samps)
- #get the noise deviation
- noise_dev = numpy.std(noise_samps)
- #determine the maximum and minimum levels
- max_level = peak_level
- min_level = noise_floor - abs(2*noise_dev)
+ min_level, max_level = common.get_min_max_fft(self.samples)
#set the range to a clean number of the dynamic range
self[Y_PER_DIV_KEY] = common.get_clean_num(1+(max_level - min_level)/self[Y_DIVS_KEY])
#set the reference level to a multiple of y per div
diff --git a/gr-wxgui/src/python/waterfall_window.py b/gr-wxgui/src/python/waterfall_window.py
index c00992e14..28e67a830 100644
--- a/gr-wxgui/src/python/waterfall_window.py
+++ b/gr-wxgui/src/python/waterfall_window.py
@@ -237,16 +237,10 @@ class waterfall_window(wx.Panel, pubsub.pubsub):
Does not affect the current data in the waterfall.
"""
if not len(self.samples): return
- #get the peak level (max of the samples)
- peak_level = numpy.max(self.samples)
- #get the noise floor (averge the smallest samples)
- noise_floor = numpy.average(numpy.sort(self.samples)[:len(self.samples)/4])
- #padding
- noise_floor -= abs(noise_floor)*.5
- peak_level += abs(peak_level)*.1
+ min_level, max_level = common.get_min_max_fft(self.samples)
#set the range and level
- self[REF_LEVEL_KEY] = peak_level
- self[DYNAMIC_RANGE_KEY] = peak_level - noise_floor
+ self[REF_LEVEL_KEY] = max_level
+ self[DYNAMIC_RANGE_KEY] = max_level - min_level
def handle_msg(self, msg):
"""