commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 01/05: gr-dtv: Add ITU-T J.83B 64QAM transm


From: git
Subject: [Commit-gnuradio] [gnuradio] 01/05: gr-dtv: Add ITU-T J.83B 64QAM transmitter.
Date: Wed, 27 Jan 2016 22:24:43 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

jcorgan pushed a commit to branch master
in repository gnuradio.

commit e59e44e11d37b0ddc76a58b45e818a1e60a73fd3
Author: Clayton Smith <address@hidden>
Date:   Wed Jan 27 08:30:35 2016 -0800

    gr-dtv: Add ITU-T J.83B 64QAM transmitter.
---
 gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml          |  26 +++
 gr-dtv/grc/dtv_catv_randomizer_bb.xml              |  20 +++
 gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.xml        |  20 +++
 gr-dtv/grc/dtv_catv_transport_framing_enc_bb.xml   |  20 +++
 gr-dtv/grc/dtv_catv_trellis_enc_bb.xml             |  20 +++
 .../include/gnuradio/dtv/catv_frame_sync_enc_bb.h  |  54 ++++++
 gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h   |  53 ++++++
 .../gnuradio/dtv/catv_reed_solomon_enc_bb.h        |  53 ++++++
 .../gnuradio/dtv/catv_transport_framing_enc_bb.h   |  53 ++++++
 gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h  |  53 ++++++
 gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc     |  96 ++++++++++
 gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h      |  50 ++++++
 gr-dtv/lib/catv/catv_randomizer_bb_impl.cc         | 104 +++++++++++
 gr-dtv/lib/catv/catv_randomizer_bb_impl.h          |  49 ++++++
 gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.cc   | 153 ++++++++++++++++
 gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.h    |  56 ++++++
 .../lib/catv/catv_transport_framing_enc_bb_impl.cc | 131 ++++++++++++++
 .../lib/catv/catv_transport_framing_enc_bb_impl.h  |  84 +++++++++
 gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc        | 193 +++++++++++++++++++++
 gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h         |  60 +++++++
 20 files changed, 1348 insertions(+)

diff --git a/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml 
b/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml
new file mode 100644
index 0000000..e7c1392
--- /dev/null
+++ b/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## Frame Sync Encoder
+###################################################
+ -->
+<block>
+  <name>Frame Sync Encoder</name>
+  <key>dtv_catv_frame_sync_enc_bb</key>
+  <import>from gnuradio import dtv</import>
+  <make>dtv.catv_frame_sync_enc_bb($ctrlword)</make>
+  <param>
+    <name>Control Word</name>
+    <key>ctrlword</key>
+    <value>6</value>
+    <type>int</type>
+  </param>
+  <sink>
+    <name>in</name>
+    <type>byte</type>
+  </sink>
+  <source>
+    <name>out</name>
+    <type>byte</type>
+  </source>
+</block>
diff --git a/gr-dtv/grc/dtv_catv_randomizer_bb.xml 
b/gr-dtv/grc/dtv_catv_randomizer_bb.xml
new file mode 100644
index 0000000..ca4787d
--- /dev/null
+++ b/gr-dtv/grc/dtv_catv_randomizer_bb.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## Randomizer
+###################################################
+ -->
+<block>
+  <name>Randomizer</name>
+  <key>dtv_catv_randomizer_bb</key>
+  <import>from gnuradio import dtv</import>
+  <make>dtv.catv_randomizer_bb()</make>
+  <sink>
+    <name>in</name>
+    <type>byte</type>
+  </sink>
+  <source>
+    <name>out</name>
+    <type>byte</type>
+  </source>
+</block>
diff --git a/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.xml 
b/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.xml
new file mode 100644
index 0000000..a5dfdc2
--- /dev/null
+++ b/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## Reed Solomon Encoder
+###################################################
+ -->
+<block>
+  <name>Reed-Solomon Encoder</name>
+  <key>dtv_catv_reed_solomon_enc_bb</key>
+  <import>from gnuradio import dtv</import>
+  <make>dtv.catv_reed_solomon_enc_bb()</make>
+  <sink>
+    <name>in</name>
+    <type>byte</type>
+  </sink>
+  <source>
+    <name>out</name>
+    <type>byte</type>
+  </source>
+</block>
diff --git a/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.xml 
b/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.xml
new file mode 100644
index 0000000..d0b6bf3
--- /dev/null
+++ b/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## Transport Framing Encoder
+###################################################
+ -->
+<block>
+  <name>Transport Framing Encoder</name>
+  <key>dtv_catv_transport_framing_enc_bb</key>
+  <import>from gnuradio import dtv</import>
+  <make>dtv.catv_transport_framing_enc_bb()</make>
+  <sink>
+    <name>in</name>
+    <type>byte</type>
+  </sink>
+  <source>
+    <name>out</name>
+    <type>byte</type>
+  </source>
+</block>
diff --git a/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml 
b/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml
new file mode 100644
index 0000000..a96d60c
--- /dev/null
+++ b/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## Trellis Encoder
+###################################################
+ -->
+<block>
+  <name>Trellis Encoder</name>
+  <key>dtv_catv_trellis_enc_bb</key>
+  <import>from gnuradio import dtv</import>
+  <make>dtv.catv_trellis_enc_bb()</make>
+  <sink>
+    <name>in</name>
+    <type>byte</type>
+  </sink>
+  <source>
+    <name>out</name>
+    <type>byte</type>
+  </source>
+</block>
diff --git a/gr-dtv/include/gnuradio/dtv/catv_frame_sync_enc_bb.h 
b/gr-dtv/include/gnuradio/dtv/catv_frame_sync_enc_bb.h
new file mode 100644
index 0000000..799a2d3
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/catv_frame_sync_enc_bb.h
@@ -0,0 +1,54 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_H
+#define INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+  namespace dtv {
+
+    /*!
+     * \brief Frame Sync Encoder. Adds a 42-bit frame sync pattern with 
control word.
+     * \ingroup dtv
+     *
+     * Input: Scrambled FEC Frame packets of 60 * 128 7-bit symbols.\n
+     * Output: Scrambled FEC Frame packets of 60 * 128 7-bit symbols with 
42-bit FSYNC word.
+     */
+    class DTV_API catv_frame_sync_enc_bb : virtual public gr::block
+    {
+     public:
+      typedef boost::shared_ptr<catv_frame_sync_enc_bb> sptr;
+
+      /*!
+       * \brief Create an ITU-T J.83B Frame Sync Encoder.
+       *
+       * \param ctrlword convolutional interleaver control word.
+       */
+      static sptr make(int ctrlword);
+    };
+
+  } // namespace dtv
+} // namespace gr
+
+#endif /* INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_H */
+
diff --git a/gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h 
b/gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h
new file mode 100644
index 0000000..83230b8
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_CATV_RANDOMIZER_BB_H
+#define INCLUDED_DTV_CATV_RANDOMIZER_BB_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+  namespace dtv {
+
+    /*!
+     * \brief Randomizer, x^3 + x + alpha^3, 7-bit symbols.
+     * \ingroup dtv
+     *
+     * Input: Interleaved MPEG-2 + RS parity bitstream packets of 128 7-bit 
symbols.\n
+     * Output: Scrambled FEC Frame packets of 60 * 128 7-bit symbols.
+     */
+    class DTV_API catv_randomizer_bb : virtual public gr::sync_block
+    {
+     public:
+      typedef boost::shared_ptr<catv_randomizer_bb> sptr;
+
+      /*!
+       * \brief Create an ITU-T J.83B randomizer.
+       *
+       */
+      static sptr make();
+    };
+
+  } // namespace dtv
+} // namespace gr
+
+#endif /* INCLUDED_DTV_CATV_RANDOMIZER_BB_H */
+
diff --git a/gr-dtv/include/gnuradio/dtv/catv_reed_solomon_enc_bb.h 
b/gr-dtv/include/gnuradio/dtv/catv_reed_solomon_enc_bb.h
new file mode 100644
index 0000000..b661f0d
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/catv_reed_solomon_enc_bb.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_H
+#define INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+  namespace dtv {
+
+    /*!
+     * \brief Reed Solomon Encoder, t=3, (128,122), 7-bit symbols.
+     * \ingroup dtv
+     *
+     * Input: MPEG-2 bitstream packets of 122 7-bit symbols.\n
+     * Output: MPEG-2 + RS parity bitstream packets of 128 7-bit symbols.
+     */
+    class DTV_API catv_reed_solomon_enc_bb : virtual public gr::block
+    {
+     public:
+      typedef boost::shared_ptr<catv_reed_solomon_enc_bb> sptr;
+
+      /*!
+       * \brief Create an ITU-T J.83B Reed Solomon encoder.
+       *
+       */
+      static sptr make();
+    };
+
+  } // namespace dtv
+} // namespace gr
+
+#endif /* INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_H */
+
diff --git a/gr-dtv/include/gnuradio/dtv/catv_transport_framing_enc_bb.h 
b/gr-dtv/include/gnuradio/dtv/catv_transport_framing_enc_bb.h
new file mode 100644
index 0000000..7df100d
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/catv_transport_framing_enc_bb.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_H
+#define INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+  namespace dtv {
+
+    /*!
+     * \brief Transport Framing Encoder. Adds a parity checksum to MPEG-2 
packets.
+     * \ingroup dtv
+     *
+     * Input: MPEG-2 Transport Stream.\n
+     * Output: MPEG-2 Transport Stream with parity checksum byte.
+     */
+    class DTV_API catv_transport_framing_enc_bb : virtual public gr::sync_block
+    {
+     public:
+      typedef boost::shared_ptr<catv_transport_framing_enc_bb> sptr;
+
+      /*!
+       * \brief Create an ITU-T J.83B Transport Framing Encoder.
+       *
+       */
+      static sptr make();
+    };
+
+  } // namespace dtv
+} // namespace gr
+
+#endif /* INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_H */
+
diff --git a/gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h 
b/gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h
new file mode 100644
index 0000000..aa6cec1
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_CATV_TRELLIS_ENC_BB_H
+#define INCLUDED_DTV_CATV_TRELLIS_ENC_BB_H
+
+#include <gnuradio/dtv/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+  namespace dtv {
+
+    /*!
+     * \brief Trellis Encoder. 14/15 code rate.
+     * \ingroup dtv
+     *
+     * Input: Scrambled FEC Frame packets of 60 * 128 7-bit symbols with 
42-bit FSYNC word.\n
+     * Output: Four 7-bit symbols (28 bits) Trellis encoded to 30 bits (14/15 
code rate).
+     */
+    class DTV_API catv_trellis_enc_bb : virtual public gr::block
+    {
+     public:
+      typedef boost::shared_ptr<catv_trellis_enc_bb> sptr;
+
+      /*!
+       * \brief Create an ITU-T J.83B Trellis Encoder.
+       *
+       */
+      static sptr make();
+    };
+
+  } // namespace dtv
+} // namespace gr
+
+#endif /* INCLUDED_DTV_CATV_TRELLIS_ENC_BB_H */
+
diff --git a/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc 
b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc
new file mode 100644
index 0000000..87c706b
--- /dev/null
+++ b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc
@@ -0,0 +1,96 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gnuradio/io_signature.h>
+#include "catv_frame_sync_enc_bb_impl.h"
+
+namespace gr {
+  namespace dtv {
+
+    catv_frame_sync_enc_bb::sptr
+    catv_frame_sync_enc_bb::make(int ctrlword)
+    {
+      return gnuradio::get_initial_sptr
+        (new catv_frame_sync_enc_bb_impl(ctrlword));
+    }
+
+    /*
+     * The private constructor
+     */
+    catv_frame_sync_enc_bb_impl::catv_frame_sync_enc_bb_impl(int ctrlword)
+      : gr::block("catv_frame_sync_enc_bb",
+              gr::io_signature::make(1, 1, sizeof(unsigned char)),
+              gr::io_signature::make(1, 1, sizeof(unsigned char)))
+    {
+      set_output_multiple(60 * 128 + 6);
+      control_word = ctrlword;
+    }
+
+    /*
+     * Our virtual destructor.
+     */
+    catv_frame_sync_enc_bb_impl::~catv_frame_sync_enc_bb_impl()
+    {
+    }
+
+    void
+    catv_frame_sync_enc_bb_impl::forecast (int noutput_items, gr_vector_int 
&ninput_items_required)
+    {
+      ninput_items_required[0] = noutput_items / (60 * 128 + 6) * (60 * 128);
+    }
+
+    int
+    catv_frame_sync_enc_bb_impl::general_work (int noutput_items,
+                       gr_vector_int &ninput_items,
+                       gr_vector_const_void_star &input_items,
+                       gr_vector_void_star &output_items)
+    {
+      const unsigned char *in = (const unsigned char *) input_items[0];
+      unsigned char *out = (unsigned char *) output_items[0];
+
+      int i = 0, j = 0;
+      while (i < noutput_items) {
+        memcpy(out + i, in + j, 60 * 128);
+        i += 60 * 128;
+        j += 60 * 128;
+
+        out[i++] = 0x75;
+        out[i++] = 0x2C;
+        out[i++] = 0x0D;
+        out[i++] = 0x6C;
+        out[i++] = control_word << 3;
+        out[i++] = 0x00;
+      }
+
+      // Tell runtime system how many input items we consumed on
+      // each input stream.
+      consume_each (j);
+
+      // Tell runtime system how many output items we produced.
+      return noutput_items;
+    }
+
+  } /* namespace dtv */
+} /* namespace gr */
+
diff --git a/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h 
b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h
new file mode 100644
index 0000000..fb924f7
--- /dev/null
+++ b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h
@@ -0,0 +1,50 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_IMPL_H
+#define INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_IMPL_H
+
+#include <gnuradio/dtv/catv_frame_sync_enc_bb.h>
+
+namespace gr {
+  namespace dtv {
+
+    class catv_frame_sync_enc_bb_impl : public catv_frame_sync_enc_bb
+    {
+     private:
+      int control_word;
+
+     public:
+      catv_frame_sync_enc_bb_impl(int ctrlword);
+      ~catv_frame_sync_enc_bb_impl();
+
+      void forecast (int noutput_items, gr_vector_int &ninput_items_required);
+
+      int general_work(int noutput_items,
+                       gr_vector_int &ninput_items,
+                       gr_vector_const_void_star &input_items,
+                       gr_vector_void_star &output_items);
+    };
+
+  } // namespace dtv
+} // namespace gr
+
+#endif /* INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_IMPL_H */
+
diff --git a/gr-dtv/lib/catv/catv_randomizer_bb_impl.cc 
b/gr-dtv/lib/catv/catv_randomizer_bb_impl.cc
new file mode 100644
index 0000000..698288d
--- /dev/null
+++ b/gr-dtv/lib/catv/catv_randomizer_bb_impl.cc
@@ -0,0 +1,104 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gnuradio/io_signature.h>
+#include "catv_randomizer_bb_impl.h"
+
+namespace gr {
+  namespace dtv {
+
+    catv_randomizer_bb::sptr
+    catv_randomizer_bb::make()
+    {
+      return gnuradio::get_initial_sptr
+        (new catv_randomizer_bb_impl());
+    }
+
+    /*
+     * The private constructor
+     */
+    catv_randomizer_bb_impl::catv_randomizer_bb_impl()
+      : gr::sync_block("catv_randomizer_bb",
+              gr::io_signature::make(1, 1, sizeof(unsigned char)),
+              gr::io_signature::make(1, 1, sizeof(unsigned char)))
+    {
+      init_rand();
+
+      offset = 0;
+      max_offset = 60 * 128;
+    }
+
+    /*
+     * Our virtual destructor.
+     */
+    catv_randomizer_bb_impl::~catv_randomizer_bb_impl()
+    {
+    }
+
+    void
+    catv_randomizer_bb_impl::init_rand()
+    {
+      unsigned char c2 = 0x7F, c1 = 0x7F, c0 = 0x7F;
+      unsigned char c2_new, c1_new, c0_new;
+      int n, i;
+
+      for (n = 0; n < 60 * 128; n++) {
+        rseq[n] = c2;
+        c2_new = c1;
+        c1_new = c0 ^ c2;
+        c0_new = c2;
+        for (i = 0; i < 3; i++) {
+          c0_new <<= 1;
+          if (c0_new & 0x80) {
+            c0_new = (c0_new & 0x7F) ^ 0x09;
+          }
+        }
+        c2 = c2_new;
+        c1 = c1_new;
+        c0 = c0_new;
+      }
+    }
+
+    int
+    catv_randomizer_bb_impl::work(int noutput_items,
+                          gr_vector_const_void_star &input_items,
+                          gr_vector_void_star &output_items)
+    {
+      const unsigned char *in = (const unsigned char *) input_items[0];
+      unsigned char *out = (unsigned char *) output_items[0];
+
+      for (int i = 0; i < noutput_items; i++) {
+        out[i] = in[i] ^ rseq[offset++];
+        if (offset == max_offset) {
+          offset = 0;
+        }
+      }
+
+      // Tell runtime system how many output items we produced.
+      return noutput_items;
+    }
+
+  } /* namespace dtv */
+} /* namespace gr */
+
diff --git a/gr-dtv/lib/catv/catv_randomizer_bb_impl.h 
b/gr-dtv/lib/catv/catv_randomizer_bb_impl.h
new file mode 100644
index 0000000..e4e40f8
--- /dev/null
+++ b/gr-dtv/lib/catv/catv_randomizer_bb_impl.h
@@ -0,0 +1,49 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_CATV_RANDOMIZER_BB_IMPL_H
+#define INCLUDED_DTV_CATV_RANDOMIZER_BB_IMPL_H
+
+#include <gnuradio/dtv/catv_randomizer_bb.h>
+
+namespace gr {
+  namespace dtv {
+
+    class catv_randomizer_bb_impl : public catv_randomizer_bb
+    {
+     private:
+      unsigned char rseq[60 * 128];
+      int offset, max_offset;
+      void init_rand();
+
+     public:
+      catv_randomizer_bb_impl();
+      ~catv_randomizer_bb_impl();
+
+      int work(int noutput_items,
+               gr_vector_const_void_star &input_items,
+               gr_vector_void_star &output_items);
+    };
+
+  } // namespace dtv
+} // namespace gr
+
+#endif /* INCLUDED_DTV_CATV_RANDOMIZER_BB_IMPL_H */
+
diff --git a/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.cc 
b/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.cc
new file mode 100644
index 0000000..06a1f12
--- /dev/null
+++ b/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.cc
@@ -0,0 +1,153 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gnuradio/io_signature.h>
+#include "catv_reed_solomon_enc_bb_impl.h"
+
+namespace gr {
+  namespace dtv {
+
+    catv_reed_solomon_enc_bb::sptr
+    catv_reed_solomon_enc_bb::make()
+    {
+      return gnuradio::get_initial_sptr
+        (new catv_reed_solomon_enc_bb_impl());
+    }
+
+    /*
+     * The private constructor
+     */
+    catv_reed_solomon_enc_bb_impl::catv_reed_solomon_enc_bb_impl()
+      : gr::block("catv_reed_solomon_enc_bb",
+              gr::io_signature::make(1, 1, sizeof(unsigned char)),
+              gr::io_signature::make(1, 1, sizeof(unsigned char)))
+    {
+      set_output_multiple(128);
+      init_rs();
+    }
+
+    /*
+     * Our virtual destructor.
+     */
+    catv_reed_solomon_enc_bb_impl::~catv_reed_solomon_enc_bb_impl()
+    {
+    }
+
+    void
+    catv_reed_solomon_enc_bb_impl::init_rs()
+    {
+      unsigned char x;
+      int i, j;
+
+      gf_exp[0] = 1;
+      gf_log[1] = 0;
+
+      x = 1;
+      for (i = 1; i < 127; i++) {
+        x <<= 1;
+        if (x & 0x80) {
+          x = (x & 0x7F) ^ 0x09;
+        }
+        gf_exp[i] = x;
+        gf_log[x] = i;
+      }
+      for (; i < 256; i++) {
+        gf_exp[i] = gf_exp[i - 127];
+      }
+
+      for (i = 0; i < 128; i++) {
+        for (j = 0; j < 128; j++) {
+          if ((i == 0) || (j == 0)) {
+            gf_mul_table[i][j] = 0;
+          } else {
+            gf_mul_table[i][j] = gf_exp[gf_log[i] + gf_log[j]];
+          }
+        }
+      }
+    }
+
+    unsigned char
+    catv_reed_solomon_enc_bb_impl::gf_poly_eval(unsigned char *p, int len, 
unsigned char x)
+    {
+      unsigned char y = p[0];
+      int i;
+
+      for (i = 1; i < len; i++) {
+        y = gf_mul_table[y][x] ^ p[i];
+      }
+      return y;
+    }
+
+    void
+    catv_reed_solomon_enc_bb_impl::reed_solomon_enc(const unsigned char 
*message, unsigned char *output)
+    {
+      // Generator polynomial from p.7 of ANSI/SCTE 07 2013
+      unsigned char g[] = {1, gf_exp[52], gf_exp[116], gf_exp[119], 
gf_exp[61], gf_exp[15]};
+      int i, j;
+
+      memcpy(output, message, 122);
+      memset(output + 122, 0, 6);
+
+      for (i = 0; i < 122; i++) {
+        for (j = 1; j < 6; j++) {
+          output[i + j] ^= gf_mul_table[output[i]][g[j]];
+        }
+        output[i] = message[i];
+      }
+
+      output[127] = gf_poly_eval(output, 128, gf_exp[6]);
+    }
+
+    void
+    catv_reed_solomon_enc_bb_impl::forecast (int noutput_items, gr_vector_int 
&ninput_items_required)
+    {
+      ninput_items_required[0] = (noutput_items / 128) * 122;
+    }
+
+    int
+    catv_reed_solomon_enc_bb_impl::general_work (int noutput_items,
+                       gr_vector_int &ninput_items,
+                       gr_vector_const_void_star &input_items,
+                       gr_vector_void_star &output_items)
+    {
+      const unsigned char *in = (const unsigned char *) input_items[0];
+      unsigned char *out = (unsigned char *) output_items[0];
+      int j = 0;
+
+      for (int i = 0; i < noutput_items; i += 128) {
+        reed_solomon_enc(in + j, out + i);
+        j += 122;
+      }
+
+      // Tell runtime system how many input items we consumed on
+      // each input stream.
+      consume_each (j);
+
+      // Tell runtime system how many output items we produced.
+      return noutput_items;
+    }
+
+  } /* namespace dtv */
+} /* namespace gr */
+
diff --git a/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.h 
b/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.h
new file mode 100644
index 0000000..84e4cb5
--- /dev/null
+++ b/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.h
@@ -0,0 +1,56 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_IMPL_H
+#define INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_IMPL_H
+
+#include <gnuradio/dtv/catv_reed_solomon_enc_bb.h>
+
+namespace gr {
+  namespace dtv {
+
+    class catv_reed_solomon_enc_bb_impl : public catv_reed_solomon_enc_bb
+    {
+     private:
+      unsigned char gf_mul_table[128][128];
+      unsigned char gf_exp[256];
+      unsigned char gf_log[128];
+
+      void init_rs();
+      unsigned char gf_poly_eval(unsigned char *p, int len, unsigned char x);
+      void reed_solomon_enc(const unsigned char *message, unsigned char 
*output);
+
+     public:
+      catv_reed_solomon_enc_bb_impl();
+      ~catv_reed_solomon_enc_bb_impl();
+
+      void forecast (int noutput_items, gr_vector_int &ninput_items_required);
+
+      int general_work(int noutput_items,
+                       gr_vector_int &ninput_items,
+                       gr_vector_const_void_star &input_items,
+                       gr_vector_void_star &output_items);
+    };
+
+  } // namespace dtv
+} // namespace gr
+
+#endif /* INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_IMPL_H */
+
diff --git a/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.cc 
b/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.cc
new file mode 100644
index 0000000..4082e82
--- /dev/null
+++ b/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.cc
@@ -0,0 +1,131 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gnuradio/io_signature.h>
+#include "catv_transport_framing_enc_bb_impl.h"
+
+namespace gr {
+  namespace dtv {
+
+    catv_transport_framing_enc_bb::sptr
+    catv_transport_framing_enc_bb::make()
+    {
+      return gnuradio::get_initial_sptr
+        (new catv_transport_framing_enc_bb_impl());
+    }
+
+    /*
+     * The private constructor
+     */
+    catv_transport_framing_enc_bb_impl::catv_transport_framing_enc_bb_impl()
+      : gr::sync_block("catv_transport_framing_enc_bb",
+              gr::io_signature::make(1, 1, sizeof(unsigned char)),
+              gr::io_signature::make(1, 1, sizeof(unsigned char)))
+    {
+      set_output_multiple(188);
+    }
+
+    /*
+     * Our virtual destructor.
+     */
+    catv_transport_framing_enc_bb_impl::~catv_transport_framing_enc_bb_impl()
+    {
+    }
+
+    unsigned char catv_transport_framing_enc_bb_impl::compute_sum(const 
unsigned char *bytes)
+    {
+      unsigned char i, bit, out, out1, out2, out3;
+
+      unsigned char tapsG = 0xB1; // 10110001
+      unsigned char tapsB = 0x45; //  1000101
+
+      unsigned char register1 = 0;
+      unsigned char register2 = 0;
+      unsigned char register3 = 0;
+
+      unsigned char result = 0x67;
+
+      unsigned char first7[] = {0, 0, 0, 0, 0, 0, 0, 0};
+
+      for (i = 0; i < 8; i++) {
+        bit = (bytes[0] >> (7-i)) & 1;
+        out = (register1 & 1) ^ bit;
+        if (i < 7) {
+          first7[i+1] = out;
+        }
+        register1 >>= 1;
+        if (out == 1) {
+          register1 ^= tapsG;
+        }
+      }
+
+      for (i = 1; i < 187; i++) {
+        register1 = crctable[((register1) ^ BitReverseTable[bytes[i]]) & 0xff];
+      }
+
+      for (i = 0; i < 8; i++) {
+        out1 = register1 & 1;
+        register1 >>= 1;
+        if (out1 == 1) {
+          register1 ^= tapsG;
+        }
+
+        out2 = (register2 & 1) ^ first7[i];
+        register2 >>= 1;
+        if (first7[i] == 1) {
+          register2 ^= tapsB;
+        }
+
+        out3 = (register3 & 1) ^ out1 ^ out2;
+        register3 >>= 1;
+        if ((out1 ^ out2) == 1) {
+          register3 ^= tapsG;
+        }
+
+        result ^= (out3 << (7-i));
+      }
+
+      return result;
+    }
+
+    int
+    catv_transport_framing_enc_bb_impl::work(int noutput_items,
+                          gr_vector_const_void_star &input_items,
+                          gr_vector_void_star &output_items)
+    {
+      const unsigned char *in = (const unsigned char *) input_items[0];
+      unsigned char *out = (unsigned char *) output_items[0];
+
+      for (int i = 0; i < noutput_items; i += 188) {
+        memcpy(out + i, in + i + 1, 187);
+        out[i + 187] = compute_sum(in + i + 1);
+      }
+
+      // Tell runtime system how many output items we produced.
+      return noutput_items;
+    }
+
+  } /* namespace dtv */
+} /* namespace gr */
+
diff --git a/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.h 
b/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.h
new file mode 100644
index 0000000..fe69bc0
--- /dev/null
+++ b/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.h
@@ -0,0 +1,84 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_IMPL_H
+#define INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_IMPL_H
+
+#include <gnuradio/dtv/catv_transport_framing_enc_bb.h>
+
+namespace gr {
+  namespace dtv {
+    static const unsigned char crctable[] = {
+        
0x00,0x1b,0x36,0x2d,0x6c,0x77,0x5a,0x41,0xd8,0xc3,0xee,0xf5,0xb4,0xaf,0x82,0x99,
+        
0xd3,0xc8,0xe5,0xfe,0xbf,0xa4,0x89,0x92,0x0b,0x10,0x3d,0x26,0x67,0x7c,0x51,0x4a,
+        
0xc5,0xde,0xf3,0xe8,0xa9,0xb2,0x9f,0x84,0x1d,0x06,0x2b,0x30,0x71,0x6a,0x47,0x5c,
+        
0x16,0x0d,0x20,0x3b,0x7a,0x61,0x4c,0x57,0xce,0xd5,0xf8,0xe3,0xa2,0xb9,0x94,0x8f,
+        
0xe9,0xf2,0xdf,0xc4,0x85,0x9e,0xb3,0xa8,0x31,0x2a,0x07,0x1c,0x5d,0x46,0x6b,0x70,
+        
0x3a,0x21,0x0c,0x17,0x56,0x4d,0x60,0x7b,0xe2,0xf9,0xd4,0xcf,0x8e,0x95,0xb8,0xa3,
+        
0x2c,0x37,0x1a,0x01,0x40,0x5b,0x76,0x6d,0xf4,0xef,0xc2,0xd9,0x98,0x83,0xae,0xb5,
+        
0xff,0xe4,0xc9,0xd2,0x93,0x88,0xa5,0xbe,0x27,0x3c,0x11,0x0a,0x4b,0x50,0x7d,0x66,
+        
0xb1,0xaa,0x87,0x9c,0xdd,0xc6,0xeb,0xf0,0x69,0x72,0x5f,0x44,0x05,0x1e,0x33,0x28,
+        
0x62,0x79,0x54,0x4f,0x0e,0x15,0x38,0x23,0xba,0xa1,0x8c,0x97,0xd6,0xcd,0xe0,0xfb,
+        
0x74,0x6f,0x42,0x59,0x18,0x03,0x2e,0x35,0xac,0xb7,0x9a,0x81,0xc0,0xdb,0xf6,0xed,
+        
0xa7,0xbc,0x91,0x8a,0xcb,0xd0,0xfd,0xe6,0x7f,0x64,0x49,0x52,0x13,0x08,0x25,0x3e,
+        
0x58,0x43,0x6e,0x75,0x34,0x2f,0x02,0x19,0x80,0x9b,0xb6,0xad,0xec,0xf7,0xda,0xc1,
+        
0x8b,0x90,0xbd,0xa6,0xe7,0xfc,0xd1,0xca,0x53,0x48,0x65,0x7e,0x3f,0x24,0x09,0x12,
+        
0x9d,0x86,0xab,0xb0,0xf1,0xea,0xc7,0xdc,0x45,0x5e,0x73,0x68,0x29,0x32,0x1f,0x04,
+        
0x4e,0x55,0x78,0x63,0x22,0x39,0x14,0x0f,0x96,0x8d,0xa0,0xbb,0xfa,0xe1,0xcc,0xd7
+    };
+
+    static const unsigned char BitReverseTable[] = {
+        
0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0,
+        
0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8,
+        
0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4,
+        
0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC,
+        
0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2,
+        
0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA,
+        
0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6,
+        
0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE,
+        
0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1,
+        
0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9,
+        
0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5,
+        
0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD,
+        
0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3,
+        
0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB,
+        
0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7,
+        
0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF
+    };
+
+    class catv_transport_framing_enc_bb_impl : public 
catv_transport_framing_enc_bb
+    {
+     private:
+      unsigned char compute_sum(const unsigned char *bytes);
+
+     public:
+      catv_transport_framing_enc_bb_impl();
+      ~catv_transport_framing_enc_bb_impl();
+
+      int work(int noutput_items,
+               gr_vector_const_void_star &input_items,
+               gr_vector_void_star &output_items);
+    };
+
+  } // namespace dtv
+} // namespace gr
+
+#endif /* INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_IMPL_H */
+
diff --git a/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc 
b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc
new file mode 100644
index 0000000..8fdb872
--- /dev/null
+++ b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc
@@ -0,0 +1,193 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gnuradio/io_signature.h>
+#include "catv_trellis_enc_bb_impl.h"
+
+namespace gr {
+  namespace dtv {
+
+    catv_trellis_enc_bb::sptr
+    catv_trellis_enc_bb::make()
+    {
+      return gnuradio::get_initial_sptr
+        (new catv_trellis_enc_bb_impl());
+    }
+
+    /*
+     * The private constructor
+     */
+    catv_trellis_enc_bb_impl::catv_trellis_enc_bb_impl()
+      : gr::block("catv_trellis_enc_bb",
+              gr::io_signature::make(1, 1, sizeof(unsigned char)),
+              gr::io_signature::make(1, 1, sizeof(unsigned char)))
+    {
+      set_output_multiple(5);
+
+      init_trellis();
+
+      Xq = 0;
+      Yq = 0;
+      XYp = 0;
+    }
+
+    /*
+     * Our virtual destructor.
+     */
+    catv_trellis_enc_bb_impl::~catv_trellis_enc_bb_impl()
+    {
+    }
+
+    void
+    catv_trellis_enc_bb_impl::forecast (int noutput_items, gr_vector_int 
&ninput_items_required)
+    {
+      ninput_items_required[0] = noutput_items / 5 * 4;
+    }
+
+    void
+    catv_trellis_enc_bb_impl::diff_precoder(unsigned char W, unsigned char Z, 
unsigned char *Xp, unsigned char *Yp)
+    {
+      unsigned char common, newX, newY;
+
+      common = (Z & (*Xp ^ *Yp));
+      newX = W ^ *Xp ^ common;
+      newY = Z ^ W ^ *Yp ^ common;
+
+      *Xp = newX;
+      *Yp = newY;
+    }
+
+    void
+    catv_trellis_enc_bb_impl::init_trellis()
+    {
+      unsigned char XYp, W, Z, X, Y, Xp, Yp, state, xy, Xq;
+      int i, n;
+
+      for (XYp = 0; XYp < 4; XYp++) {
+        for (W = 0; W < 16; W++) {
+          for (Z = 0; Z < 16; Z++) {
+            X = 0;
+            Y = 0;
+            Xp = (XYp & 0b10) >> 1;
+            Yp = (XYp & 0b01);
+            for (i = 0; i < 4; i++) {
+              diff_precoder((W >> i) & 1, (Z >> i) & 1, &Xp, &Yp);
+              X |= (Xp << i);
+              Y |= (Yp << i);
+            }
+            diff_precoder_table[XYp][W][Z][0] = (Xp << 1) + Yp;
+            diff_precoder_table[XYp][W][Z][1] = X;
+            diff_precoder_table[XYp][W][Z][2] = Y;
+          }
+        }
+      }
+
+      for (i = 0; i < 32; i++) {
+        G1table[i] = (i >> 4) ^ ((i & 0x04) >> 2) ^ (i & 1);
+        G2table[i] = (i >> 4) ^ ((i & 0x08) >> 3) ^ ((i & 0x04) >> 2) ^ ((i & 
0x02) >> 1) ^ (i & 1);
+      }
+
+      memset(trellis_table_x, 0, 16*16*6);
+      memset(trellis_table_y, 0, 16*16*6);
+      for (state = 0; state < 16; state++) {
+        for (xy = 0; xy < 16; xy++) {
+          i = 0;
+          Xq = state;
+          for (n = 0; n < 4; n++) {
+            Xq = (Xq << 1) + ((xy >> n) & 1);
+
+            if (n == 3) {
+              trellis_table_x[state][xy][i+1] |= G1table[Xq] << 3;
+              trellis_table_y[state][xy][i+1] |= G1table[Xq];
+              i += 1;
+            }
+            trellis_table_x[state][xy][i+1] |= G2table[Xq] << 3;
+            trellis_table_y[state][xy][i+1] |= G2table[Xq];
+            i += 1;
+
+            Xq &= 0x0F;
+          }
+
+          trellis_table_x[state][xy][0] = Xq;
+          trellis_table_y[state][xy][0] = Xq;
+        }
+      }
+    }
+
+    void
+    catv_trellis_enc_bb_impl::trellis_code(const unsigned char *rs, unsigned 
char *qs)
+    {
+      unsigned char X, Y;
+      int A, B, n;
+
+      A = (rs[1] << 7) | rs[0];
+      B = (rs[3] << 7) | rs[2];
+
+      memset(qs, 0, 5);
+
+      for (n = 0; n < 5; n++) {
+        qs[n] |= ((A >> (2*n)) & 3) << 4;
+        qs[n] |= ((B >> (2*n)) & 3) << 1;
+      }
+
+      X = diff_precoder_table[XYp][A >> 10][B >> 10][1];
+      Y = diff_precoder_table[XYp][A >> 10][B >> 10][2];
+      XYp = diff_precoder_table[XYp][A >> 10][B >> 10][0];
+
+      for (n = 0; n < 5; n++) {
+        qs[n] |= trellis_table_x[Xq][X][1+n];
+        qs[n] |= trellis_table_y[Yq][Y][1+n];
+      }
+      Xq = trellis_table_x[Xq][X][0];
+      Yq = trellis_table_y[Yq][Y][0];
+    }
+
+    int
+    catv_trellis_enc_bb_impl::general_work (int noutput_items,
+                       gr_vector_int &ninput_items,
+                       gr_vector_const_void_star &input_items,
+                       gr_vector_void_star &output_items)
+    {
+      const unsigned char *in = (const unsigned char *) input_items[0];
+      unsigned char *out = (unsigned char *) output_items[0];
+
+      int i = 0, j = 0;
+
+      while (i < noutput_items) {
+        trellis_code(in + j, out + i);
+        i += 5;
+        j += 4;
+      }
+
+      // Tell runtime system how many input items we consumed on
+      // each input stream.
+      consume_each (j);
+
+      // Tell runtime system how many output items we produced.
+      return noutput_items;
+    }
+
+  } /* namespace dtv */
+} /* namespace gr */
+
diff --git a/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h 
b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h
new file mode 100644
index 0000000..aa7874d
--- /dev/null
+++ b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h
@@ -0,0 +1,60 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2016 Free Software Foundation, Inc.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_CATV_TRELLIS_ENC_BB_IMPL_H
+#define INCLUDED_DTV_CATV_TRELLIS_ENC_BB_IMPL_H
+
+#include <gnuradio/dtv/catv_trellis_enc_bb.h>
+
+namespace gr {
+  namespace dtv {
+
+    class catv_trellis_enc_bb_impl : public catv_trellis_enc_bb
+    {
+     private:
+      unsigned char diff_precoder_table[4][16][16][3];
+      unsigned char G1table[32];
+      unsigned char G2table[32];
+      unsigned char trellis_table_x[16][16][6];
+      unsigned char trellis_table_y[16][16][6];
+      unsigned char Xq, Yq, XYp;
+
+      void diff_precoder(unsigned char W, unsigned char Z, unsigned char *Xp, 
unsigned char *Yp);
+      void init_trellis();
+      void trellis_code(const unsigned char *rs, unsigned char *qs);
+
+     public:
+      catv_trellis_enc_bb_impl();
+      ~catv_trellis_enc_bb_impl();
+
+      // Where all the action really happens
+      void forecast (int noutput_items, gr_vector_int &ninput_items_required);
+
+      int general_work(int noutput_items,
+                       gr_vector_int &ninput_items,
+                       gr_vector_const_void_star &input_items,
+                       gr_vector_void_star &output_items);
+    };
+
+  } // namespace dtv
+} // namespace gr
+
+#endif /* INCLUDED_DTV_CATV_TRELLIS_ENC_BB_IMPL_H */
+



reply via email to

[Prev in Thread] Current Thread [Next in Thread]