From 55d3e4a47958be287648a2021f7e92d81086b2d9 Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Fri, 21 Dec 2012 15:11:39 -0500
Subject: blocks: removes blocks moved to gr-blocks from gnuradio-core.

Also fixes up some other missing moves.
---
 gr-fft/python/CMakeLists.txt |  2 ++
 gr-fft/python/logpwrfft.py   | 18 +++++++++---------
 gr-fft/python/qa_fft.py      | 13 +++++++------
 3 files changed, 18 insertions(+), 15 deletions(-)

(limited to 'gr-fft/python')

diff --git a/gr-fft/python/CMakeLists.txt b/gr-fft/python/CMakeLists.txt
index c259035c33..b437b88a84 100644
--- a/gr-fft/python/CMakeLists.txt
+++ b/gr-fft/python/CMakeLists.txt
@@ -36,6 +36,8 @@ if(ENABLE_TESTING)
 list(APPEND GR_TEST_PYTHON_DIRS
     ${CMAKE_BINARY_DIR}/gr-fft/python
     ${CMAKE_BINARY_DIR}/gr-fft/swig
+    ${CMAKE_BINARY_DIR}/gr-blocks/python
+    ${CMAKE_BINARY_DIR}/gr-blocks/swig
 )
 list(APPEND GR_TEST_TARGET_DEPS gnuradio-fft)
 
diff --git a/gr-fft/python/logpwrfft.py b/gr-fft/python/logpwrfft.py
index f48b60518f..18ccb356d0 100644
--- a/gr-fft/python/logpwrfft.py
+++ b/gr-fft/python/logpwrfft.py
@@ -20,7 +20,7 @@
 #
 
 from gnuradio import gr, window
-from gnuradio.blks2 import stream_to_vector_decimator
+from gnuradio import blocks
 import sys, math
 
 import fft_swig as fft
@@ -54,10 +54,10 @@ class _logpwrfft_base(gr.hier_block2):
                                 gr.io_signature(1, 1, self._item_size),          # Input signature
                                 gr.io_signature(1, 1, gr.sizeof_float*fft_size)) # Output signature
 
-        self._sd = stream_to_vector_decimator(item_size=self._item_size,
-                                              sample_rate=sample_rate,
-                                              vec_rate=frame_rate,
-                                              vec_len=fft_size)
+        self._sd = blocks.stream_to_vector_decimator(item_size=self._item_size,
+                                                     sample_rate=sample_rate,
+                                                     vec_rate=frame_rate,
+                                                     vec_len=fft_size)
 
         if win is None: win = window.blackmanharris
         fft_window = win(fft_size)
@@ -66,10 +66,10 @@ class _logpwrfft_base(gr.hier_block2):
 
         c2magsq = gr.complex_to_mag_squared(fft_size)
         self._avg = filter.single_pole_iir_filter_ff(1.0, fft_size)
-        self._log = gr.nlog10_ff(10, fft_size,
-                                 -20*math.log10(fft_size)              # Adjust for number of bins
-                                 -10*math.log10(window_power/fft_size) # Adjust for windowing loss
-                                 -20*math.log10(ref_scale/2))      # Adjust for reference scale
+        self._log = blocks.nlog10_ff(10, fft_size,
+                                     -20*math.log10(fft_size)              # Adjust for number of bins
+                                     -10*math.log10(window_power/fft_size) # Adjust for windowing loss
+                                     -20*math.log10(ref_scale/2))      # Adjust for reference scale
         self.connect(self, self._sd, fft, c2magsq, self._avg, self._log, self)
 
         self._average = average
diff --git a/gr-fft/python/qa_fft.py b/gr-fft/python/qa_fft.py
index 1c45ac1484..0a66a2c1fc 100755
--- a/gr-fft/python/qa_fft.py
+++ b/gr-fft/python/qa_fft.py
@@ -21,6 +21,7 @@
 
 from gnuradio import gr, gr_unittest
 import fft_swig as fft
+import blocks_swig as blocks
 import sys
 import random
 
@@ -87,9 +88,9 @@ class test_fft(gr_unittest.TestCase):
                            (1646.539306640625-1694.1956787109375j))
 
         src = gr.vector_source_c(src_data)
-        s2v = gr.stream_to_vector(gr.sizeof_gr_complex, fft_size)
+        s2v = blocks.stream_to_vector(gr.sizeof_gr_complex, fft_size)
         op  = fft.fft_vcc(fft_size, True, [], False)
-        v2s = gr.vector_to_stream(gr.sizeof_gr_complex, fft_size)
+        v2s = blocks.vector_to_stream(gr.sizeof_gr_complex, fft_size)
         dst = gr.vector_sink_c()
         tb.connect(src, s2v, op, v2s, dst)
         tb.run()
@@ -141,9 +142,9 @@ class test_fft(gr_unittest.TestCase):
         expected_result = tuple([complex(primes[2*i], primes[2*i+1]) for i in range(fft_size)])
 
         src = gr.vector_source_c(src_data)
-        s2v = gr.stream_to_vector(gr.sizeof_gr_complex, fft_size)
+        s2v = blocks.stream_to_vector(gr.sizeof_gr_complex, fft_size)
         op  = fft.fft_vcc(fft_size, False, [], False)
-        v2s = gr.vector_to_stream(gr.sizeof_gr_complex, fft_size)
+        v2s = blocks.vector_to_stream(gr.sizeof_gr_complex, fft_size)
         dst = gr.vector_sink_c()
         tb.connect(src, s2v, op, v2s, dst)
         tb.run()
@@ -199,9 +200,9 @@ class test_fft(gr_unittest.TestCase):
         nthreads = 2
 
         src = gr.vector_source_c(src_data)
-        s2v = gr.stream_to_vector(gr.sizeof_gr_complex, fft_size)
+        s2v = blocks.stream_to_vector(gr.sizeof_gr_complex, fft_size)
         op  = fft.fft_vcc(fft_size, False, [], False, nthreads)
-        v2s = gr.vector_to_stream(gr.sizeof_gr_complex, fft_size)
+        v2s = blocks.vector_to_stream(gr.sizeof_gr_complex, fft_size)
         dst = gr.vector_sink_c()
         tb.connect(src, s2v, op, v2s, dst)
         tb.run()
-- 
cgit v1.2.3


From cb18c1c206145707b9d5c62cada32ff43f99ca3f Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Thu, 27 Dec 2012 12:51:20 -0500
Subject: filter: moved window around so it's available in both gr-fft and
 gr-filter.

---
 gr-fft/python/CMakeLists.txt    |   1 +
 gr-fft/python/__init__.py       |   2 +-
 gr-fft/python/logpwrfft.py      |   3 +-
 gr-fft/python/window.py         | 179 ++++++++++++++++++++++++++++++++++++++++
 gr-filter/python/CMakeLists.txt |   1 -
 gr-filter/python/__init__.py    |   3 +
 6 files changed, 186 insertions(+), 3 deletions(-)
 create mode 100644 gr-fft/python/window.py

(limited to 'gr-fft/python')

diff --git a/gr-fft/python/CMakeLists.txt b/gr-fft/python/CMakeLists.txt
index b437b88a84..415d87e2e8 100644
--- a/gr-fft/python/CMakeLists.txt
+++ b/gr-fft/python/CMakeLists.txt
@@ -24,6 +24,7 @@ GR_PYTHON_INSTALL(
     FILES
     __init__.py
     logpwrfft.py
+    window.py
     DESTINATION ${GR_PYTHON_DIR}/gnuradio/fft
     COMPONENT "fft_python"
 )
diff --git a/gr-fft/python/__init__.py b/gr-fft/python/__init__.py
index a532109b70..093cc3c696 100644
--- a/gr-fft/python/__init__.py
+++ b/gr-fft/python/__init__.py
@@ -25,4 +25,4 @@ processing blocks for FFT and related functions.
 '''
 
 from fft_swig import *
-from logpwrfft import *
+from window import *
diff --git a/gr-fft/python/logpwrfft.py b/gr-fft/python/logpwrfft.py
index 18ccb356d0..0513169275 100644
--- a/gr-fft/python/logpwrfft.py
+++ b/gr-fft/python/logpwrfft.py
@@ -19,11 +19,12 @@
 # Boston, MA 02110-1301, USA.
 #
 
-from gnuradio import gr, window
+from gnuradio import gr
 from gnuradio import blocks
 import sys, math
 
 import fft_swig as fft
+import window
 
 try:
     from gnuradio import filter
diff --git a/gr-fft/python/window.py b/gr-fft/python/window.py
new file mode 100644
index 0000000000..0065a08a61
--- /dev/null
+++ b/gr-fft/python/window.py
@@ -0,0 +1,179 @@
+#
+# Copyright 2004,2005,2009 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.
+#
+
+'''
+Routines for designing window functions.
+'''
+
+import math
+
+def izero(x):
+    izeroepsilon = 1e-21
+    halfx = x/2.0
+    accum = u = n = 1
+    while 1:
+        temp = halfx/n
+        n += 1
+        temp *= temp
+        u *= temp
+        accum += u
+        if u >= IzeroEPSILON*sum:
+            break
+    return accum
+
+def midm1(fft_size):
+    return (fft_size - 1)/2
+
+def midp1(fft_size):
+    return (fft_size+1)/2
+
+def freq(fft_size):
+    return 2.0*math.pi/fft_size
+
+def rate(fft_size):
+    return 1.0/(fft_size >> 1)
+
+def expn(fft_size):
+    math.log(2.0)/(midn(fft_size) + 1.0)
+
+def hamming(fft_size):
+    window = []
+    for index in xrange(fft_size):
+        window.append(0.54 - 0.46 * math.cos (2 * math.pi / fft_size * index))  # Hamming window
+    return window
+
+def hanning(fft_size):
+    window = []
+    for index in xrange(fft_size):
+        window.append(0.5 - 0.5 * math.cos (2 * math.pi / fft_size * index))  #  von Hann window
+    return window
+
+def welch(fft_size):
+    window = [0 for i in range(fft_size)]
+    j = fft_size-1
+    for index in xrange(midn(fft_size)+1):
+        window[j] = window[index] = (1.0 - math.sqrt((index - midm1(fft_size)) / midp1(fft_size)))
+        j -= 1
+    return window
+
+def parzen(fft_size):
+    window = [0 for i in range(fft_size)]
+    j = fft_size-1
+    for index in xrange(midn(fft_size)+1):
+        window[j] = window[index] = (1.0 - math.abs((index - midm1(fft_size)) / midp1(fft_size)))
+        j -= 1
+    return window
+
+def bartlett(fft_size):
+    mfrq = freq(fft_size)
+    angle = 0
+    window = [0 for i in range(fft_size)]
+    j = fft_size-1
+    for index in xrange(midn(fft_size)+1):
+        window[j] = window[index] = angle
+        angle += freq
+        j -= 1
+    return window
+
+def blackman2(fft_size):
+    mfrq = freq(fft_size)
+    angle = 0
+    window = [0 for i in range(fft_size)]
+    j = fft_size-1
+    for index in xrange(midn(fft_size)+1):
+        cx = math.cos(angle)
+        window[j] = window[index] = (.34401 + (cx * (-.49755 + (cx * .15844))))
+        angle += freq
+        j -= 1
+    return window
+
+def blackman3(fft_size):
+    mfrq = freq(fft_size)
+    angle = 0
+    window = [0 for i in range(fft_size)]
+    j = fft_size-1
+    for index in xrange(midn(fft_size)+1):
+        cx = math.cos(angle)
+        window[j] = window[index] = (.21747 + (cx * (-.45325 + (cx * (.28256 - (cx * .04672))))))
+        angle += freq
+        j -= 1
+    return window
+
+def blackman4(fft_size):
+    mfrq = freq(fft_size)
+    angle = 0
+    window = [0 for i in range(fft_size)]
+    j = fft_size-1
+    for index in xrange(midn(fft_size)+1):
+        cx = math.cos(angle)
+        window[j] = window[index] = (.084037 + (cx * (-.29145 + (cx * (.375696 + (cx * (-.20762 + (cx * .041194))))))))
+        angle += freq
+        j -= 1
+    return window
+
+def exponential(fft_size):
+    expsum = 1.0
+    window = [0 for i in range(fft_size)]
+    j = fft_size-1
+    for index in xrange(midn(fft_size)+1):
+      window[j] = window[i] = (expsum - 1.0)
+      expsum *= expn(fft_size)
+      j -= 1
+    return window
+
+def riemann(fft_size):
+    sr1 = freq(fft_size)
+    window = [0 for i in range(fft_size)]
+    j = fft_size-1
+    for index in xrange(midn(fft_size)):
+        if index == midn(fft_size):
+            window[index] = window[j] = 1.0
+        else:
+            cx = sr1*midn(fft_size) - index
+            window[index] = window[j] = math.sin(cx)/cx
+        j -= 1
+    return window
+
+def kaiser(fft_size,beta):
+    ibeta = 1.0/izero(beta)
+    inm1 = 1.0/(fft_size)
+    window = [0 for i in range(fft_size)]
+    for index in xrange(fft_size):
+        window[index] = izero(beta*math.sqrt(1.0 - (index * inm1)*(index * inm1))) * ibeta
+    return window
+
+# Closure to generate functions to create cos windows
+
+def coswindow(coeffs):
+    def closure(fft_size):
+        window = [0] * fft_size
+        #print list(enumerate(coeffs))
+        for w_index in range(fft_size):
+            for (c_index, coeff) in enumerate(coeffs):
+                window[w_index] += (-1)**c_index * coeff * math.cos(2.0*c_index*math.pi*(w_index+0.5)/(fft_size-1))
+        return window
+    return closure
+
+blackmanharris = coswindow((0.35875,0.48829,0.14128,0.01168))
+nuttall = coswindow((0.3635819,0.4891775,0.1365995,0.0106411))  # Wikipedia calls this Blackman-Nuttall
+nuttall_cfd = coswindow((0.355768,0.487396,0.144232,0.012604)) # Wikipedia calls this Nuttall, continuous first deriv
+flattop = coswindow((1.0,1.93,1.29,0.388,0.032)) # Flat top window, coeffs from Wikipedia
+rectangular = lambda fft_size: [1]*fft_size
diff --git a/gr-filter/python/CMakeLists.txt b/gr-filter/python/CMakeLists.txt
index 1243a8f8c4..1ef5b35641 100644
--- a/gr-filter/python/CMakeLists.txt
+++ b/gr-filter/python/CMakeLists.txt
@@ -27,7 +27,6 @@ GR_PYTHON_INSTALL(
     optfir.py
     pfb.py
     rational_resampler.py
-    window.py
     DESTINATION ${GR_PYTHON_DIR}/gnuradio/filter
     COMPONENT "filter_python"
 )
diff --git a/gr-filter/python/__init__.py b/gr-filter/python/__init__.py
index d7fb112790..ad2f116d72 100644
--- a/gr-filter/python/__init__.py
+++ b/gr-filter/python/__init__.py
@@ -29,3 +29,6 @@ from filterbank import *
 from rational_resampler import *
 import pfb
 import optfir
+
+# Pull this into the filter module
+from gnuradio.fft import window
-- 
cgit v1.2.3