summaryrefslogtreecommitdiff
path: root/gr-utils
diff options
context:
space:
mode:
Diffstat (limited to 'gr-utils')
-rw-r--r--gr-utils/CMakeLists.txt4
-rw-r--r--gr-utils/python/CMakeLists.txt (renamed from gr-utils/src/python/CMakeLists.txt)1
-rw-r--r--gr-utils/python/README.plot (renamed from gr-utils/src/python/README.plot)0
-rwxr-xr-xgr-utils/python/gr_modtool (renamed from gr-utils/src/python/gr_modtool)0
-rwxr-xr-xgr-utils/python/gr_plot_char (renamed from gr-utils/src/python/gr_plot_char)0
-rwxr-xr-xgr-utils/python/gr_plot_const (renamed from gr-utils/src/python/gr_plot_const)0
-rw-r--r--gr-utils/python/gr_plot_fft (renamed from gr-utils/src/python/gr_plot_fft)0
-rwxr-xr-xgr-utils/python/gr_plot_fft_c (renamed from gr-utils/src/python/gr_plot_fft_c)0
-rwxr-xr-xgr-utils/python/gr_plot_fft_f (renamed from gr-utils/src/python/gr_plot_fft_f)0
-rwxr-xr-xgr-utils/python/gr_plot_float (renamed from gr-utils/src/python/gr_plot_float)0
-rwxr-xr-xgr-utils/python/gr_plot_int (renamed from gr-utils/src/python/gr_plot_int)0
-rwxr-xr-xgr-utils/python/gr_plot_iq (renamed from gr-utils/src/python/gr_plot_iq)0
-rw-r--r--gr-utils/python/gr_plot_psd (renamed from gr-utils/src/python/gr_plot_psd)0
-rwxr-xr-xgr-utils/python/gr_plot_psd_c (renamed from gr-utils/src/python/gr_plot_psd_c)0
-rwxr-xr-xgr-utils/python/gr_plot_psd_f (renamed from gr-utils/src/python/gr_plot_psd_f)0
-rwxr-xr-xgr-utils/python/gr_plot_qt (renamed from gr-utils/src/python/gr_plot_qt)0
-rwxr-xr-xgr-utils/python/gr_plot_short (renamed from gr-utils/src/python/gr_plot_short)0
-rw-r--r--gr-utils/python/gr_read_file_metadata (renamed from gr-utils/src/python/gr_read_file_metadata)4
-rwxr-xr-xgr-utils/python/grcc (renamed from gr-utils/src/python/grcc)0
-rw-r--r--gr-utils/python/modtool/CMakeLists.txt (renamed from gr-utils/src/python/modtool/CMakeLists.txt)0
-rw-r--r--gr-utils/python/modtool/README.modtool (renamed from gr-utils/src/python/modtool/README.modtool)0
-rw-r--r--gr-utils/python/modtool/__init__.py (renamed from gr-utils/src/python/modtool/__init__.py)0
-rw-r--r--gr-utils/python/modtool/cmakefile_editor.py (renamed from gr-utils/src/python/modtool/cmakefile_editor.py)0
-rw-r--r--gr-utils/python/modtool/code_generator.py (renamed from gr-utils/src/python/modtool/code_generator.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/CMakeLists.txt (renamed from gr-utils/src/python/modtool/gr-newmod/CMakeLists.txt)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/apps/CMakeLists.txt (renamed from gr-utils/src/python/modtool/gr-newmod/apps/CMakeLists.txt)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/CMakeParseArgumentsCopy.cmake (renamed from gr-utils/src/python/modtool/gr-newmod/cmake/Modules/CMakeParseArgumentsCopy.cmake)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/FindCppUnit.cmake (renamed from gr-utils/src/python/modtool/gr-newmod/cmake/Modules/FindCppUnit.cmake)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/FindGnuradioCore.cmake (renamed from gr-utils/src/python/modtool/gr-newmod/cmake/Modules/FindGnuradioCore.cmake)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/FindGruel.cmake (renamed from gr-utils/src/python/modtool/gr-newmod/cmake/Modules/FindGruel.cmake)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/GrMiscUtils.cmake (renamed from gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrMiscUtils.cmake)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/GrPlatform.cmake (renamed from gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrPlatform.cmake)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/GrPython.cmake (renamed from gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrPython.cmake)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/GrSwig.cmake (renamed from gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrSwig.cmake)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/Modules/GrTest.cmake (renamed from gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrTest.cmake)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/cmake/cmake_uninstall.cmake.in (renamed from gr-utils/src/python/modtool/gr-newmod/cmake/cmake_uninstall.cmake.in)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/CMakeLists.txt (renamed from gr-utils/src/python/modtool/gr-newmod/docs/CMakeLists.txt)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/README.howto (renamed from gr-utils/src/python/modtool/gr-newmod/docs/README.howto)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/CMakeLists.txt (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/CMakeLists.txt)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/Doxyfile.in (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/Doxyfile.in)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/Doxyfile.swig_doc.in (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/Doxyfile.swig_doc.in)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/__init__.py (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/__init__.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/base.py (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/base.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/__init__.py (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/__init__.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compound.py (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compound.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compoundsuper.py (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compoundsuper.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/index.py (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/index.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/indexsuper.py (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/indexsuper.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/text.py (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/text.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/other/group_defs.dox (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/other/group_defs.dox)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/other/main_page.dox (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/other/main_page.dox)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py (renamed from gr-utils/src/python/modtool/gr-newmod/docs/doxygen/swig_doc.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/grc/CMakeLists.txt (renamed from gr-utils/src/python/modtool/gr-newmod/grc/CMakeLists.txt)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/include/howto/CMakeLists.txt (renamed from gr-utils/src/python/modtool/gr-newmod/include/howto/CMakeLists.txt)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/include/howto/api.h (renamed from gr-utils/src/python/modtool/gr-newmod/include/howto/api.h)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/lib/CMakeLists.txt (renamed from gr-utils/src/python/modtool/gr-newmod/lib/CMakeLists.txt)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/lib/qa_howto.cc (renamed from gr-utils/src/python/modtool/gr-newmod/lib/qa_howto.cc)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/lib/qa_howto.h (renamed from gr-utils/src/python/modtool/gr-newmod/lib/qa_howto.h)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/lib/test_howto.cc (renamed from gr-utils/src/python/modtool/gr-newmod/lib/test_howto.cc)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/python/CMakeLists.txt (renamed from gr-utils/src/python/modtool/gr-newmod/python/CMakeLists.txt)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/python/__init__.py (renamed from gr-utils/src/python/modtool/gr-newmod/python/__init__.py)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/swig/CMakeLists.txt (renamed from gr-utils/src/python/modtool/gr-newmod/swig/CMakeLists.txt)0
-rw-r--r--gr-utils/python/modtool/gr-newmod/swig/howto_swig.i (renamed from gr-utils/src/python/modtool/gr-newmod/swig/howto_swig.i)0
-rw-r--r--gr-utils/python/modtool/grc_xml_generator.py (renamed from gr-utils/src/python/modtool/grc_xml_generator.py)0
-rw-r--r--gr-utils/python/modtool/modtool.conf.in (renamed from gr-utils/src/python/modtool/modtool.conf.in)0
-rw-r--r--gr-utils/python/modtool/modtool_add.py (renamed from gr-utils/src/python/modtool/modtool_add.py)0
-rw-r--r--gr-utils/python/modtool/modtool_base.py (renamed from gr-utils/src/python/modtool/modtool_base.py)0
-rw-r--r--gr-utils/python/modtool/modtool_disable.py (renamed from gr-utils/src/python/modtool/modtool_disable.py)0
-rw-r--r--gr-utils/python/modtool/modtool_help.py (renamed from gr-utils/src/python/modtool/modtool_help.py)0
-rw-r--r--gr-utils/python/modtool/modtool_info.py (renamed from gr-utils/src/python/modtool/modtool_info.py)0
-rw-r--r--gr-utils/python/modtool/modtool_makexml.py (renamed from gr-utils/src/python/modtool/modtool_makexml.py)0
-rw-r--r--gr-utils/python/modtool/modtool_newmod.py (renamed from gr-utils/src/python/modtool/modtool_newmod.py)0
-rw-r--r--gr-utils/python/modtool/modtool_rm.py (renamed from gr-utils/src/python/modtool/modtool_rm.py)0
-rw-r--r--gr-utils/python/modtool/parser_cc_block.py (renamed from gr-utils/src/python/modtool/parser_cc_block.py)0
-rw-r--r--gr-utils/python/modtool/templates.py (renamed from gr-utils/src/python/modtool/templates.py)0
-rw-r--r--gr-utils/python/modtool/util_functions.py (renamed from gr-utils/src/python/modtool/util_functions.py)0
-rw-r--r--gr-utils/python/plot_data.py (renamed from gr-utils/src/python/plot_data.py)3
-rwxr-xr-xgr-utils/python/plot_fft_base.py (renamed from gr-utils/src/python/plot_fft_base.py)0
-rwxr-xr-xgr-utils/python/plot_psd_base.py (renamed from gr-utils/src/python/plot_psd_base.py)0
-rw-r--r--gr-utils/python/pyqt_filter.py (renamed from gr-utils/src/python/pyqt_filter.py)0
-rw-r--r--gr-utils/python/pyqt_filter.ui (renamed from gr-utils/src/python/pyqt_filter.ui)0
-rw-r--r--gr-utils/python/pyqt_plot.py (renamed from gr-utils/src/python/pyqt_plot.py)0
-rw-r--r--gr-utils/python/pyqt_plot.ui (renamed from gr-utils/src/python/pyqt_plot.ui)0
-rwxr-xr-xgr-utils/src/python/gr_filter_design874
85 files changed, 7 insertions, 879 deletions
diff --git a/gr-utils/CMakeLists.txt b/gr-utils/CMakeLists.txt
index 50ec7e86cf..e4d64d54c0 100644
--- a/gr-utils/CMakeLists.txt
+++ b/gr-utils/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright 2011 Free Software Foundation, Inc.
+# Copyright 2011,2012 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -48,7 +48,7 @@ CPACK_COMPONENT("utils"
########################################################################
# Add subdirectories
########################################################################
-add_subdirectory(src/python)
+add_subdirectory(python)
endif(ENABLE_GR_UTILS)
diff --git a/gr-utils/src/python/CMakeLists.txt b/gr-utils/python/CMakeLists.txt
index ef4e66d13f..fc21dc654d 100644
--- a/gr-utils/src/python/CMakeLists.txt
+++ b/gr-utils/python/CMakeLists.txt
@@ -49,7 +49,6 @@ GR_PYTHON_INSTALL(
gr_plot_iq
gr_plot_short
gr_plot_qt
- gr_filter_design
gr_read_file_metadata
grcc
DESTINATION ${GR_RUNTIME_DIR}
diff --git a/gr-utils/src/python/README.plot b/gr-utils/python/README.plot
index 60f14c669c..60f14c669c 100644
--- a/gr-utils/src/python/README.plot
+++ b/gr-utils/python/README.plot
diff --git a/gr-utils/src/python/gr_modtool b/gr-utils/python/gr_modtool
index 8c5c710aff..8c5c710aff 100755
--- a/gr-utils/src/python/gr_modtool
+++ b/gr-utils/python/gr_modtool
diff --git a/gr-utils/src/python/gr_plot_char b/gr-utils/python/gr_plot_char
index a2b93a63c6..a2b93a63c6 100755
--- a/gr-utils/src/python/gr_plot_char
+++ b/gr-utils/python/gr_plot_char
diff --git a/gr-utils/src/python/gr_plot_const b/gr-utils/python/gr_plot_const
index 749ad035b5..749ad035b5 100755
--- a/gr-utils/src/python/gr_plot_const
+++ b/gr-utils/python/gr_plot_const
diff --git a/gr-utils/src/python/gr_plot_fft b/gr-utils/python/gr_plot_fft
index 4343481645..4343481645 100644
--- a/gr-utils/src/python/gr_plot_fft
+++ b/gr-utils/python/gr_plot_fft
diff --git a/gr-utils/src/python/gr_plot_fft_c b/gr-utils/python/gr_plot_fft_c
index 43e808d95a..43e808d95a 100755
--- a/gr-utils/src/python/gr_plot_fft_c
+++ b/gr-utils/python/gr_plot_fft_c
diff --git a/gr-utils/src/python/gr_plot_fft_f b/gr-utils/python/gr_plot_fft_f
index dee9b17dea..dee9b17dea 100755
--- a/gr-utils/src/python/gr_plot_fft_f
+++ b/gr-utils/python/gr_plot_fft_f
diff --git a/gr-utils/src/python/gr_plot_float b/gr-utils/python/gr_plot_float
index 22806e48ae..22806e48ae 100755
--- a/gr-utils/src/python/gr_plot_float
+++ b/gr-utils/python/gr_plot_float
diff --git a/gr-utils/src/python/gr_plot_int b/gr-utils/python/gr_plot_int
index 355ddf0189..355ddf0189 100755
--- a/gr-utils/src/python/gr_plot_int
+++ b/gr-utils/python/gr_plot_int
diff --git a/gr-utils/src/python/gr_plot_iq b/gr-utils/python/gr_plot_iq
index bf8077b6b4..bf8077b6b4 100755
--- a/gr-utils/src/python/gr_plot_iq
+++ b/gr-utils/python/gr_plot_iq
diff --git a/gr-utils/src/python/gr_plot_psd b/gr-utils/python/gr_plot_psd
index 059ca6b645..059ca6b645 100644
--- a/gr-utils/src/python/gr_plot_psd
+++ b/gr-utils/python/gr_plot_psd
diff --git a/gr-utils/src/python/gr_plot_psd_c b/gr-utils/python/gr_plot_psd_c
index fff2bff0f2..fff2bff0f2 100755
--- a/gr-utils/src/python/gr_plot_psd_c
+++ b/gr-utils/python/gr_plot_psd_c
diff --git a/gr-utils/src/python/gr_plot_psd_f b/gr-utils/python/gr_plot_psd_f
index ec67994797..ec67994797 100755
--- a/gr-utils/src/python/gr_plot_psd_f
+++ b/gr-utils/python/gr_plot_psd_f
diff --git a/gr-utils/src/python/gr_plot_qt b/gr-utils/python/gr_plot_qt
index 153359f0c6..153359f0c6 100755
--- a/gr-utils/src/python/gr_plot_qt
+++ b/gr-utils/python/gr_plot_qt
diff --git a/gr-utils/src/python/gr_plot_short b/gr-utils/python/gr_plot_short
index 702a2a94a6..702a2a94a6 100755
--- a/gr-utils/src/python/gr_plot_short
+++ b/gr-utils/python/gr_plot_short
diff --git a/gr-utils/src/python/gr_read_file_metadata b/gr-utils/python/gr_read_file_metadata
index cf0cd5b116..3bc448b04e 100644
--- a/gr-utils/src/python/gr_read_file_metadata
+++ b/gr-utils/python/gr_read_file_metadata
@@ -40,7 +40,7 @@ def main(filename, detached=False):
# Convert from string to PMT (should be a dictionary)
try:
- header = pmt.pmt_deserialize_str(header_str)
+ header = pmt.deserialize_str(header_str)
except RuntimeError:
sys.stderr.write("Could not deserialize header: invalid or corrupt data file.\n")
sys.exit(1)
@@ -54,7 +54,7 @@ def main(filename, detached=False):
break
try:
- extra = pmt.pmt_deserialize_str(extra_str)
+ extra = pmt.deserialize_str(extra_str)
except RuntimeError:
sys.stderr.write("Could not deserialize extras: invalid or corrupt data file.\n")
sys.exit(1)
diff --git a/gr-utils/src/python/grcc b/gr-utils/python/grcc
index 7e5665dc05..7e5665dc05 100755
--- a/gr-utils/src/python/grcc
+++ b/gr-utils/python/grcc
diff --git a/gr-utils/src/python/modtool/CMakeLists.txt b/gr-utils/python/modtool/CMakeLists.txt
index 7647c86f67..7647c86f67 100644
--- a/gr-utils/src/python/modtool/CMakeLists.txt
+++ b/gr-utils/python/modtool/CMakeLists.txt
diff --git a/gr-utils/src/python/modtool/README.modtool b/gr-utils/python/modtool/README.modtool
index 84c2e66c11..84c2e66c11 100644
--- a/gr-utils/src/python/modtool/README.modtool
+++ b/gr-utils/python/modtool/README.modtool
diff --git a/gr-utils/src/python/modtool/__init__.py b/gr-utils/python/modtool/__init__.py
index a242722ab4..a242722ab4 100644
--- a/gr-utils/src/python/modtool/__init__.py
+++ b/gr-utils/python/modtool/__init__.py
diff --git a/gr-utils/src/python/modtool/cmakefile_editor.py b/gr-utils/python/modtool/cmakefile_editor.py
index 3d90b8d163..3d90b8d163 100644
--- a/gr-utils/src/python/modtool/cmakefile_editor.py
+++ b/gr-utils/python/modtool/cmakefile_editor.py
diff --git a/gr-utils/src/python/modtool/code_generator.py b/gr-utils/python/modtool/code_generator.py
index 525b3d1e9a..525b3d1e9a 100644
--- a/gr-utils/src/python/modtool/code_generator.py
+++ b/gr-utils/python/modtool/code_generator.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/CMakeLists.txt b/gr-utils/python/modtool/gr-newmod/CMakeLists.txt
index deea791f80..deea791f80 100644
--- a/gr-utils/src/python/modtool/gr-newmod/CMakeLists.txt
+++ b/gr-utils/python/modtool/gr-newmod/CMakeLists.txt
diff --git a/gr-utils/src/python/modtool/gr-newmod/apps/CMakeLists.txt b/gr-utils/python/modtool/gr-newmod/apps/CMakeLists.txt
index c837d77f67..c837d77f67 100644
--- a/gr-utils/src/python/modtool/gr-newmod/apps/CMakeLists.txt
+++ b/gr-utils/python/modtool/gr-newmod/apps/CMakeLists.txt
diff --git a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/CMakeParseArgumentsCopy.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/CMakeParseArgumentsCopy.cmake
index 7ce4c49ae5..7ce4c49ae5 100644
--- a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/CMakeParseArgumentsCopy.cmake
+++ b/gr-utils/python/modtool/gr-newmod/cmake/Modules/CMakeParseArgumentsCopy.cmake
diff --git a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/FindCppUnit.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/FindCppUnit.cmake
index 9af308f84b..9af308f84b 100644
--- a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/FindCppUnit.cmake
+++ b/gr-utils/python/modtool/gr-newmod/cmake/Modules/FindCppUnit.cmake
diff --git a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/FindGnuradioCore.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/FindGnuradioCore.cmake
index 3773588a70..3773588a70 100644
--- a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/FindGnuradioCore.cmake
+++ b/gr-utils/python/modtool/gr-newmod/cmake/Modules/FindGnuradioCore.cmake
diff --git a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/FindGruel.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/FindGruel.cmake
index 58dff70444..58dff70444 100644
--- a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/FindGruel.cmake
+++ b/gr-utils/python/modtool/gr-newmod/cmake/Modules/FindGruel.cmake
diff --git a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrMiscUtils.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrMiscUtils.cmake
index 9331d5debc..9331d5debc 100644
--- a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrMiscUtils.cmake
+++ b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrMiscUtils.cmake
diff --git a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrPlatform.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrPlatform.cmake
index a2e4f3b34e..a2e4f3b34e 100644
--- a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrPlatform.cmake
+++ b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrPlatform.cmake
diff --git a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrPython.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrPython.cmake
index efdddf371f..efdddf371f 100644
--- a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrPython.cmake
+++ b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrPython.cmake
diff --git a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrSwig.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrSwig.cmake
index 6ba5ee3a5c..6ba5ee3a5c 100644
--- a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrSwig.cmake
+++ b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrSwig.cmake
diff --git a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrTest.cmake b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrTest.cmake
index 6174c034e9..6174c034e9 100644
--- a/gr-utils/src/python/modtool/gr-newmod/cmake/Modules/GrTest.cmake
+++ b/gr-utils/python/modtool/gr-newmod/cmake/Modules/GrTest.cmake
diff --git a/gr-utils/src/python/modtool/gr-newmod/cmake/cmake_uninstall.cmake.in b/gr-utils/python/modtool/gr-newmod/cmake/cmake_uninstall.cmake.in
index 9ae1ae4bd6..9ae1ae4bd6 100644
--- a/gr-utils/src/python/modtool/gr-newmod/cmake/cmake_uninstall.cmake.in
+++ b/gr-utils/python/modtool/gr-newmod/cmake/cmake_uninstall.cmake.in
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/CMakeLists.txt b/gr-utils/python/modtool/gr-newmod/docs/CMakeLists.txt
index f16fbf6db4..f16fbf6db4 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/CMakeLists.txt
+++ b/gr-utils/python/modtool/gr-newmod/docs/CMakeLists.txt
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/README.howto b/gr-utils/python/modtool/gr-newmod/docs/README.howto
index a0a6c0f19d..a0a6c0f19d 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/README.howto
+++ b/gr-utils/python/modtool/gr-newmod/docs/README.howto
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/CMakeLists.txt b/gr-utils/python/modtool/gr-newmod/docs/doxygen/CMakeLists.txt
index 1b4479929b..1b4479929b 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/CMakeLists.txt
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/CMakeLists.txt
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/Doxyfile.in b/gr-utils/python/modtool/gr-newmod/docs/doxygen/Doxyfile.in
index cb6a913bbe..cb6a913bbe 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/Doxyfile.in
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/Doxyfile.in
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/Doxyfile.swig_doc.in b/gr-utils/python/modtool/gr-newmod/docs/doxygen/Doxyfile.swig_doc.in
index 50b8aa81d6..50b8aa81d6 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/Doxyfile.swig_doc.in
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/Doxyfile.swig_doc.in
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/__init__.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/__init__.py
index 5cd0b3c6c5..5cd0b3c6c5 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/__init__.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/__init__.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/base.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/base.py
index e8f026ab90..e8f026ab90 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/base.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/base.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py
index 0132ab86fd..0132ab86fd 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/__init__.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/__init__.py
index 39823979f6..39823979f6 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/__init__.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/__init__.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compound.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compound.py
index 1522ac23f1..1522ac23f1 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compound.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compound.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compoundsuper.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compoundsuper.py
index 6255dda163..6255dda163 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compoundsuper.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/compoundsuper.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/index.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/index.py
index 7a70e14a1a..7a70e14a1a 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/index.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/index.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/indexsuper.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/indexsuper.py
index a991530198..a991530198 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/indexsuper.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/generated/indexsuper.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/text.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/text.py
index 629edd180d..629edd180d 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/doxyxml/text.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/text.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/other/group_defs.dox b/gr-utils/python/modtool/gr-newmod/docs/doxygen/other/group_defs.dox
index 708f8c6d98..708f8c6d98 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/other/group_defs.dox
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/other/group_defs.dox
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/other/main_page.dox b/gr-utils/python/modtool/gr-newmod/docs/doxygen/other/main_page.dox
index 6357044912..6357044912 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/other/main_page.dox
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/other/main_page.dox
diff --git a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/swig_doc.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py
index 4e1ce2e475..4e1ce2e475 100644
--- a/gr-utils/src/python/modtool/gr-newmod/docs/doxygen/swig_doc.py
+++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/grc/CMakeLists.txt b/gr-utils/python/modtool/gr-newmod/grc/CMakeLists.txt
index d776de7523..d776de7523 100644
--- a/gr-utils/src/python/modtool/gr-newmod/grc/CMakeLists.txt
+++ b/gr-utils/python/modtool/gr-newmod/grc/CMakeLists.txt
diff --git a/gr-utils/src/python/modtool/gr-newmod/include/howto/CMakeLists.txt b/gr-utils/python/modtool/gr-newmod/include/howto/CMakeLists.txt
index 1cfb5a6eac..1cfb5a6eac 100644
--- a/gr-utils/src/python/modtool/gr-newmod/include/howto/CMakeLists.txt
+++ b/gr-utils/python/modtool/gr-newmod/include/howto/CMakeLists.txt
diff --git a/gr-utils/src/python/modtool/gr-newmod/include/howto/api.h b/gr-utils/python/modtool/gr-newmod/include/howto/api.h
index 5263a1cf70..5263a1cf70 100644
--- a/gr-utils/src/python/modtool/gr-newmod/include/howto/api.h
+++ b/gr-utils/python/modtool/gr-newmod/include/howto/api.h
diff --git a/gr-utils/src/python/modtool/gr-newmod/lib/CMakeLists.txt b/gr-utils/python/modtool/gr-newmod/lib/CMakeLists.txt
index a9df565cf2..a9df565cf2 100644
--- a/gr-utils/src/python/modtool/gr-newmod/lib/CMakeLists.txt
+++ b/gr-utils/python/modtool/gr-newmod/lib/CMakeLists.txt
diff --git a/gr-utils/src/python/modtool/gr-newmod/lib/qa_howto.cc b/gr-utils/python/modtool/gr-newmod/lib/qa_howto.cc
index f86aed4aa1..f86aed4aa1 100644
--- a/gr-utils/src/python/modtool/gr-newmod/lib/qa_howto.cc
+++ b/gr-utils/python/modtool/gr-newmod/lib/qa_howto.cc
diff --git a/gr-utils/src/python/modtool/gr-newmod/lib/qa_howto.h b/gr-utils/python/modtool/gr-newmod/lib/qa_howto.h
index 8eff956b61..8eff956b61 100644
--- a/gr-utils/src/python/modtool/gr-newmod/lib/qa_howto.h
+++ b/gr-utils/python/modtool/gr-newmod/lib/qa_howto.h
diff --git a/gr-utils/src/python/modtool/gr-newmod/lib/test_howto.cc b/gr-utils/python/modtool/gr-newmod/lib/test_howto.cc
index bf344265d7..bf344265d7 100644
--- a/gr-utils/src/python/modtool/gr-newmod/lib/test_howto.cc
+++ b/gr-utils/python/modtool/gr-newmod/lib/test_howto.cc
diff --git a/gr-utils/src/python/modtool/gr-newmod/python/CMakeLists.txt b/gr-utils/python/modtool/gr-newmod/python/CMakeLists.txt
index 9901854c8f..9901854c8f 100644
--- a/gr-utils/src/python/modtool/gr-newmod/python/CMakeLists.txt
+++ b/gr-utils/python/modtool/gr-newmod/python/CMakeLists.txt
diff --git a/gr-utils/src/python/modtool/gr-newmod/python/__init__.py b/gr-utils/python/modtool/gr-newmod/python/__init__.py
index 575cbfc222..575cbfc222 100644
--- a/gr-utils/src/python/modtool/gr-newmod/python/__init__.py
+++ b/gr-utils/python/modtool/gr-newmod/python/__init__.py
diff --git a/gr-utils/src/python/modtool/gr-newmod/swig/CMakeLists.txt b/gr-utils/python/modtool/gr-newmod/swig/CMakeLists.txt
index 1e3e59e2c4..1e3e59e2c4 100644
--- a/gr-utils/src/python/modtool/gr-newmod/swig/CMakeLists.txt
+++ b/gr-utils/python/modtool/gr-newmod/swig/CMakeLists.txt
diff --git a/gr-utils/src/python/modtool/gr-newmod/swig/howto_swig.i b/gr-utils/python/modtool/gr-newmod/swig/howto_swig.i
index 4627d48d34..4627d48d34 100644
--- a/gr-utils/src/python/modtool/gr-newmod/swig/howto_swig.i
+++ b/gr-utils/python/modtool/gr-newmod/swig/howto_swig.i
diff --git a/gr-utils/src/python/modtool/grc_xml_generator.py b/gr-utils/python/modtool/grc_xml_generator.py
index 7ccd443196..7ccd443196 100644
--- a/gr-utils/src/python/modtool/grc_xml_generator.py
+++ b/gr-utils/python/modtool/grc_xml_generator.py
diff --git a/gr-utils/src/python/modtool/modtool.conf.in b/gr-utils/python/modtool/modtool.conf.in
index 8b3df1b9cf..8b3df1b9cf 100644
--- a/gr-utils/src/python/modtool/modtool.conf.in
+++ b/gr-utils/python/modtool/modtool.conf.in
diff --git a/gr-utils/src/python/modtool/modtool_add.py b/gr-utils/python/modtool/modtool_add.py
index e1d61cf0fb..e1d61cf0fb 100644
--- a/gr-utils/src/python/modtool/modtool_add.py
+++ b/gr-utils/python/modtool/modtool_add.py
diff --git a/gr-utils/src/python/modtool/modtool_base.py b/gr-utils/python/modtool/modtool_base.py
index 3f8f2bc3c7..3f8f2bc3c7 100644
--- a/gr-utils/src/python/modtool/modtool_base.py
+++ b/gr-utils/python/modtool/modtool_base.py
diff --git a/gr-utils/src/python/modtool/modtool_disable.py b/gr-utils/python/modtool/modtool_disable.py
index 36725e5578..36725e5578 100644
--- a/gr-utils/src/python/modtool/modtool_disable.py
+++ b/gr-utils/python/modtool/modtool_disable.py
diff --git a/gr-utils/src/python/modtool/modtool_help.py b/gr-utils/python/modtool/modtool_help.py
index 76d9fd28bd..76d9fd28bd 100644
--- a/gr-utils/src/python/modtool/modtool_help.py
+++ b/gr-utils/python/modtool/modtool_help.py
diff --git a/gr-utils/src/python/modtool/modtool_info.py b/gr-utils/python/modtool/modtool_info.py
index 680bd41b99..680bd41b99 100644
--- a/gr-utils/src/python/modtool/modtool_info.py
+++ b/gr-utils/python/modtool/modtool_info.py
diff --git a/gr-utils/src/python/modtool/modtool_makexml.py b/gr-utils/python/modtool/modtool_makexml.py
index 777cc09e1f..777cc09e1f 100644
--- a/gr-utils/src/python/modtool/modtool_makexml.py
+++ b/gr-utils/python/modtool/modtool_makexml.py
diff --git a/gr-utils/src/python/modtool/modtool_newmod.py b/gr-utils/python/modtool/modtool_newmod.py
index 0613d5fbe1..0613d5fbe1 100644
--- a/gr-utils/src/python/modtool/modtool_newmod.py
+++ b/gr-utils/python/modtool/modtool_newmod.py
diff --git a/gr-utils/src/python/modtool/modtool_rm.py b/gr-utils/python/modtool/modtool_rm.py
index 32dfee4806..32dfee4806 100644
--- a/gr-utils/src/python/modtool/modtool_rm.py
+++ b/gr-utils/python/modtool/modtool_rm.py
diff --git a/gr-utils/src/python/modtool/parser_cc_block.py b/gr-utils/python/modtool/parser_cc_block.py
index 0d1d75f29a..0d1d75f29a 100644
--- a/gr-utils/src/python/modtool/parser_cc_block.py
+++ b/gr-utils/python/modtool/parser_cc_block.py
diff --git a/gr-utils/src/python/modtool/templates.py b/gr-utils/python/modtool/templates.py
index 87eb9f470c..87eb9f470c 100644
--- a/gr-utils/src/python/modtool/templates.py
+++ b/gr-utils/python/modtool/templates.py
diff --git a/gr-utils/src/python/modtool/util_functions.py b/gr-utils/python/modtool/util_functions.py
index 4ca294ac31..4ca294ac31 100644
--- a/gr-utils/src/python/modtool/util_functions.py
+++ b/gr-utils/python/modtool/util_functions.py
diff --git a/gr-utils/src/python/plot_data.py b/gr-utils/python/plot_data.py
index 242ca2a4b0..2ae3b1d5b3 100644
--- a/gr-utils/src/python/plot_data.py
+++ b/gr-utils/python/plot_data.py
@@ -18,6 +18,9 @@
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
#
+"""
+Utility to help plotting data from files.
+"""
try:
import scipy
diff --git a/gr-utils/src/python/plot_fft_base.py b/gr-utils/python/plot_fft_base.py
index 4afdc3a360..4afdc3a360 100755
--- a/gr-utils/src/python/plot_fft_base.py
+++ b/gr-utils/python/plot_fft_base.py
diff --git a/gr-utils/src/python/plot_psd_base.py b/gr-utils/python/plot_psd_base.py
index fe3c9e12b7..fe3c9e12b7 100755
--- a/gr-utils/src/python/plot_psd_base.py
+++ b/gr-utils/python/plot_psd_base.py
diff --git a/gr-utils/src/python/pyqt_filter.py b/gr-utils/python/pyqt_filter.py
index 0c781f2347..0c781f2347 100644
--- a/gr-utils/src/python/pyqt_filter.py
+++ b/gr-utils/python/pyqt_filter.py
diff --git a/gr-utils/src/python/pyqt_filter.ui b/gr-utils/python/pyqt_filter.ui
index 9853352e2e..9853352e2e 100644
--- a/gr-utils/src/python/pyqt_filter.ui
+++ b/gr-utils/python/pyqt_filter.ui
diff --git a/gr-utils/src/python/pyqt_plot.py b/gr-utils/python/pyqt_plot.py
index 5650135abf..5650135abf 100644
--- a/gr-utils/src/python/pyqt_plot.py
+++ b/gr-utils/python/pyqt_plot.py
diff --git a/gr-utils/src/python/pyqt_plot.ui b/gr-utils/python/pyqt_plot.ui
index 55c72fda26..55c72fda26 100644
--- a/gr-utils/src/python/pyqt_plot.ui
+++ b/gr-utils/python/pyqt_plot.ui
diff --git a/gr-utils/src/python/gr_filter_design b/gr-utils/src/python/gr_filter_design
deleted file mode 100755
index cc21ea5e76..0000000000
--- a/gr-utils/src/python/gr_filter_design
+++ /dev/null
@@ -1,874 +0,0 @@
-#!/usr/bin/env python
-
-import sys, os, re, csv
-from optparse import OptionParser
-from gnuradio import gr, blks2, eng_notation
-
-try:
- import scipy
- from scipy import fftpack
-except ImportError:
- print "Please install SciPy to run this script (http://www.scipy.org/)"
- raise SystemExit, 1
-
-try:
- from PyQt4 import Qt, QtCore, QtGui
-except ImportError:
- print "Please install PyQt4 to run this script (http://www.riverbankcomputing.co.uk/software/pyqt/download)"
- raise SystemExit, 1
-
-try:
- import PyQt4.Qwt5 as Qwt
-except ImportError:
- print "Please install PyQwt5 to run this script (http://pyqwt.sourceforge.net/)"
- raise SystemExit, 1
-
-try:
- from gnuradio.pyqt_filter import Ui_MainWindow
-except ImportError:
- print "Could not import from pyqt_filter. Please build with \"pyuic4 pyqt_filter.ui -o pyqt_filter.py\""
- raise SystemExit, 1
-
-
-class gr_plot_filter(QtGui.QMainWindow):
- def __init__(self, qapp, options):
- QtGui.QWidget.__init__(self, None)
- self.gui = Ui_MainWindow()
- self.gui.setupUi(self)
-
- self.connect(self.gui.action_save,
- Qt.SIGNAL("activated()"),
- self.action_save_dialog)
- self.connect(self.gui.action_open,
- Qt.SIGNAL("activated()"),
- self.action_open_dialog)
-
-
- self.connect(self.gui.filterTypeComboBox,
- Qt.SIGNAL("currentIndexChanged(const QString&)"),
- self.changed_filter_type)
- self.connect(self.gui.filterDesignTypeComboBox,
- Qt.SIGNAL("currentIndexChanged(const QString&)"),
- self.changed_filter_design_type)
-
- self.connect(self.gui.designButton,
- Qt.SIGNAL("released()"),
- self.design)
-
- self.connect(self.gui.tabGroup,
- Qt.SIGNAL("currentChanged(int)"),
- self.tab_changed)
-
- self.connect(self.gui.nfftEdit,
- Qt.SIGNAL("textEdited(QString)"),
- self.nfft_edit_changed)
-
- self.gui.designButton.setShortcut(QtCore.Qt.Key_Return)
-
- self.taps = []
- self.fftdB = []
- self.fftDeg = []
- self.groupDelay = []
- self.nfftpts = int(10000)
- self.gui.nfftEdit.setText(Qt.QString("%1").arg(self.nfftpts))
-
- self.firFilters = ("Low Pass", "Band Pass", "Complex Band Pass", "Band Notch",
- "High Pass", "Root Raised Cosine", "Gaussian")
- self.optFilters = ("Low Pass", "Band Pass", "Complex Band Pass",
- "Band Notch", "High Pass")
-
- self.set_windowed()
-
- # Initialize to LPF
- self.gui.filterTypeWidget.setCurrentWidget(self.gui.firlpfPage)
-
- # Set Axis labels
- self.gui.freqPlot.setAxisTitle(self.gui.freqPlot.xBottom,
- "Frequency (Hz)")
- self.gui.freqPlot.setAxisTitle(self.gui.freqPlot.yLeft,
- "Magnitude (dB)")
- self.gui.timePlot.setAxisTitle(self.gui.timePlot.xBottom,
- "Tap number")
- self.gui.timePlot.setAxisTitle(self.gui.timePlot.yLeft,
- "Amplitude")
- self.gui.phasePlot.setAxisTitle(self.gui.phasePlot.xBottom,
- "Frequency (Hz)")
- self.gui.phasePlot.setAxisTitle(self.gui.phasePlot.yLeft,
- "Phase (Radians)")
- self.gui.groupPlot.setAxisTitle(self.gui.groupPlot.xBottom,
- "Frequency (Hz)")
- self.gui.groupPlot.setAxisTitle(self.gui.groupPlot.yLeft,
- "Delay (sec)")
-
- # Set up plot curves
- self.rcurve = Qwt.QwtPlotCurve("Real")
- self.rcurve.attach(self.gui.timePlot)
- self.icurve = Qwt.QwtPlotCurve("Imag")
- self.icurve.attach(self.gui.timePlot)
-
- self.freqcurve = Qwt.QwtPlotCurve("PSD")
- self.freqcurve.attach(self.gui.freqPlot)
-
- self.phasecurve = Qwt.QwtPlotCurve("Phase")
- self.phasecurve.attach(self.gui.phasePlot)
-
- self.groupcurve = Qwt.QwtPlotCurve("Group Delay")
- self.groupcurve.attach(self.gui.groupPlot)
-
- # Create zoom functionality for the plots
- self.timeZoomer = Qwt.QwtPlotZoomer(self.gui.timePlot.xBottom,
- self.gui.timePlot.yLeft,
- Qwt.QwtPicker.PointSelection,
- Qwt.QwtPicker.AlwaysOn,
- self.gui.timePlot.canvas())
-
- self.freqZoomer = Qwt.QwtPlotZoomer(self.gui.freqPlot.xBottom,
- self.gui.freqPlot.yLeft,
- Qwt.QwtPicker.PointSelection,
- Qwt.QwtPicker.AlwaysOn,
- self.gui.freqPlot.canvas())
-
- self.phaseZoomer = Qwt.QwtPlotZoomer(self.gui.phasePlot.xBottom,
- self.gui.phasePlot.yLeft,
- Qwt.QwtPicker.PointSelection,
- Qwt.QwtPicker.AlwaysOn,
- self.gui.phasePlot.canvas())
-
- self.groupZoomer = Qwt.QwtPlotZoomer(self.gui.groupPlot.xBottom,
- self.gui.groupPlot.yLeft,
- Qwt.QwtPicker.PointSelection,
- Qwt.QwtPicker.AlwaysOn,
- self.gui.groupPlot.canvas())
-
- # Set up pen for colors and line width
- blue = QtGui.qRgb(0x00, 0x00, 0xFF)
- blueBrush = Qt.QBrush(Qt.QColor(blue))
- red = QtGui.qRgb(0xFF, 0x00, 0x00)
- redBrush = Qt.QBrush(Qt.QColor(red))
- self.freqcurve.setPen(Qt.QPen(blueBrush, 2))
- self.rcurve.setPen(Qt.QPen(blueBrush, 2))
- self.icurve.setPen(Qt.QPen(redBrush, 2))
- self.phasecurve.setPen(Qt.QPen(blueBrush, 2))
- self.groupcurve.setPen(Qt.QPen(blueBrush, 2))
-
- # Set up validators for edit boxes
- self.intVal = Qt.QIntValidator(None)
- self.dblVal = Qt.QDoubleValidator(None)
- self.gui.nfftEdit.setValidator(self.intVal)
- self.gui.sampleRateEdit.setValidator(self.dblVal)
- self.gui.filterGainEdit.setValidator(self.dblVal)
- self.gui.endofLpfPassBandEdit.setValidator(self.dblVal)
- self.gui.startofLpfStopBandEdit.setValidator(self.dblVal)
- self.gui.lpfStopBandAttenEdit.setValidator(self.dblVal)
- self.gui.lpfPassBandRippleEdit.setValidator(self.dblVal)
- self.gui.startofBpfPassBandEdit.setValidator(self.dblVal)
- self.gui.endofBpfPassBandEdit.setValidator(self.dblVal)
- self.gui.bpfTransitionEdit.setValidator(self.dblVal)
- self.gui.bpfStopBandAttenEdit.setValidator(self.dblVal)
- self.gui.bpfPassBandRippleEdit.setValidator(self.dblVal)
- self.gui.startofBnfStopBandEdit.setValidator(self.dblVal)
- self.gui.endofBnfStopBandEdit.setValidator(self.dblVal)
- self.gui.bnfTransitionEdit.setValidator(self.dblVal)
- self.gui.bnfStopBandAttenEdit.setValidator(self.dblVal)
- self.gui.bnfPassBandRippleEdit.setValidator(self.dblVal)
- self.gui.endofHpfStopBandEdit.setValidator(self.dblVal)
- self.gui.startofHpfPassBandEdit.setValidator(self.dblVal)
- self.gui.hpfStopBandAttenEdit.setValidator(self.dblVal)
- self.gui.hpfPassBandRippleEdit.setValidator(self.dblVal)
- self.gui.rrcSymbolRateEdit.setValidator(self.dblVal)
- self.gui.rrcAlphaEdit.setValidator(self.dblVal)
- self.gui.rrcNumTapsEdit.setValidator(self.dblVal)
- self.gui.gausSymbolRateEdit.setValidator(self.dblVal)
- self.gui.gausBTEdit.setValidator(self.dblVal)
- self.gui.gausNumTapsEdit.setValidator(self.dblVal)
-
- self.gui.nTapsEdit.setText("0")
-
- self.filterWindows = {"Hamming Window" : gr.firdes.WIN_HAMMING,
- "Hann Window" : gr.firdes.WIN_HANN,
- "Blackman Window" : gr.firdes.WIN_BLACKMAN,
- "Rectangular Window" : gr.firdes.WIN_RECTANGULAR,
- "Kaiser Window" : gr.firdes.WIN_KAISER,
- "Blackman-harris Window" : gr.firdes.WIN_BLACKMAN_hARRIS}
- self.EQUIRIPPLE_FILT = 6 # const for equiripple filter window types
- self.show()
-
- def changed_filter_type(self, ftype):
- strftype = str(ftype.toAscii())
- if(ftype == "Low Pass"):
- self.gui.filterTypeWidget.setCurrentWidget(self.gui.firlpfPage)
- elif(ftype == "Band Pass"):
- self.gui.filterTypeWidget.setCurrentWidget(self.gui.firbpfPage)
- elif(ftype == "Complex Band Pass"):
- self.gui.filterTypeWidget.setCurrentWidget(self.gui.firbpfPage)
- elif(ftype == "Band Notch"):
- self.gui.filterTypeWidget.setCurrentWidget(self.gui.firbnfPage)
- elif(ftype == "High Pass"):
- self.gui.filterTypeWidget.setCurrentWidget(self.gui.firhpfPage)
- elif(ftype == "Root Raised Cosine"):
- self.gui.filterTypeWidget.setCurrentWidget(self.gui.rrcPage)
- elif(ftype == "Gaussian"):
- self.gui.filterTypeWidget.setCurrentWidget(self.gui.gausPage)
-
- self.design()
-
- def changed_filter_design_type(self, design):
- if(design == "Equiripple"):
- self.set_equiripple()
- else:
- self.set_windowed()
-
- self.design()
-
- def set_equiripple(self):
- # Stop sending the signal for this function
- self.gui.filterTypeComboBox.blockSignals(True)
-
- self.equiripple = True
- self.gui.lpfPassBandRippleLabel.setVisible(True)
- self.gui.lpfPassBandRippleEdit.setVisible(True)
- self.gui.bpfPassBandRippleLabel.setVisible(True)
- self.gui.bpfPassBandRippleEdit.setVisible(True)
- self.gui.bnfPassBandRippleLabel.setVisible(True)
- self.gui.bnfPassBandRippleEdit.setVisible(True)
- self.gui.hpfPassBandRippleLabel.setVisible(True)
- self.gui.hpfPassBandRippleEdit.setVisible(True)
-
- # Save current type and repopulate the combo box for
- # filters this window type can handle
- currenttype = self.gui.filterTypeComboBox.currentText()
- items = self.gui.filterTypeComboBox.count()
- for i in xrange(items):
- self.gui.filterTypeComboBox.removeItem(0)
- self.gui.filterTypeComboBox.addItems(self.optFilters)
-
- # If the last filter type was valid for this window type,
- # go back to it; otherwise, reset
- try:
- index = self.optFilters.index(currenttype)
- self.gui.filterTypeComboBox.setCurrentIndex(index)
- except ValueError:
- pass
-
- # Tell gui its ok to start sending this signal again
- self.gui.filterTypeComboBox.blockSignals(False)
-
- def set_windowed(self):
- # Stop sending the signal for this function
- self.gui.filterTypeComboBox.blockSignals(True)
-
- self.equiripple = False
- self.gui.lpfPassBandRippleLabel.setVisible(False)
- self.gui.lpfPassBandRippleEdit.setVisible(False)
- self.gui.bpfPassBandRippleLabel.setVisible(False)
- self.gui.bpfPassBandRippleEdit.setVisible(False)
- self.gui.bnfPassBandRippleLabel.setVisible(False)
- self.gui.bnfPassBandRippleEdit.setVisible(False)
- self.gui.hpfPassBandRippleLabel.setVisible(False)
- self.gui.hpfPassBandRippleEdit.setVisible(False)
-
- # Save current type and repopulate the combo box for
- # filters this window type can handle
- currenttype = self.gui.filterTypeComboBox.currentText()
- items = self.gui.filterTypeComboBox.count()
- for i in xrange(items):
- self.gui.filterTypeComboBox.removeItem(0)
- self.gui.filterTypeComboBox.addItems(self.firFilters)
-
- # If the last filter type was valid for this window type,
- # go back to it; otherwise, reset
- try:
- index = self.optFilters.index(currenttype)
- self.gui.filterTypeComboBox.setCurrentIndex(index)
- except ValueError:
- pass
-
- # Tell gui its ok to start sending this signal again
- self.gui.filterTypeComboBox.blockSignals(False)
-
- def design(self):
- ret = True
- fs,r = self.gui.sampleRateEdit.text().toDouble()
- ret = r and ret
- gain,r = self.gui.filterGainEdit.text().toDouble()
- ret = r and ret
-
- if(ret):
- winstr = str(self.gui.filterDesignTypeComboBox.currentText().toAscii())
- ftype = str(self.gui.filterTypeComboBox.currentText().toAscii())
-
- if(winstr == "Equiripple"):
- designer = {"Low Pass" : self.design_opt_lpf,
- "Band Pass" : self.design_opt_bpf,
- "Complex Band Pass" : self.design_opt_cbpf,
- "Band Notch" : self.design_opt_bnf,
- "High Pass" : self.design_opt_hpf}
- taps,params,r = designer[ftype](fs, gain)
-
- else:
- designer = {"Low Pass" : self.design_win_lpf,
- "Band Pass" : self.design_win_bpf,
- "Complex Band Pass" : self.design_win_cbpf,
- "Band Notch" : self.design_win_bnf,
- "High Pass" : self.design_win_hpf,
- "Root Raised Cosine" : self.design_win_rrc,
- "Gaussian" : self.design_win_gaus}
- wintype = self.filterWindows[winstr]
- taps,params,r = designer[ftype](fs, gain, wintype)
-
- if(r):
- self.draw_plots(taps, params)
-
-
- # Filter design functions using a window
- def design_win_lpf(self, fs, gain, wintype):
- ret = True
- pb,r = self.gui.endofLpfPassBandEdit.text().toDouble()
- ret = r and ret
- sb,r = self.gui.startofLpfStopBandEdit.text().toDouble()
- ret = r and ret
- atten,r = self.gui.lpfStopBandAttenEdit.text().toDouble()
- ret = r and ret
-
- if(ret):
- tb = sb - pb
-
- taps = gr.firdes.low_pass_2(gain, fs, pb, tb,
- atten, wintype)
- params = {"fs": fs, "gain": gain, "wintype": wintype,
- "filttype": "lpf", "pbend": pb, "sbstart": sb,
- "atten": atten, "ntaps": len(taps)}
- return (taps, params, ret)
- else:
- return ([], [], ret)
-
- def design_win_bpf(self, fs, gain, wintype):
- ret = True
- pb1,r = self.gui.startofBpfPassBandEdit.text().toDouble()
- ret = r and ret
- pb2,r = self.gui.endofBpfPassBandEdit.text().toDouble()
- ret = r and ret
- tb,r = self.gui.bpfTransitionEdit.text().toDouble()
- ret = r and ret
- atten,r = self.gui.bpfStopBandAttenEdit.text().toDouble()
- ret = r and ret
-
- if(r):
- taps = gr.firdes.band_pass_2(gain, fs, pb1, pb2, tb,
- atten, wintype)
- params = {"fs": fs, "gain": gain, "wintype": wintype,
- "filttype": "bpf", "pbstart": pb1, "pbend": pb2,
- "tb": tb, "atten": atten, "ntaps": len(taps)}
- return (taps,params,r)
- else:
- return ([],[],r)
-
- def design_win_cbpf(self, fs, gain, wintype):
- ret = True
- pb1,r = self.gui.startofBpfPassBandEdit.text().toDouble()
- ret = r and ret
- pb2,r = self.gui.endofBpfPassBandEdit.text().toDouble()
- ret = r and ret
- tb,r = self.gui.bpfTransitionEdit.text().toDouble()
- ret = r and ret
- atten,r = self.gui.bpfStopBandAttenEdit.text().toDouble()
- ret = r and ret
-
- if(r):
- taps = gr.firdes.complex_band_pass_2(gain, fs, pb1, pb2, tb,
- atten, wintype)
- params = {"fs": fs, "gain": gain, "wintype": wintype,
- "filttype": "cbpf", "pbstart": pb1, "pbend": pb2,
- "tb": tb, "atten": atten, "ntaps": len(taps)}
- return (taps,params,r)
- else:
- return ([],[],r)
-
- def design_win_bnf(self, fs, gain, wintype):
- ret = True
- pb1,r = self.gui.startofBnfStopBandEdit.text().toDouble()
- ret = r and ret
- pb2,r = self.gui.endofBnfStopBandEdit.text().toDouble()
- ret = r and ret
- tb,r = self.gui.bnfTransitionEdit.text().toDouble()
- ret = r and ret
- atten,r = self.gui.bnfStopBandAttenEdit.text().toDouble()
- ret = r and ret
-
- if(r):
- taps = gr.firdes.band_reject_2(gain, fs, pb1, pb2, tb,
- atten, wintype)
- params = {"fs": fs, "gain": gain, "wintype": wintype,
- "filttype": "bnf", "sbstart": pb1, "sbend": pb2,
- "tb": tb, "atten": atten, "ntaps": len(taps)}
- return (taps,params,r)
- else:
- return ([],[],r)
-
- def design_win_hpf(self, fs, gain, wintype):
- ret = True
- sb,r = self.gui.endofHpfStopBandEdit.text().toDouble()
- ret = r and ret
- pb,r = self.gui.startofHpfPassBandEdit.text().toDouble()
- ret = r and ret
- atten,r = self.gui.hpfStopBandAttenEdit.text().toDouble()
- ret = r and ret
-
- if(r):
- tb = pb - sb
- taps = gr.firdes.high_pass_2(gain, fs, pb, tb,
- atten, wintype)
- params = {"fs": fs, "gain": gain, "wintype": wintype,
- "filttype": "hpf", "sbend": sb, "pbstart": pb,
- "atten": atten, "ntaps": len(taps)}
- return (taps,params,r)
- else:
- return ([],[],r)
-
- def design_win_rrc(self, fs, gain, wintype):
- ret = True
- sr,r = self.gui.rrcSymbolRateEdit.text().toDouble()
- ret = r and ret
- alpha,r = self.gui.rrcAlphaEdit.text().toDouble()
- ret = r and ret
- ntaps,r = self.gui.rrcNumTapsEdit.text().toInt()
- ret = r and ret
-
- if(r):
- taps = gr.firdes.root_raised_cosine(gain, fs, sr,
- alpha, ntaps)
- params = {"fs": fs, "gain": gain, "wintype": wintype,
- "filttype": "rrc", "srate": sr, "alpha": alpha,
- "ntaps": ntaps}
- return (taps,params,r)
- else:
- return ([],[],r)
-
- def design_win_gaus(self, fs, gain, wintype):
- ret = True
- sr,r = self.gui.gausSymbolRateEdit.text().toDouble()
- ret = r and ret
- bt,r = self.gui.gausBTEdit.text().toDouble()
- ret = r and ret
- ntaps,r = self.gui.gausNumTapsEdit.text().toInt()
- ret = r and ret
-
- if(r):
- spb = fs / sr
- taps = gr.firdes.gaussian(gain, spb, bt, ntaps)
- params = {"fs": fs, "gain": gain, "wintype": wintype,
- "filttype": "gaus", "srate": sr, "bt": bt,
- "ntaps": ntaps}
- return (taps,params,r)
- else:
- return ([],[],r)
-
- # Design Functions for Equiripple Filters
- def design_opt_lpf(self, fs, gain):
- ret = True
- pb,r = self.gui.endofLpfPassBandEdit.text().toDouble()
- ret = r and ret
- sb,r = self.gui.startofLpfStopBandEdit.text().toDouble()
- ret = r and ret
- atten,r = self.gui.lpfStopBandAttenEdit.text().toDouble()
- ret = r and ret
- ripple,r = self.gui.lpfPassBandRippleEdit.text().toDouble()
- ret = r and ret
-
- if(ret):
- try:
- taps = blks2.optfir.low_pass(gain, fs, pb, sb,
- ripple, atten)
- except RuntimeError, e:
- reply = QtGui.QMessageBox.information(self, "Filter did not converge",
- e.args[0], "&Ok")
- return ([],[],False)
- else:
- params = {"fs": fs, "gain": gain, "wintype": self.EQUIRIPPLE_FILT,
- "filttype": "lpf", "pbend": pb, "sbstart": sb,
- "atten": atten, "ripple": ripple, "ntaps": len(taps)}
- return (taps, params, ret)
- else:
- return ([], [], ret)
-
- def design_opt_bpf(self, fs, gain):
- ret = True
- pb1,r = self.gui.startofBpfPassBandEdit.text().toDouble()
- ret = r and ret
- pb2,r = self.gui.endofBpfPassBandEdit.text().toDouble()
- ret = r and ret
- tb,r = self.gui.bpfTransitionEdit.text().toDouble()
- ret = r and ret
- atten,r = self.gui.bpfStopBandAttenEdit.text().toDouble()
- ret = r and ret
- ripple,r = self.gui.bpfPassBandRippleEdit.text().toDouble()
- ret = r and ret
-
- if(r):
- sb1 = pb1 - tb
- sb2 = pb2 + tb
- try:
- taps = blks2.optfir.band_pass(gain, fs, sb1, pb1, pb2, sb2,
- ripple, atten)
- except RuntimeError, e:
- reply = QtGui.QMessageBox.information(self, "Filter did not converge",
- e.args[0], "&Ok")
- return ([],[],False)
-
- else:
- params = {"fs": fs, "gain": gain, "wintype": self.EQUIRIPPLE_FILT,
- "filttype": "bpf", "pbstart": pb1, "pbend": pb2,
- "tb": tb, "atten": atten, "ripple": ripple,
- "ntaps": len(taps)}
- return (taps,params,r)
- else:
- return ([],[],r)
-
- def design_opt_cbpf(self, fs, gain):
- ret = True
- pb1,r = self.gui.startofBpfPassBandEdit.text().toDouble()
- ret = r and ret
- pb2,r = self.gui.endofBpfPassBandEdit.text().toDouble()
- ret = r and ret
- tb,r = self.gui.bpfTransitionEdit.text().toDouble()
- ret = r and ret
- atten,r = self.gui.bpfStopBandAttenEdit.text().toDouble()
- ret = r and ret
- ripple,r = self.gui.bpfPassBandRippleEdit.text().toDouble()
- ret = r and ret
-
- if(r):
- sb1 = pb1 - tb
- sb2 = pb2 + tb
- try:
- taps = blks2.optfir.complex_band_pass(gain, fs, sb1, pb1, pb2, sb2,
- ripple, atten)
- except RuntimeError, e:
- reply = QtGui.QMessageBox.information(self, "Filter did not converge",
- e.args[0], "&Ok")
- return ([],[],False)
- else:
- params = {"fs": fs, "gain": gain, "wintype": self.EQUIRIPPLE_FILT,
- "filttype": "cbpf", "pbstart": pb1, "pbend": pb2,
- "tb": tb, "atten": atten, "ripple": ripple,
- "ntaps": len(taps)}
- return (taps,params,r)
- else:
- return ([],[],r)
-
- def design_opt_bnf(self, fs, gain):
- ret = True
- sb1,r = self.gui.startofBnfStopBandEdit.text().toDouble()
- ret = r and ret
- sb2,r = self.gui.endofBnfStopBandEdit.text().toDouble()
- ret = r and ret
- tb,r = self.gui.bnfTransitionEdit.text().toDouble()
- ret = r and ret
- atten,r = self.gui.bnfStopBandAttenEdit.text().toDouble()
- ret = r and ret
- ripple,r = self.gui.bnfPassBandRippleEdit.text().toDouble()
- ret = r and ret
-
- if(r):
- pb1 = sb1 - tb
- pb2 = sb2 + tb
- try:
- taps = blks2.optfir.band_reject(gain, fs, pb1, sb1, sb2, pb2,
- ripple, atten)
- except RuntimeError, e:
- reply = QtGui.QMessageBox.information(self, "Filter did not converge",
- e.args[0], "&Ok")
- return ([],[],False)
- else:
- params = {"fs": fs, "gain": gain, "wintype": self.EQUIRIPPLE_FILT,
- "filttype": "bnf", "sbstart": pb1, "sbend": pb2,
- "tb": tb, "atten": atten, "ripple": ripple,
- "ntaps": len(taps)}
- return (taps,params,r)
- else:
- return ([],[],r)
-
- def design_opt_hpf(self, fs, gain):
- ret = True
- sb,r = self.gui.endofHpfStopBandEdit.text().toDouble()
- ret = r and ret
- pb,r = self.gui.startofHpfPassBandEdit.text().toDouble()
- ret = r and ret
- atten,r = self.gui.hpfStopBandAttenEdit.text().toDouble()
- ret = r and ret
- ripple,r = self.gui.hpfPassBandRippleEdit.text().toDouble()
- ret = r and ret
-
- if(r):
- try:
- taps = blks2.optfir.high_pass(gain, fs, sb, pb,
- atten, ripple)
- except RuntimeError, e:
- reply = QtGui.QMessageBox.information(self, "Filter did not converge",
- e.args[0], "&Ok")
- return ([],[],False)
- else:
- params = {"fs": fs, "gain": gain, "wintype": self.EQUIRIPPLE_FILT,
- "filttype": "hpf", "sbend": sb, "pbstart": pb,
- "atten": atten, "ripple": ripple,
- "ntaps": len(taps)}
- return (taps,params,r)
- else:
- return ([],[],r)
-
- def nfft_edit_changed(self, nfft):
- infft,r = nfft.toInt()
- if(r and (infft != self.nfftpts)):
- self.nfftpts = infft
- self.update_freq_curves()
-
- def tab_changed(self, tab):
- if(tab == 0):
- self.update_freq_curves()
- if(tab == 1):
- self.update_time_curves()
- if(tab == 2):
- self.update_phase_curves()
- if(tab == 3):
- self.update_group_curves()
-
- def get_fft(self, fs, taps, Npts):
- Ts = 1.0/fs
- fftpts = fftpack.fft(taps, Npts)
- self.freq = scipy.arange(0, fs, 1.0/(Npts*Ts))
- self.fftdB = 20.0*scipy.log10(abs(fftpts))
- self.fftDeg = scipy.unwrap(scipy.angle(fftpts))
- self.groupDelay = -scipy.diff(self.fftDeg)
-
- def update_time_curves(self):
- ntaps = len(self.taps)
- if(ntaps > 0):
- if(type(self.taps[0]) == scipy.complex128):
- self.rcurve.setData(scipy.arange(ntaps), self.taps.real)
- self.icurve.setData(scipy.arange(ntaps), self.taps.imag)
- else:
- self.rcurve.setData(scipy.arange(ntaps), self.taps)
-
- # Reset the x-axis to the new time scale
- ymax = 1.5 * max(self.taps)
- ymin = 1.5 * min(self.taps)
- self.gui.timePlot.setAxisScale(self.gui.timePlot.xBottom,
- 0, ntaps)
- self.gui.timePlot.setAxisScale(self.gui.timePlot.yLeft,
- ymin, ymax)
-
- # Set the zoomer base to unzoom to the new axis
- self.timeZoomer.setZoomBase()
-
- self.gui.timePlot.replot()
-
- def update_freq_curves(self):
- npts = len(self.fftdB)
- if(npts > 0):
- self.freqcurve.setData(self.freq, self.fftdB)
-
- # Reset the x-axis to the new time scale
- ymax = 1.5 * max(self.fftdB[0:npts/2])
- ymin = 1.1 * min(self.fftdB[0:npts/2])
- xmax = self.freq[npts/2]
- xmin = self.freq[0]
- self.gui.freqPlot.setAxisScale(self.gui.freqPlot.xBottom,
- xmin, xmax)
- self.gui.freqPlot.setAxisScale(self.gui.freqPlot.yLeft,
- ymin, ymax)
-
- # Set the zoomer base to unzoom to the new axis
- self.freqZoomer.setZoomBase()
-
- self.gui.freqPlot.replot()
-
-
- def update_phase_curves(self):
- npts = len(self.fftDeg)
- if(npts > 0):
- self.phasecurve.setData(self.freq, self.fftDeg)
-
- # Reset the x-axis to the new time scale
- ymax = 1.5 * max(self.fftDeg[0:npts/2])
- ymin = 1.1 * min(self.fftDeg[0:npts/2])
- xmax = self.freq[npts/2]
- xmin = self.freq[0]
- self.gui.phasePlot.setAxisScale(self.gui.phasePlot.xBottom,
- xmin, xmax)
- self.gui.phasePlot.setAxisScale(self.gui.phasePlot.yLeft,
- ymin, ymax)
-
- # Set the zoomer base to unzoom to the new axis
- self.phaseZoomer.setZoomBase()
-
- self.gui.phasePlot.replot()
-
- def update_group_curves(self):
- npts = len(self.groupDelay)
- if(npts > 0):
- self.groupcurve.setData(self.freq, self.groupDelay)
-
- # Reset the x-axis to the new time scale
- ymax = 1.5 * max(self.groupDelay[0:npts/2])
- ymin = 1.1 * min(self.groupDelay[0:npts/2])
- xmax = self.freq[npts/2]
- xmin = self.freq[0]
- self.gui.groupPlot.setAxisScale(self.gui.groupPlot.xBottom,
- xmin, xmax)
- self.gui.groupPlot.setAxisScale(self.gui.groupPlot.yLeft,
- ymin, ymax)
-
- # Set the zoomer base to unzoom to the new axis
- self.groupZoomer.setZoomBase()
-
- self.gui.groupPlot.replot()
-
- def action_save_dialog(self):
- filename = QtGui.QFileDialog.getSaveFileName(self, "Save CSV Filter File", ".", "")
- try:
- handle = open(filename, "wb")
- except IOError:
- reply = QtGui.QMessageBox.information(self, 'File Name',
- ("Could not save to file: %s" % filename),
- "&Ok")
- return
-
- csvhandle = csv.writer(handle, delimiter=",")
- for k in self.params.keys():
- csvhandle.writerow([k, self.params[k]])
- csvhandle.writerow(["taps",] + self.taps.tolist())
- handle.close()
-
- def action_open_dialog(self):
- filename = QtGui.QFileDialog.getOpenFileName(self, "Open CSV Filter File", ".", "")
- if(len(filename) == 0):
- return
-
- try:
- handle = open(filename, "rb")
- except IOError:
- reply = QtGui.QMessageBox.information(self, 'File Name',
- ("Could not open file: %s" % filename),
- "&Ok")
- return
-
- csvhandle = csv.reader(handle, delimiter=",")
- taps = []
- params = {}
- for row in csvhandle:
- if(row[0] != "taps"):
- testcpx = re.findall("[+-]?\d+\.*\d*[Ee]?[-+]?\d+j", row[1])
- if(len(testcpx) > 0): # it's a complex
- params[row[0]] = complex(row[1])
- else: # assume it's a float
- try: # if it's not a float, its a string
- params[row[0]] = float(row[1])
- except ValueError:
- params[row[0]] = row[1]
- else:
- testcpx = re.findall("[+-]?\d+\.*\d*[Ee]?[-+]?\d+j", row[1])
- if(len(testcpx) > 0): # it's a complex
- taps = [complex(r) for r in row[1:]]
- else:
- taps = [float(r) for r in row[1:]]
- handle.close()
- self.draw_plots(taps, params)
-
- self.gui.sampleRateEdit.setText(Qt.QString("%1").arg(params["fs"]))
- self.gui.filterGainEdit.setText(Qt.QString("%1").arg(params["gain"]))
-
- # Set up GUI parameters for each filter type
- if(params["filttype"] == "lpf"):
- self.gui.filterTypeComboBox.setCurrentIndex(0)
- self.gui.filterDesignTypeComboBox.setCurrentIndex(int(params["wintype"]))
-
- self.gui.endofLpfPassBandEdit.setText(Qt.QString("%1").arg(params["pbend"]))
- self.gui.startofLpfStopBandEdit.setText(Qt.QString("%1").arg(params["sbstart"]))
- self.gui.lpfStopBandAttenEdit.setText(Qt.QString("%1").arg(params["atten"]))
- if(params["wintype"] == self.EQUIRIPPLE_FILT):
- self.gui.lpfPassBandRippleEdit.setText(Qt.QString("%1").arg(params["ripple"]))
- elif(params["filttype"] == "bpf"):
- self.gui.filterTypeComboBox.setCurrentIndex(1)
- self.gui.filterDesignTypeComboBox.setCurrentIndex(int(params["wintype"]))
-
- self.gui.startofBpfPassBandEdit.setText(Qt.QString("%1").arg(params["pbstart"]))
- self.gui.endofBpfPassBandEdit.setText(Qt.QString("%1").arg(params["pbend"]))
- self.gui.bpfTransitionEdit.setText(Qt.QString("%1").arg(params["tb"]))
- self.gui.bpfStopBandAttenEdit.setText(Qt.QString("%1").arg(params["atten"]))
- if(params["wintype"] == self.EQUIRIPPLE_FILT):
- self.gui.bpfPassBandRippleEdit.setText(Qt.QString("%1").arg(params["ripple"]))
- elif(params["filttype"] == "cbpf"):
- self.gui.filterTypeComboBox.setCurrentIndex(2)
- self.gui.filterDesignTypeComboBox.setCurrentIndex(int(params["wintype"]))
-
- self.gui.startofBpfPassBandEdit.setText(Qt.QString("%1").arg(params["pbstart"]))
- self.gui.endofBpfPassBandEdit.setText(Qt.QString("%1").arg(params["pbend"]))
- self.gui.bpfTransitionEdit.setText(Qt.QString("%1").arg(params["tb"]))
- self.gui.bpfStopBandAttenEdit.setText(Qt.QString("%1").arg(params["atten"]))
- if(params["wintype"] == self.EQUIRIPPLE_FILT):
- self.gui.bpfPassBandRippleEdit.setText(Qt.QString("%1").arg(params["ripple"]))
- elif(params["filttype"] == "bnf"):
- self.gui.filterTypeComboBox.setCurrentIndex(3)
- self.gui.filterDesignTypeComboBox.setCurrentIndex(int(params["wintype"]))
-
- self.gui.startofBnfStopBandEdit.setText(Qt.QString("%1").arg(params["sbstart"]))
- self.gui.endofBnfStopBandEdit.setText(Qt.QString("%1").arg(params["sbend"]))
- self.gui.bnfTransitionEdit.setText(Qt.QString("%1").arg(params["tb"]))
- self.gui.bnfStopBandAttenEdit.setText(Qt.QString("%1").arg(params["atten"]))
- if(params["wintype"] == self.EQUIRIPPLE_FILT):
- self.gui.bnfPassBandRippleEdit.setText(Qt.QString("%1").arg(params["ripple"]))
- elif(params["filttype"] == "hpf"):
- self.gui.filterTypeComboBox.setCurrentIndex(4)
- self.gui.filterDesignTypeComboBox.setCurrentIndex(int(params["wintype"]))
-
- self.gui.endofHpfStopBandEdit.setText(Qt.QString("%1").arg(params["sbend"]))
- self.gui.startofHpfPassBandEdit.setText(Qt.QString("%1").arg(params["pbstart"]))
- self.gui.hpfStopBandAttenEdit.setText(Qt.QString("%1").arg(params["atten"]))
- if(params["wintype"] == self.EQUIRIPPLE_FILT):
- self.gui.hpfPassBandRippleEdit.setText(Qt.QString("%1").arg(params["ripple"]))
- elif(params["filttype"] == "rrc"):
- self.gui.filterTypeComboBox.setCurrentIndex(5)
- self.gui.filterDesignTypeComboBox.setCurrentIndex(int(params["wintype"]))
-
- self.gui.rrcSymbolRateEdit.setText(Qt.QString("%1").arg(params["srate"]))
- self.gui.rrcAlphaEdit.setText(Qt.QString("%1").arg(params["alpha"]))
- self.gui.rrcNumTapsEdit.setText(Qt.QString("%1").arg(params["ntaps"]))
- elif(params["filttype"] == "gaus"):
- self.gui.filterTypeComboBox.setCurrentIndex(6)
- self.gui.filterDesignTypeComboBox.setCurrentIndex(int(params["wintype"]))
-
- self.gui.gausSymbolRateEdit.setText(Qt.QString("%1").arg(params["srate"]))
- self.gui.gausBTEdit.setText(Qt.QString("%1").arg(params["bt"]))
- self.gui.gausNumTapsEdit.setText(Qt.QString("%1").arg(params["ntaps"]))
-
- def draw_plots(self, taps, params):
- self.params = params
- self.taps = scipy.array(taps)
- self.get_fft(self.params["fs"], self.taps, self.nfftpts)
- self.update_time_curves()
- self.update_freq_curves()
- self.update_phase_curves()
- self.update_group_curves()
-
- self.gui.nTapsEdit.setText(Qt.QString("%1").arg(self.taps.size))
-
-
-def setup_options():
- usage="%prog: [options] (input_filename)"
- description = ""
-
- parser = OptionParser(conflict_handler="resolve",
- usage=usage, description=description)
- return parser
-
-def main(args):
- parser = setup_options()
- (options, args) = parser.parse_args ()
-
- app = Qt.QApplication(args)
- gplt = gr_plot_filter(app, options)
- app.exec_()
-
-if __name__ == '__main__':
- main(sys.argv)
-