diff options
Diffstat (limited to 'gr-digital')
23 files changed, 208 insertions, 78 deletions
diff --git a/gr-digital/Makefile.am b/gr-digital/Makefile.am index b70d00d05..85a9bbbde 100644 --- a/gr-digital/Makefile.am +++ b/gr-digital/Makefile.am @@ -21,7 +21,7 @@ include $(top_srcdir)/Makefile.common -SUBDIRS = include lib +SUBDIRS = include lib doc if PYTHON SUBDIRS += swig python apps grc examples diff --git a/gr-digital/doc/.gitignore b/gr-digital/doc/.gitignore new file mode 100644 index 000000000..b336cc7ce --- /dev/null +++ b/gr-digital/doc/.gitignore @@ -0,0 +1,2 @@ +/Makefile +/Makefile.in diff --git a/gr-digital/doc/Makefile.am b/gr-digital/doc/Makefile.am new file mode 100644 index 000000000..dbfe1d5a2 --- /dev/null +++ b/gr-digital/doc/Makefile.am @@ -0,0 +1,27 @@ +# +# Copyright 2011 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = + +dist_gr_doc_DATA = \ + README.digital diff --git a/gr-digital/doc/README.digital b/gr-digital/doc/README.digital new file mode 100644 index 000000000..f4d40f3a0 --- /dev/null +++ b/gr-digital/doc/README.digital @@ -0,0 +1,13 @@ +This is the gr-digital package. It contains all of the digital +modulation blocks, utilities, and examples. To use the digital blocks, +the Python namespaces is in gnuradio.digital, which would be normally +imported as: + + from gnuradio import digital + +See the Doxygen documentation for details about the blocks available +in this package. A quick listing of the details can be found in Python +after importing by using: + + help(digital) + diff --git a/gr-digital/doc/digital.dox b/gr-digital/doc/digital.dox new file mode 100644 index 000000000..110dcb677 --- /dev/null +++ b/gr-digital/doc/digital.dox @@ -0,0 +1,23 @@ +/*! \page page_digital Digital Modulation + +\section Introduction +This is the gr-digital package. It contains all of the digital +modulation blocks, utilities, and examples. To use the digital blocks, +the Python namespaces is in gnuradio.digital, which would be normally +imported as: + +\code + from gnuradio import digital +\endcode + +See the Doxygen documentation for details about the blocks available +in this package. The relevant blocks are listed in the \ref digital group. + +A quick listing of the details can be found in Python after importing +by using: + +\code + help(digital) +\endcode + +*/ diff --git a/gr-digital/grc/digital_dxpsk_demod.xml b/gr-digital/grc/digital_dxpsk_demod.xml index 5e6dced22..d5e742097 100644 --- a/gr-digital/grc/digital_dxpsk_demod.xml +++ b/gr-digital/grc/digital_dxpsk_demod.xml @@ -33,17 +33,14 @@ <make>digital.$(type)_demod( samples_per_symbol=$samples_per_symbol, excess_bw=$excess_bw, - costas_alpha=$costas_alpha, - timing_alpha=$timing_alpha, - timing_max_dev=$timing_max_dev, - gray_code=$gray_code, + phase_bw=$phase_bw, + timing_bw=$timing_bw, + gray_coded=$gray_coded, verbose=$verbose, - log=$log, - sync_out=$sync_out, + log=$log )</make> - <callback>clock_recov.set_alpha($costas_alpha)</callback> - <callback>clock_recov.set_beta(0.25*$costas_alpha**2)</callback> - <callback>time_recov.set_alpha($timing_alpha)</callback> + <callback>clock_recov.set_loop_bandwidth($phase_bw)</callback> + <callback>time_recov.set_loop_bandwidth($timing_bw)</callback> <param> <name>Type</name> <key>type</key> @@ -70,21 +67,15 @@ <type>real</type> </param> <param> - <name>Costas Alpha</name> - <key>costas_alpha</key> - <value>0.175</value> + <name>Phase Loop Bandwidth</name> + <key>phase_bw</key> + <value>6.28/100.0</value> <type>real</type> </param> <param> - <name>Timing Alpha</name> - <key>timing_alpha</key> - <value>0.100</value> - <type>real</type> - </param> - <param> - <name>Timing Max Dev</name> - <key>timing_max_dev</key> - <value>1.5</value> + <name>Timing Bandwidth</name> + <key>timing_bw</key> + <value>6.28/100.0</value> <type>real</type> </param> <param> @@ -95,7 +86,7 @@ </param> <param> <name>Gray Code</name> - <key>gray_code</key> + <key>gray_coded</key> <value>True</value> <type>bool</type> <option> @@ -159,9 +150,4 @@ <name>out</name> <type>byte</type> </source> - <source> - <name>sync</name> - <type>complex</type> - <optional>1</optional> - </source> </block> diff --git a/gr-digital/include/digital_binary_slicer_fb.h b/gr-digital/include/digital_binary_slicer_fb.h index 9da776012..35a7380fb 100644 --- a/gr-digital/include/digital_binary_slicer_fb.h +++ b/gr-digital/include/digital_binary_slicer_fb.h @@ -34,6 +34,7 @@ DIGITAL_API digital_binary_slicer_fb_sptr digital_make_binary_slicer_fb (); /*! * \brief slice float binary symbol outputting 1 bit output * \ingroup converter_blk + * \ingroup digital * * x < 0 --> 0 * x >= 0 --> 1 diff --git a/gr-digital/include/digital_clock_recovery_mm_cc.h b/gr-digital/include/digital_clock_recovery_mm_cc.h index e45b79229..f8d973765 100644 --- a/gr-digital/include/digital_clock_recovery_mm_cc.h +++ b/gr-digital/include/digital_clock_recovery_mm_cc.h @@ -42,6 +42,7 @@ digital_make_clock_recovery_mm_cc (float omega, float gain_omega, /*! * \brief Mueller and Müller (M&M) based clock recovery block with complex input, complex output. * \ingroup sync_blk + * \ingroup digital * * This implements the Mueller and Müller (M&M) discrete-time error-tracking synchronizer. * The complex version here is based on: diff --git a/gr-digital/include/digital_clock_recovery_mm_ff.h b/gr-digital/include/digital_clock_recovery_mm_ff.h index 6f88a4dcd..36749553f 100644 --- a/gr-digital/include/digital_clock_recovery_mm_ff.h +++ b/gr-digital/include/digital_clock_recovery_mm_ff.h @@ -42,6 +42,7 @@ digital_make_clock_recovery_mm_ff (float omega, float gain_omega, /*! * \brief Mueller and Müller (M&M) based clock recovery block with float input, float output. * \ingroup sync_blk + * \ingroup digital * * This implements the Mueller and Müller (M&M) discrete-time error-tracking synchronizer. * diff --git a/gr-digital/include/digital_cma_equalizer_cc.h b/gr-digital/include/digital_cma_equalizer_cc.h index 69e2f657a..0d703789a 100644 --- a/gr-digital/include/digital_cma_equalizer_cc.h +++ b/gr-digital/include/digital_cma_equalizer_cc.h @@ -37,6 +37,7 @@ digital_make_cma_equalizer_cc(int num_taps, float modulus, float mu, int sps); /*! * \brief Implements constant modulus adaptive filter on complex stream * \ingroup eq_blk + * \ingroup digital * * The error value and tap update equations (for p=2) can be found in: * diff --git a/gr-digital/include/digital_constellation.h b/gr-digital/include/digital_constellation.h index 3de350532..fb2f6747a 100644 --- a/gr-digital/include/digital_constellation.h +++ b/gr-digital/include/digital_constellation.h @@ -39,6 +39,21 @@ class digital_constellation; typedef boost::shared_ptr<digital_constellation> digital_constellation_sptr; +/*! + * \brief An abstracted constellation object + * \ingroup digital + * + * The constellation objects hold the necessary information to pass + * around constellation information for modulators and + * demodulators. These objects contain the mapping between the bits + * and the constellation points used to represent them as well as + * methods for slicing the symbol space. Various implementations are + * possible for efficiency and ease of use. + * + * Standard constellations (BPSK, QPSK, QAM, etc) can be inherited + * from this class and overloaded to perform optimized slicing and + * constellation mappings. + */ class DIGITAL_API digital_constellation : public boost::enable_shared_from_this<digital_constellation> { public: @@ -86,7 +101,7 @@ public: unsigned int dimensionality() {return d_dimensionality;} unsigned int bits_per_symbol () { - return floor(log(1.0*d_constellation.size())/d_dimensionality/log(2.0)); + return floor(log(double(d_constellation.size()))/d_dimensionality/log(2.0)); } unsigned int arity () { @@ -112,11 +127,8 @@ public: }; /************************************************************/ -/* digital_constellation_calcdist */ +/* digital_constellation_calcdist */ /* */ -/* Constellation which calculates the distance to each */ -/* point in the constellation for decision making. */ -/* Inefficient for large constellations. */ /************************************************************/ class digital_constellation_calcdist; @@ -130,6 +142,13 @@ digital_make_constellation_calcdist (std::vector<gr_complex> constellation, unsigned int dimensionality); +/*! \brief Calculate Euclidian distance for any constellation + * \ingroup digital + * + * Constellation which calculates the distance to each point in the + * constellation for decision making. Inefficient for large + * constellations. + */ class DIGITAL_API digital_constellation_calcdist : public digital_constellation { public: @@ -147,15 +166,19 @@ class DIGITAL_API digital_constellation_calcdist : public digital_constellation digital_make_constellation_calcdist (std::vector<gr_complex> constellation); }; + /************************************************************/ -/* digital_constellation_sector */ -/* */ -/* An abstract class. */ -/* Constellation space is divided into sectors. */ -/* Each sector is associated with the nearest constellation */ -/* point. */ +/*! digital_constellation_sector */ /************************************************************/ +/*! + * \brief Sectorized digital constellation + * \ingroup digital + * + * Constellation space is divided into sectors. Each sector is + * associated with the nearest constellation point. + * + */ class DIGITAL_API digital_constellation_sector : public digital_constellation { public: @@ -184,17 +207,23 @@ class DIGITAL_API digital_constellation_sector : public digital_constellation /************************************************************/ /* digital_constellation_rect */ -/* */ -/* Only implemented for 1-(complex)dimensional */ -/* constellation. */ -/* Constellation space is divided into rectangular sectors. */ -/* Each sector is associated with the nearest constellation */ -/* point. */ -/* Works well for square QAM. */ -/* Works for any generic constellation provided sectors are */ -/* not too large. */ /************************************************************/ +/*! + * \brief Rectangular digital constellation + * \ingroup digital + * + * Only implemented for 1-(complex)dimensional constellation. + * + * Constellation space is divided into rectangular sectors. Each + * sector is associated with the nearest constellation point. + * + * Works well for square QAM. + * + * Works for any generic constellation provided sectors are not too + * large. + */ + class digital_constellation_rect; typedef boost::shared_ptr<digital_constellation_rect> digital_constellation_rect_sptr; @@ -244,14 +273,9 @@ class DIGITAL_API digital_constellation_rect : public digital_constellation_sect }; + /************************************************************/ /* digital_constellation_psk */ -/* */ -/* Constellation space is divided into pie slices sectors. */ -/* Each slice is associated with the nearest constellation */ -/* point. */ -/* Works well for PSK but nothing else. */ -/* Assumes that there is a constellation point at 1. */ /************************************************************/ class digital_constellation_psk; @@ -263,6 +287,18 @@ digital_make_constellation_psk (std::vector<gr_complex> constellation, std::vector<unsigned int> pre_diff_code, unsigned int n_sectors); +/*! + * \brief digital_constellation_psk + * \ingroup digital + * + * Constellation space is divided into pie slices sectors. + * + * Each slice is associated with the nearest constellation point. + * + * Works well for PSK but nothing else. + * + * Assumes that there is a constellation point at 1.x + */ class DIGITAL_API digital_constellation_psk : public digital_constellation_sector { public: @@ -286,6 +322,7 @@ class DIGITAL_API digital_constellation_psk : public digital_constellation_secto }; + /************************************************************/ /* digital_constellation_bpsk */ /* */ @@ -300,6 +337,10 @@ typedef boost::shared_ptr<digital_constellation_bpsk> digital_constellation_bpsk DIGITAL_API digital_constellation_bpsk_sptr digital_make_constellation_bpsk (); +/*! + * \brief Digital constellation for BPSK + * \ingroup digital + */ class DIGITAL_API digital_constellation_bpsk : public digital_constellation { public: @@ -312,6 +353,7 @@ class DIGITAL_API digital_constellation_bpsk : public digital_constellation }; + /************************************************************/ /* digital_constellation_qpsk */ /* */ @@ -326,6 +368,10 @@ typedef boost::shared_ptr<digital_constellation_qpsk> digital_constellation_qpsk DIGITAL_API digital_constellation_qpsk_sptr digital_make_constellation_qpsk (); +/*! + * \brief Digital constellation for QPSK + * \ingroup digital + */ class DIGITAL_API digital_constellation_qpsk : public digital_constellation { public: @@ -338,6 +384,7 @@ class DIGITAL_API digital_constellation_qpsk : public digital_constellation }; + /************************************************************/ /* digital_constellation_dqpsk */ /* */ @@ -345,7 +392,6 @@ class DIGITAL_API digital_constellation_qpsk : public digital_constellation /* */ /************************************************************/ -//! \brief DQPSK-specific constellation and decision maker class digital_constellation_dqpsk; typedef boost::shared_ptr<digital_constellation_dqpsk> digital_constellation_dqpsk_sptr; @@ -353,6 +399,10 @@ typedef boost::shared_ptr<digital_constellation_dqpsk> digital_constellation_dqp DIGITAL_API digital_constellation_dqpsk_sptr digital_make_constellation_dqpsk (); +/*! + * \brief Digital constellation for DQPSK + * \ingroup digital + */ class DIGITAL_API digital_constellation_dqpsk : public digital_constellation { public: @@ -360,7 +410,7 @@ class DIGITAL_API digital_constellation_dqpsk : public digital_constellation digital_constellation_dqpsk (); unsigned int decision_maker (const gr_complex *sample); - friend DIGITAL_API digital_constellation_dqpsk_sptr + friend digital_constellation_dqpsk_sptr digital_make_constellation_dqpsk (); }; @@ -380,6 +430,10 @@ typedef boost::shared_ptr<digital_constellation_8psk> digital_constellation_8psk DIGITAL_API digital_constellation_8psk_sptr digital_make_constellation_8psk (); +/*! + * \brief Digital constellation for 8PSK + * \ingroup digital + */ class DIGITAL_API digital_constellation_8psk : public digital_constellation { public: diff --git a/gr-digital/include/digital_constellation_decoder_cb.h b/gr-digital/include/digital_constellation_decoder_cb.h index 1ce01fe12..cce3a564f 100644 --- a/gr-digital/include/digital_constellation_decoder_cb.h +++ b/gr-digital/include/digital_constellation_decoder_cb.h @@ -37,6 +37,7 @@ digital_make_constellation_decoder_cb (digital_constellation_sptr constellation) /*! * \brief Constellation Decoder * \ingroup coding_blk + * \ingroup digital * */ class DIGITAL_API digital_constellation_decoder_cb : public gr_block diff --git a/gr-digital/include/digital_constellation_receiver_cb.h b/gr-digital/include/digital_constellation_receiver_cb.h index 59b2d2785..8547bdd68 100644 --- a/gr-digital/include/digital_constellation_receiver_cb.h +++ b/gr-digital/include/digital_constellation_receiver_cb.h @@ -41,28 +41,36 @@ digital_make_constellation_receiver_cb (digital_constellation_sptr constellation float loop_bw, float fmin, float fmax); /*! - * \brief This block takes care of receiving generic modulated signals through phase, frequency, and symbol - * synchronization. + * \brief This block takes care of receiving generic modulated signals + * through phase, frequency, and symbol synchronization. * \ingroup sync_blk * \ingroup demod_blk + * \ingroup digital * - * This block takes care of receiving generic modulated signals through phase, frequency, and symbol - * synchronization. It performs carrier frequency and phase locking as well as symbol timing recovery. + * This block takes care of receiving generic modulated signals + * through phase, frequency, and symbol synchronization. It performs + * carrier frequency and phase locking as well as symbol timing + * recovery. * - * The phase and frequency synchronization are based on a Costas loop that finds the error of the incoming - * signal point compared to its nearest constellation point. The frequency and phase of the NCO are + * The phase and frequency synchronization are based on a Costas loop + * that finds the error of the incoming signal point compared to its + * nearest constellation point. The frequency and phase of the NCO are * updated according to this error. * - * The symbol synchronization is done using a modified Mueller and Muller circuit from the paper: + * The symbol synchronization is done using a modified Mueller and + * Muller circuit from the paper: * - * G. R. Danesfahani, T.G. Jeans, "Optimisation of modified Mueller and Muller - * algorithm," Electronics Letters, Vol. 31, no. 13, 22 June 1995, pp. 1032 - 1033. + * G. R. Danesfahani, T.G. Jeans, "Optimisation of modified Mueller + * and Muller algorithm," Electronics Letters, Vol. 31, no. 13, 22 + * June 1995, pp. 1032 - 1033. * - * This circuit interpolates the downconverted sample (using the NCO developed by the Costas loop) - * every mu samples, then it finds the sampling error based on this and the past symbols and the decision - * made on the samples. Like the phase error detector, there are optimized decision algorithms for BPSK - * and QPKS, but 8PSK uses another brute force computation against all possible symbols. The modifications - * to the M&M used here reduce self-noise. + * This circuit interpolates the downconverted sample (using the NCO + * developed by the Costas loop) every mu samples, then it finds the + * sampling error based on this and the past symbols and the decision + * made on the samples. Like the phase error detector, there are + * optimized decision algorithms for BPSK and QPKS, but 8PSK uses + * another brute force computation against all possible symbols. The + * modifications to the M&M used here reduce self-noise. * */ @@ -80,8 +88,7 @@ protected: * \brief Constructor to synchronize incoming M-PSK symbols * * \param constellation constellation of points for generic modulation - * \param alpha gain parameter to adjust the phase in the Costas loop (~0.01) - * \param beta gain parameter to adjust the frequency in the Costas loop (~alpha^2/4) + * \param loop_bw Loop bandwidth of the Costas Loop (~ 2pi/100) * \param fmin minimum normalized frequency value the loop can achieve * \param fmax maximum normalized frequency value the loop can achieve * diff --git a/gr-digital/include/digital_correlate_access_code_bb.h b/gr-digital/include/digital_correlate_access_code_bb.h index c4cb60428..8095dd409 100644 --- a/gr-digital/include/digital_correlate_access_code_bb.h +++ b/gr-digital/include/digital_correlate_access_code_bb.h @@ -40,6 +40,7 @@ digital_make_correlate_access_code_bb (const std::string &access_code, int thres /*! * \brief Examine input for specified access code, one bit at a time. * \ingroup sync_blk + * \ingroup digital * * input: stream of bits, 1 bit per input byte (data in LSB) * output: stream of bits, 2 bits per output byte (data in LSB, flag in next higher bit) diff --git a/gr-digital/include/digital_costas_loop_cc.h b/gr-digital/include/digital_costas_loop_cc.h index c78726341..c8c722c93 100644 --- a/gr-digital/include/digital_costas_loop_cc.h +++ b/gr-digital/include/digital_costas_loop_cc.h @@ -30,8 +30,10 @@ #include <fstream> -/*! \brief A Costas loop carrier recovery module. +/*! + * \brief A Costas loop carrier recovery module. * \ingroup sync_blk + * \ingroup digital * * The Costas loop locks to the center frequency of a signal and * downconverts it to baseband. The second (order=2) order loop is @@ -42,9 +44,9 @@ * * More details can be found online: * - * J. Feigin, "Practical Costas loop design: Designing a simple and inexpensive - * BPSK Costas loop carrier recovery circuit," RF signal processing, pp. 20-36, - * 2002. + * J. Feigin, "Practical Costas loop design: Designing a simple and + * inexpensive BPSK Costas loop carrier recovery circuit," RF signal + * processing, pp. 20-36, 2002. * * http://rfdesign.com/images/archive/0102Feigin20.pdf * diff --git a/gr-digital/include/digital_cpmmod_bc.h b/gr-digital/include/digital_cpmmod_bc.h index 4e9547cd6..332856afc 100644 --- a/gr-digital/include/digital_cpmmod_bc.h +++ b/gr-digital/include/digital_cpmmod_bc.h @@ -44,6 +44,7 @@ digital_make_cpmmod_bc(int type, float h, * \brief Generic CPM modulator * * \ingroup modulation_blk + * \ingroup digital * * \param type The modulation type. Can be one of LREC, LRC, LSRC, TFM * or GAUSSIAN. See gr_cpm::phase_response() for a diff --git a/gr-digital/include/digital_crc32.h b/gr-digital/include/digital_crc32.h index 852d06f49..ec4a0df5b 100644 --- a/gr-digital/include/digital_crc32.h +++ b/gr-digital/include/digital_crc32.h @@ -29,7 +29,7 @@ /*! * \brief update running CRC-32 - * \ingroup misc + * \ingroup digital * * Update a running CRC with the bytes buf[0..len-1] The CRC should be * initialized to all 1's, and the transmitted value is the 1's diff --git a/gr-digital/include/digital_fll_band_edge_cc.h b/gr-digital/include/digital_fll_band_edge_cc.h index 6ef8376ac..f07d7ba42 100644 --- a/gr-digital/include/digital_fll_band_edge_cc.h +++ b/gr-digital/include/digital_fll_band_edge_cc.h @@ -40,6 +40,7 @@ DIGITAL_API digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float s * \brief Frequency Lock Loop using band-edge filters * * \ingroup general + * \ingroup digital * * The frequency lock loop derives a band-edge filter that covers the * upper and lower bandwidths of a digitally-modulated signal. The diff --git a/gr-digital/include/digital_gmskmod_bc.h b/gr-digital/include/digital_gmskmod_bc.h index 33fcc6c12..9f378c8a7 100644 --- a/gr-digital/include/digital_gmskmod_bc.h +++ b/gr-digital/include/digital_gmskmod_bc.h @@ -38,6 +38,7 @@ digital_make_gmskmod_bc(unsigned samples_per_sym=2, * \brief GMSK modulator * * \ingroup modulation_blk + * \ingroup digital * * \param samples_per_sym Samples per symbol. * \param bt The 3 dB time-bandwidth product. diff --git a/gr-digital/include/digital_kurtotic_equalizer_cc.h b/gr-digital/include/digital_kurtotic_equalizer_cc.h index c07862e11..3ac8712d5 100644 --- a/gr-digital/include/digital_kurtotic_equalizer_cc.h +++ b/gr-digital/include/digital_kurtotic_equalizer_cc.h @@ -37,6 +37,7 @@ digital_make_kurtotic_equalizer_cc(int num_taps, float mu); /*! * \brief Implements a kurtosis-based adaptive equalizer on complex stream * \ingroup eq_blk + * \ingroup digital * * Y. Guo, J. Zhao, Y. Sun, "Sign kurtosis maximization based blind * equalization algorithm," IEEE Conf. on Control, Automation, diff --git a/gr-digital/include/digital_lms_dd_equalizer_cc.h b/gr-digital/include/digital_lms_dd_equalizer_cc.h index edfa18e23..56871fa67 100644 --- a/gr-digital/include/digital_lms_dd_equalizer_cc.h +++ b/gr-digital/include/digital_lms_dd_equalizer_cc.h @@ -37,6 +37,7 @@ DIGITAL_API digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (i /*! * \brief Least-Mean-Square Decision Directed Equalizer (complex in/out) * \ingroup eq_blk + * \ingroup digital * * This block implements an LMS-based decision-directed equalizer. * It uses a set of weights, w, to correlate against the inputs, u, diff --git a/gr-digital/include/digital_mpsk_receiver_cc.h b/gr-digital/include/digital_mpsk_receiver_cc.h index 85cd81e99..e70495bfa 100644 --- a/gr-digital/include/digital_mpsk_receiver_cc.h +++ b/gr-digital/include/digital_mpsk_receiver_cc.h @@ -48,6 +48,7 @@ digital_make_mpsk_receiver_cc (unsigned int M, float theta, * through phase, frequency, and symbol synchronization. * \ingroup sync_blk * \ingroup demod_blk + * \ingroup digital * * This block takes care of receiving M-PSK modulated signals through * phase, frequency, and symbol synchronization. It performs carrier diff --git a/gr-digital/python/__init__.py b/gr-digital/python/__init__.py index 0fc48cc79..ca46dcfdb 100644 --- a/gr-digital/python/__init__.py +++ b/gr-digital/python/__init__.py @@ -1,4 +1,3 @@ -# # Copyright 2011 Free Software Foundation, Inc. # # This file is part of GNU Radio @@ -19,6 +18,11 @@ # Boston, MA 02110-1301, USA. # +''' +This is the gr-digital package. It contains all of the blocks, +utilities, and examples for doing digital modulation and demodulation. +''' + # The presence of this file turns this directory into a Python package from digital_swig import * |