diff options
38 files changed, 2474 insertions, 2746 deletions
diff --git a/gnuradio-core/CMakeLists.txt b/gnuradio-core/CMakeLists.txt index 5f26216d3..4e76b3c5a 100644 --- a/gnuradio-core/CMakeLists.txt +++ b/gnuradio-core/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright 2010-2012 Free Software Foundation, Inc. +# Copyright 2010-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -64,7 +64,7 @@ GR_SET_GLOBAL(GNURADIO_CORE_INCLUDE_DIRS GR_SET_GLOBAL(GNURADIO_CORE_SWIG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/gruel/src/swig - ${CMAKE_BINARY_DIR}/gruel/src/swig + ${CMAKE_BINARY_DIR}/gruel/src/swig/ ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/swig ${GNURADIO_CORE_INCLUDE_DIRS} ) diff --git a/gnuradio-core/src/lib/general/CMakeLists.txt b/gnuradio-core/src/lib/general/CMakeLists.txt index 53cb16d38..5c7b0f374 100644 --- a/gnuradio-core/src/lib/general/CMakeLists.txt +++ b/gnuradio-core/src/lib/general/CMakeLists.txt @@ -187,7 +187,6 @@ set(gr_core_general_triple_threats gr_agc2_ff gr_align_on_samplenumbers_ss gr_bin_statistics_f - gr_block_gateway gr_bytes_to_syms gr_char_to_float gr_char_to_short diff --git a/gnuradio-core/src/lib/general/general.i b/gnuradio-core/src/lib/general/general.i index 31acaefb8..c0ce65527 100644 --- a/gnuradio-core/src/lib/general/general.i +++ b/gnuradio-core/src/lib/general/general.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004-2012 Free Software Foundation, Inc. + * Copyright 2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -264,4 +264,3 @@ %include "gr_add_ff.i" %include "gr_vector_map.i" %include "gr_tag_debug.i" -%include "gr_block_gateway.i" diff --git a/gnuradio-core/src/lib/general/gr_block_gateway.cc b/gnuradio-core/src/lib/general/gr_block_gateway.cc deleted file mode 100644 index 79b42803a..000000000 --- a/gnuradio-core/src/lib/general/gr_block_gateway.cc +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright 2011-2012 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 <gr_block_gateway.h> -#include <gr_io_signature.h> -#include <iostream> -#include <boost/bind.hpp> - -/*********************************************************************** - * Helper routines - **********************************************************************/ -template <typename OutType, typename InType> -void copy_pointers(OutType &out, const InType &in){ - out.resize(in.size()); - for (size_t i = 0; i < in.size(); i++){ - out[i] = (void *)(in[i]); - } -} - -/*********************************************************************** - * The gr_block gateway implementation class - **********************************************************************/ -class gr_block_gateway_impl : public gr_block_gateway{ -public: - gr_block_gateway_impl( - gr_feval_ll *handler, - const std::string &name, - gr_io_signature_sptr in_sig, - gr_io_signature_sptr out_sig, - const gr_block_gw_work_type work_type, - const unsigned factor - ): - gr_block(name, in_sig, out_sig), - _handler(handler), - _work_type(work_type) - { - switch(_work_type){ - case GR_BLOCK_GW_WORK_GENERAL: - _decim = 1; //not relevant, but set anyway - _interp = 1; //not relevant, but set anyway - break; - - case GR_BLOCK_GW_WORK_SYNC: - _decim = 1; - _interp = 1; - this->set_fixed_rate(true); - break; - - case GR_BLOCK_GW_WORK_DECIM: - _decim = factor; - _interp = 1; - break; - - case GR_BLOCK_GW_WORK_INTERP: - _decim = 1; - _interp = factor; - this->set_output_multiple(_interp); - break; - } - } - - /******************************************************************* - * Overloads for various scheduler-called functions - ******************************************************************/ - void forecast( - int noutput_items, - gr_vector_int &ninput_items_required - ){ - switch(_work_type){ - case GR_BLOCK_GW_WORK_GENERAL: - _message.action = gr_block_gw_message_type::ACTION_FORECAST; - _message.forecast_args_noutput_items = noutput_items; - _message.forecast_args_ninput_items_required = ninput_items_required; - _handler->calleval(0); - ninput_items_required = _message.forecast_args_ninput_items_required; - return; - - default: - unsigned ninputs = ninput_items_required.size(); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = fixed_rate_noutput_to_ninput(noutput_items); - return; - } - } - - int general_work( - int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items - ){ - switch(_work_type){ - case GR_BLOCK_GW_WORK_GENERAL: - _message.action = gr_block_gw_message_type::ACTION_GENERAL_WORK; - _message.general_work_args_noutput_items = noutput_items; - _message.general_work_args_ninput_items = ninput_items; - copy_pointers(_message.general_work_args_input_items, input_items); - _message.general_work_args_output_items = output_items; - _handler->calleval(0); - return _message.general_work_args_return_value; - - default: - int r = work (noutput_items, input_items, output_items); - if (r > 0) consume_each(r*_decim/_interp); - return r; - } - } - - int work( - int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items - ){ - _message.action = gr_block_gw_message_type::ACTION_WORK; - _message.work_args_ninput_items = fixed_rate_noutput_to_ninput(noutput_items); - if (_message.work_args_ninput_items == 0) return -1; - _message.work_args_noutput_items = noutput_items; - copy_pointers(_message.work_args_input_items, input_items); - _message.work_args_output_items = output_items; - _handler->calleval(0); - return _message.work_args_return_value; - } - - int fixed_rate_noutput_to_ninput(int noutput_items){ - return (noutput_items*_decim/_interp) + history() - 1; - } - - int fixed_rate_ninput_to_noutput(int ninput_items){ - return std::max(0, ninput_items - (int)history() + 1)*_interp/_decim; - } - - bool start(void){ - _message.action = gr_block_gw_message_type::ACTION_START; - _handler->calleval(0); - return _message.start_args_return_value; - } - - bool stop(void){ - _message.action = gr_block_gw_message_type::ACTION_STOP; - _handler->calleval(0); - return _message.stop_args_return_value; - } - - gr_block_gw_message_type &gr_block_message(void){ - return _message; - } - -private: - gr_feval_ll *_handler; - gr_block_gw_message_type _message; - const gr_block_gw_work_type _work_type; - unsigned _decim, _interp; -}; - -boost::shared_ptr<gr_block_gateway> gr_make_block_gateway( - gr_feval_ll *handler, - const std::string &name, - gr_io_signature_sptr in_sig, - gr_io_signature_sptr out_sig, - const gr_block_gw_work_type work_type, - const unsigned factor -){ - return boost::shared_ptr<gr_block_gateway>( - new gr_block_gateway_impl(handler, name, in_sig, out_sig, work_type, factor) - ); -} diff --git a/gnuradio-core/src/lib/general/gr_block_gateway.h b/gnuradio-core/src/lib/general/gr_block_gateway.h deleted file mode 100644 index ae91d41b5..000000000 --- a/gnuradio-core/src/lib/general/gr_block_gateway.h +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright 2011-2012 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_GRBLOCK_GATEWAY_H -#define INCLUDED_GRBLOCK_GATEWAY_H - -#include <gr_core_api.h> -#include <gr_block.h> -#include <gr_feval.h> - -/*! - * The work type enum tells the gateway what kind of block to implement. - * The choices are familiar gnuradio block overloads (sync, decim, interp). - */ -enum gr_block_gw_work_type{ - GR_BLOCK_GW_WORK_GENERAL, - GR_BLOCK_GW_WORK_SYNC, - GR_BLOCK_GW_WORK_DECIM, - GR_BLOCK_GW_WORK_INTERP, -}; - -/*! - * Shared message structure between python and gateway. - * Each action type represents a scheduler-called function. - */ -struct gr_block_gw_message_type{ - enum action_type{ - ACTION_GENERAL_WORK, //dispatch work - ACTION_WORK, //dispatch work - ACTION_FORECAST, //dispatch forecast - ACTION_START, //dispatch start - ACTION_STOP, //dispatch stop - }; - - action_type action; - - int general_work_args_noutput_items; - std::vector<int> general_work_args_ninput_items; - std::vector<void *> general_work_args_input_items; //TODO this should be const void*, but swig cant int cast it right - std::vector<void *> general_work_args_output_items; - int general_work_args_return_value; - - int work_args_ninput_items; - int work_args_noutput_items; - std::vector<void *> work_args_input_items; //TODO this should be const void*, but swig cant int cast it right - std::vector<void *> work_args_output_items; - int work_args_return_value; - - int forecast_args_noutput_items; - std::vector<int> forecast_args_ninput_items_required; - - bool start_args_return_value; - - bool stop_args_return_value; -}; - -/*! - * The gateway block which performs all the magic. - * - * The gateway provides access to all the gr_block routines. - * The methods prefixed with gr_block__ are renamed - * to class methods without the prefix in python. - */ -class GR_CORE_API gr_block_gateway : virtual public gr_block{ -public: - //! Provide access to the shared message object - virtual gr_block_gw_message_type &gr_block_message(void) = 0; - - long gr_block__unique_id(void) const{ - return gr_block::unique_id(); - } - - std::string gr_block__name(void) const{ - return gr_block::name(); - } - - unsigned gr_block__history(void) const{ - return gr_block::history(); - } - - void gr_block__set_history(unsigned history){ - return gr_block::set_history(history); - } - - void gr_block__set_fixed_rate(bool fixed_rate){ - return gr_block::set_fixed_rate(fixed_rate); - } - - bool gr_block__fixed_rate(void) const{ - return gr_block::fixed_rate(); - } - - void gr_block__set_output_multiple(int multiple){ - return gr_block::set_output_multiple(multiple); - } - - int gr_block__output_multiple(void) const{ - return gr_block::output_multiple(); - } - - void gr_block__consume(int which_input, int how_many_items){ - return gr_block::consume(which_input, how_many_items); - } - - void gr_block__consume_each(int how_many_items){ - return gr_block::consume_each(how_many_items); - } - - void gr_block__produce(int which_output, int how_many_items){ - return gr_block::produce(which_output, how_many_items); - } - - void gr_block__set_relative_rate(double relative_rate){ - return gr_block::set_relative_rate(relative_rate); - } - - double gr_block__relative_rate(void) const{ - return gr_block::relative_rate(); - } - - uint64_t gr_block__nitems_read(unsigned int which_input){ - return gr_block::nitems_read(which_input); - } - - uint64_t gr_block__nitems_written(unsigned int which_output){ - return gr_block::nitems_written(which_output); - } - - gr_block::tag_propagation_policy_t gr_block__tag_propagation_policy(void){ - return gr_block::tag_propagation_policy(); - } - - void gr_block__set_tag_propagation_policy(gr_block::tag_propagation_policy_t p){ - return gr_block::set_tag_propagation_policy(p); - } - - void gr_block__add_item_tag( - unsigned int which_output, const gr_tag_t &tag - ){ - return gr_block::add_item_tag(which_output, tag); - } - - void gr_block__add_item_tag( - unsigned int which_output, - uint64_t abs_offset, - const pmt::pmt_t &key, - const pmt::pmt_t &value, - const pmt::pmt_t &srcid=pmt::PMT_F - ){ - return gr_block::add_item_tag(which_output, abs_offset, key, value, srcid); - } - - std::vector<gr_tag_t> gr_block__get_tags_in_range( - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end - ){ - std::vector<gr_tag_t> tags; - gr_block::get_tags_in_range(tags, which_input, abs_start, abs_end); - return tags; - } - - std::vector<gr_tag_t> gr_block__get_tags_in_range( - unsigned int which_input, - uint64_t abs_start, - uint64_t abs_end, - const pmt::pmt_t &key - ){ - std::vector<gr_tag_t> tags; - gr_block::get_tags_in_range(tags, which_input, abs_start, abs_end, key); - return tags; - } -}; - -/*! - * Make a new gateway block. - * \param handler the swig director object with callback - * \param name the name of the block (Ex: "Shirley") - * \param in_sig the input signature for this block - * \param out_sig the output signature for this block - * \param work_type the type of block overload to implement - * \param factor the decimation or interpolation factor - * \return a new gateway block - */ -GR_CORE_API boost::shared_ptr<gr_block_gateway> gr_make_block_gateway( - gr_feval_ll *handler, - const std::string &name, - gr_io_signature_sptr in_sig, - gr_io_signature_sptr out_sig, - const gr_block_gw_work_type work_type, - const unsigned factor -); - -#endif /* INCLUDED_GRBLOCK_GATEWAY_H */ diff --git a/gnuradio-core/src/lib/general/gr_block_gateway.i b/gnuradio-core/src/lib/general/gr_block_gateway.i deleted file mode 100644 index 8adafdfea..000000000 --- a/gnuradio-core/src/lib/general/gr_block_gateway.i +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2011-2012 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. - */ - -//////////////////////////////////////////////////////////////////////// -// standard includes -//////////////////////////////////////////////////////////////////////// -%include <gnuradio.i> -%include <gr_tags.i> -%include <gr_feval.i> - -//////////////////////////////////////////////////////////////////////// -// block headers -//////////////////////////////////////////////////////////////////////// -%{ -#include <gr_block_gateway.h> -%} - -//////////////////////////////////////////////////////////////////////// -// data type support -//////////////////////////////////////////////////////////////////////// -%template(int_vector_t) std::vector<int>; -%template(void_star_vector_t) std::vector<void *>; - -//////////////////////////////////////////////////////////////////////// -// block magic -//////////////////////////////////////////////////////////////////////// -GR_SWIG_BLOCK_MAGIC(gr,block_gateway); -%include <gr_block_gateway.h> diff --git a/gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt b/gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt index 62f3d7e46..3e75ead03 100644 --- a/gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt +++ b/gnuradio-core/src/python/gnuradio/gr/CMakeLists.txt @@ -23,7 +23,6 @@ include(GrPython) GR_PYTHON_INSTALL(FILES __init__.py exceptions.py - gateway.py gr_threading.py gr_threading_23.py gr_threading_24.py @@ -44,8 +43,6 @@ 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_SOURCE_DIR}/gruel/src/python - ${CMAKE_BINARY_DIR}/gruel/src/swig ${CMAKE_BINARY_DIR}/gnuradio-core/src/python ${CMAKE_BINARY_DIR}/gnuradio-core/src/lib/swig ) diff --git a/gnuradio-core/src/python/gnuradio/gr/__init__.py b/gnuradio-core/src/python/gnuradio/gr/__init__.py index 5b9a6a32c..602d1119f 100644 --- a/gnuradio-core/src/python/gnuradio/gr/__init__.py +++ b/gnuradio-core/src/python/gnuradio/gr/__init__.py @@ -1,5 +1,5 @@ # -# Copyright 2003-2012 Free Software Foundation, Inc. +# Copyright 2003,2004,2006,2008,2009,2010 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -44,7 +44,6 @@ from gnuradio_core import * from exceptions import * from hier_block2 import * from top_block import * -from gateway import basic_block, sync_block, decim_block, interp_block if _RTLD_GLOBAL != 0: sys.setdlopenflags(_dlopenflags) # Restore original flags diff --git a/gnuradio-core/src/python/gnuradio/gr/gateway.py b/gnuradio-core/src/python/gnuradio/gr/gateway.py deleted file mode 100644 index 244b8b592..000000000 --- a/gnuradio-core/src/python/gnuradio/gr/gateway.py +++ /dev/null @@ -1,215 +0,0 @@ -# -# Copyright 2011-2012 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. -# - -import gnuradio_core as gr_core -from gnuradio_core import io_signature, io_signaturev -from gnuradio_core import gr_block_gw_message_type -from gnuradio_core import block_gateway -import numpy - -######################################################################## -# Magic to turn pointers into numpy arrays -# http://docs.scipy.org/doc/numpy/reference/arrays.interface.html -######################################################################## -def pointer_to_ndarray(addr, dtype, nitems): - class array_like: - __array_interface__ = { - 'data' : (int(addr), False), - 'typestr' : dtype.base.str, - 'descr' : dtype.base.descr, - 'shape' : (nitems,) + dtype.shape, - 'strides' : None, - 'version' : 3 - } - return numpy.asarray(array_like()).view(dtype.base) - -######################################################################## -# Handler that does callbacks from C++ -######################################################################## -class gateway_handler(gr_core.feval_ll): - - #dont put a constructor, it wont work - - def init(self, callback): - self._callback = callback - - def eval(self, arg): - try: self._callback() - except Exception as ex: - print("handler caught exception: %s"%ex) - import traceback; traceback.print_exc() - raise ex - return 0 - -######################################################################## -# The guts that make this into a gr block -######################################################################## -class gateway_block(object): - - def __init__(self, name, in_sig, out_sig, work_type, factor): - - #ensure that the sigs are iterable dtypes - def sig_to_dtype_sig(sig): - if sig is None: sig = () - return map(numpy.dtype, sig) - self.__in_sig = sig_to_dtype_sig(in_sig) - self.__out_sig = sig_to_dtype_sig(out_sig) - - #cache the ranges to iterate when dispatching work - self.__in_indexes = range(len(self.__in_sig)) - self.__out_indexes = range(len(self.__out_sig)) - - #convert the signatures into gr.io_signatures - def sig_to_gr_io_sigv(sig): - if not len(sig): return io_signature(0, 0, 0) - return io_signaturev(len(sig), len(sig), [s.itemsize for s in sig]) - gr_in_sig = sig_to_gr_io_sigv(self.__in_sig) - gr_out_sig = sig_to_gr_io_sigv(self.__out_sig) - - #create internal gateway block - self.__handler = gateway_handler() - self.__handler.init(self.__gr_block_handle) - self.__gateway = block_gateway( - self.__handler, name, gr_in_sig, gr_out_sig, work_type, factor) - self.__message = self.__gateway.gr_block_message() - - #register gr_block functions - prefix = 'gr_block__' - for attr in [x for x in dir(self.__gateway) if x.startswith(prefix)]: - setattr(self, attr.replace(prefix, ''), getattr(self.__gateway, attr)) - self.pop_msg_queue = lambda: gr_core.gr_block_gw_pop_msg_queue_safe(self.__gateway) - - def to_basic_block(self): - """ - Makes this block connectable by hier/top block python - """ - return self.__gateway.to_basic_block() - - def __gr_block_handle(self): - """ - Dispatch tasks according to the action type specified in the message. - """ - if self.__message.action == gr_block_gw_message_type.ACTION_GENERAL_WORK: - self.__message.general_work_args_return_value = self.general_work( - - input_items=[pointer_to_ndarray( - self.__message.general_work_args_input_items[i], - self.__in_sig[i], - self.__message.general_work_args_ninput_items[i] - ) for i in self.__in_indexes], - - output_items=[pointer_to_ndarray( - self.__message.general_work_args_output_items[i], - self.__out_sig[i], - self.__message.general_work_args_noutput_items - ) for i in self.__out_indexes], - ) - - elif self.__message.action == gr_block_gw_message_type.ACTION_WORK: - self.__message.work_args_return_value = self.work( - - input_items=[pointer_to_ndarray( - self.__message.work_args_input_items[i], - self.__in_sig[i], - self.__message.work_args_ninput_items - ) for i in self.__in_indexes], - - output_items=[pointer_to_ndarray( - self.__message.work_args_output_items[i], - self.__out_sig[i], - self.__message.work_args_noutput_items - ) for i in self.__out_indexes], - ) - - elif self.__message.action == gr_block_gw_message_type.ACTION_FORECAST: - self.forecast( - noutput_items=self.__message.forecast_args_noutput_items, - ninput_items_required=self.__message.forecast_args_ninput_items_required, - ) - - elif self.__message.action == gr_block_gw_message_type.ACTION_START: - self.__message.start_args_return_value = self.start() - - elif self.__message.action == gr_block_gw_message_type.ACTION_STOP: - self.__message.stop_args_return_value = self.stop() - - def forecast(self, noutput_items, ninput_items_required): - """ - forecast is only called from a general block - this is the default implementation - """ - for ninput_item in ninput_items_required: - ninput_item = noutput_items + self.history() - 1; - return - - def general_work(self, *args, **kwargs): - """general work to be overloaded in a derived class""" - raise NotImplementedError("general work not implemented") - - def work(self, *args, **kwargs): - """work to be overloaded in a derived class""" - raise NotImplementedError("work not implemented") - - def start(self): return True - def stop(self): return True - -######################################################################## -# Wrappers for the user to inherit from -######################################################################## -class basic_block(gateway_block): - def __init__(self, name, in_sig, out_sig): - gateway_block.__init__(self, - name=name, - in_sig=in_sig, - out_sig=out_sig, - work_type=gr_core.GR_BLOCK_GW_WORK_GENERAL, - factor=1, #not relevant factor - ) - -class sync_block(gateway_block): - def __init__(self, name, in_sig, out_sig): - gateway_block.__init__(self, - name=name, - in_sig=in_sig, - out_sig=out_sig, - work_type=gr_core.GR_BLOCK_GW_WORK_SYNC, - factor=1, - ) - -class decim_block(gateway_block): - def __init__(self, name, in_sig, out_sig, decim): - gateway_block.__init__(self, - name=name, - in_sig=in_sig, - out_sig=out_sig, - work_type=gr_core.GR_BLOCK_GW_WORK_DECIM, - factor=decim, - ) - -class interp_block(gateway_block): - def __init__(self, name, in_sig, out_sig, interp): - gateway_block.__init__(self, - name=name, - in_sig=in_sig, - out_sig=out_sig, - work_type=gr_core.GR_BLOCK_GW_WORK_INTERP, - factor=interp, - ) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_block_gateway.py b/gnuradio-core/src/python/gnuradio/gr/qa_block_gateway.py deleted file mode 100644 index 89eb8aed6..000000000 --- a/gnuradio-core/src/python/gnuradio/gr/qa_block_gateway.py +++ /dev/null @@ -1,235 +0,0 @@ -# -# Copyright 2011-2012 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. -# - -from gnuradio import gr, gr_unittest -import pmt #from gruel import pmt -import numpy - -class add_2_f32_1_f32(gr.sync_block): - def __init__(self): - gr.sync_block.__init__( - self, - name = "add 2 f32", - in_sig = [numpy.float32, numpy.float32], - out_sig = [numpy.float32], - ) - - def work(self, input_items, output_items): - output_items[0][:] = input_items[0] + input_items[1] - return len(output_items[0]) - -class add_2_fc32_1_fc32(gr.sync_block): - def __init__(self): - gr.sync_block.__init__( - self, - name = "add 2 fc32", - in_sig = [numpy.complex64, numpy.complex64], - out_sig = [numpy.complex64], - ) - - def work(self, input_items, output_items): - output_items[0][:] = input_items[0] + input_items[1] - return len(output_items[0]) - -class convolve(gr.sync_block): - """ - A demonstration using block history to properly perform a convolution. - """ - def __init__(self): - gr.sync_block.__init__( - self, - name = "convolve", - in_sig = [numpy.float32], - out_sig = [numpy.float32] - ) - self._taps = [1, 0, 0, 0] - self.set_history(len(self._taps)) - - def work(self, input_items, output_items): - output_items[0][:] = numpy.convolve(input_items[0], self._taps, mode='valid') - return len(output_items[0]) - -class decim2x(gr.decim_block): - def __init__(self): - gr.decim_block.__init__( - self, - name = "decim2x", - in_sig = [numpy.float32], - out_sig = [numpy.float32], - decim = 2 - ) - - def work(self, input_items, output_items): - output_items[0][:] = input_items[0][::2] - return len(output_items[0]) - -class interp2x(gr.interp_block): - def __init__(self): - gr.interp_block.__init__( - self, - name = "interp2x", - in_sig = [numpy.float32], - out_sig = [numpy.float32], - interp = 2 - ) - - def work(self, input_items, output_items): - output_items[0][1::2] = input_items[0] - output_items[0][::2] = input_items[0] - return len(output_items[0]) - -class tag_source(gr.sync_block): - def __init__(self): - gr.sync_block.__init__( - self, - name = "tag source", - in_sig = None, - out_sig = [numpy.float32], - ) - - def work(self, input_items, output_items): - num_output_items = len(output_items[0]) - - #put code here to fill the output items... - - #make a new tag on the middle element every time work is called - count = self.nitems_written(0) + num_output_items/2 - key = pmt.pmt_string_to_symbol("example_key") - value = pmt.pmt_string_to_symbol("example_value") - self.add_item_tag(0, count, key, value) - - return num_output_items - -class tag_sink(gr.sync_block): - def __init__(self): - gr.sync_block.__init__( - self, - name = "tag sink", - in_sig = [numpy.float32], - out_sig = None, - ) - self.key = None - - def work(self, input_items, output_items): - num_input_items = len(input_items[0]) - - #put code here to process the input items... - - #print all the tags received in this work call - nread = self.nitems_read(0) - tags = self.get_tags_in_range(0, nread, nread+num_input_items) - for tag in tags: - print tag.offset - print pmt.pmt_symbol_to_string(tag.key) - print pmt.pmt_symbol_to_string(tag.value) - self.key = pmt.pmt_symbol_to_string(tag.key) - - return num_input_items - -class fc32_to_f32_2(gr.sync_block): - def __init__(self): - gr.sync_block.__init__( - self, - name = "fc32_to_f32_2", - in_sig = [numpy.complex64], - out_sig = [(numpy.float32, 2)], - ) - - def work(self, input_items, output_items): - output_items[0][::,0] = numpy.real(input_items[0]) - output_items[0][::,1] = numpy.imag(input_items[0]) - return len(output_items[0]) - -class test_block_gateway(gr_unittest.TestCase): - - def test_add_f32(self): - tb = gr.top_block() - src0 = gr.vector_source_f([1, 3, 5, 7, 9], False) - src1 = gr.vector_source_f([0, 2, 4, 6, 8], False) - adder = add_2_f32_1_f32() - sink = gr.vector_sink_f() - tb.connect((src0, 0), (adder, 0)) - tb.connect((src1, 0), (adder, 1)) - tb.connect(adder, sink) - tb.run() - self.assertEqual(sink.data(), (1, 5, 9, 13, 17)) - - def test_add_fc32(self): - tb = gr.top_block() - src0 = gr.vector_source_c([1, 3j, 5, 7j, 9], False) - src1 = gr.vector_source_c([0, 2j, 4, 6j, 8], False) - adder = add_2_fc32_1_fc32() - sink = gr.vector_sink_c() - tb.connect((src0, 0), (adder, 0)) - tb.connect((src1, 0), (adder, 1)) - tb.connect(adder, sink) - tb.run() - self.assertEqual(sink.data(), (1, 5j, 9, 13j, 17)) - - def test_convolve(self): - tb = gr.top_block() - src = gr.vector_source_f([1, 2, 3, 4, 5, 6, 7, 8], False) - cv = convolve() - sink = gr.vector_sink_f() - tb.connect(src, cv, sink) - tb.run() - self.assertEqual(sink.data(), (1, 2, 3, 4, 5, 6, 7, 8)) - - def test_decim2x(self): - tb = gr.top_block() - src = gr.vector_source_f([1, 2, 3, 4, 5, 6, 7, 8], False) - d2x = decim2x() - sink = gr.vector_sink_f() - tb.connect(src, d2x, sink) - tb.run() - self.assertEqual(sink.data(), (1, 3, 5, 7)) - - def test_interp2x(self): - tb = gr.top_block() - src = gr.vector_source_f([1, 3, 5, 7, 9], False) - i2x = interp2x() - sink = gr.vector_sink_f() - tb.connect(src, i2x, sink) - tb.run() - self.assertEqual(sink.data(), (1, 1, 3, 3, 5, 5, 7, 7, 9, 9)) - - def test_tags(self): - src = tag_source() - sink = tag_sink() - head = gr.head(gr.sizeof_float, 50000) #should be enough items to get a tag through - tb = gr.top_block() - tb.connect(src, head, sink) - tb.run() - self.assertEqual(sink.key, "example_key") - - def test_fc32_to_f32_2(self): - tb = gr.top_block() - src = gr.vector_source_c([1+2j, 3+4j, 5+6j, 7+8j, 9+10j], False) - convert = fc32_to_f32_2() - v2s = gr.vector_to_stream(gr.sizeof_float, 2) - sink = gr.vector_sink_f() - tb.connect(src, convert, v2s, sink) - tb.run() - self.assertEqual(sink.data(), (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) - -if __name__ == '__main__': - gr_unittest.run(test_block_gateway, "test_block_gateway.xml") - diff --git a/gr-digital/examples/CMakeLists.txt b/gr-digital/examples/CMakeLists.txt index 33d257e59..63e1eba4e 100644 --- a/gr-digital/examples/CMakeLists.txt +++ b/gr-digital/examples/CMakeLists.txt @@ -71,6 +71,7 @@ install( demod/pam_timing.grc demod/ber_simulation.grc demod/dpsk_loopback.grc + demod/gfsk_loopback.grc DESTINATION ${GR_PKG_DIGITAL_EXAMPLES_DIR}/demod COMPONENT "digital_python" ) diff --git a/gr-digital/examples/berawgn.py b/gr-digital/examples/berawgn.py new file mode 100755 index 000000000..d58dfbaae --- /dev/null +++ b/gr-digital/examples/berawgn.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python +""" +BER simulation for QPSK signals, compare to theoretical values. +Change the N_BITS value to simulate more bits per Eb/N0 value, +thus allowing to check for lower BER values. + +Lower values will work faster, higher values will use a lot of RAM. +Also, this app isn't highly optimized--the flow graph is completely +reinstantiated for every Eb/N0 value. +Of course, expect the maximum value for BER to be one order of +magnitude below what you chose for N_BITS. +""" + + +import math +import numpy +from scipy.special import erfc +import pylab +from gnuradio import gr, digital + +# Best to choose powers of 10 +N_BITS = 1e7 +RAND_SEED = 42 + +def berawgn(EbN0): + """ Calculates theoretical bit error rate in AWGN (for BPSK and given Eb/N0) """ + return 0.5 * erfc(math.sqrt(10**(float(EbN0)/10))) + +class BitErrors(gr.hier_block2): + """ Two inputs: true and received bits. We compare them and + add up the number of incorrect bits. Because integrate_ff() + can only add up a certain number of values, the output is + not a scalar, but a sequence of values, the sum of which is + the BER. """ + def __init__(self, bits_per_byte): + gr.hier_block2.__init__(self, "BitErrors", + gr.io_signature(2, 2, gr.sizeof_char), + gr.io_signature(1, 1, gr.sizeof_int)) + + # Bit comparison + comp = gr.xor_bb() + intdump_decim = 100000 + if N_BITS < intdump_decim: + intdump_decim = int(N_BITS) + self.connect(self, + comp, + gr.unpack_k_bits_bb(bits_per_byte), + gr.uchar_to_float(), + gr.integrate_ff(intdump_decim), + gr.multiply_const_ff(1.0/N_BITS), + self) + self.connect((self, 1), (comp, 1)) + +class BERAWGNSimu(gr.top_block): + " This contains the simulation flow graph " + def __init__(self, EbN0): + gr.top_block.__init__(self) + self.const = digital.qpsk_constellation() + # Source is N_BITS bits, non-repeated + data = map(int, numpy.random.randint(0, self.const.arity(), N_BITS/self.const.bits_per_symbol())) + src = gr.vector_source_b(data, False) + mod = gr.chunks_to_symbols_bc((self.const.points()), 1) + add = gr.add_vcc() + noise = gr.noise_source_c(gr.GR_GAUSSIAN, + self.EbN0_to_noise_voltage(EbN0), + RAND_SEED) + demod = digital.constellation_decoder_cb(self.const.base()) + ber = BitErrors(self.const.bits_per_symbol()) + self.sink = gr.vector_sink_f() + self.connect(src, mod, add, demod, ber, self.sink) + self.connect(noise, (add, 1)) + self.connect(src, (ber, 1)) + + def EbN0_to_noise_voltage(self, EbN0): + """ Converts Eb/N0 to a single-sided noise voltage (assuming unit symbol power) """ + return 1.0 / math.sqrt(2.0 * self.const.bits_per_symbol() * 10**(float(EbN0)/10)) + + +def simulate_ber(EbN0): + """ All the work's done here: create flow graph, run, read out BER """ + print "Eb/N0 = %d dB" % EbN0 + fg = BERAWGNSimu(EbN0) + fg.run() + return numpy.sum(fg.sink.data()) + +if __name__ == "__main__": + EbN0_min = 0 + EbN0_max = 15 + EbN0_range = range(EbN0_min, EbN0_max+1) + ber_theory = [berawgn(x) for x in EbN0_range] + print "Simulating..." + ber_simu = [simulate_ber(x) for x in EbN0_range] + + f = pylab.figure() + s = f.add_subplot(1,1,1) + s.semilogy(EbN0_range, ber_theory, 'g-.', label="Theoretical") + s.semilogy(EbN0_range, ber_simu, 'b-o', label="Simulated") + s.set_title('BER Simulation') + s.set_xlabel('Eb/N0 (dB)') + s.set_ylabel('BER') + s.legend() + s.grid() + pylab.show() + diff --git a/gr-digital/examples/demod/ber_simulation.grc b/gr-digital/examples/demod/ber_simulation.grc index 6a9361ed1..b7c6a624b 100644 --- a/gr-digital/examples/demod/ber_simulation.grc +++ b/gr-digital/examples/demod/ber_simulation.grc @@ -1,6 +1,6 @@ <?xml version='1.0' encoding='ASCII'?> <flow_graph> - <timestamp>Tue Apr 3 18:11:51 2012</timestamp> + <timestamp>Thu Jul 5 15:57:06 2012</timestamp> <block> <key>options</key> <param> @@ -44,6 +44,10 @@ <value>True</value> </param> <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> <key>realtime_scheduling</key> <value></value> </param> @@ -57,10 +61,41 @@ </param> </block> <block> - <key>gr_noise_source_x</key> + <key>gr_throttle</key> <param> <key>id</key> - <value>gr_noise_source_x</value> + <value>gr_throttle</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>samples_per_second</key> + <value>samp_rate</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(284, 24)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>gr_add_xx</key> + <param> + <key>id</key> + <value>gr_add_xx</value> </param> <param> <key>_enabled</key> @@ -71,20 +106,39 @@ <value>complex</value> </param> <param> - <key>noise_type</key> - <value>gr.GR_GAUSSIAN</value> + <key>num_inputs</key> + <value>2</value> </param> <param> - <key>amp</key> - <value>noise</value> + <key>vlen</key> + <value>1</value> </param> <param> - <key>seed</key> - <value>42</value> + <key>_coordinate</key> + <value>(486, 151)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>digital_constellation_decoder_cb</key> + <param> + <key>id</key> + <value>digital_constellation_decoder_cb_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>constellation</key> + <value>const.base()</value> </param> <param> <key>_coordinate</key> - <value>(235, 379)</value> + <value>(618, 164)</value> </param> <param> <key>_rotation</key> @@ -171,38 +225,30 @@ </param> <param> <key>_coordinate</key> - <value>(1062, 11)</value> + <value>(791, 228)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> </block> <block> - <key>gr_throttle</key> + <key>import</key> <param> <key>id</key> - <value>gr_throttle</value> + <value>import</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>byte</value> - </param> - <param> - <key>samples_per_second</key> - <value>samp_rate</value> - </param> - <param> - <key>vlen</key> - <value>1</value> + <key>import</key> + <value>import math</value> </param> <param> <key>_coordinate</key> - <value>(397, 27)</value> + <value>(18, 373)</value> </param> <param> <key>_rotation</key> @@ -213,7 +259,7 @@ <key>variable</key> <param> <key>id</key> - <value>samp_rate</value> + <value>const</value> </param> <param> <key>_enabled</key> @@ -221,11 +267,11 @@ </param> <param> <key>value</key> - <value>50e3</value> + <value>digital.qpsk_constellation()</value> </param> <param> <key>_coordinate</key> - <value>(20, 168)</value> + <value>(116, 310)</value> </param> <param> <key>_rotation</key> @@ -233,22 +279,22 @@ </param> </block> <block> - <key>import</key> + <key>variable</key> <param> <key>id</key> - <value>import</value> + <value>samp_rate</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>import</key> - <value>import math</value> + <key>value</key> + <value>100e3</value> </param> <param> <key>_coordinate</key> - <value>(138, 168)</value> + <value>(16, 308)</value> </param> <param> <key>_rotation</key> @@ -271,7 +317,7 @@ </param> <param> <key>title</key> - <value>"Constellation: "+str(const)</value> + <value>"Constellation: "+str(const.arity()) + "-PSK"</value> </param> <param> <key>samp_rate</key> @@ -323,7 +369,7 @@ </param> <param> <key>_coordinate</key> - <value>(828, 368)</value> + <value>(623, 228)</value> </param> <param> <key>_rotation</key> @@ -331,10 +377,10 @@ </param> </block> <block> - <key>gr_add_xx</key> + <key>blks2_error_rate</key> <param> <key>id</key> - <value>gr_add_xx</value> + <value>blks2_error_rate</value> </param> <param> <key>_enabled</key> @@ -342,42 +388,19 @@ </param> <param> <key>type</key> - <value>complex</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>_coordinate</key> - <value>(652, 395)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>digital_constellation_decoder_cb</key> - <param> - <key>id</key> - <value>digital_constellation_decoder_cb_0</value> + <value>'BER'</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>win_size</key> + <value>int(1e7)</value> </param> <param> - <key>constellation</key> - <value>const.base()</value> + <key>bits_per_symbol</key> + <value>const.bits_per_symbol()</value> </param> <param> <key>_coordinate</key> - <value>(693, 205)</value> + <value>(720, 25)</value> </param> <param> <key>_rotation</key> @@ -385,45 +408,34 @@ </param> </block> <block> - <key>variable</key> + <key>gr_noise_source_x</key> <param> <key>id</key> - <value>const</value> + <value>gr_noise_source_x</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>digital.qpsk_constellation()</value> - </param> - <param> - <key>_coordinate</key> - <value>(16, 461)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> + <key>type</key> + <value>complex</value> </param> - </block> - <block> - <key>variable</key> <param> - <key>id</key> - <value>const_points</value> + <key>noise_type</key> + <value>gr.GR_GAUSSIAN</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>amp</key> + <value>1.0 / math.sqrt(2.0 * const.bits_per_symbol() * 10**(EbN0/10))</value> </param> <param> - <key>value</key> - <value>const.points()</value> + <key>seed</key> + <value>42</value> </param> <param> <key>_coordinate</key> - <value>(17, 532)</value> + <value>(16, 224)</value> </param> <param> <key>_rotation</key> @@ -431,38 +443,38 @@ </param> </block> <block> - <key>random_source_x</key> + <key>gr_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>random_source_x</value> + <value>gr_chunks_to_symbols_xx</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> + <key>in_type</key> <value>byte</value> </param> <param> - <key>min</key> - <value>0</value> + <key>out_type</key> + <value>complex</value> </param> <param> - <key>max</key> - <value>len(const_points)</value> + <key>symbol_table</key> + <value>const.points()</value> </param> <param> - <key>num_samps</key> - <value>1000000</value> + <key>dimension</key> + <value>1</value> </param> <param> - <key>repeat</key> - <value>False</value> + <key>num_ports</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(15, 244)</value> + <value>(240, 140)</value> </param> <param> <key>_rotation</key> @@ -470,69 +482,54 @@ </param> </block> <block> - <key>gr_chunks_to_symbols_xx</key> + <key>variable_slider</key> <param> <key>id</key> - <value>gr_chunks_to_symbols_xx</value> + <value>EbN0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>in_type</key> - <value>byte</value> - </param> - <param> - <key>out_type</key> - <value>complex</value> - </param> - <param> - <key>symbol_table</key> - <value>const_points</value> - </param> - <param> - <key>dimension</key> - <value>1</value> + <key>label</key> + <value>Eb/N0 (dB)</value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>value</key> + <value>10</value> </param> <param> - <key>_coordinate</key> - <value>(367, 260)</value> + <key>min</key> + <value>-10</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>max</key> + <value>200</value> </param> - </block> - <block> - <key>blks2_error_rate</key> <param> - <key>id</key> - <value>blks2_error_rate</value> + <key>num_steps</key> + <value>211</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> <param> - <key>type</key> - <value>'BER'</value> + <key>converver</key> + <value>float_converter</value> </param> <param> - <key>win_size</key> - <value>1000000</value> + <key>grid_pos</key> + <value></value> </param> <param> - <key>bits_per_symbol</key> - <value>int(math.log(len(const_points))/math.log(2))</value> + <key>notebook</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(670, 41)</value> + <value>(311, 309)</value> </param> <param> <key>_rotation</key> @@ -540,22 +537,18 @@ </param> </block> <block> - <key>variable_slider</key> + <key>random_source_x</key> <param> <key>id</key> - <value>noise</value> + <value>random_source_x</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>AWGN Noise</value> - </param> - <param> - <key>value</key> - <value>0.10</value> + <key>type</key> + <value>byte</value> </param> <param> <key>min</key> @@ -563,31 +556,19 @@ </param> <param> <key>max</key> - <value>1</value> - </param> - <param> - <key>num_steps</key> - <value>100</value> + <value>const.arity()</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> - </param> - <param> - <key>converver</key> - <value>float_converter</value> - </param> - <param> - <key>grid_pos</key> - <value></value> + <key>num_samps</key> + <value>10000000</value> </param> <param> - <key>notebook</key> - <value></value> + <key>repeat</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(268, 481)</value> + <value>(17, 125)</value> </param> <param> <key>_rotation</key> diff --git a/gr-digital/examples/demod/digital_freq_lock.grc b/gr-digital/examples/demod/digital_freq_lock.grc index 36037febb..df105dd7f 100644 --- a/gr-digital/examples/demod/digital_freq_lock.grc +++ b/gr-digital/examples/demod/digital_freq_lock.grc @@ -1,6 +1,6 @@ <?xml version='1.0' encoding='ASCII'?> <flow_graph> - <timestamp>Sat Mar 6 17:17:12 2010</timestamp> + <timestamp>Thu Jul 5 18:11:22 2012</timestamp> <block> <key>options</key> <param> @@ -44,12 +44,16 @@ <value>True</value> </param> <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> <key>realtime_scheduling</key> <value></value> </param> <param> <key>_coordinate</key> - <value>(10, 10)</value> + <value>(-1, 0)</value> </param> <param> <key>_rotation</key> @@ -57,37 +61,38 @@ </param> </block> <block> - <key>gr_uchar_to_float</key> + <key>random_source_x</key> <param> <key>id</key> - <value>gr_uchar_to_float_0</value> + <value>random_source_x</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>_coordinate</key> - <value>(217, 108)</value> + <key>type</key> + <value>byte</value> </param> <param> - <key>_rotation</key> + <key>min</key> <value>0</value> </param> - </block> - <block> - <key>gr_uchar_to_float</key> <param> - <key>id</key> - <value>gr_uchar_to_float_0_0</value> + <key>max</key> + <value>256</value> </param> <param> - <key>_enabled</key> + <key>num_samps</key> + <value>10000000</value> + </param> + <param> + <key>repeat</key> <value>True</value> </param> <param> <key>_coordinate</key> - <value>(216, 273)</value> + <value>(-2, 111)</value> </param> <param> <key>_rotation</key> @@ -95,54 +100,30 @@ </param> </block> <block> - <key>variable_slider</key> + <key>gr_throttle</key> <param> <key>id</key> - <value>freq_offset</value> + <value>gr_throttle_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Frequency Offset</value> - </param> - <param> - <key>value</key> - <value>0</value> - </param> - <param> - <key>min</key> - <value>-0.5</value> - </param> - <param> - <key>max</key> - <value>0.5</value> - </param> - <param> - <key>num_steps</key> - <value>1000</value> - </param> - <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> - </param> - <param> - <key>converver</key> - <value>float_converter</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>samples_per_second</key> + <value>samp_rate</value> </param> <param> - <key>notebook</key> - <value></value> + <key>vlen</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(293, 684)</value> + <value>(456, 134)</value> </param> <param> <key>_rotation</key> @@ -150,38 +131,22 @@ </param> </block> <block> - <key>random_source_x</key> + <key>variable</key> <param> <key>id</key> - <value>random_source_x_0</value> + <value>sps</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>byte</value> - </param> - <param> - <key>min</key> - <value>0</value> - </param> - <param> - <key>max</key> - <value>pam_amp</value> - </param> - <param> - <key>num_samps</key> - <value>10000</value> - </param> - <param> - <key>repeat</key> - <value>True</value> + <key>value</key> + <value>4</value> </param> <param> <key>_coordinate</key> - <value>(13, 80)</value> + <value>(166, -2)</value> </param> <param> <key>_rotation</key> @@ -189,38 +154,22 @@ </param> </block> <block> - <key>random_source_x</key> + <key>variable</key> <param> <key>id</key> - <value>random_source_x_0_0</value> + <value>rolloff</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>byte</value> - </param> - <param> - <key>min</key> - <value>0</value> - </param> - <param> - <key>max</key> - <value>pam_amp</value> - </param> - <param> - <key>num_samps</key> - <value>10000</value> - </param> - <param> - <key>repeat</key> - <value>True</value> + <key>value</key> + <value>0.35</value> </param> <param> <key>_coordinate</key> - <value>(15, 245)</value> + <value>(231, 0)</value> </param> <param> <key>_rotation</key> @@ -228,10 +177,10 @@ </param> </block> <block> - <key>const_source_x</key> + <key>digital_fll_band_edge_cc</key> <param> <key>id</key> - <value>const_source_x_0</value> + <value>digital_fll_band_edge_cc_0</value> </param> <param> <key>_enabled</key> @@ -239,42 +188,27 @@ </param> <param> <key>type</key> - <value>float</value> - </param> - <param> - <key>const</key> - <value>-0.5*(pam_amp-1)</value> - </param> - <param> - <key>_coordinate</key> - <value>(213, 197)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> + <value>cc</value> </param> - </block> - <block> - <key>const_source_x</key> <param> - <key>id</key> - <value>const_source_x_0_0</value> + <key>samps_per_sym</key> + <value>sps</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>rolloff</key> + <value>rolloff</value> </param> <param> - <key>type</key> - <value>float</value> + <key>filter_size</key> + <value>44</value> </param> <param> - <key>const</key> - <value>-0.5*(pam_amp-1)</value> + <key>w</key> + <value>freq_bw</value> </param> <param> <key>_coordinate</key> - <value>(200, 360)</value> + <value>(81, 248)</value> </param> <param> <key>_rotation</key> @@ -282,61 +216,54 @@ </param> </block> <block> - <key>gr_add_xx</key> + <key>variable_slider</key> <param> <key>id</key> - <value>gr_add_xx_0</value> + <value>freq_bw</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>float</value> + <key>label</key> + <value>FLL Loop Bandwidth</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>value</key> + <value>0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>min</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(440, 167)</value> + <key>max</key> + <value>0.1</value> </param> <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>gr_add_xx</key> - <param> - <key>id</key> - <value>gr_add_xx_0_1</value> + <key>num_steps</key> + <value>1000</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> <param> - <key>type</key> - <value>float</value> + <key>converver</key> + <value>float_converter</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>grid_pos</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>notebook</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(430, 330)</value> + <value>(80, 382)</value> </param> <param> <key>_rotation</key> @@ -347,7 +274,7 @@ <key>variable</key> <param> <key>id</key> - <value>nfilts</value> + <value>samp_rate</value> </param> <param> <key>_enabled</key> @@ -355,11 +282,11 @@ </param> <param> <key>value</key> - <value>32</value> + <value>32000</value> </param> <param> <key>_coordinate</key> - <value>(435, 686)</value> + <value>(439, -1)</value> </param> <param> <key>_rotation</key> @@ -414,7 +341,7 @@ </param> <param> <key>_coordinate</key> - <value>(168, 684)</value> + <value>(553, 0)</value> </param> <param> <key>_rotation</key> @@ -422,91 +349,54 @@ </param> </block> <block> - <key>variable</key> + <key>variable_slider</key> <param> <key>id</key> - <value>spb_gen</value> + <value>freq_offset</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>4</value> - </param> - <param> - <key>_coordinate</key> - <value>(119, 841)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>pam_amp</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <key>label</key> + <value>Frequency Offset</value> </param> <param> <key>value</key> - <value>2</value> - </param> - <param> - <key>_coordinate</key> - <value>(223, 9)</value> - </param> - <param> - <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>spb</value> - </param> <param> - <key>_enabled</key> - <value>True</value> + <key>min</key> + <value>-0.5</value> </param> <param> - <key>value</key> - <value>4.1</value> + <key>max</key> + <value>0.5</value> </param> <param> - <key>_coordinate</key> - <value>(32, 842)</value> + <key>num_steps</key> + <value>1000</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> - </block> - <block> - <key>gr_float_to_complex</key> <param> - <key>id</key> - <value>gr_float_to_complex_0</value> + <key>converver</key> + <value>float_converter</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>grid_pos</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>notebook</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(590, 184)</value> + <value>(673, -1)</value> </param> <param> <key>_rotation</key> @@ -514,65 +404,38 @@ </param> </block> <block> - <key>gr_throttle</key> + <key>gr_channel_model</key> <param> <key>id</key> - <value>gr_throttle_0</value> + <value>gr_channel_model_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>complex</value> - </param> - <param> - <key>samples_per_second</key> - <value>samp_rate</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>_coordinate</key> - <value>(788, 197)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>notebook</key> - <param> - <key>id</key> - <value>notebook_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <key>noise_voltage</key> + <value>noise_amp</value> </param> <param> - <key>style</key> - <value>wx.NB_TOP</value> + <key>freq_offset</key> + <value>freq_offset</value> </param> <param> - <key>labels</key> - <value>['Freq', 'Time']</value> + <key>epsilon</key> + <value>1.0</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>taps</key> + <value>1.0</value> </param> <param> - <key>notebook</key> - <value></value> + <key>seed</key> + <value>42</value> </param> <param> <key>_coordinate</key> - <value>(216, 845)</value> + <value>(649, 104)</value> </param> <param> <key>_rotation</key> @@ -638,8 +501,16 @@ <value>notebook_0,1</value> </param> <param> + <key>trig_mode</key> + <value>gr.gr_TRIG_MODE_AUTO</value> + </param> + <param> + <key>y_axis_label</key> + <value>Counts</value> + </param> + <param> <key>_coordinate</key> - <value>(1123, 392)</value> + <value>(875, 0)</value> </param> <param> <key>_rotation</key> @@ -725,8 +596,59 @@ <value>notebook_0,0</value> </param> <param> + <key>freqvar</key> + <value>None</value> + </param> + <param> <key>_coordinate</key> - <value>(1122, 473)</value> + <value>(875, 108)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>digital_psk_mod</key> + <param> + <key>id</key> + <value>digital_psk_mod_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>constellation_points</key> + <value>2</value> + </param> + <param> + <key>mod_code</key> + <value>"gray"</value> + </param> + <param> + <key>differential</key> + <value>False</value> + </param> + <param> + <key>samples_per_symbol</key> + <value>sps</value> + </param> + <param> + <key>excess_bw</key> + <value>0.35</value> + </param> + <param> + <key>verbose</key> + <value>False</value> + </param> + <param> + <key>log</key> + <value>False</value> + </param> + <param> + <key>_coordinate</key> + <value>(194, 104)</value> </param> <param> <key>_rotation</key> @@ -792,8 +714,16 @@ <value>notebook_0,1</value> </param> <param> + <key>trig_mode</key> + <value>gr.gr_TRIG_MODE_AUTO</value> + </param> + <param> + <key>y_axis_label</key> + <value>Counts</value> + </param> + <param> <key>_coordinate</key> - <value>(1122, 680)</value> + <value>(439, 289)</value> </param> <param> <key>_rotation</key> @@ -879,233 +809,12 @@ <value>notebook_0,0</value> </param> <param> - <key>_coordinate</key> - <value>(1121, 762)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>samp_rate</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>32000</value> - </param> - <param> - <key>_coordinate</key> - <value>(128, 9)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>sig_amp</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>1</value> - </param> - <param> - <key>_coordinate</key> - <value>(315, 9)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>rolloff</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>0.35</value> - </param> - <param> - <key>_coordinate</key> - <value>(398, 12)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>rrctaps</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))</value> - </param> - <param> - <key>_coordinate</key> - <value>(826, 61)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>root_raised_cosine_filter</key> - <param> - <key>id</key> - <value>root_raised_cosine_filter_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>interp_fir_filter_ccf</value> - </param> - <param> - <key>decim</key> - <value>1</value> - </param> - <param> - <key>interp</key> - <value>spb_gen</value> - </param> - <param> - <key>gain</key> - <value>2*spb_gen</value> - </param> - <param> - <key>samp_rate</key> - <value>1.0</value> - </param> - <param> - <key>sym_rate</key> - <value>1./spb_gen</value> - </param> - <param> - <key>alpha</key> - <value>rolloff</value> - </param> - <param> - <key>ntaps</key> - <value>44</value> - </param> - <param> - <key>_coordinate</key> - <value>(978, 157)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>gr_fll_band_edge_cc</key> - <param> - <key>id</key> - <value>gr_fll_band_edge_cc_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>cc</value> - </param> - <param> - <key>samps_per_sym</key> - <value>spb_gen</value> - </param> - <param> - <key>rolloff</key> - <value>rolloff</value> - </param> - <param> - <key>filter_size</key> - <value>44</value> - </param> - <param> - <key>alpha</key> - <value>alpha</value> - </param> - <param> - <key>beta</key> - <value>beta</value> - </param> - <param> - <key>_coordinate</key> - <value>(874, 664)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>gr_channel_model</key> - <param> - <key>id</key> - <value>gr_channel_model_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>noise_voltage</key> - <value>noise_amp</value> - </param> - <param> - <key>freq_offset</key> - <value>freq_offset</value> - </param> - <param> - <key>epsilon</key> - <value>1.0</value> - </param> - <param> - <key>taps</key> - <value>1.0</value> - </param> - <param> - <key>seed</key> - <value>42</value> + <key>freqvar</key> + <value>None</value> </param> <param> <key>_coordinate</key> - <value>(618, 376)</value> + <value>(439, 423)</value> </param> <param> <key>_rotation</key> @@ -1113,97 +822,22 @@ </param> </block> <block> - <key>variable_slider</key> - <param> - <key>id</key> - <value>beta</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>label</key> - <value>Freq Beta</value> - </param> - <param> - <key>value</key> - <value>0</value> - </param> - <param> - <key>min</key> - <value>0.0</value> - </param> - <param> - <key>max</key> - <value>0.01</value> - </param> - <param> - <key>num_steps</key> - <value>1000</value> - </param> - <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> - </param> - <param> - <key>converver</key> - <value>float_converter</value> - </param> - <param> - <key>grid_pos</key> - <value></value> - </param> - <param> - <key>notebook</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(668, 5)</value> - </param> - <param> - <key>_rotation</key> - <value>180</value> - </param> - </block> - <block> - <key>variable_slider</key> + <key>notebook</key> <param> <key>id</key> - <value>alpha</value> + <value>notebook_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Freq Alpha</value> - </param> - <param> - <key>value</key> - <value>0</value> - </param> - <param> - <key>min</key> - <value>0</value> - </param> - <param> - <key>max</key> - <value>0.1</value> - </param> - <param> - <key>num_steps</key> - <value>1000</value> - </param> - <param> <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <value>wx.NB_TOP</value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>labels</key> + <value>['Freq', 'Time']</value> </param> <param> <key>grid_pos</key> @@ -1215,7 +849,7 @@ </param> <param> <key>_coordinate</key> - <value>(552, 4)</value> + <value>(114, 521)</value> </param> <param> <key>_rotation</key> @@ -1223,97 +857,49 @@ </param> </block> <connection> - <source_block_id>random_source_x_0</source_block_id> - <sink_block_id>gr_uchar_to_float_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>gr_uchar_to_float_0</source_block_id> - <sink_block_id>gr_add_xx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>const_source_x_0</source_block_id> - <sink_block_id>gr_add_xx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>gr_uchar_to_float_0_0</source_block_id> - <sink_block_id>gr_add_xx_0_1</sink_block_id> + <source_block_id>gr_channel_model_0</source_block_id> + <sink_block_id>wxgui_scopesink2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>const_source_x_0_0</source_block_id> - <sink_block_id>gr_add_xx_0_1</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>random_source_x_0_0</source_block_id> - <sink_block_id>gr_uchar_to_float_0_0</sink_block_id> + <source_block_id>gr_channel_model_0</source_block_id> + <sink_block_id>wxgui_fftsink2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_add_xx_0</source_block_id> - <sink_block_id>gr_float_to_complex_0</sink_block_id> + <source_block_id>random_source_x</source_block_id> + <sink_block_id>digital_psk_mod_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_add_xx_0_1</source_block_id> - <sink_block_id>gr_float_to_complex_0</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>gr_float_to_complex_0</source_block_id> + <source_block_id>digital_psk_mod_0</source_block_id> <sink_block_id>gr_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>gr_throttle_0</source_block_id> - <sink_block_id>root_raised_cosine_filter_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>gr_channel_model_0</source_block_id> - <sink_block_id>wxgui_scopesink2_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>root_raised_cosine_filter_0</source_block_id> <sink_block_id>gr_channel_model_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>gr_channel_model_0</source_block_id> - <sink_block_id>wxgui_fftsink2_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>gr_channel_model_0</source_block_id> - <sink_block_id>gr_fll_band_edge_cc_0</sink_block_id> + <sink_block_id>digital_fll_band_edge_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_fll_band_edge_cc_0</source_block_id> + <source_block_id>digital_fll_band_edge_cc_0</source_block_id> <sink_block_id>wxgui_scopesink2_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_fll_band_edge_cc_0</source_block_id> + <source_block_id>digital_fll_band_edge_cc_0</source_block_id> <sink_block_id>wxgui_fftsink2_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> diff --git a/gr-digital/examples/demod/dpsk_loopback.grc b/gr-digital/examples/demod/dpsk_loopback.grc index aef6a7738..c9867bea2 100644 --- a/gr-digital/examples/demod/dpsk_loopback.grc +++ b/gr-digital/examples/demod/dpsk_loopback.grc @@ -1,6 +1,6 @@ <?xml version='1.0' encoding='ASCII'?> <flow_graph> - <timestamp>Tue Apr 3 18:03:52 2012</timestamp> + <timestamp>Thu Jul 5 16:26:53 2012</timestamp> <block> <key>options</key> <param> @@ -17,11 +17,11 @@ </param> <param> <key>author</key> - <value>Example</value> + <value>GNU Radio</value> </param> <param> <key>description</key> - <value>gnuradio flow graph</value> + <value>Encode a signal into a packet, modulate, demodulate, decode and show it's the same data.</value> </param> <param> <key>window_size</key> @@ -44,6 +44,10 @@ <value>True</value> </param> <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> <key>realtime_scheduling</key> <value></value> </param> @@ -72,7 +76,7 @@ </param> <param> <key>_coordinate</key> - <value>(10, 170)</value> + <value>(11, 120)</value> </param> <param> <key>_rotation</key> @@ -127,7 +131,7 @@ </param> <param> <key>_coordinate</key> - <value>(12, 257)</value> + <value>(13, 188)</value> </param> <param> <key>_rotation</key> @@ -135,10 +139,10 @@ </param> </block> <block> - <key>gr_throttle</key> + <key>gr_sig_source_x</key> <param> <key>id</key> - <value>gr_throttle_0_0</value> + <value>gr_sig_source_x_0</value> </param> <param> <key>_enabled</key> @@ -149,16 +153,28 @@ <value>float</value> </param> <param> - <key>samples_per_second</key> + <key>samp_rate</key> <value>samp_rate</value> </param> <param> - <key>vlen</key> + <key>waveform</key> + <value>gr.GR_COS_WAVE</value> + </param> + <param> + <key>freq</key> + <value>freq</value> + </param> + <param> + <key>amp</key> <value>1</value> </param> <param> + <key>offset</key> + <value>0</value> + </param> + <param> <key>_coordinate</key> - <value>(225, 174)</value> + <value>(184, 9)</value> </param> <param> <key>_rotation</key> @@ -166,10 +182,10 @@ </param> </block> <block> - <key>gr_sig_source_x</key> + <key>digital_dxpsk_mod</key> <param> <key>id</key> - <value>gr_sig_source_x_0</value> + <value>digital_dxpsk_mod_1</value> </param> <param> <key>_enabled</key> @@ -177,31 +193,31 @@ </param> <param> <key>type</key> - <value>float</value> + <value>dbpsk</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>samples_per_symbol</key> + <value>2</value> </param> <param> - <key>waveform</key> - <value>gr.GR_COS_WAVE</value> + <key>excess_bw</key> + <value>0.35</value> </param> <param> - <key>freq</key> - <value>freq</value> + <key>gray_coded</key> + <value>True</value> </param> <param> - <key>amp</key> - <value>1</value> + <key>verbose</key> + <value>False</value> </param> <param> - <key>offset</key> - <value>0</value> + <key>log</key> + <value>False</value> </param> <param> <key>_coordinate</key> - <value>(203, 8)</value> + <value>(745, 16)</value> </param> <param> <key>_rotation</key> @@ -209,10 +225,10 @@ </param> </block> <block> - <key>blks2_packet_decoder</key> + <key>gr_throttle</key> <param> <key>id</key> - <value>blks2_packet_decoder_0</value> + <value>gr_throttle_0_0</value> </param> <param> <key>_enabled</key> @@ -223,16 +239,16 @@ <value>float</value> </param> <param> - <key>access_code</key> - <value></value> + <key>samples_per_second</key> + <value>samp_rate</value> </param> <param> - <key>threshold</key> - <value>-1</value> + <key>vlen</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(551, 65)</value> + <value>(358, 39)</value> </param> <param> <key>_rotation</key> @@ -240,10 +256,10 @@ </param> </block> <block> - <key>digital_dxpsk_demod</key> + <key>blks2_packet_encoder</key> <param> <key>id</key> - <value>digital_dxpsk_demod_0</value> + <value>blks2_packet_encoder_0</value> </param> <param> <key>_enabled</key> @@ -251,51 +267,31 @@ </param> <param> <key>type</key> - <value>dbpsk</value> + <value>float</value> </param> <param> <key>samples_per_symbol</key> <value>2</value> </param> <param> - <key>excess_bw</key> - <value>0.35</value> - </param> - <param> - <key>freq_bw</key> - <value>6.28/100.0</value> - </param> - <param> - <key>phase_bw</key> - <value>6.28/100.0</value> - </param> - <param> - <key>timing_bw</key> - <value>6.28/100.0</value> + <key>bits_per_symbol</key> + <value>1</value> </param> <param> - <key>omega_relative_limit</key> - <value>0.005</value> + <key>access_code</key> + <value></value> </param> <param> - <key>gray_coded</key> + <key>pad_for_usrp</key> <value>True</value> </param> <param> - <key>verbose</key> - <value>False</value> - </param> - <param> - <key>log</key> - <value>False</value> - </param> - <param> - <key>sync_out</key> - <value>False</value> + <key>payload_length</key> + <value>0</value> </param> <param> <key>_coordinate</key> - <value>(639, 254)</value> + <value>(541, 9)</value> </param> <param> <key>_rotation</key> @@ -303,10 +299,10 @@ </param> </block> <block> - <key>digital_dxpsk_mod</key> + <key>digital_dxpsk_demod</key> <param> <key>id</key> - <value>digital_dxpsk_mod_0</value> + <value>digital_dxpsk_demod_1</value> </param> <param> <key>_enabled</key> @@ -325,6 +321,22 @@ <value>0.35</value> </param> <param> + <key>freq_bw</key> + <value>6.28/100.0</value> + </param> + <param> + <key>phase_bw</key> + <value>6.28/100.0</value> + </param> + <param> + <key>timing_bw</key> + <value>6.28/100.0</value> + </param> + <param> + <key>omega_relative_limit</key> + <value>0.005</value> + </param> + <param> <key>gray_coded</key> <value>True</value> </param> @@ -337,19 +349,23 @@ <value>False</value> </param> <param> + <key>sync_out</key> + <value>False</value> + </param> + <param> <key>_coordinate</key> - <value>(421, 294)</value> + <value>(746, 135)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> </block> <block> - <key>blks2_packet_encoder</key> + <key>blks2_packet_decoder</key> <param> <key>id</key> - <value>blks2_packet_encoder_0</value> + <value>blks2_packet_decoder_0</value> </param> <param> <key>_enabled</key> @@ -360,32 +376,20 @@ <value>float</value> </param> <param> - <key>samples_per_symbol</key> - <value>2</value> - </param> - <param> - <key>bits_per_symbol</key> - <value>1</value> - </param> - <param> <key>access_code</key> <value></value> </param> <param> - <key>pad_for_usrp</key> - <value>True</value> - </param> - <param> - <key>payload_length</key> - <value>0</value> + <key>threshold</key> + <value>-1</value> </param> <param> <key>_coordinate</key> - <value>(216, 286)</value> + <value>(545, 187)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> </block> <block> @@ -456,46 +460,46 @@ </param> <param> <key>_coordinate</key> - <value>(760, 41)</value> + <value>(184, 165)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> </block> <connection> - <source_block_id>gr_sig_source_x_0</source_block_id> - <sink_block_id>gr_throttle_0_0</sink_block_id> + <source_block_id>blks2_packet_decoder_0</source_block_id> + <sink_block_id>wxgui_scopesink2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_throttle_0_0</source_block_id> - <sink_block_id>blks2_packet_encoder_0</sink_block_id> + <source_block_id>blks2_packet_encoder_0</source_block_id> + <sink_block_id>digital_dxpsk_mod_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blks2_packet_decoder_0</source_block_id> - <sink_block_id>wxgui_scopesink2_0</sink_block_id> + <source_block_id>digital_dxpsk_mod_1</source_block_id> + <sink_block_id>digital_dxpsk_demod_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_dxpsk_demod_0</source_block_id> + <source_block_id>digital_dxpsk_demod_1</source_block_id> <sink_block_id>blks2_packet_decoder_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_dxpsk_mod_0</source_block_id> - <sink_block_id>digital_dxpsk_demod_0</sink_block_id> + <source_block_id>gr_throttle_0_0</source_block_id> + <sink_block_id>blks2_packet_encoder_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blks2_packet_encoder_0</source_block_id> - <sink_block_id>digital_dxpsk_mod_0</sink_block_id> + <source_block_id>gr_sig_source_x_0</source_block_id> + <sink_block_id>gr_throttle_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-digital/examples/demod/gfsk_loopback.grc b/gr-digital/examples/demod/gfsk_loopback.grc new file mode 100644 index 000000000..f74a83526 --- /dev/null +++ b/gr-digital/examples/demod/gfsk_loopback.grc @@ -0,0 +1,646 @@ +<?xml version='1.0' encoding='ASCII'?> +<flow_graph> + <timestamp>Sun Jul 8 16:56:18 2012</timestamp> + <block> + <key>variable_slider</key> + <param> + <key>id</key> + <value>freq</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>label</key> + <value>Frequency (Hz)</value> + </param> + <param> + <key>value</key> + <value>500</value> + </param> + <param> + <key>min</key> + <value>0</value> + </param> + <param> + <key>max</key> + <value>samp_rate/2</value> + </param> + <param> + <key>num_steps</key> + <value>100</value> + </param> + <param> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> + </param> + <param> + <key>converver</key> + <value>float_converter</value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(34, 241)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>gr_sig_source_x</key> + <param> + <key>id</key> + <value>gr_sig_source_x_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>waveform</key> + <value>gr.GR_COS_WAVE</value> + </param> + <param> + <key>freq</key> + <value>freq</value> + </param> + <param> + <key>amp</key> + <value>1</value> + </param> + <param> + <key>offset</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(215, 26)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>gr_throttle</key> + <param> + <key>id</key> + <value>gr_throttle_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>samples_per_second</key> + <value>samp_rate</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(272.5, 142.0)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blks2_packet_encoder</key> + <param> + <key>id</key> + <value>blks2_packet_encoder_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>samples_per_symbol</key> + <value>2</value> + </param> + <param> + <key>bits_per_symbol</key> + <value>1</value> + </param> + <param> + <key>access_code</key> + <value></value> + </param> + <param> + <key>pad_for_usrp</key> + <value>True</value> + </param> + <param> + <key>payload_length</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(261, 227)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>samp_rate</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>10000</value> + </param> + <param> + <key>_coordinate</key> + <value>(10, 170)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>digital_gfsk_demod</key> + <param> + <key>id</key> + <value>digital_gfsk_demod_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>samples_per_symbol</key> + <value>sps</value> + </param> + <param> + <key>sensitivity</key> + <value>fm_sensitivity</value> + </param> + <param> + <key>gain_mu</key> + <value>0.175</value> + </param> + <param> + <key>mu</key> + <value>0.5</value> + </param> + <param> + <key>omega_relative_limit</key> + <value>0.005</value> + </param> + <param> + <key>freq_error</key> + <value>0.0</value> + </param> + <param> + <key>verbose</key> + <value>False</value> + </param> + <param> + <key>log</key> + <value>False</value> + </param> + <param> + <key>_coordinate</key> + <value>(669, 257)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>sps</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>8</value> + </param> + <param> + <key>_coordinate</key> + <value>(47, 445)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>digital_gfsk_mod</key> + <param> + <key>id</key> + <value>digital_gfsk_mod_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>samples_per_symbol</key> + <value>sps</value> + </param> + <param> + <key>sensitivity</key> + <value>fm_sensitivity</value> + </param> + <param> + <key>bt</key> + <value>0.35</value> + </param> + <param> + <key>verbose</key> + <value>False</value> + </param> + <param> + <key>log</key> + <value>False</value> + </param> + <param> + <key>_coordinate</key> + <value>(456, 277)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>fm_sensitivity</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>1.0</value> + </param> + <param> + <key>_coordinate</key> + <value>(40, 366)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blks2_packet_decoder</key> + <param> + <key>id</key> + <value>blks2_packet_decoder_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>access_code</key> + <value></value> + </param> + <param> + <key>threshold</key> + <value>-1</value> + </param> + <param> + <key>_coordinate</key> + <value>(705, 130)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>gr_quadrature_demod_cf</key> + <param> + <key>id</key> + <value>gr_quadrature_demod_cf_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>gain</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(627, 417)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>options</key> + <param> + <key>id</key> + <value>gfsk_loopback</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>title</key> + <value></value> + </param> + <param> + <key>author</key> + <value></value> + </param> + <param> + <key>description</key> + <value></value> + </param> + <param> + <key>window_size</key> + <value>1280, 1024</value> + </param> + <param> + <key>generate_options</key> + <value>wx_gui</value> + </param> + <param> + <key>category</key> + <value>Custom</value> + </param> + <param> + <key>run_options</key> + <value>prompt</value> + </param> + <param> + <key>run</key> + <value>True</value> + </param> + <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> + <key>realtime_scheduling</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(10, 10)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>wxgui_scopesink2</key> + <param> + <key>id</key> + <value>wxgui_scopesink2_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>title</key> + <value>Scope Plot</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>v_scale</key> + <value>0</value> + </param> + <param> + <key>v_offset</key> + <value>0</value> + </param> + <param> + <key>t_scale</key> + <value>1./freq</value> + </param> + <param> + <key>ac_couple</key> + <value>False</value> + </param> + <param> + <key>xy_mode</key> + <value>False</value> + </param> + <param> + <key>num_inputs</key> + <value>1</value> + </param> + <param> + <key>win_size</key> + <value></value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>trig_mode</key> + <value>gr.gr_TRIG_MODE_AUTO</value> + </param> + <param> + <key>y_axis_label</key> + <value>Counts</value> + </param> + <param> + <key>_coordinate</key> + <value>(907, 59)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>wxgui_scopesink2</key> + <param> + <key>id</key> + <value>wxgui_scopesink2_1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>title</key> + <value>Scope Plot</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>v_scale</key> + <value>0</value> + </param> + <param> + <key>v_offset</key> + <value>0</value> + </param> + <param> + <key>t_scale</key> + <value>0</value> + </param> + <param> + <key>ac_couple</key> + <value>False</value> + </param> + <param> + <key>xy_mode</key> + <value>False</value> + </param> + <param> + <key>num_inputs</key> + <value>1</value> + </param> + <param> + <key>win_size</key> + <value></value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>trig_mode</key> + <value>gr.gr_TRIG_MODE_AUTO</value> + </param> + <param> + <key>y_axis_label</key> + <value>Counts</value> + </param> + <param> + <key>_coordinate</key> + <value>(853, 400)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <connection> + <source_block_id>digital_gfsk_mod_0</source_block_id> + <sink_block_id>digital_gfsk_demod_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>gr_sig_source_x_0</source_block_id> + <sink_block_id>gr_throttle_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>gr_throttle_0_0</source_block_id> + <sink_block_id>blks2_packet_encoder_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blks2_packet_encoder_0</source_block_id> + <sink_block_id>digital_gfsk_mod_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>digital_gfsk_demod_0</source_block_id> + <sink_block_id>blks2_packet_decoder_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blks2_packet_decoder_0</source_block_id> + <sink_block_id>wxgui_scopesink2_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>digital_gfsk_mod_0</source_block_id> + <sink_block_id>gr_quadrature_demod_cf_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>gr_quadrature_demod_cf_0</source_block_id> + <sink_block_id>wxgui_scopesink2_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> +</flow_graph> diff --git a/gr-digital/examples/demod/mpsk_demod.grc b/gr-digital/examples/demod/mpsk_demod.grc index d7cca9661..b718fb68a 100644 --- a/gr-digital/examples/demod/mpsk_demod.grc +++ b/gr-digital/examples/demod/mpsk_demod.grc @@ -1,6 +1,6 @@ <?xml version='1.0' encoding='ASCII'?> <flow_graph> - <timestamp>Tue Apr 3 18:01:57 2012</timestamp> + <timestamp>Thu Jul 5 16:28:45 2012</timestamp> <block> <key>options</key> <param> @@ -44,6 +44,10 @@ <value>True</value> </param> <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> <key>realtime_scheduling</key> <value></value> </param> @@ -405,6 +409,10 @@ <value>notebook, 1</value> </param> <param> + <key>freqvar</key> + <value>None</value> + </param> + <param> <key>_coordinate</key> <value>(847, 10)</value> </param> diff --git a/gr-digital/examples/demod/pam_sync.grc b/gr-digital/examples/demod/pam_sync.grc index 8571995a5..f870a0b06 100644 --- a/gr-digital/examples/demod/pam_sync.grc +++ b/gr-digital/examples/demod/pam_sync.grc @@ -1,6 +1,6 @@ <?xml version='1.0' encoding='ASCII'?> <flow_graph> - <timestamp>Sat Mar 6 17:17:22 2010</timestamp> + <timestamp>Thu Jul 5 17:54:54 2012</timestamp> <block> <key>options</key> <param> @@ -44,12 +44,16 @@ <value>True</value> </param> <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> <key>realtime_scheduling</key> <value></value> </param> <param> <key>_coordinate</key> - <value>(10, 10)</value> + <value>(-1, 0)</value> </param> <param> <key>_rotation</key> @@ -57,37 +61,22 @@ </param> </block> <block> - <key>gr_uchar_to_float</key> + <key>variable</key> <param> <key>id</key> - <value>gr_uchar_to_float_0</value> + <value>const</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>_coordinate</key> - <value>(217, 108)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>gr_uchar_to_float</key> - <param> - <key>id</key> - <value>gr_uchar_to_float_0_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <key>value</key> + <value>digital.qpsk_constellation()</value> </param> <param> <key>_coordinate</key> - <value>(216, 273)</value> + <value>(336, -2)</value> </param> <param> <key>_rotation</key> @@ -98,7 +87,7 @@ <key>variable</key> <param> <key>id</key> - <value>samp_rate</value> + <value>rrctaps</value> </param> <param> <key>_enabled</key> @@ -106,11 +95,11 @@ </param> <param> <key>value</key> - <value>32000</value> + <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), rolloff, int(11*spb*nfilts))</value> </param> <param> <key>_coordinate</key> - <value>(128, 9)</value> + <value>(686, -1)</value> </param> <param> <key>_rotation</key> @@ -118,54 +107,22 @@ </param> </block> <block> - <key>variable_slider</key> + <key>variable</key> <param> <key>id</key> - <value>freq_offset</value> + <value>rolloff</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Frequency Offset</value> - </param> - <param> <key>value</key> - <value>0</value> - </param> - <param> - <key>min</key> - <value>-0.5</value> - </param> - <param> - <key>max</key> - <value>0.5</value> - </param> - <param> - <key>num_steps</key> - <value>1000</value> - </param> - <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> - </param> - <param> - <key>converver</key> - <value>float_converter</value> - </param> - <param> - <key>grid_pos</key> - <value></value> - </param> - <param> - <key>notebook</key> - <value></value> + <value>0.35</value> </param> <param> <key>_coordinate</key> - <value>(293, 684)</value> + <value>(607, -1)</value> </param> <param> <key>_rotation</key> @@ -173,38 +130,22 @@ </param> </block> <block> - <key>random_source_x</key> + <key>variable</key> <param> <key>id</key> - <value>random_source_x_0</value> + <value>spb</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>byte</value> - </param> - <param> - <key>min</key> - <value>0</value> - </param> - <param> - <key>max</key> - <value>pam_amp</value> - </param> - <param> - <key>num_samps</key> - <value>10000</value> - </param> - <param> - <key>repeat</key> - <value>True</value> + <key>value</key> + <value>4.0</value> </param> <param> <key>_coordinate</key> - <value>(13, 80)</value> + <value>(542, -1)</value> </param> <param> <key>_rotation</key> @@ -212,38 +153,22 @@ </param> </block> <block> - <key>random_source_x</key> + <key>variable</key> <param> <key>id</key> - <value>random_source_x_0_0</value> + <value>sig_amp</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>byte</value> - </param> - <param> - <key>min</key> - <value>0</value> - </param> - <param> - <key>max</key> - <value>pam_amp</value> - </param> - <param> - <key>num_samps</key> - <value>10000</value> - </param> - <param> - <key>repeat</key> - <value>True</value> + <key>value</key> + <value>1.0</value> </param> <param> <key>_coordinate</key> - <value>(15, 245)</value> + <value>(861, 0)</value> </param> <param> <key>_rotation</key> @@ -251,26 +176,22 @@ </param> </block> <block> - <key>const_source_x</key> + <key>virtual_sink</key> <param> <key>id</key> - <value>const_source_x_0</value> + <value>virtual_sink_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>float</value> - </param> - <param> - <key>const</key> - <value>-0.5*(pam_amp-1)</value> + <key>stream_id</key> + <value>input_signal_probe</value> </param> <param> <key>_coordinate</key> - <value>(213, 197)</value> + <value>(330, 183)</value> </param> <param> <key>_rotation</key> @@ -278,10 +199,10 @@ </param> </block> <block> - <key>const_source_x</key> + <key>gr_pfb_clock_sync_xxx</key> <param> <key>id</key> - <value>const_source_x_0_0</value> + <value>gr_pfb_clock_sync_xxx_0</value> </param> <param> <key>_enabled</key> @@ -289,46 +210,43 @@ </param> <param> <key>type</key> - <value>float</value> + <value>ccf</value> </param> <param> - <key>const</key> - <value>-0.5*(pam_amp-1)</value> + <key>sps</key> + <value>spb</value> </param> <param> - <key>_coordinate</key> - <value>(200, 360)</value> + <key>alpha</key> + <value>time_alpha</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>beta</key> + <value>time_beta</value> </param> - </block> - <block> - <key>gr_add_xx</key> <param> - <key>id</key> - <value>gr_add_xx_0</value> + <key>taps</key> + <value>rrctaps</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>filter_size</key> + <value>nfilts</value> </param> <param> - <key>type</key> - <value>float</value> + <key>init_phase</key> + <value>16</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>max_dev</key> + <value>1.5</value> </param> <param> - <key>vlen</key> + <key>osps</key> <value>1</value> </param> <param> <key>_coordinate</key> - <value>(440, 167)</value> + <value>(598, 241)</value> </param> <param> <key>_rotation</key> @@ -336,10 +254,10 @@ </param> </block> <block> - <key>gr_add_xx</key> + <key>digital_fll_band_edge_cc</key> <param> <key>id</key> - <value>gr_add_xx_0_1</value> + <value>digital_fll_band_edge_cc_0</value> </param> <param> <key>_enabled</key> @@ -347,19 +265,27 @@ </param> <param> <key>type</key> - <value>float</value> + <value>cc</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>samps_per_sym</key> + <value>spb</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>rolloff</key> + <value>rolloff</value> + </param> + <param> + <key>filter_size</key> + <value>44</value> + </param> + <param> + <key>w</key> + <value>freq_bw</value> </param> <param> <key>_coordinate</key> - <value>(430, 330)</value> + <value>(331, 239)</value> </param> <param> <key>_rotation</key> @@ -382,7 +308,7 @@ </param> <param> <key>_coordinate</key> - <value>(435, 686)</value> + <value>(598, 186)</value> </param> <param> <key>_rotation</key> @@ -390,54 +316,22 @@ </param> </block> <block> - <key>variable_slider</key> + <key>variable</key> <param> <key>id</key> - <value>noise_amp</value> + <value>samp_rate</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Channel Noise</value> - </param> - <param> <key>value</key> - <value>0</value> - </param> - <param> - <key>min</key> - <value>0</value> - </param> - <param> - <key>max</key> - <value>1.0</value> - </param> - <param> - <key>num_steps</key> - <value>1000</value> - </param> - <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> - </param> - <param> - <key>converver</key> - <value>float_converter</value> - </param> - <param> - <key>grid_pos</key> - <value></value> - </param> - <param> - <key>notebook</key> - <value></value> + <value>128000</value> </param> <param> <key>_coordinate</key> - <value>(168, 684)</value> + <value>(193, -1)</value> </param> <param> <key>_rotation</key> @@ -445,77 +339,38 @@ </param> </block> <block> - <key>variable_slider</key> + <key>random_source_x</key> <param> <key>id</key> - <value>interpratio</value> + <value>random_source_x</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Timing Offset</value> - </param> - <param> - <key>value</key> - <value>1.00</value> + <key>type</key> + <value>byte</value> </param> <param> <key>min</key> - <value>0.99</value> + <value>0</value> </param> <param> <key>max</key> - <value>1.01</value> - </param> - <param> - <key>num_steps</key> - <value>1000</value> - </param> - <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <value>const.arity()</value> </param> <param> - <key>converver</key> - <value>float_converter</value> - </param> - <param> - <key>grid_pos</key> - <value></value> - </param> - <param> - <key>notebook</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(40, 684)</value> - </param> - <param> - <key>_rotation</key> - <value>180</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>pam_amp</value> + <key>num_samps</key> + <value>10000000</value> </param> <param> - <key>_enabled</key> + <key>repeat</key> <value>True</value> </param> <param> - <key>value</key> - <value>2</value> - </param> - <param> <key>_coordinate</key> - <value>(223, 9)</value> + <value>(0, 72)</value> </param> <param> <key>_rotation</key> @@ -523,45 +378,38 @@ </param> </block> <block> - <key>variable</key> + <key>gr_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>sig_amp</value> + <value>gr_chunks_to_symbols_xx</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>1</value> + <key>in_type</key> + <value>byte</value> </param> <param> - <key>_coordinate</key> - <value>(315, 9)</value> + <key>out_type</key> + <value>complex</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>symbol_table</key> + <value>const.points()</value> </param> - </block> - <block> - <key>variable</key> <param> - <key>id</key> - <value>rolloff</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <key>dimension</key> + <value>1</value> </param> <param> - <key>value</key> - <value>0.35</value> + <key>num_ports</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(397, 9)</value> + <value>(196, 87)</value> </param> <param> <key>_rotation</key> @@ -569,30 +417,30 @@ </param> </block> <block> - <key>gr_throttle</key> + <key>blks2_pfb_arb_resampler_ccf</key> <param> <key>id</key> - <value>gr_throttle_0</value> + <value>blks2_pfb_arb_resampler_ccf_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>rate</key> + <value>spb</value> </param> <param> - <key>samples_per_second</key> - <value>samp_rate</value> + <key>taps</key> + <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>size</key> + <value>32</value> </param> <param> <key>_coordinate</key> - <value>(253, 575)</value> + <value>(435, 80)</value> </param> <param> <key>_rotation</key> @@ -600,109 +448,69 @@ </param> </block> <block> - <key>variable_slider</key> + <key>gr_channel_model</key> <param> <key>id</key> - <value>time_beta</value> + <value>gr_channel_model_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Timing Beta</value> - </param> - <param> - <key>value</key> - <value>0</value> - </param> - <param> - <key>min</key> - <value>0.0</value> - </param> - <param> - <key>max</key> - <value>0.1</value> - </param> - <param> - <key>num_steps</key> - <value>1000</value> + <key>noise_voltage</key> + <value>noise_amp</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>freq_offset</key> + <value>freq_offset</value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>epsilon</key> + <value>interpratio</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>taps</key> + <value>1.0</value> </param> <param> - <key>notebook</key> - <value></value> + <key>seed</key> + <value>42</value> </param> <param> <key>_coordinate</key> - <value>(606, 8)</value> + <value>(46, 183)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <block> - <key>variable_slider</key> + <key>gr_multiply_const_vxx</key> <param> <key>id</key> - <value>time_alpha</value> + <value>gr_multiply_const_vxx_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Timing Alpha</value> - </param> - <param> - <key>value</key> - <value>0</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>min</key> - <value>0</value> + <key>const</key> + <value>sig_amp</value> </param> <param> - <key>max</key> + <key>vlen</key> <value>1</value> </param> <param> - <key>num_steps</key> - <value>1000</value> - </param> - <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> - </param> - <param> - <key>converver</key> - <value>float_converter</value> - </param> - <param> - <key>grid_pos</key> - <value></value> - </param> - <param> - <key>notebook</key> - <value></value> - </param> - <param> <key>_coordinate</key> - <value>(490, 8)</value> + <value>(659, 95)</value> </param> <param> <key>_rotation</key> @@ -710,54 +518,30 @@ </param> </block> <block> - <key>variable_slider</key> + <key>gr_throttle</key> <param> <key>id</key> - <value>phase_alpha</value> + <value>gr_throttle_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Phase Alpha</value> - </param> - <param> - <key>value</key> - <value>0</value> - </param> - <param> - <key>min</key> - <value>0</value> - </param> - <param> - <key>max</key> - <value>0.1</value> - </param> - <param> - <key>num_steps</key> - <value>1000</value> - </param> - <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> - </param> - <param> - <key>converver</key> - <value>float_converter</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>samples_per_second</key> + <value>samp_rate</value> </param> <param> - <key>notebook</key> - <value></value> + <key>vlen</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(953, 8)</value> + <value>(857, 95)</value> </param> <param> <key>_rotation</key> @@ -765,85 +549,41 @@ </param> </block> <block> - <key>variable_slider</key> + <key>virtual_source</key> <param> <key>id</key> - <value>phase_beta</value> + <value>virtual_source_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Phase Beta</value> - </param> - <param> - <key>value</key> - <value>0</value> - </param> - <param> - <key>min</key> - <value>0.0</value> - </param> - <param> - <key>max</key> - <value>0.01</value> - </param> - <param> - <key>num_steps</key> - <value>1000</value> - </param> - <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> - </param> - <param> - <key>converver</key> - <value>float_converter</value> - </param> - <param> - <key>grid_pos</key> - <value></value> - </param> - <param> - <key>notebook</key> - <value></value> + <key>stream_id</key> + <value>input_signal_probe</value> </param> <param> <key>_coordinate</key> - <value>(1066, 8)</value> + <value>(835, 562)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <block> - <key>gr_costas_loop_cc</key> + <key>digital_costas_loop_cc</key> <param> <key>id</key> - <value>gr_costas_loop_cc_0</value> + <value>digital_costas_loop_cc_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>alpha</key> - <value>phase_alpha</value> - </param> - <param> - <key>beta</key> - <value>phase_beta</value> - </param> - <param> - <key>max_freq</key> - <value>0.2</value> - </param> - <param> - <key>min_freq</key> - <value>-0.2</value> + <key>w</key> + <value>phase_bw</value> </param> <param> <key>order</key> @@ -851,7 +591,7 @@ </param> <param> <key>_coordinate</key> - <value>(915, 560)</value> + <value>(866, 246)</value> </param> <param> <key>_rotation</key> @@ -862,7 +602,7 @@ <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>wxgui_scopesink2_0</value> + <value>wxgui_scopesink2_0_0_1</value> </param> <param> <key>_enabled</key> @@ -874,7 +614,7 @@ </param> <param> <key>title</key> - <value>Input Signal</value> + <value>Pre-sync Signal</value> </param> <param> <key>samp_rate</key> @@ -882,7 +622,7 @@ </param> <param> <key>v_scale</key> - <value>0</value> + <value>.5</value> </param> <param> <key>v_offset</key> @@ -914,34 +654,19 @@ </param> <param> <key>notebook</key> - <value>notebook_0,0</value> - </param> - <param> - <key>_coordinate</key> - <value>(1116, 559)</value> + <value>notebook_0,1</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>trig_mode</key> + <value>gr.gr_TRIG_MODE_AUTO</value> </param> - </block> - <block> - <key>variable</key> <param> - <key>id</key> - <value>rrctaps</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), rolloff, int(11*spb*nfilts))</value> + <key>y_axis_label</key> + <value>Counts</value> </param> <param> <key>_coordinate</key> - <value>(436, 755)</value> + <value>(1081, 439)</value> </param> <param> <key>_rotation</key> @@ -949,85 +674,70 @@ </param> </block> <block> - <key>notebook</key> + <key>wxgui_fftsink2</key> <param> <key>id</key> - <value>notebook_0</value> + <value>wxgui_fftsink2_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>style</key> - <value>wx.NB_TOP</value> - </param> - <param> - <key>labels</key> - <value>['Output Signal', 'Input Signal']</value> - </param> - <param> - <key>grid_pos</key> - <value></value> + <key>type</key> + <value>complex</value> </param> <param> - <key>notebook</key> - <value></value> + <key>title</key> + <value>Received spectrum</value> </param> <param> - <key>_coordinate</key> - <value>(203, 823)</value> + <key>samp_rate</key> + <value>samp_rate</value> </param> <param> - <key>_rotation</key> + <key>baseband_freq</key> <value>0</value> </param> - </block> - <block> - <key>wxgui_scopesink2</key> - <param> - <key>id</key> - <value>wxgui_scopesink2_0_0_1</value> - </param> <param> - <key>_enabled</key> - <value>True</value> + <key>y_per_div</key> + <value>10</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>y_divs</key> + <value>10</value> </param> <param> - <key>title</key> - <value>Input Signal</value> + <key>ref_level</key> + <value>10</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>ref_scale</key> + <value>2.0</value> </param> <param> - <key>v_scale</key> - <value>.5</value> + <key>fft_size</key> + <value>1024</value> </param> <param> - <key>v_offset</key> - <value>0</value> + <key>fft_rate</key> + <value>30</value> </param> <param> - <key>t_scale</key> - <value>0</value> + <key>peak_hold</key> + <value>False</value> </param> <param> - <key>ac_couple</key> + <key>average</key> <value>False</value> </param> <param> - <key>xy_mode</key> - <value>False</value> + <key>avg_alpha</key> + <value>0</value> </param> <param> - <key>num_inputs</key> - <value>1</value> + <key>win</key> + <value>None</value> </param> <param> <key>win_size</key> @@ -1042,8 +752,12 @@ <value>notebook_0,1</value> </param> <param> + <key>freqvar</key> + <value>None</value> + </param> + <param> <key>_coordinate</key> - <value>(975, 312)</value> + <value>(1081, 563)</value> </param> <param> <key>_rotation</key> @@ -1054,7 +768,7 @@ <key>wxgui_fftsink2</key> <param> <key>id</key> - <value>wxgui_fftsink2_0</value> + <value>wxgui_fftsink2_0_0</value> </param> <param> <key>_enabled</key> @@ -1066,7 +780,7 @@ </param> <param> <key>title</key> - <value>Input Frequency</value> + <value>Post-sync spectrum</value> </param> <param> <key>samp_rate</key> @@ -1126,195 +840,200 @@ </param> <param> <key>notebook</key> - <value>notebook_0,1</value> + <value>notebook_0,0</value> + </param> + <param> + <key>freqvar</key> + <value>None</value> </param> <param> <key>_coordinate</key> - <value>(1116, 355)</value> + <value>(347, 516)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> </block> <block> - <key>virtual_source</key> + <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>virtual_source_0</value> + <value>wxgui_scopesink2_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>stream_id</key> - <value>input_signal_probe</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>_coordinate</key> - <value>(801, 453)</value> + <key>title</key> + <value>Post-sync Signal</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>samp_rate</key> + <value>samp_rate</value> </param> - </block> - <block> - <key>virtual_sink</key> <param> - <key>id</key> - <value>virtual_sink_0</value> + <key>v_scale</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>v_offset</key> + <value>0</value> </param> <param> - <key>stream_id</key> - <value>input_signal_probe</value> + <key>t_scale</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(280, 475)</value> + <key>ac_couple</key> + <value>False</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>xy_mode</key> + <value>True</value> </param> - </block> - <block> - <key>wxgui_fftsink2</key> <param> - <key>id</key> - <value>wxgui_fftsink2_0_0</value> + <key>num_inputs</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>win_size</key> + <value></value> </param> <param> - <key>type</key> - <value>complex</value> + <key>grid_pos</key> + <value></value> </param> <param> - <key>title</key> - <value>Output Frequency</value> + <key>notebook</key> + <value>notebook_0,0</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>trig_mode</key> + <value>gr.gr_TRIG_MODE_AUTO</value> </param> <param> - <key>baseband_freq</key> - <value>0</value> + <key>y_axis_label</key> + <value>Counts</value> </param> <param> - <key>y_per_div</key> - <value>10</value> + <key>_coordinate</key> + <value>(1085, 213)</value> </param> <param> - <key>y_divs</key> - <value>10</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>variable_slider</key> <param> - <key>ref_level</key> - <value>10</value> + <key>id</key> + <value>freq_bw</value> </param> <param> - <key>ref_scale</key> - <value>2.0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>fft_size</key> - <value>1024</value> + <key>label</key> + <value>FLL Bandwidth</value> </param> <param> - <key>fft_rate</key> - <value>30</value> + <key>value</key> + <value>0</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>min</key> + <value>0.0</value> </param> <param> - <key>average</key> - <value>False</value> + <key>max</key> + <value>0.05</value> </param> <param> - <key>avg_alpha</key> - <value>0</value> + <key>num_steps</key> + <value>1000</value> </param> <param> - <key>win</key> - <value>None</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> <param> - <key>win_size</key> - <value></value> + <key>converver</key> + <value>float_converter</value> </param> <param> <key>grid_pos</key> - <value></value> + <value>(4,2,1,1)</value> </param> <param> <key>notebook</key> - <value>notebook_0,0</value> + <value></value> </param> <param> <key>_coordinate</key> - <value>(663, 687)</value> + <value>(341, 373)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> </block> <block> - <key>gr_pfb_clock_sync_xxx</key> + <key>variable_slider</key> <param> <key>id</key> - <value>gr_pfb_clock_sync_xxx_0</value> + <value>time_alpha</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>ccf</value> + <key>label</key> + <value>Timing Alpha</value> </param> <param> - <key>sps</key> - <value>spb</value> + <key>value</key> + <value>0</value> </param> <param> - <key>alpha</key> - <value>time_alpha</value> + <key>min</key> + <value>0</value> </param> <param> - <key>beta</key> - <value>time_beta</value> + <key>max</key> + <value>1</value> </param> <param> - <key>taps</key> - <value>rrctaps</value> + <key>num_steps</key> + <value>1000</value> </param> <param> - <key>filter_size</key> - <value>nfilts</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> <param> - <key>init_phase</key> - <value>16</value> + <key>converver</key> + <value>float_converter</value> </param> <param> - <key>max_dev</key> - <value>1.5</value> + <key>grid_pos</key> + <value>(5,2,1,1)</value> + </param> + <param> + <key>notebook</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(662, 527)</value> + <value>(598, 388)</value> </param> <param> <key>_rotation</key> @@ -1322,92 +1041,109 @@ </param> </block> <block> - <key>gr_float_to_complex</key> + <key>variable_slider</key> <param> <key>id</key> - <value>gr_float_to_complex_0</value> + <value>time_beta</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>_coordinate</key> - <value>(592, 184)</value> + <key>label</key> + <value>Timing Beta</value> </param> <param> - <key>_rotation</key> + <key>value</key> <value>0</value> </param> - </block> - <block> - <key>gr_channel_model</key> <param> - <key>id</key> - <value>gr_channel_model_0</value> + <key>min</key> + <value>0.0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>max</key> + <value>0.1</value> </param> <param> - <key>noise_voltage</key> - <value>noise_amp</value> + <key>num_steps</key> + <value>1000</value> </param> <param> - <key>freq_offset</key> - <value>freq_offset</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> <param> - <key>epsilon</key> - <value>interpratio</value> + <key>converver</key> + <value>float_converter</value> </param> <param> - <key>taps</key> - <value>1.0</value> + <key>grid_pos</key> + <value>(6,2,1,1)</value> </param> <param> - <key>seed</key> - <value>42</value> + <key>notebook</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(60, 443)</value> + <value>(708, 388)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> </block> <block> - <key>gr_multiply_const_vxx</key> + <key>variable_slider</key> <param> <key>id</key> - <value>gr_multiply_const_vxx_0</value> + <value>phase_bw</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>label</key> + <value>Costas Loop (Phase) Bandwidth</value> </param> <param> - <key>const</key> - <value>sig_amp</value> + <key>value</key> + <value>0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>min</key> + <value>0</value> + </param> + <param> + <key>max</key> + <value>0.1</value> + </param> + <param> + <key>num_steps</key> + <value>1000</value> + </param> + <param> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> + </param> + <param> + <key>converver</key> + <value>float_converter</value> + </param> + <param> + <key>grid_pos</key> + <value>(7,2,1,1)</value> + </param> + <param> + <key>notebook</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(670, 322)</value> + <value>(866, 313)</value> </param> <param> <key>_rotation</key> @@ -1415,30 +1151,34 @@ </param> </block> <block> - <key>blks2_pfb_arb_resampler_ccf</key> + <key>notebook</key> <param> <key>id</key> - <value>blks2_pfb_arb_resampler_ccf_0</value> + <value>notebook_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>rate</key> - <value>spb</value> + <key>style</key> + <value>wx.NB_TOP</value> </param> <param> - <key>taps</key> - <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value> + <key>labels</key> + <value>['Synched Signal', 'Received Signal']</value> </param> <param> - <key>size</key> - <value>32</value> + <key>grid_pos</key> + <value>(1,1,8,1)</value> + </param> + <param> + <key>notebook</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(778, 180)</value> + <value>(9, 601)</value> </param> <param> <key>_rotation</key> @@ -1446,76 +1186,65 @@ </param> </block> <block> - <key>gr_fll_band_edge_cc</key> + <key>variable_slider</key> <param> <key>id</key> - <value>gr_fll_band_edge_cc_0</value> + <value>interpratio</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>cc</value> - </param> - <param> - <key>samps_per_sym</key> - <value>spb</value> - </param> - <param> - <key>rolloff</key> - <value>rolloff</value> + <key>label</key> + <value>Timing Offset</value> </param> <param> - <key>filter_size</key> - <value>44</value> + <key>value</key> + <value>1.00</value> </param> <param> - <key>alpha</key> - <value>freq_alpha</value> + <key>min</key> + <value>0.99</value> </param> <param> - <key>beta</key> - <value>freq_beta</value> + <key>max</key> + <value>1.01</value> </param> <param> - <key>_coordinate</key> - <value>(429, 528)</value> + <key>num_steps</key> + <value>1000</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> - </block> - <block> - <key>variable</key> <param> - <key>id</key> - <value>spb</value> + <key>converver</key> + <value>float_converter</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>grid_pos</key> + <value>(3,2,1,1)</value> </param> <param> - <key>value</key> - <value>4.0</value> + <key>notebook</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(40, 829)</value> + <value>(60, 407)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> </block> <block> <key>variable_slider</key> <param> <key>id</key> - <value>freq_alpha</value> + <value>noise_amp</value> </param> <param> <key>_enabled</key> @@ -1523,7 +1252,7 @@ </param> <param> <key>label</key> - <value>Freq Alpha</value> + <value>Channel Noise</value> </param> <param> <key>value</key> @@ -1535,7 +1264,7 @@ </param> <param> <key>max</key> - <value>0.1</value> + <value>1.0</value> </param> <param> <key>num_steps</key> @@ -1551,7 +1280,7 @@ </param> <param> <key>grid_pos</key> - <value></value> + <value>(1,2,1,1)</value> </param> <param> <key>notebook</key> @@ -1559,7 +1288,7 @@ </param> <param> <key>_coordinate</key> - <value>(734, 10)</value> + <value>(125, 284)</value> </param> <param> <key>_rotation</key> @@ -1570,7 +1299,7 @@ <key>variable_slider</key> <param> <key>id</key> - <value>freq_beta</value> + <value>freq_offset</value> </param> <param> <key>_enabled</key> @@ -1578,7 +1307,7 @@ </param> <param> <key>label</key> - <value>Freq Beta</value> + <value>Frequency Offset</value> </param> <param> <key>value</key> @@ -1586,11 +1315,11 @@ </param> <param> <key>min</key> - <value>0.0</value> + <value>-0.5</value> </param> <param> <key>max</key> - <value>0.01</value> + <value>0.5</value> </param> <param> <key>num_steps</key> @@ -1606,7 +1335,7 @@ </param> <param> <key>grid_pos</key> - <value></value> + <value>(2,2,1,1)</value> </param> <param> <key>notebook</key> @@ -1614,130 +1343,88 @@ </param> <param> <key>_coordinate</key> - <value>(836, 9)</value> + <value>(6, 284)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <connection> - <source_block_id>random_source_x_0</source_block_id> - <sink_block_id>gr_uchar_to_float_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>gr_uchar_to_float_0_0</source_block_id> - <sink_block_id>gr_add_xx_0_1</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>const_source_x_0_0</source_block_id> - <sink_block_id>gr_add_xx_0_1</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>random_source_x_0_0</source_block_id> - <sink_block_id>gr_uchar_to_float_0_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> <source_block_id>gr_channel_model_0</source_block_id> - <sink_block_id>gr_throttle_0</sink_block_id> + <sink_block_id>virtual_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_add_xx_0</source_block_id> - <sink_block_id>gr_float_to_complex_0</sink_block_id> + <source_block_id>digital_fll_band_edge_cc_0</source_block_id> + <sink_block_id>gr_pfb_clock_sync_xxx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_add_xx_0_1</source_block_id> - <sink_block_id>gr_float_to_complex_0</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>gr_uchar_to_float_0</source_block_id> - <sink_block_id>gr_add_xx_0</sink_block_id> + <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id> + <sink_block_id>digital_costas_loop_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>const_source_x_0</source_block_id> - <sink_block_id>gr_add_xx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>gr_throttle_0</source_block_id> - <sink_block_id>gr_fll_band_edge_cc_0</sink_block_id> + <source_block_id>digital_costas_loop_cc_0</source_block_id> + <sink_block_id>wxgui_scopesink2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_fll_band_edge_cc_0</source_block_id> - <sink_block_id>gr_pfb_clock_sync_xxx_0</sink_block_id> + <source_block_id>blks2_pfb_arb_resampler_ccf_0</source_block_id> + <sink_block_id>gr_multiply_const_vxx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id> - <sink_block_id>gr_costas_loop_cc_0</sink_block_id> + <source_block_id>gr_chunks_to_symbols_xx</source_block_id> + <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_costas_loop_cc_0</source_block_id> - <sink_block_id>wxgui_scopesink2_0</sink_block_id> + <source_block_id>gr_channel_model_0</source_block_id> + <sink_block_id>digital_fll_band_edge_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_fll_band_edge_cc_0</source_block_id> + <source_block_id>digital_fll_band_edge_cc_0</source_block_id> <sink_block_id>wxgui_fftsink2_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>wxgui_scopesink2_0_0_1</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>virtual_source_0</source_block_id> <sink_block_id>wxgui_fftsink2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_channel_model_0</source_block_id> - <sink_block_id>virtual_sink_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>wxgui_scopesink2_0_0_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_float_to_complex_0</source_block_id> - <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id> + <source_block_id>random_source_x</source_block_id> + <sink_block_id>gr_chunks_to_symbols_xx</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blks2_pfb_arb_resampler_ccf_0</source_block_id> - <sink_block_id>gr_multiply_const_vxx_0</sink_block_id> + <source_block_id>gr_throttle_0</source_block_id> + <sink_block_id>gr_channel_model_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>gr_multiply_const_vxx_0</source_block_id> - <sink_block_id>gr_channel_model_0</sink_block_id> + <sink_block_id>gr_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-digital/examples/demod/pam_timing.grc b/gr-digital/examples/demod/pam_timing.grc index 02130f481..14a7d403e 100644 --- a/gr-digital/examples/demod/pam_timing.grc +++ b/gr-digital/examples/demod/pam_timing.grc @@ -1,6 +1,6 @@ <?xml version='1.0' encoding='ASCII'?> <flow_graph> - <timestamp>Mon Feb 1 18:54:46 2010</timestamp> + <timestamp>Thu Jul 5 17:55:51 2012</timestamp> <block> <key>options</key> <param> @@ -44,6 +44,10 @@ <value>True</value> </param> <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> <key>realtime_scheduling</key> <value></value> </param> @@ -749,6 +753,14 @@ <value></value> </param> <param> + <key>trig_mode</key> + <value>gr.gr_TRIG_MODE_AUTO</value> + </param> + <param> + <key>y_axis_label</key> + <value>Counts</value> + </param> + <param> <key>_coordinate</key> <value>(1116, 500)</value> </param> @@ -792,7 +804,7 @@ <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>wxgui_scopesink2_0_0</value> + <value>wxgui_scopesink2_0_0_0</value> </param> <param> <key>_enabled</key> @@ -804,7 +816,7 @@ </param> <param> <key>title</key> - <value>Error</value> + <value>Scope Plot</value> </param> <param> <key>samp_rate</key> @@ -812,7 +824,7 @@ </param> <param> <key>v_scale</key> - <value>3</value> + <value>9</value> </param> <param> <key>v_offset</key> @@ -844,11 +856,42 @@ </param> <param> <key>notebook</key> - <value>notebook_0,0</value> + <value>notebook_0,1</value> + </param> + <param> + <key>trig_mode</key> + <value>gr.gr_TRIG_MODE_AUTO</value> + </param> + <param> + <key>y_axis_label</key> + <value>Counts</value> </param> <param> <key>_coordinate</key> - <value>(1110, 651)</value> + <value>(1112, 881)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>rrctaps</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))</value> + </param> + <param> + <key>_coordinate</key> + <value>(513, 679)</value> </param> <param> <key>_rotation</key> @@ -859,7 +902,7 @@ <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>wxgui_scopesink2_0_0_0</value> + <value>wxgui_scopesink2_0_0_1</value> </param> <param> <key>_enabled</key> @@ -867,11 +910,11 @@ </param> <param> <key>type</key> - <value>float</value> + <value>complex</value> </param> <param> <key>title</key> - <value>Scope Plot</value> + <value>Error</value> </param> <param> <key>samp_rate</key> @@ -879,7 +922,7 @@ </param> <param> <key>v_scale</key> - <value>9</value> + <value>.5</value> </param> <param> <key>v_offset</key> @@ -911,11 +954,19 @@ </param> <param> <key>notebook</key> - <value>notebook_0,1</value> + <value>notebook_0,3</value> + </param> + <param> + <key>trig_mode</key> + <value>gr.gr_TRIG_MODE_AUTO</value> + </param> + <param> + <key>y_axis_label</key> + <value>Counts</value> </param> <param> <key>_coordinate</key> - <value>(1112, 881)</value> + <value>(1115, 358)</value> </param> <param> <key>_rotation</key> @@ -923,22 +974,22 @@ </param> </block> <block> - <key>variable</key> + <key>gr_float_to_complex</key> <param> <key>id</key> - <value>rrctaps</value> + <value>gr_float_to_complex_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))</value> + <key>vlen</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(513, 679)</value> + <value>(590, 184)</value> </param> <param> <key>_rotation</key> @@ -946,50 +997,69 @@ </param> </block> <block> - <key>gr_pfb_clock_sync_xxx</key> + <key>blks2_pfb_arb_resampler_ccf</key> <param> <key>id</key> - <value>gr_pfb_clock_sync_xxx_0</value> + <value>blks2_pfb_arb_resampler_ccf_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>ccf</value> + <key>rate</key> + <value>spb</value> </param> <param> - <key>sps</key> - <value>spb</value> + <key>taps</key> + <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value> </param> <param> - <key>alpha</key> - <value>alpha</value> + <key>size</key> + <value>32</value> </param> <param> - <key>beta</key> - <value>beta</value> + <key>_coordinate</key> + <value>(816, 181)</value> </param> <param> - <key>taps</key> - <value>rrctaps</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>gr_channel_model</key> <param> - <key>filter_size</key> - <value>nfilts</value> + <key>id</key> + <value>gr_channel_model_0</value> </param> <param> - <key>init_phase</key> - <value>16</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>max_dev</key> - <value>1.5</value> + <key>noise_voltage</key> + <value>noise_amp</value> + </param> + <param> + <key>freq_offset</key> + <value>freq_offset</value> + </param> + <param> + <key>epsilon</key> + <value>interpratio</value> + </param> + <param> + <key>taps</key> + <value>1.0</value> + </param> + <param> + <key>seed</key> + <value>42</value> </param> <param> <key>_coordinate</key> - <value>(512, 527)</value> + <value>(59, 543)</value> </param> <param> <key>_rotation</key> @@ -997,10 +1067,10 @@ </param> </block> <block> - <key>wxgui_scopesink2</key> + <key>gr_multiply_const_vxx</key> <param> <key>id</key> - <value>wxgui_scopesink2_0_0_0_0</value> + <value>gr_multiply_const_vxx_0</value> </param> <param> <key>_enabled</key> @@ -1008,55 +1078,97 @@ </param> <param> <key>type</key> - <value>float</value> + <value>complex</value> </param> <param> - <key>title</key> - <value>Scope Plot</value> + <key>const</key> + <value>sig_amp</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>vlen</key> + <value>1</value> </param> <param> - <key>v_scale</key> - <value>1.25</value> + <key>_coordinate</key> + <value>(714, 382)</value> </param> <param> - <key>v_offset</key> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>t_scale</key> + <key>id</key> + <value>spb</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>4.2563</value> + </param> + <param> + <key>_coordinate</key> + <value>(42, 840)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>gr_pfb_clock_sync_xxx</key> <param> - <key>ac_couple</key> - <value>False</value> + <key>id</key> + <value>gr_pfb_clock_sync_xxx_0</value> </param> <param> - <key>xy_mode</key> - <value>False</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>num_inputs</key> - <value>1</value> + <key>type</key> + <value>ccf</value> </param> <param> - <key>win_size</key> - <value></value> + <key>sps</key> + <value>spb</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>alpha</key> + <value>alpha</value> </param> <param> - <key>notebook</key> - <value>notebook_0,2</value> + <key>beta</key> + <value>beta</value> + </param> + <param> + <key>taps</key> + <value>rrctaps</value> + </param> + <param> + <key>filter_size</key> + <value>nfilts</value> + </param> + <param> + <key>init_phase</key> + <value>16</value> + </param> + <param> + <key>max_dev</key> + <value>1.5</value> + </param> + <param> + <key>osps</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(1111, 767)</value> + <value>(512, 527)</value> </param> <param> <key>_rotation</key> @@ -1067,7 +1179,7 @@ <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>wxgui_scopesink2_0_0_1</value> + <value>wxgui_scopesink2_0_0</value> </param> <param> <key>_enabled</key> @@ -1075,7 +1187,7 @@ </param> <param> <key>type</key> - <value>complex</value> + <value>float</value> </param> <param> <key>title</key> @@ -1087,7 +1199,7 @@ </param> <param> <key>v_scale</key> - <value>.5</value> + <value>3</value> </param> <param> <key>v_offset</key> @@ -1119,34 +1231,19 @@ </param> <param> <key>notebook</key> - <value>notebook_0,3</value> - </param> - <param> - <key>_coordinate</key> - <value>(1115, 358)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>gr_float_to_complex</key> - <param> - <key>id</key> - <value>gr_float_to_complex_0</value> + <value>notebook_0,0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>trig_mode</key> + <value>gr.gr_TRIG_MODE_AUTO</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>y_axis_label</key> + <value>Counts</value> </param> <param> <key>_coordinate</key> - <value>(590, 184)</value> + <value>(1114, 615)</value> </param> <param> <key>_rotation</key> @@ -1154,123 +1251,74 @@ </param> </block> <block> - <key>blks2_pfb_arb_resampler_ccf</key> + <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>blks2_pfb_arb_resampler_ccf_0</value> + <value>wxgui_scopesink2_0_0_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>rate</key> - <value>spb</value> + <key>type</key> + <value>float</value> </param> <param> - <key>taps</key> - <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value> + <key>title</key> + <value>Scope Plot</value> </param> <param> - <key>size</key> - <value>32</value> + <key>samp_rate</key> + <value>samp_rate</value> </param> <param> - <key>_coordinate</key> - <value>(816, 181)</value> + <key>v_scale</key> + <value>1.25</value> </param> <param> - <key>_rotation</key> + <key>v_offset</key> <value>0</value> </param> - </block> - <block> - <key>gr_channel_model</key> - <param> - <key>id</key> - <value>gr_channel_model_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>noise_voltage</key> - <value>noise_amp</value> - </param> <param> - <key>freq_offset</key> - <value>freq_offset</value> - </param> - <param> - <key>epsilon</key> - <value>interpratio</value> - </param> - <param> - <key>taps</key> - <value>1.0</value> - </param> - <param> - <key>seed</key> - <value>42</value> - </param> - <param> - <key>_coordinate</key> - <value>(59, 543)</value> - </param> - <param> - <key>_rotation</key> + <key>t_scale</key> <value>0</value> </param> - </block> - <block> - <key>gr_multiply_const_vxx</key> <param> - <key>id</key> - <value>gr_multiply_const_vxx_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>complex</value> + <key>ac_couple</key> + <value>False</value> </param> <param> - <key>const</key> - <value>sig_amp</value> + <key>xy_mode</key> + <value>False</value> </param> <param> - <key>vlen</key> + <key>num_inputs</key> <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(714, 382)</value> + <key>win_size</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>grid_pos</key> + <value></value> </param> - </block> - <block> - <key>variable</key> <param> - <key>id</key> - <value>spb</value> + <key>notebook</key> + <value>notebook_0,2</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>trig_mode</key> + <value>gr.gr_TRIG_MODE_AUTO</value> </param> <param> - <key>value</key> - <value>4.2563</value> + <key>y_axis_label</key> + <value>Counts</value> </param> <param> <key>_coordinate</key> - <value>(42, 840)</value> + <value>(1080, 751)</value> </param> <param> <key>_rotation</key> diff --git a/gr-digital/grc/digital_dxpsk_demod.xml b/gr-digital/grc/digital_dxpsk_demod.xml index 6366596d9..f3e9ee6fc 100644 --- a/gr-digital/grc/digital_dxpsk_demod.xml +++ b/gr-digital/grc/digital_dxpsk_demod.xml @@ -36,7 +36,7 @@ freq_bw=$freq_bw, phase_bw=$phase_bw, timing_bw=$timing_bw, - mod_code=$mod_code, + gray_coded=$gray_coded, verbose=$verbose, log=$log )</make> @@ -86,23 +86,17 @@ <type>real</type> </param> <param> - <name>Omega Relative Limit</name> - <key>omega_relative_limit</key> - <value>0.005</value> - <type>real</type> - </param> - <param> <name>Gray Code</name> - <key>mod_code</key> + <key>gray_coded</key> <value>True</value> <type>enum</type> <option> <name>Yes</name> - <key>"gray"</key> + <key>True</key> </option> <option> <name>No</name> - <key>"none"</key> + <key>False</key> </option> </param> <param> diff --git a/gr-digital/grc/digital_dxpsk_mod.xml b/gr-digital/grc/digital_dxpsk_mod.xml index 58e30436d..93334d27d 100644 --- a/gr-digital/grc/digital_dxpsk_mod.xml +++ b/gr-digital/grc/digital_dxpsk_mod.xml @@ -33,7 +33,7 @@ <make>digital.$(type)_mod( samples_per_symbol=$samples_per_symbol, excess_bw=$excess_bw, - mod_code=$mod_code, + gray_coded=$gray_coded, verbose=$verbose, log=$log) </make> @@ -68,16 +68,16 @@ </param> <param> <name>Gray Code</name> - <key>mod_code</key> - <value>"gray"</value> + <key>gray_coded</key> + <value>True</value> <type>enum</type> <option> <name>Yes</name> - <key>"gray"</key> + <key>True</key> </option> <option> <name>No</name> - <key>"none"</key> + <key>False</key> </option> </param> <param> diff --git a/gr-digital/grc/digital_gfsk_demod.xml b/gr-digital/grc/digital_gfsk_demod.xml new file mode 100644 index 000000000..ce3024d89 --- /dev/null +++ b/gr-digital/grc/digital_gfsk_demod.xml @@ -0,0 +1,95 @@ +<?xml version="1.0"?> +<!-- +################################################### +##GFSK Demod +################################################### + --> +<block> + <name>GFSK Demod</name> + <key>digital_gfsk_demod</key> + <import>from gnuradio import digital</import> + <make>digital.gfsk_demod( + samples_per_symbol=$samples_per_symbol, + sensitivity=$sensitivity, + gain_mu=$gain_mu, + mu=$mu, + omega_relative_limit=$omega_relative_limit, + freq_error=$freq_error, + verbose=$verbose, + log=$log, +)</make> + <param> + <name>Samples/Symbol</name> + <key>samples_per_symbol</key> + <value>2</value> + <type>int</type> + </param> + <param> + <name>Sensitivity</name> + <key>sensitivity</key> + <value>1.0</value> + <type>real</type> + </param> + <param> + <name>Gain Mu</name> + <key>gain_mu</key> + <value>0.175</value> + <type>real</type> + </param> + <param> + <name>Mu</name> + <key>mu</key> + <value>0.5</value> + <type>real</type> + </param> + <param> + <name>Omega Relative Limit</name> + <key>omega_relative_limit</key> + <value>0.005</value> + <type>real</type> + </param> + <param> + <name>Freq Error</name> + <key>freq_error</key> + <value>0.0</value> + <type>real</type> + </param> + <param> + <name>Verbose</name> + <key>verbose</key> + <value>False</value> + <type>bool</type> + <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide> + <option> + <name>On</name> + <key>True</key> + </option> + <option> + <name>Off</name> + <key>False</key> + </option> + </param> + <param> + <name>Logging</name> + <key>log</key> + <value>False</value> + <type>bool</type> + <hide>#if str($log) == 'False' then 'part' else 'none'#</hide> + <option> + <name>On</name> + <key>True</key> + </option> + <option> + <name>Off</name> + <key>False</key> + </option> + </param> + <sink> + <name>in</name> + <type>complex</type> + </sink> + <source> + <name>out</name> + <type>byte</type> + </source> +</block> diff --git a/gr-digital/grc/digital_gfsk_mod.xml b/gr-digital/grc/digital_gfsk_mod.xml new file mode 100644 index 000000000..2d6cd1ea5 --- /dev/null +++ b/gr-digital/grc/digital_gfsk_mod.xml @@ -0,0 +1,74 @@ +<?xml version="1.0"?> +<!-- +################################################### +##GFSK Mod +################################################### + --> +<block> + <name>GFSK Mod</name> + <key>digital_gfsk_mod</key> + <import>from gnuradio import digital</import> + <make>digital.gfsk_mod( + samples_per_symbol=$samples_per_symbol, + sensitivity=$sensitivity, + bt=$bt, + verbose=$verbose, + log=$log, +)</make> + <param> + <name>Samples/Symbol</name> + <key>samples_per_symbol</key> + <value>2</value> + <type>int</type> + </param> + <param> + <name>Sensitivity</name> + <key>sensitivity</key> + <value>1.0</value> + <type>real</type> + </param> + <param> + <name>BT</name> + <key>bt</key> + <value>0.35</value> + <type>real</type> + </param> + <param> + <name>Verbose</name> + <key>verbose</key> + <value>False</value> + <type>bool</type> + <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide> + <option> + <name>On</name> + <key>True</key> + </option> + <option> + <name>Off</name> + <key>False</key> + </option> + </param> + <param> + <name>Logging</name> + <key>log</key> + <value>False</value> + <type>bool</type> + <hide>#if str($log) == 'False' then 'part' else 'none'#</hide> + <option> + <name>On</name> + <key>True</key> + </option> + <option> + <name>Off</name> + <key>False</key> + </option> + </param> + <sink> + <name>in</name> + <type>byte</type> + </sink> + <source> + <name>out</name> + <type>complex</type> + </source> +</block> diff --git a/gr-digital/include/digital_fll_band_edge_cc.h b/gr-digital/include/digital_fll_band_edge_cc.h index c70bfc86d..68083bbae 100644 --- a/gr-digital/include/digital_fll_band_edge_cc.h +++ b/gr-digital/include/digital_fll_band_edge_cc.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2009,2011 Free Software Foundation, Inc. + * Copyright 2009,2011,2012 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -27,13 +27,19 @@ #include <digital_api.h> #include <gr_sync_block.h> #include <gri_control_loop.h> +#include <gr_fir_util.h> +#include <gr_fir_ccc.h> + +typedef gr_fir_ccc* (*fir_maker_t)(const std::vector<gr_complex> &taps); +typedef gr_fir_ccc filter_t; class digital_fll_band_edge_cc; typedef boost::shared_ptr<digital_fll_band_edge_cc> digital_fll_band_edge_cc_sptr; -DIGITAL_API digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float samps_per_sym, - float rolloff, - int filter_size, - float bandwidth); +DIGITAL_API digital_fll_band_edge_cc_sptr +digital_make_fll_band_edge_cc(float samps_per_sym, + float rolloff, + int filter_size, + float bandwidth); /*! * \class digital_fll_band_edge_cc @@ -86,7 +92,8 @@ DIGITAL_API digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float s * */ -class DIGITAL_API digital_fll_band_edge_cc : public gr_sync_block, public gri_control_loop +class DIGITAL_API digital_fll_band_edge_cc : + public gr_sync_block, public gri_control_loop { private: /*! @@ -96,10 +103,11 @@ class DIGITAL_API digital_fll_band_edge_cc : public gr_sync_block, public gri_co * \param filter_size (int) Size (in taps) of the filter * \param bandwidth (float) Loop bandwidth */ - friend DIGITAL_API digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float samps_per_sym, - float rolloff, - int filter_size, - float bandwidth); + friend DIGITAL_API digital_fll_band_edge_cc_sptr + digital_make_fll_band_edge_cc(float samps_per_sym, + float rolloff, + int filter_size, + float bandwidth); float d_sps; float d_rolloff; @@ -108,6 +116,10 @@ class DIGITAL_API digital_fll_band_edge_cc : public gr_sync_block, public gri_co std::vector<gr_complex> d_taps_lower; std::vector<gr_complex> d_taps_upper; bool d_updated; + filter_t* d_filter_lower; + filter_t* d_filter_upper; + std::vector<gr_complex> d_output_hist; + std::vector<gr_complex> d_fllbuffer; /*! * Build the FLL @@ -130,7 +142,7 @@ class DIGITAL_API digital_fll_band_edge_cc : public gr_sync_block, public gri_co void design_filter(float samps_per_sym, float rolloff, int filter_size); public: - ~digital_fll_band_edge_cc (); + ~digital_fll_band_edge_cc(); /******************************************************************* SET FUNCTIONS @@ -206,9 +218,9 @@ public: */ void print_taps(); - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); }; #endif diff --git a/gr-digital/lib/digital_fll_band_edge_cc.cc b/gr-digital/lib/digital_fll_band_edge_cc.cc index 05c092622..f2cfb1020 100644 --- a/gr-digital/lib/digital_fll_band_edge_cc.cc +++ b/gr-digital/lib/digital_fll_band_edge_cc.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2009-2011 Free Software Foundation, Inc. + * Copyright 2009-2012 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -50,37 +50,38 @@ digital_make_fll_band_edge_cc (float samps_per_sym, float rolloff, static int ios[] = {sizeof(gr_complex), sizeof(float), sizeof(float), sizeof(float)}; static std::vector<int> iosig(ios, ios+sizeof(ios)/sizeof(int)); -digital_fll_band_edge_cc::digital_fll_band_edge_cc (float samps_per_sym, float rolloff, - int filter_size, float bandwidth) - : gr_sync_block ("fll_band_edge_cc", - gr_make_io_signature (1, 1, sizeof(gr_complex)), - gr_make_io_signaturev (1, 4, iosig)), +digital_fll_band_edge_cc::digital_fll_band_edge_cc(float samps_per_sym, float rolloff, + int filter_size, float bandwidth) + : gr_sync_block("fll_band_edge_cc", + gr_make_io_signature(1, 1, sizeof(gr_complex)), + gr_make_io_signaturev(1, 4, iosig)), gri_control_loop(bandwidth, M_TWOPI*(2.0/samps_per_sym), -M_TWOPI*(2.0/samps_per_sym)), - d_updated (false) + d_updated(false) { // Initialize samples per symbol if(samps_per_sym <= 0) { - throw std::out_of_range ("digital_fll_band_edge_cc: invalid number of sps. Must be > 0."); + throw std::out_of_range("digital_fll_band_edge_cc: invalid number of sps. Must be > 0."); } d_sps = samps_per_sym; // Initialize rolloff factor if(rolloff < 0 || rolloff > 1.0) { - throw std::out_of_range ("digital_fll_band_edge_cc: invalid rolloff factor. Must be in [0,1]."); + throw std::out_of_range("digital_fll_band_edge_cc: invalid rolloff factor. Must be in [0,1]."); } d_rolloff = rolloff; // Initialize filter length if(filter_size <= 0) { - throw std::out_of_range ("digital_fll_band_edge_cc: invalid filter size. Must be > 0."); + throw std::out_of_range("digital_fll_band_edge_cc: invalid filter size. Must be > 0."); } d_filter_size = filter_size; // Build the band edge filters design_filter(d_sps, d_rolloff, d_filter_size); + d_output_hist.resize(filter_size,0); } -digital_fll_band_edge_cc::~digital_fll_band_edge_cc () +digital_fll_band_edge_cc::~digital_fll_band_edge_cc() { } @@ -93,7 +94,7 @@ void digital_fll_band_edge_cc::set_samples_per_symbol(float sps) { if(sps <= 0) { - throw std::out_of_range ("digital_fll_band_edge_cc: invalid number of sps. Must be > 0."); + throw std::out_of_range("digital_fll_band_edge_cc: invalid number of sps. Must be > 0."); } d_sps = sps; design_filter(d_sps, d_rolloff, d_filter_size); @@ -103,7 +104,7 @@ void digital_fll_band_edge_cc::set_rolloff(float rolloff) { if(rolloff < 0 || rolloff > 1.0) { - throw std::out_of_range ("digital_fll_band_edge_cc: invalid rolloff factor. Must be in [0,1]."); + throw std::out_of_range("digital_fll_band_edge_cc: invalid rolloff factor. Must be in [0,1]."); } d_rolloff = rolloff; design_filter(d_sps, d_rolloff, d_filter_size); @@ -113,7 +114,7 @@ void digital_fll_band_edge_cc::set_filter_size(int filter_size) { if(filter_size <= 0) { - throw std::out_of_range ("digital_fll_band_edge_cc: invalid filter size. Must be > 0."); + throw std::out_of_range("digital_fll_band_edge_cc: invalid filter size. Must be > 0."); } d_filter_size = filter_size; design_filter(d_sps, d_rolloff, d_filter_size); @@ -185,6 +186,8 @@ digital_fll_band_edge_cc::design_filter(float samps_per_sym, // Set the history to ensure enough input items for each filter set_history(filter_size+1); + d_filter_upper = gr_fir_util::create_gr_fir_ccc(d_taps_upper); + d_filter_lower = gr_fir_util::create_gr_fir_ccc(d_taps_lower); } void @@ -206,23 +209,25 @@ digital_fll_band_edge_cc::print_taps() } int -digital_fll_band_edge_cc::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) +digital_fll_band_edge_cc::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) { - const gr_complex *in = (const gr_complex *) input_items[0]; - gr_complex *out = (gr_complex *) output_items[0]; + const gr_complex *in = (const gr_complex*)input_items[0]; + gr_complex *out = (gr_complex*)output_items[0]; + d_fllbuffer.reserve(d_filter_size+noutput_items); + float *frq = NULL; float *phs = NULL; float *err = NULL; if(output_items.size() == 4) { - frq = (float *) output_items[1]; - phs = (float *) output_items[2]; - err = (float *) output_items[3]; + frq = (float*)output_items[1]; + phs = (float*)output_items[2]; + err = (float*)output_items[3]; } - if (d_updated) { + if(d_updated) { d_updated = false; return 0; // history requirements may have changed. } @@ -231,17 +236,19 @@ digital_fll_band_edge_cc::work (int noutput_items, float error; gr_complex nco_out; gr_complex out_upper, out_lower; + gr_complex out_uppersse, out_lowersse; + copy( d_output_hist.begin(), d_output_hist.end(), d_fllbuffer.begin()); + for(i = 0; i < noutput_items; i++) { nco_out = gr_expj(d_phase); - out[i+d_filter_size-1] = in[i] * nco_out; - + d_fllbuffer[i+d_filter_size] = in[i] * nco_out; // Perform the dot product of the output with the filters out_upper = 0; out_lower = 0; - for(int k = 0; k < d_filter_size; k++) { - out_upper += d_taps_upper[k] * out[i+k]; - out_lower += d_taps_lower[k] * out[i+k]; - } + + out_upper = d_filter_lower->filter(&d_fllbuffer[i]); + out_lower = d_filter_upper->filter(&d_fllbuffer[i]); + error = norm(out_lower) - norm(out_upper); advance_loop(error); @@ -255,5 +262,10 @@ digital_fll_band_edge_cc::work (int noutput_items, } } + copy(d_fllbuffer.begin(), d_fllbuffer.begin()+noutput_items, out); + copy(d_fllbuffer.begin()+noutput_items, + d_fllbuffer.begin()+noutput_items+d_filter_size, + d_output_hist.begin()); + return noutput_items; } diff --git a/gr-digital/python/CMakeLists.txt b/gr-digital/python/CMakeLists.txt index c786b5a14..6a9f10295 100644 --- a/gr-digital/python/CMakeLists.txt +++ b/gr-digital/python/CMakeLists.txt @@ -30,6 +30,7 @@ GR_PYTHON_INSTALL( crc.py generic_mod_demod.py gmsk.py + gfsk.py modulation_utils.py ofdm.py ofdm_packet_utils.py diff --git a/gr-digital/python/__init__.py b/gr-digital/python/__init__.py index 7c76183c9..3fdbca769 100644 --- a/gr-digital/python/__init__.py +++ b/gr-digital/python/__init__.py @@ -31,6 +31,7 @@ from qam import * from bpsk import * from qpsk import * from gmsk import * +from gfsk import * from cpm import * from pkt import * from crc import * diff --git a/gr-digital/python/gfsk.py b/gr-digital/python/gfsk.py new file mode 100644 index 000000000..c85fdf0e0 --- /dev/null +++ b/gr-digital/python/gfsk.py @@ -0,0 +1,306 @@ +# +# GFSK modulation and demodulation. +# +# +# Copyright 2005,2006,2007 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. +# + +# See gnuradio-examples/python/digital for examples + +from gnuradio import gr +import modulation_utils +import digital_swig as digital +from math import pi +import numpy +from pprint import pprint +import inspect + +# default values (used in __init__ and add_options) +_def_samples_per_symbol = 2 +_def_sensitivity = 1 +_def_bt = 0.35 +_def_verbose = False +_def_log = False + +_def_gain_mu = None +_def_mu = 0.5 +_def_freq_error = 0.0 +_def_omega_relative_limit = 0.005 + + +# FIXME: Figure out how to make GFSK work with pfb_arb_resampler_fff for both +# transmit and receive so we don't require integer samples per symbol. + + +# ///////////////////////////////////////////////////////////////////////////// +# GFSK modulator +# ///////////////////////////////////////////////////////////////////////////// + +class gfsk_mod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + sensitivity=_def_sensitivity, + bt=_def_bt, + verbose=_def_verbose, + log=_def_log): + """ + Hierarchical block for Gaussian Frequency Shift Key (GFSK) + modulation. + + The input is a byte stream (unsigned char) and the + output is the complex modulated signal at baseband. + + @param samples_per_symbol: samples per baud >= 2 + @type samples_per_symbol: integer + @param bt: Gaussian filter bandwidth * symbol time + @type bt: float + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modualtion data to files? + @type debug: bool + """ + + gr.hier_block2.__init__(self, "gfsk_mod", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + samples_per_symbol = int(samples_per_symbol) + self._samples_per_symbol = samples_per_symbol + self._bt = bt + self._differential = False + + if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2: + raise TypeError, ("samples_per_symbol must be an integer >= 2, is %r" % (samples_per_symbol,)) + + ntaps = 4 * samples_per_symbol # up to 3 bits in filter at once + #sensitivity = (pi / 2) / samples_per_symbol # phase change per bit = pi / 2 + + # Turn it into NRZ data. + self.nrz = gr.bytes_to_syms() + + # Form Gaussian filter + # Generate Gaussian response (Needs to be convolved with window below). + self.gaussian_taps = gr.firdes.gaussian( + 1.0, # gain + samples_per_symbol, # symbol_rate + bt, # bandwidth * symbol time + ntaps # number of taps + ) + + self.sqwave = (1,) * samples_per_symbol # rectangular window + self.taps = numpy.convolve(numpy.array(self.gaussian_taps),numpy.array(self.sqwave)) + self.gaussian_filter = gr.interp_fir_filter_fff(samples_per_symbol, self.taps) + + # FM modulation + self.fmmod = gr.frequency_modulator_fc(sensitivity) + + # small amount of output attenuation to prevent clipping USRP sink + self.amp = gr.multiply_const_cc(0.999) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect & Initialize base class + self.connect(self, self.nrz, self.gaussian_filter, self.fmmod, self.amp, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 1 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. + + + def _print_verbage(self): + print "bits per symbol = %d" % self.bits_per_symbol() + print "Gaussian filter bt = %.2f" % self._bt + + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.nrz, + gr.file_sink(gr.sizeof_float, "nrz.dat")) + self.connect(self.gaussian_filter, + gr.file_sink(gr.sizeof_float, "gaussian_filter.dat")) + self.connect(self.fmmod, + gr.file_sink(gr.sizeof_gr_complex, "fmmod.dat")) + + + def add_options(parser): + """ + Adds GFSK modulation-specific options to the standard parser + """ + parser.add_option("", "--bt", type="float", default=_def_bt, + help="set bandwidth-time product [default=%default] (GFSK)") + add_options=staticmethod(add_options) + + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(gfsk_mod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + + +# ///////////////////////////////////////////////////////////////////////////// +# GFSK demodulator +# ///////////////////////////////////////////////////////////////////////////// + +class gfsk_demod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + sensitivity=_def_sensitivity, + gain_mu=_def_gain_mu, + mu=_def_mu, + omega_relative_limit=_def_omega_relative_limit, + freq_error=_def_freq_error, + verbose=_def_verbose, + log=_def_log): + """ + Hierarchical block for Gaussian Minimum Shift Key (GFSK) + demodulation. + + The input is the complex modulated signal at baseband. + The output is a stream of bits packed 1 bit per byte (the LSB) + + @param samples_per_symbol: samples per baud + @type samples_per_symbol: integer + @param verbose: Print information about modulator? + @type verbose: bool + @param log: Print modualtion data to files? + @type log: bool + + Clock recovery parameters. These all have reasonble defaults. + + @param gain_mu: controls rate of mu adjustment + @type gain_mu: float + @param mu: fractional delay [0.0, 1.0] + @type mu: float + @param omega_relative_limit: sets max variation in omega + @type omega_relative_limit: float, typically 0.000200 (200 ppm) + @param freq_error: bit rate error as a fraction + @param float + """ + + gr.hier_block2.__init__(self, "gfsk_demod", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_char)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._gain_mu = gain_mu + self._mu = mu + self._omega_relative_limit = omega_relative_limit + self._freq_error = freq_error + self._differential = False + + if samples_per_symbol < 2: + raise TypeError, "samples_per_symbol >= 2, is %f" % samples_per_symbol + + self._omega = samples_per_symbol*(1+self._freq_error) + + if not self._gain_mu: + self._gain_mu = 0.175 + + self._gain_omega = .25 * self._gain_mu * self._gain_mu # critically damped + + # Demodulate FM + #sensitivity = (pi / 2) / samples_per_symbol + self.fmdemod = gr.quadrature_demod_cf(1.0 / sensitivity) + + # the clock recovery block tracks the symbol clock and resamples as needed. + # the output of the block is a stream of soft symbols (float) + self.clock_recovery = digital.clock_recovery_mm_ff(self._omega, self._gain_omega, + self._mu, self._gain_mu, + self._omega_relative_limit) + + # slice the floats at 0, outputting 1 bit (the LSB of the output byte) per sample + self.slicer = digital.binary_slicer_fb() + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect & Initialize base class + self.connect(self, self.fmdemod, self.clock_recovery, self.slicer, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 1 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. + + + def _print_verbage(self): + print "bits per symbol = %d" % self.bits_per_symbol() + print "M&M clock recovery omega = %f" % self._omega + print "M&M clock recovery gain mu = %f" % self._gain_mu + print "M&M clock recovery mu = %f" % self._mu + print "M&M clock recovery omega rel. limit = %f" % self._omega_relative_limit + print "frequency error = %f" % self._freq_error + + + def _setup_logging(self): + print "Demodulation logging turned on." + self.connect(self.fmdemod, + gr.file_sink(gr.sizeof_float, "fmdemod.dat")) + self.connect(self.clock_recovery, + gr.file_sink(gr.sizeof_float, "clock_recovery.dat")) + self.connect(self.slicer, + gr.file_sink(gr.sizeof_char, "slicer.dat")) + + def add_options(parser): + """ + Adds GFSK demodulation-specific options to the standard parser + """ + parser.add_option("", "--gain-mu", type="float", default=_def_gain_mu, + help="M&M clock recovery gain mu [default=%default] (GFSK/PSK)") + parser.add_option("", "--mu", type="float", default=_def_mu, + help="M&M clock recovery mu [default=%default] (GFSK/PSK)") + parser.add_option("", "--omega-relative-limit", type="float", default=_def_omega_relative_limit, + help="M&M clock recovery omega relative limit [default=%default] (GFSK/PSK)") + parser.add_option("", "--freq-error", type="float", default=_def_freq_error, + help="M&M clock recovery frequency error [default=%default] (GFSK)") + add_options=staticmethod(add_options) + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(gfsk_demod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + +# +# Add these to the mod/demod registry +# +modulation_utils.add_type_1_mod('gfsk', gfsk_mod) +modulation_utils.add_type_1_demod('gfsk', gfsk_demod) diff --git a/gr-filter/lib/pfb_channelizer_ccf_impl.cc b/gr-filter/lib/pfb_channelizer_ccf_impl.cc index ca92066f5..28fc1dcc1 100644 --- a/gr-filter/lib/pfb_channelizer_ccf_impl.cc +++ b/gr-filter/lib/pfb_channelizer_ccf_impl.cc @@ -118,8 +118,7 @@ namespace gr { if(map.size() > 0) { unsigned int max = (unsigned int)*std::max_element(map.begin(), map.end()); - unsigned int min = (unsigned int)*std::min_element(map.begin(), map.end()); - if((max >= d_nfilts) || (min < 0)) { + if(max >= d_nfilts) { throw std::invalid_argument("pfb_channelizer_ccf_impl::set_channel_map: map range out of bounds.\n"); } d_channel_map = map; diff --git a/gr-filter/lib/pfb_synthesizer_ccf_impl.cc b/gr-filter/lib/pfb_synthesizer_ccf_impl.cc index 1e9c099c1..9dd519d57 100644 --- a/gr-filter/lib/pfb_synthesizer_ccf_impl.cc +++ b/gr-filter/lib/pfb_synthesizer_ccf_impl.cc @@ -204,8 +204,7 @@ namespace gr { if(map.size() > 0) { unsigned int max = (unsigned int)*std::max_element(map.begin(), map.end()); - unsigned int min = (unsigned int)*std::min_element(map.begin(), map.end()); - if((max >= d_twox*d_numchans) || (min < 0)) { + if(max >= d_twox*d_numchans) { throw std::invalid_argument("gr_pfb_synthesizer_ccf::set_channel_map: map range out of bounds.\n"); } d_channel_map = map; diff --git a/gr-filter/lib/qa_fir_filter_with_buffer.cc b/gr-filter/lib/qa_fir_filter_with_buffer.cc index 6a1744b0a..ab2958ed1 100644 --- a/gr-filter/lib/qa_fir_filter_with_buffer.cc +++ b/gr-filter/lib/qa_fir_filter_with_buffer.cc @@ -376,7 +376,7 @@ namespace gr { new kernel::fir_filter_with_buffer_ccf(f1_taps); // zero the output, then do the filtering - memset(actual_output, 0, sizeof(actual_output)); + memset(actual_output, 0, sizeof(OUTPUT_LEN*sizeof(gr_complex))); f1->filterNdec(actual_output, input, ol/decimate, decimate); // check results diff --git a/volk/apps/volk_profile.cc b/volk/apps/volk_profile.cc index 6244abb35..648f4d878 100644 --- a/volk/apps/volk_profile.cc +++ b/volk/apps/volk_profile.cc @@ -33,6 +33,7 @@ int main(int argc, char *argv[]) { //VOLK_PROFILE(volk_16i_permute_and_scalar_add_a, 1e-4, 0, 2046, 10000, &results); //VOLK_PROFILE(volk_16i_x4_quad_max_star_16i_a, 1e-4, 0, 2046, 10000, &results); VOLK_PROFILE(volk_16u_byteswap_a, 0, 0, 204600, 10000, &results); + VOLK_PROFILE(volk_16u_byteswap_u, 0, 0, 204600, 10000, &results); VOLK_PROFILE(volk_16i_32fc_dot_prod_32fc_a, 1e-4, 0, 204600, 10000, &results); VOLK_PROFILE(volk_32f_accumulator_s32f_a, 1e-4, 0, 204600, 10000, &results); VOLK_PROFILE(volk_32f_x2_add_32f_a, 1e-4, 0, 204600, 10000, &results); diff --git a/volk/gen/machines.xml b/volk/gen/machines.xml index 8e3c9c8c2..d88a1a50c 100644 --- a/volk/gen/machines.xml +++ b/volk/gen/machines.xml @@ -10,7 +10,7 @@ </machine> <machine name="sse"> -<archs>generic 32|64| mmx sse orc|</archs> +<archs>generic 32|64| mmx| sse orc|</archs> </machine> --> @@ -20,7 +20,7 @@ <!-- trailing | bar means generate without either for MSVC --> <machine name="sse2"> -<archs>generic 32|64| mmx sse sse2 orc|</archs> +<archs>generic 32|64| mmx| sse sse2 orc|</archs> </machine> <machine name="sse3"> @@ -45,7 +45,7 @@ <!-- trailing | bar means generate without either for MSVC --> <machine name="avx"> -<archs>generic 32|64| mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcount avx orc|</archs> +<archs>generic 32|64| mmx| sse sse2 sse3 ssse3 sse4_1 sse4_2 popcount avx orc|</archs> </machine> <machine name="altivec"> diff --git a/volk/include/volk/volk_16i_32fc_dot_prod_32fc_a.h b/volk/include/volk/volk_16i_32fc_dot_prod_32fc_a.h index 940aa5de7..1f6554af8 100644 --- a/volk/include/volk/volk_16i_32fc_dot_prod_32fc_a.h +++ b/volk/include/volk/volk_16i_32fc_dot_prod_32fc_a.h @@ -37,7 +37,7 @@ static inline void volk_16i_32fc_dot_prod_32fc_a_generic(lv_32fc_t* result, cons #endif /*LV_HAVE_GENERIC*/ -#ifdef LV_HAVE_SSE +#if LV_HAVE_SSE && LV_HAVE_MMX static inline void volk_16i_32fc_dot_prod_32fc_a_sse( lv_32fc_t* result, const short* input, const lv_32fc_t* taps, unsigned int num_points) { @@ -116,7 +116,7 @@ static inline void volk_16i_32fc_dot_prod_32fc_a_sse( lv_32fc_t* result, const *result = *(lv_32fc_t*)(&res[0]); } -#endif /*LV_HAVE_SSE*/ +#endif /*LV_HAVE_SSE && LV_HAVE_MMX*/ #endif /*INCLUDED_volk_16i_32fc_dot_prod_32fc_a_H*/ diff --git a/volk/include/volk/volk_16u_byteswap_u.h b/volk/include/volk/volk_16u_byteswap_u.h new file mode 100644 index 000000000..8ef627a62 --- /dev/null +++ b/volk/include/volk/volk_16u_byteswap_u.h @@ -0,0 +1,63 @@ +#ifndef INCLUDED_volk_16u_byteswap_u_H +#define INCLUDED_volk_16u_byteswap_u_H + +#include <inttypes.h> +#include <stdio.h> + +#ifdef LV_HAVE_SSE2 +#include <emmintrin.h> + +/*! + \brief Byteswaps (in-place) an unaligned vector of int16_t's. + \param intsToSwap The vector of data to byte swap + \param numDataPoints The number of data points +*/ +static inline void volk_16u_byteswap_u_sse2(uint16_t* intsToSwap, unsigned int num_points){ + unsigned int number = 0; + uint16_t* inputPtr = intsToSwap; + __m128i input, left, right, output; + + const unsigned int eighthPoints = num_points / 8; + for(;number < eighthPoints; number++){ + // Load the 16t values, increment inputPtr later since we're doing it in-place. + input = _mm_loadu_si128((__m128i*)inputPtr); + // Do the two shifts + left = _mm_slli_epi16(input, 8); + right = _mm_srli_epi16(input, 8); + // Or the left and right halves together + output = _mm_or_si128(left, right); + // Store the results + _mm_storeu_si128((__m128i*)inputPtr, output); + inputPtr += 8; + } + + // Byteswap any remaining points: + number = eighthPoints*8; + for(; number < num_points; number++){ + uint16_t outputVal = *inputPtr; + outputVal = (((outputVal >> 8) & 0xff) | ((outputVal << 8) & 0xff00)); + *inputPtr = outputVal; + inputPtr++; + } +} +#endif /* LV_HAVE_SSE2 */ + +#ifdef LV_HAVE_GENERIC +/*! + \brief Byteswaps (in-place) an unaligned vector of int16_t's. + \param intsToSwap The vector of data to byte swap + \param numDataPoints The number of data points +*/ +static inline void volk_16u_byteswap_u_generic(uint16_t* intsToSwap, unsigned int num_points){ + unsigned int point; + uint16_t* inputPtr = intsToSwap; + for(point = 0; point < num_points; point++){ + uint16_t output = *inputPtr; + output = (((output >> 8) & 0xff) | ((output << 8) & 0xff00)); + *inputPtr = output; + inputPtr++; + } +} +#endif /* LV_HAVE_GENERIC */ + +#endif /* INCLUDED_volk_16u_byteswap_u_H */ diff --git a/volk/include/volk/volk_32f_x2_dot_prod_32f_u.h b/volk/include/volk/volk_32f_x2_dot_prod_32f_u.h index ab33a2587..b24e8b1f7 100644 --- a/volk/include/volk/volk_32f_x2_dot_prod_32f_u.h +++ b/volk/include/volk/volk_32f_x2_dot_prod_32f_u.h @@ -48,14 +48,14 @@ static inline void volk_32f_x2_dot_prod_32f_u_sse( float* result, const float* for(;number < sixteenthPoints; number++){ - a0Val = _mm_load_ps(aPtr); - a1Val = _mm_load_ps(aPtr+4); - a2Val = _mm_load_ps(aPtr+8); - a3Val = _mm_load_ps(aPtr+12); - b0Val = _mm_load_ps(bPtr); - b1Val = _mm_load_ps(bPtr+4); - b2Val = _mm_load_ps(bPtr+8); - b3Val = _mm_load_ps(bPtr+12); + a0Val = _mm_loadu_ps(aPtr); + a1Val = _mm_loadu_ps(aPtr+4); + a2Val = _mm_loadu_ps(aPtr+8); + a3Val = _mm_loadu_ps(aPtr+12); + b0Val = _mm_loadu_ps(bPtr); + b1Val = _mm_loadu_ps(bPtr+4); + b2Val = _mm_loadu_ps(bPtr+8); + b3Val = _mm_loadu_ps(bPtr+12); c0Val = _mm_mul_ps(a0Val, b0Val); c1Val = _mm_mul_ps(a1Val, b1Val); @@ -87,9 +87,6 @@ static inline void volk_32f_x2_dot_prod_32f_u_sse( float* result, const float* number = sixteenthPoints*16; for(;number < num_points; number++){ dotProduct += ((*aPtr++) * (*bPtr++)); - dotProduct += ((*aPtr++) * (*bPtr++)); - dotProduct += ((*aPtr++) * (*bPtr++)); - dotProduct += ((*aPtr++) * (*bPtr++)); } *result = dotProduct; @@ -121,14 +118,14 @@ static inline void volk_32f_x2_dot_prod_32f_u_sse3(float * result, const float * for(;number < sixteenthPoints; number++){ - a0Val = _mm_load_ps(aPtr); - a1Val = _mm_load_ps(aPtr+4); - a2Val = _mm_load_ps(aPtr+8); - a3Val = _mm_load_ps(aPtr+12); - b0Val = _mm_load_ps(bPtr); - b1Val = _mm_load_ps(bPtr+4); - b2Val = _mm_load_ps(bPtr+8); - b3Val = _mm_load_ps(bPtr+12); + a0Val = _mm_loadu_ps(aPtr); + a1Val = _mm_loadu_ps(aPtr+4); + a2Val = _mm_loadu_ps(aPtr+8); + a3Val = _mm_loadu_ps(aPtr+12); + b0Val = _mm_loadu_ps(bPtr); + b1Val = _mm_loadu_ps(bPtr+4); + b2Val = _mm_loadu_ps(bPtr+8); + b3Val = _mm_loadu_ps(bPtr+12); c0Val = _mm_mul_ps(a0Val, b0Val); c1Val = _mm_mul_ps(a1Val, b1Val); @@ -187,15 +184,15 @@ static inline void volk_32f_x2_dot_prod_32f_u_sse4_1(float * result, const float for(;number < sixteenthPoints; number++){ - aVal1 = _mm_load_ps(aPtr); aPtr += 4; - aVal2 = _mm_load_ps(aPtr); aPtr += 4; - aVal3 = _mm_load_ps(aPtr); aPtr += 4; - aVal4 = _mm_load_ps(aPtr); aPtr += 4; + aVal1 = _mm_loadu_ps(aPtr); aPtr += 4; + aVal2 = _mm_loadu_ps(aPtr); aPtr += 4; + aVal3 = _mm_loadu_ps(aPtr); aPtr += 4; + aVal4 = _mm_loadu_ps(aPtr); aPtr += 4; - bVal1 = _mm_load_ps(bPtr); bPtr += 4; - bVal2 = _mm_load_ps(bPtr); bPtr += 4; - bVal3 = _mm_load_ps(bPtr); bPtr += 4; - bVal4 = _mm_load_ps(bPtr); bPtr += 4; + bVal1 = _mm_loadu_ps(bPtr); bPtr += 4; + bVal2 = _mm_loadu_ps(bPtr); bPtr += 4; + bVal3 = _mm_loadu_ps(bPtr); bPtr += 4; + bVal4 = _mm_loadu_ps(bPtr); bPtr += 4; cVal1 = _mm_dp_ps(aVal1, bVal1, 0xF1); cVal2 = _mm_dp_ps(aVal2, bVal2, 0xF2); diff --git a/volk/lib/CMakeLists.txt b/volk/lib/CMakeLists.txt index 8288786c9..59d78b446 100644 --- a/volk/lib/CMakeLists.txt +++ b/volk/lib/CMakeLists.txt @@ -135,6 +135,12 @@ if(NOT CROSSCOMPILE_MULTILIB AND CPU_IS_x86) if (${SIZEOF_CPU} EQUAL 32) OVERRULE_ARCH(64 "CPU width is 32 bits") endif() + + #MSVC 64 bit does not have MMX, overrule it + if (${SIZEOF_CPU} EQUAL 64 AND MSVC) + OVERRULE_ARCH(mmx "No MMX for Win64") + endif() + endif() ######################################################################## @@ -159,7 +165,7 @@ execute_process( # When this occurs, eliminate the redundant machines # to avoid unnecessary compilation of subset machines. ######################################################################## -foreach(arch orc 64 32) +foreach(arch mmx orc 64 32) foreach(machine_name ${available_machines}) string(REPLACE "_${arch}" "" machine_name_no_arch ${machine_name}) if (${machine_name} STREQUAL ${machine_name_no_arch}) diff --git a/volk/lib/testqa.cc b/volk/lib/testqa.cc index d1eb1cacb..2e41c25da 100644 --- a/volk/lib/testqa.cc +++ b/volk/lib/testqa.cc @@ -20,6 +20,7 @@ VOLK_RUN_TESTS(volk_16i_convert_8i_u, 0, 0, 20460, 1); //VOLK_RUN_TESTS(volk_16i_permute_and_scalar_add_a, 1e-4, 0, 2046, 1000); //VOLK_RUN_TESTS(volk_16i_x4_quad_max_star_16i_a, 1e-4, 0, 2046, 1000); VOLK_RUN_TESTS(volk_16u_byteswap_a, 0, 0, 20460, 1); +VOLK_RUN_TESTS(volk_16u_byteswap_u, 0, 0, 20460, 1); //VOLK_RUN_TESTS(volk_16i_32fc_dot_prod_32fc_a, 1e-4, 0, 204600, 1); VOLK_RUN_TESTS(volk_32f_accumulator_s32f_a, 1e-4, 0, 20460, 1); VOLK_RUN_TESTS(volk_32f_x2_add_32f_a, 1e-4, 0, 20460, 1); @@ -36,7 +37,7 @@ VOLK_RUN_TESTS(volk_32fc_s32f_deinterleave_real_16i_a, 0, 32768, 20460, 1); VOLK_RUN_TESTS(volk_32fc_deinterleave_real_32f_a, 1e-4, 0, 20460, 1); VOLK_RUN_TESTS(volk_32fc_deinterleave_real_64f_a, 1e-4, 0, 20460, 1); VOLK_RUN_TESTS(volk_32fc_x2_dot_prod_32fc_a, 1e-4, 0, 2046000, 1); -VOLK_RUN_TESTS(volk_32fc_32f_dot_prod_32fc_a, 1e-4, 0, 2046000, 1); +VOLK_RUN_TESTS(volk_32fc_32f_dot_prod_32fc_a, 1e-4, 0, 204600, 1); VOLK_RUN_TESTS(volk_32fc_index_max_16u_a, 3, 0, 20460, 1); VOLK_RUN_TESTS(volk_32fc_s32f_magnitude_16i_a, 1, 32768, 20460, 1); VOLK_RUN_TESTS(volk_32fc_magnitude_32f_a, 1e-4, 0, 20460, 1); @@ -54,7 +55,7 @@ VOLK_RUN_TESTS(volk_32fc_x2_square_dist_32f_a, 1e-4, 0, 20460, 1); VOLK_RUN_TESTS(volk_32fc_x2_s32f_square_dist_scalar_mult_32f_a, 1e-4, 10, 20460, 1); VOLK_RUN_TESTS(volk_32f_x2_divide_32f_a, 1e-4, 0, 20460, 1); VOLK_RUN_TESTS(volk_32f_x2_dot_prod_32f_a, 1e-4, 0, 204600, 1); -//VOLK_RUN_TESTS(volk_32f_x2_dot_prod_32f_u, 1e-4, 0, 204600, 1); +VOLK_RUN_TESTS(volk_32f_x2_dot_prod_32f_u, 1e-4, 0, 204600, 1); VOLK_RUN_TESTS(volk_32f_x2_dot_prod_16i_a, 1e-4, 0, 204600, 1); //VOLK_RUN_TESTS(volk_32f_s32f_32f_fm_detect_32f_a, 1e-4, 2046, 10000); VOLK_RUN_TESTS(volk_32f_index_max_16u_a, 3, 0, 20460, 1); |