summaryrefslogtreecommitdiff
path: root/gr-digital
diff options
context:
space:
mode:
Diffstat (limited to 'gr-digital')
-rw-r--r--gr-digital/Makefile.am2
-rw-r--r--gr-digital/doc/.gitignore2
-rw-r--r--gr-digital/doc/Makefile.am27
-rw-r--r--gr-digital/doc/README.digital13
-rw-r--r--gr-digital/doc/digital.dox23
-rw-r--r--gr-digital/grc/digital_dxpsk_demod.xml40
-rw-r--r--gr-digital/include/digital_binary_slicer_fb.h1
-rw-r--r--gr-digital/include/digital_clock_recovery_mm_cc.h1
-rw-r--r--gr-digital/include/digital_clock_recovery_mm_ff.h1
-rw-r--r--gr-digital/include/digital_cma_equalizer_cc.h1
-rw-r--r--gr-digital/include/digital_constellation.h110
-rw-r--r--gr-digital/include/digital_constellation_decoder_cb.h1
-rw-r--r--gr-digital/include/digital_constellation_receiver_cb.h39
-rw-r--r--gr-digital/include/digital_correlate_access_code_bb.h1
-rw-r--r--gr-digital/include/digital_costas_loop_cc.h10
-rw-r--r--gr-digital/include/digital_cpmmod_bc.h1
-rw-r--r--gr-digital/include/digital_crc32.h2
-rw-r--r--gr-digital/include/digital_fll_band_edge_cc.h1
-rw-r--r--gr-digital/include/digital_gmskmod_bc.h1
-rw-r--r--gr-digital/include/digital_kurtotic_equalizer_cc.h1
-rw-r--r--gr-digital/include/digital_lms_dd_equalizer_cc.h1
-rw-r--r--gr-digital/include/digital_mpsk_receiver_cc.h1
-rw-r--r--gr-digital/python/__init__.py6
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 *