diff options
Diffstat (limited to 'gr-trellis')
24 files changed, 608 insertions, 53 deletions
diff --git a/gr-trellis/CMakeLists.txt b/gr-trellis/CMakeLists.txt new file mode 100644 index 000000000..11b547d70 --- /dev/null +++ b/gr-trellis/CMakeLists.txt @@ -0,0 +1,116 @@ +# Copyright 2011 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. + +######################################################################## +# Setup dependencies +######################################################################## +INCLUDE(GrBoost) + +######################################################################## +# Register component +######################################################################## +INCLUDE(GrComponent) +GR_REGISTER_COMPONENT("gr-trellis" ENABLE_GR_TRELLIS + Boost_FOUND + ENABLE_GR_CORE_ + ENABLE_GR_DIGITAL_ +) + +GR_SET_GLOBAL(GR_TRELLIS_INCLUDE_DIRS + ${CMAKE_CURRENT_SOURCE_DIR}/src/lib + ${CMAKE_CURRENT_BINARY_DIR}/src/lib +) + +######################################################################## +# Begin conditional configuration +######################################################################## +IF(ENABLE_GR_TRELLIS) + +######################################################################## +# Setup CPack components +######################################################################## +INCLUDE(GrPackage) +CPACK_SET(CPACK_COMPONENT_GROUP_TRELLIS_DESCRIPTION "GNU Radio Trellis Blocks") + +CPACK_COMPONENT("trellis_docs" + GROUP "Trellis" + DISPLAY_NAME "Documentation" + DESCRIPTION "Doxygen HTML and XML" +) + +CPACK_COMPONENT("trellis_runtime" + GROUP "Trellis" + DISPLAY_NAME "Runtime" + DESCRIPTION "Dynamic link libraries" + DEPENDS "core_runtime" +) + +CPACK_COMPONENT("trellis_devel" + GROUP "Trellis" + DISPLAY_NAME "Development" + DESCRIPTION "C++ headers, package config, import libraries" + DEPENDS "core_devel" +) + +CPACK_COMPONENT("trellis_python" + GROUP "Trellis" + DISPLAY_NAME "Python" + DESCRIPTION "Python modules for runtime" + DEPENDS "core_python;trellis_runtime" +) + +CPACK_COMPONENT("trellis_examples" + GROUP "Trellis" + DISPLAY_NAME "Examples" + DESCRIPTION "Python examples for trellis" + DEPENDS "trellis_python" +) + +CPACK_COMPONENT("trellis_swig" + GROUP "Trellis" + DISPLAY_NAME "SWIG" + DESCRIPTION "SWIG development .i files" + DEPENDS "core_swig;trellis_python;trellis_devel" +) + +######################################################################## +# Add subdirectories +######################################################################## +ADD_SUBDIRECTORY(src/lib) +ADD_SUBDIRECTORY(doc) +IF(ENABLE_PYTHON) + ADD_SUBDIRECTORY(src/python) + ADD_SUBDIRECTORY(src/examples) +ENDIF(ENABLE_PYTHON) + +######################################################################## +# Create Pkg Config File +######################################################################## +CONFIGURE_FILE( + ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-trellis.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-trellis.pc +@ONLY) + +INSTALL( + FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-trellis.pc + DESTINATION ${GR_LIBRARY_DIR}/pkgconfig + COMPONENT "trellis_devel" +) + +ENDIF(ENABLE_GR_TRELLIS) diff --git a/gr-trellis/doc/CMakeLists.txt b/gr-trellis/doc/CMakeLists.txt new file mode 100644 index 000000000..41ccf7f8e --- /dev/null +++ b/gr-trellis/doc/CMakeLists.txt @@ -0,0 +1,73 @@ +# Copyright 2011 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. + +INCLUDE(GrPython) + +######################################################################## +# Generate HTML doc with xmlto +######################################################################## +FIND_PROGRAM(XMLTO_EXECUTABLE xmlto) + +IF(XMLTO_EXECUTABLE) +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gr-trellis.html + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gr-trellis.xml + COMMAND ${XMLTO_EXECUTABLE} html-nochunks + ${CMAKE_CURRENT_SOURCE_DIR}/gr-trellis.xml +) +ADD_CUSTOM_TARGET(gr_trellis_html ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/gr-trellis.html) +INSTALL( + FILES ${CMAKE_CURRENT_BINARY_DIR}/gr-trellis.html + DESTINATION ${GR_PKG_DOC_DIR}/html + COMPONENT "trellis_docs" + +) +ENDIF(XMLTO_EXECUTABLE) + +######################################################################## +# Generate xml doc +######################################################################## +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/test_tcm.py.xml + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/test_tcm.py + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/make_numbered_listing.py + COMMAND ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/make_numbered_listing.py + ${CMAKE_CURRENT_SOURCE_DIR}/test_tcm.py +) + +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/test_viterbi_equalization1.py.xml + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/test_viterbi_equalization1.py + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/make_numbered_listing.py + COMMAND ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/make_numbered_listing.py + ${CMAKE_CURRENT_SOURCE_DIR}/test_viterbi_equalization1.py +) + +ADD_CUSTOM_TARGET(gr_trellis_xml ALL DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/test_tcm.py.xml + ${CMAKE_CURRENT_BINARY_DIR}/test_viterbi_equalization1.py.xml +) +INSTALL(FILES + ${CMAKE_CURRENT_BINARY_DIR}/test_tcm.py.xml + ${CMAKE_CURRENT_BINARY_DIR}/test_viterbi_equalization1.py.xml + DESTINATION ${GR_PKG_DOC_DIR}/xml + COMPONENT "trellis_docs" +) diff --git a/gr-trellis/src/examples/CMakeLists.txt b/gr-trellis/src/examples/CMakeLists.txt new file mode 100644 index 000000000..2a98c9c67 --- /dev/null +++ b/gr-trellis/src/examples/CMakeLists.txt @@ -0,0 +1,64 @@ +# Copyright 2011 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. + +INCLUDE(GrPython) + +GR_PYTHON_INSTALL( + PROGRAMS + fsm_utils.py + test_tcm.py + test_tcm_parallel.py + test_tcm_combined.py + test_sccc_hard.py + test_sccc_soft.py + test_sccc_turbo.py + test_viterbi_equalization1.py + test_viterbi_equalization.py + test_turbo_equalization.py + test_turbo_equalization1.py + test_turbo_equalization2.py + DESTINATION ${GR_PKG_DATA_DIR}/examples/trellis + COMPONENT "trellis_examples" +) + +INSTALL( + FILES README + DESTINATION ${GR_PKG_DATA_DIR}/examples/trellis + COMPONENT "trellis_examples" +) + +INSTALL( + FILES + fsm_files/awgn1o2_128.fsm + fsm_files/awgn1o2_16.fsm + fsm_files/awgn1o2_4.fsm + fsm_files/awgn1o2_8.fsm + fsm_files/awgn2o3_16.fsm + fsm_files/awgn2o3_4.fsm + fsm_files/awgn2o3_4_msb.fsm + fsm_files/awgn2o3_4_msbG.fsm + fsm_files/awgn2o3_8.fsm + fsm_files/awgn2o4_4.fsm + fsm_files/disconnected.fsm + fsm_files/rep3.fsm + fsm_files/rep5.fsm + fsm_files/simple.fsm + DESTINATION ${GR_PKG_DATA_DIR}/examples/trellis/fsm_files + COMPONENT "trellis_examples" +) diff --git a/gr-trellis/src/lib/CMakeLists.txt b/gr-trellis/src/lib/CMakeLists.txt new file mode 100644 index 000000000..338baac9d --- /dev/null +++ b/gr-trellis/src/lib/CMakeLists.txt @@ -0,0 +1,218 @@ +# Copyright 2011 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. + +######################################################################## +# Setup the include and linker paths +######################################################################## +INCLUDE_DIRECTORIES( + ${GNURADIO_CORE_INCLUDE_DIRS} + ${GR_TRELLIS_INCLUDE_DIRS} + ${GR_DIGITAL_INCLUDE_DIRS} +) + +INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) +LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) + +######################################################################## +# Generate the makefile.gen, then extract its sources: +# This is a round-about way to extract the sources, +# but it requires minimum changed to the python utils. +# +# The recommended way to do this: +# - Make a generation macro that registers the sources command. +# - List the generation macro with each templated source file. +# - Create a python script (very generic) to perform generation. +# - This way the targets would depend only on their sources. +######################################################################## +EXECUTE_PROCESS( + COMMAND ${PYTHON_EXECUTABLE} -c " +import os, sys +sys.path.append('${GR_CORE_PYTHONPATH}') +sys.path.append('${CMAKE_CURRENT_SOURCE_DIR}') +os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}' +os.environ['gendir'] = '${CMAKE_CURRENT_BINARY_DIR}' +os.environ['do_makefile'] = '1' +os.environ['do_sources'] = '0' +from generate_all import generate_all +generate_all() + " WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) + +MACRO(GEGEN_GEN_EXTRACT outvar ext) + EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import os; print ';'.join( + map(lambda x: os.path.join('${CMAKE_CURRENT_BINARY_DIR}', x.replace('\\\\', '').strip()), + filter(lambda f: '${ext}' in f, open('${CMAKE_CURRENT_BINARY_DIR}/Makefile.gen').readlines() + )))" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE ${outvar}) + FILE(TO_CMAKE_PATH "${${outvar}}" ${outvar}) +ENDMACRO(GEGEN_GEN_EXTRACT) + +GEGEN_GEN_EXTRACT(generated_trellis_sources ".cc") +GEGEN_GEN_EXTRACT(generated_trellis_includes ".h") +GEGEN_GEN_EXTRACT(generated_trellis_swigs ".i") + +#TODO simplify this list with a triple-threat for loop +SET(generated_trellis_deps + generate_all.py + generate_trellis.py + trellis_encoder_XX.cc.t + trellis_encoder_XX.h.t + trellis_encoder_XX.i.t + trellis_sccc_encoder_XX.cc.t + trellis_sccc_encoder_XX.h.t + trellis_sccc_encoder_XX.i.t + trellis_pccc_encoder_XX.cc.t + trellis_pccc_encoder_XX.h.t + trellis_pccc_encoder_XX.i.t + trellis_metrics_X.cc.t + trellis_metrics_X.h.t + trellis_metrics_X.i.t + trellis_viterbi_combined_XX.cc.t + trellis_viterbi_combined_XX.h.t + trellis_viterbi_combined_XX.i.t + trellis_sccc_decoder_combined_XX.cc.t + trellis_sccc_decoder_combined_XX.h.t + trellis_sccc_decoder_combined_XX.i.t + trellis_sccc_decoder_X.cc.t + trellis_sccc_decoder_X.h.t + trellis_sccc_decoder_X.i.t + trellis_pccc_decoder_X.cc.t + trellis_pccc_decoder_X.h.t + trellis_pccc_decoder_X.i.t + trellis_viterbi_X.cc.t + trellis_viterbi_X.h.t + trellis_viterbi_X.i.t +) + +ADD_CUSTOM_COMMAND( + OUTPUT + ${generated_trellis_sources} + ${generated_trellis_includes} + ${generated_trellis_swigs} + DEPENDS ${generated_trellis_deps} + COMMAND ${PYTHON_EXECUTABLE} -B -c + \"import os, sys\;sys.path.append('${GR_CORE_PYTHONPATH}')\;sys.path.append('${CMAKE_CURRENT_SOURCE_DIR}')\;os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'\;from generate_all import generate_all\;generate_all()\" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "generating trellis files" +) + +ADD_CUSTOM_TARGET(trellis_generated DEPENDS + ${generated_trellis_sources} + ${generated_trellis_includes} + ${generated_trellis_swigs} +) + +######################################################################## +# Setup library +######################################################################## +LIST(APPEND gr_trellis_sources + fsm.cc + quicksort_index.cc + base.cc + interleaver.cc + calc_metric.cc + core_algorithms.cc + trellis_permutation.cc + trellis_siso_f.cc + trellis_siso_combined_f.cc + trellis_constellation_metrics_cf.cc + ${generated_trellis_sources} +) + +LIST(APPEND trellis_libs + gnuradio-core + ${Boost_LIBRARIES} +) + +ADD_LIBRARY(gnuradio-trellis SHARED ${gr_trellis_sources}) +TARGET_LINK_LIBRARIES(gnuradio-trellis ${trellis_libs}) +SET_TARGET_PROPERTIES(gnuradio-trellis PROPERTIES DEFINE_SYMBOL "gnuradio_trellis_EXPORTS") +SET_TARGET_PROPERTIES(gnuradio-trellis PROPERTIES SOVERSION ${LIBVER}) + +INSTALL(TARGETS gnuradio-trellis + LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT "trellis_runtime" # .so/.dylib file + ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT "trellis_devel" # .lib file + RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT "trellis_runtime" # .dll file +) + +######################################################################## +# Handle the generated sources + a few non-generated ones +######################################################################## +INSTALL(FILES + ${generated_trellis_includes} + trellis_api.h + fsm.h + quicksort_index.h + base.h + interleaver.h + calc_metric.h + core_algorithms.h + trellis_permutation.h + siso_type.h + trellis_siso_f.h + trellis_siso_combined_f.h + trellis_constellation_metrics_cf.h + DESTINATION ${GR_INCLUDE_DIR}/gnuradio + COMPONENT "trellis_devel" +) + +IF(ENABLE_PYTHON) + INSTALL(FILES + ${generated_trellis_swigs} + fsm.i + interleaver.i + trellis_permutation.i + trellis_siso_f.i + trellis_siso_combined_f.i + trellis_constellation_metrics_cf.i + ${CMAKE_CURRENT_BINARY_DIR}/trellis_generated.i + DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig + COMPONENT "trellis_swig" + ) + +######################################################################## +# Setup swig generation +######################################################################## +INCLUDE(GrPython) +INCLUDE(GrSwig) + +SET(GR_SWIG_INCLUDE_DIRS + ${GR_TRELLIS_INCLUDE_DIRS} + ${GNURADIO_CORE_SWIG_INCLUDE_DIRS} + ${GR_DIGITAL_SWIG_INCLUDE_DIRS} +) + +SET(GR_SWIG_LIBRARIES gnuradio-trellis) + +SET(GR_SWIG_TARGET_DEPS trellis_generated) + +GR_SWIG_MAKE(trellis trellis.i) + +GR_SWIG_INSTALL( + TARGETS trellis + DESTINATION ${GR_PYTHON_DIR}/gnuradio + COMPONENT "trellis_python" +) + +INSTALL( + FILES trellis.i + DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig + COMPONENT "trellis_swig" +) + +ENDIF(ENABLE_PYTHON) diff --git a/gr-trellis/src/lib/Makefile.am b/gr-trellis/src/lib/Makefile.am index 795ac28b4..5f2fc1825 100644 --- a/gr-trellis/src/lib/Makefile.am +++ b/gr-trellis/src/lib/Makefile.am @@ -78,6 +78,7 @@ EXTRA_DIST += \ # These headers get installed in ${prefix}/include/gnuradio grinclude_HEADERS = \ + trellis_api.h \ fsm.h \ quicksort_index.h \ base.h \ diff --git a/gr-trellis/src/lib/fsm.cc b/gr-trellis/src/lib/fsm.cc index 889a3918b..71e54b05a 100644 --- a/gr-trellis/src/lib/fsm.cc +++ b/gr-trellis/src/lib/fsm.cc @@ -132,7 +132,7 @@ fsm::fsm(int k, int n, const std::vector<int> &G) for(int j=0;j<n;j++) { int mem = -1; if(G[i*n+j]!=0) - mem=(int)(log(G[i*n+j])/log(2.0)); + mem=(int)(log(double(G[i*n+j]))/log(2.0)); if(mem>max_mem_x[i]) max_mem_x[i]=mem; if(mem>max_mem) @@ -417,7 +417,7 @@ void fsm::generate_TM() done = find_es(s); attempts ++; } - if (done == false and d_S > 1) { + if (done == false && d_S > 1) { //throw std::runtime_error ("fsm::generate_TM(): FSM appears to be disconnected\n"); printf("fsm::generate_TM(): FSM appears to be disconnected\n"); printf("state %d cannot be reached from all other states\n",s); diff --git a/gr-trellis/src/lib/fsm.h b/gr-trellis/src/lib/fsm.h index 8bae91754..7dc7e0d9d 100644 --- a/gr-trellis/src/lib/fsm.h +++ b/gr-trellis/src/lib/fsm.h @@ -23,6 +23,7 @@ #ifndef INCLUDED_TRELLIS_FSM_H #define INCLUDED_TRELLIS_FSM_H +#include <trellis_api.h> #include <vector> #include <iosfwd> @@ -33,7 +34,7 @@ * rather than the FSM itself. It particular the state of the FSM * is not stored within an instance of this class. */ -class fsm { +class TRELLIS_API fsm { private: // Input alphabet cardinality. int d_I; @@ -106,7 +107,7 @@ public: * \brief Creates an FSMS describing ISI. * * \param mod_size modulation size - * \param ch_lenth channel length + * \param ch_length channel length * */ fsm(int mod_size, int ch_length); @@ -125,14 +126,14 @@ public: /*! * \brief Creates an FSMS describing the joint trellis of two FSMs. * - * \param fsm1 first FSMS - * \param fsm2 second FSMS + * \param FSM1 first FSMS + * \param FSM2 second FSMS */ fsm(const fsm &FSM1, const fsm &FSM2); /*! * \brief Creates an FSMS representing n stages through the originial FSM (AKA radix-n FSM). * - * \param original FSMS + * \param FSM Original FSMs * \param n Number of stages. */ fsm(const fsm &FSM, int n); diff --git a/gr-trellis/src/lib/interleaver.h b/gr-trellis/src/lib/interleaver.h index f6a289c52..fbd378d62 100644 --- a/gr-trellis/src/lib/interleaver.h +++ b/gr-trellis/src/lib/interleaver.h @@ -23,12 +23,13 @@ #ifndef INCLUDED_TRELLIS_INTERLEAVER_H #define INCLUDED_TRELLIS_INTERLEAVER_H +#include <trellis_api.h> #include <vector> /*! * \brief INTERLEAVER class */ -class interleaver { +class TRELLIS_API interleaver { private: int d_K; std::vector<int> d_INTER; diff --git a/gr-trellis/src/lib/trellis_api.h b/gr-trellis/src/lib/trellis_api.h new file mode 100644 index 000000000..c09b340d6 --- /dev/null +++ b/gr-trellis/src/lib/trellis_api.h @@ -0,0 +1,33 @@ +/* + * Copyright 2011 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. + */ + +#ifndef INCLUDED_TRELLIS_API_H +#define INCLUDED_TRELLIS_API_H + +#include <gruel/attributes.h> + +#ifdef gnuradio_trellis_EXPORTS +# define TRELLIS_API __GR_ATTR_EXPORT +#else +# define TRELLIS_API __GR_ATTR_IMPORT +#endif + +#endif /* INCLUDED_TRELLIS_API_H */ diff --git a/gr-trellis/src/lib/trellis_constellation_metrics_cf.cc b/gr-trellis/src/lib/trellis_constellation_metrics_cf.cc index 1d03886f1..91520e4ce 100644 --- a/gr-trellis/src/lib/trellis_constellation_metrics_cf.cc +++ b/gr-trellis/src/lib/trellis_constellation_metrics_cf.cc @@ -20,9 +20,7 @@ * Boston, MA 02110-1301, USA. */ -// WARNING: this file is machine generated. Edits will be over written - -#ifndef HAVE_CONFIG_H +#ifdef HAVE_CONFIG_H #include "config.h" #endif diff --git a/gr-trellis/src/lib/trellis_constellation_metrics_cf.h b/gr-trellis/src/lib/trellis_constellation_metrics_cf.h index a34c335ec..1851bb89c 100644 --- a/gr-trellis/src/lib/trellis_constellation_metrics_cf.h +++ b/gr-trellis/src/lib/trellis_constellation_metrics_cf.h @@ -23,6 +23,7 @@ #ifndef INCLUDED_TRELLIS_CONSTELLATION_METRICS_CF_H #define INCLUDED_TRELLIS_CONSTELLATION_METRICS_CF_H +#include <trellis_api.h> #include <gr_block.h> #include <digital_constellation.h> #include <digital_metric_type.h> @@ -30,13 +31,13 @@ class trellis_constellation_metrics_cf; typedef boost::shared_ptr<trellis_constellation_metrics_cf> trellis_constellation_metrics_cf_sptr; -trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE); +TRELLIS_API trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE); /*! * \brief Evaluate metrics for use by the Viterbi algorithm. * \ingroup coding_blk */ -class trellis_constellation_metrics_cf : public gr_block +class TRELLIS_API trellis_constellation_metrics_cf : public gr_block { public: void forecast (int noutput_items, @@ -53,7 +54,7 @@ class trellis_constellation_metrics_cf : public gr_block trellis_metric_type_t d_TYPE; unsigned int d_O; unsigned int d_D; - friend trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE); + friend TRELLIS_API trellis_constellation_metrics_cf_sptr trellis_make_constellation_metrics_cf (digital_constellation_sptr constellation, trellis_metric_type_t TYPE); }; diff --git a/gr-trellis/src/lib/trellis_encoder_XX.h.t b/gr-trellis/src/lib/trellis_encoder_XX.h.t index b56fde0bf..4038caac9 100644 --- a/gr-trellis/src/lib/trellis_encoder_XX.h.t +++ b/gr-trellis/src/lib/trellis_encoder_XX.h.t @@ -25,22 +25,23 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include <gr_sync_block.h> class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST); +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST); /*! * \brief Convolutional encoder. * \ingroup coding_blk */ -class @NAME@ : public gr_sync_block +class TRELLIS_API @NAME@ : public gr_sync_block { private: - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST); + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST); fsm d_FSM; int d_ST; @NAME@ (const fsm &FSM, int ST); diff --git a/gr-trellis/src/lib/trellis_metrics_X.h.t b/gr-trellis/src/lib/trellis_metrics_X.h.t index 45d4ace10..809c27e65 100644 --- a/gr-trellis/src/lib/trellis_metrics_X.h.t +++ b/gr-trellis/src/lib/trellis_metrics_X.h.t @@ -25,26 +25,27 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include <gr_block.h> #include "calc_metric.h" class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); /*! * \brief Evaluate metrics for use by the Viterbi algorithm. * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { int d_O; int d_D; trellis_metric_type_t d_TYPE; std::vector<@I_TYPE@> d_TABLE; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); @NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); public: diff --git a/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t b/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t index ff4b7a1f8..a58a03264 100644 --- a/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t +++ b/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include "interleaver.h" #include <gr_block.h> @@ -34,7 +35,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM1, int ST10, int ST1K, const fsm &FSM2, int ST20, int ST2K, const interleaver &INTERLEAVER, @@ -47,12 +48,12 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; /*! * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { fsm d_FSM1; - fsm d_FSM2; int d_ST10; int d_ST1K; + fsm d_FSM2; int d_ST20; int d_ST2K; interleaver d_INTERLEAVER; @@ -61,7 +62,7 @@ class @NAME@ : public gr_block trellis_siso_type_t d_SISO_TYPE; std::vector<float> d_buffer; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM1, int ST10, int ST1K, const fsm &FSM2, int ST20, int ST2K, const interleaver &INTERLEAVER, diff --git a/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t b/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t index 68ccf75db..2b6110e37 100644 --- a/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t +++ b/gr-trellis/src/lib/trellis_pccc_encoder_XX.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include <vector> #include "fsm.h" #include "interleaver.h" @@ -33,7 +34,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM1, int ST1, const fsm &FSM2, int ST2, const interleaver &INTERLEAVER, @@ -44,10 +45,10 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; * \brief SCCC encoder. * \ingroup coding_blk */ -class @NAME@ : public gr_sync_block +class TRELLIS_API @NAME@ : public gr_sync_block { private: - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM1, int ST1, const fsm &FSM2, int ST2, const interleaver &INTERLEAVER, diff --git a/gr-trellis/src/lib/trellis_permutation.h b/gr-trellis/src/lib/trellis_permutation.h index 5505caf89..7fec9682f 100644 --- a/gr-trellis/src/lib/trellis_permutation.h +++ b/gr-trellis/src/lib/trellis_permutation.h @@ -24,22 +24,23 @@ #ifndef INCLUDED_TRELLIS_PERMUTATION_H #define INCLUDED_TRELLIS_PERMUTATION_H +#include <trellis_api.h> #include <vector> #include <gr_sync_block.h> class trellis_permutation; typedef boost::shared_ptr<trellis_permutation> trellis_permutation_sptr; -trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT); +TRELLIS_API trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT); /*! * \brief Permutation. * \ingroup coding_blk */ -class trellis_permutation : public gr_sync_block +class TRELLIS_API trellis_permutation : public gr_sync_block { private: - friend trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT); + friend TRELLIS_API trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT); int d_K; std::vector<int> d_TABLE; int d_SYMS_PER_BLOCK; diff --git a/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t b/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t index 3adb8a5b7..9857c6a34 100644 --- a/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t +++ b/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include "interleaver.h" #include <gr_block.h> @@ -34,7 +35,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo0, int SToK, const fsm &FSMi, int STi0, int STiK, const interleaver &INTERLEAVER, @@ -47,12 +48,12 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; /*! * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { fsm d_FSMo; - fsm d_FSMi; int d_STo0; int d_SToK; + fsm d_FSMi; int d_STi0; int d_STiK; interleaver d_INTERLEAVER; @@ -61,7 +62,7 @@ class @NAME@ : public gr_block trellis_siso_type_t d_SISO_TYPE; std::vector<float> d_buffer; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo0, int SToK, const fsm &FSMi, int STi0, int STiK, const interleaver &INTERLEAVER, diff --git a/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t b/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t index 146c26516..5d2c2b85c 100644 --- a/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t +++ b/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include "interleaver.h" #include <gr_block.h> @@ -35,7 +36,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo0, int SToK, const fsm &FSMi, int STi0, int STiK, const interleaver &INTERLEAVER, @@ -52,12 +53,12 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; /*! * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { fsm d_FSMo; - fsm d_FSMi; int d_STo0; int d_SToK; + fsm d_FSMi; int d_STi0; int d_STiK; interleaver d_INTERLEAVER; @@ -70,7 +71,7 @@ class @NAME@ : public gr_block float d_scaling; std::vector<float> d_buffer; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo0, int SToK, const fsm &FSMi, int STi0, int STiK, const interleaver &INTERLEAVER, diff --git a/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t b/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t index a9e4dc454..0e8ff45a4 100644 --- a/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t +++ b/gr-trellis/src/lib/trellis_sccc_encoder_XX.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include <vector> #include "fsm.h" #include "interleaver.h" @@ -33,7 +34,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo, const fsm &FSMi, int STi, const interleaver &INTERLEAVER, @@ -44,10 +45,10 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; * \brief SCCC encoder. * \ingroup coding_blk */ -class @NAME@ : public gr_sync_block +class TRELLIS_API @NAME@ : public gr_sync_block { private: - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSMo, int STo, const fsm &FSMi, int STi, const interleaver &INTERLEAVER, diff --git a/gr-trellis/src/lib/trellis_siso_combined_f.h b/gr-trellis/src/lib/trellis_siso_combined_f.h index 786e79386..2d043df62 100644 --- a/gr-trellis/src/lib/trellis_siso_combined_f.h +++ b/gr-trellis/src/lib/trellis_siso_combined_f.h @@ -23,6 +23,7 @@ #ifndef INCLUDED_TRELLIS_SISO_COMBINED_F_H #define INCLUDED_TRELLIS_SISO_COMBINED_F_H +#include <trellis_api.h> #include "fsm.h" #include "siso_type.h" #include "calc_metric.h" @@ -32,7 +33,7 @@ class trellis_siso_combined_f; typedef boost::shared_ptr<trellis_siso_combined_f> trellis_siso_combined_f_sptr; -trellis_siso_combined_f_sptr trellis_make_siso_combined_f ( +TRELLIS_API trellis_siso_combined_f_sptr trellis_make_siso_combined_f ( const fsm &FSM, // underlying FSM int K, // block size in trellis steps int S0, // initial state (put -1 if not specified) @@ -48,7 +49,7 @@ trellis_siso_combined_f_sptr trellis_make_siso_combined_f ( /*! * \ingroup coding_blk */ -class trellis_siso_combined_f : public gr_block +class TRELLIS_API trellis_siso_combined_f : public gr_block { fsm d_FSM; int d_K; @@ -63,7 +64,7 @@ class trellis_siso_combined_f : public gr_block //std::vector<float> d_alpha; //std::vector<float> d_beta; - friend trellis_siso_combined_f_sptr trellis_make_siso_combined_f ( + friend TRELLIS_API trellis_siso_combined_f_sptr trellis_make_siso_combined_f ( const fsm &FSM, int K, int S0, diff --git a/gr-trellis/src/lib/trellis_siso_f.h b/gr-trellis/src/lib/trellis_siso_f.h index 0e2cba67a..b3d02ad05 100644 --- a/gr-trellis/src/lib/trellis_siso_f.h +++ b/gr-trellis/src/lib/trellis_siso_f.h @@ -23,6 +23,7 @@ #ifndef INCLUDED_TRELLIS_SISO_F_H #define INCLUDED_TRELLIS_SISO_F_H +#include <trellis_api.h> #include "fsm.h" #include "siso_type.h" #include "core_algorithms.h" @@ -31,7 +32,7 @@ class trellis_siso_f; typedef boost::shared_ptr<trellis_siso_f> trellis_siso_f_sptr; -trellis_siso_f_sptr trellis_make_siso_f ( +TRELLIS_API trellis_siso_f_sptr trellis_make_siso_f ( const fsm &FSM, // underlying FSM int K, // block size in trellis steps int S0, // initial state (put -1 if not specified) @@ -45,7 +46,7 @@ trellis_siso_f_sptr trellis_make_siso_f ( /*! * \ingroup coding_blk */ -class trellis_siso_f : public gr_block +class TRELLIS_API trellis_siso_f : public gr_block { fsm d_FSM; int d_K; @@ -57,7 +58,7 @@ class trellis_siso_f : public gr_block //std::vector<float> d_alpha; //std::vector<float> d_beta; - friend trellis_siso_f_sptr trellis_make_siso_f ( + friend TRELLIS_API trellis_siso_f_sptr trellis_make_siso_f ( const fsm &FSM, int K, int S0, diff --git a/gr-trellis/src/lib/trellis_viterbi_X.h.t b/gr-trellis/src/lib/trellis_viterbi_X.h.t index 362d3f57e..c679649bb 100644 --- a/gr-trellis/src/lib/trellis_viterbi_X.h.t +++ b/gr-trellis/src/lib/trellis_viterbi_X.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include <gr_block.h> #include "core_algorithms.h" @@ -32,7 +33,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM, int K, int S0, @@ -43,7 +44,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; /*! * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { fsm d_FSM; int d_K; @@ -51,7 +52,7 @@ class @NAME@ : public gr_block int d_SK; //std::vector<int> d_trace; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM, int K, int S0, diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t b/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t index 35e6c4ce0..072f66158 100644 --- a/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t +++ b/gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t @@ -25,6 +25,7 @@ #ifndef @GUARD_NAME@ #define @GUARD_NAME@ +#include <trellis_api.h> #include "fsm.h" #include <gr_block.h> #include "calc_metric.h" @@ -33,7 +34,7 @@ class @NAME@; typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; -@SPTR_NAME@ trellis_make_@BASE_NAME@ ( +TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM, int K, int S0, @@ -46,7 +47,7 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; /*! * \ingroup coding_blk */ -class @NAME@ : public gr_block +class TRELLIS_API @NAME@ : public gr_block { fsm d_FSM; int d_K; @@ -57,7 +58,7 @@ class @NAME@ : public gr_block trellis_metric_type_t d_TYPE; //std::vector<int> d_trace; - friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + friend TRELLIS_API @SPTR_NAME@ trellis_make_@BASE_NAME@ ( const fsm &FSM, int K, int S0, diff --git a/gr-trellis/src/python/CMakeLists.txt b/gr-trellis/src/python/CMakeLists.txt new file mode 100644 index 000000000..9cd645fe4 --- /dev/null +++ b/gr-trellis/src/python/CMakeLists.txt @@ -0,0 +1,37 @@ +# Copyright 2011 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. + +######################################################################## +# Handle the unit tests +######################################################################## +IF(ENABLE_TESTING) +INCLUDE(GrTest) +FILE(GLOB py_qa_test_files "qa_*.py") +FOREACH(py_qa_test_file ${py_qa_test_files}) + GET_FILENAME_COMPONENT(py_qa_test_name ${py_qa_test_file} NAME_WE) + SET(GR_TEST_PYTHON_DIRS + ${CMAKE_BINARY_DIR}/gnuradio-core/src/python + ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig + ${CMAKE_BINARY_DIR}/gr-digital/swig + ${CMAKE_BINARY_DIR}/gr-trellis/src/lib + ) + SET(GR_TEST_TARGET_DEPS gruel gnuradio-core gnuradio-digital gnuradio-trellis) + GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${py_qa_test_file}) +ENDFOREACH(py_qa_test_file) +ENDIF(ENABLE_TESTING) |