[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 */
+
- [Commit-gnuradio] [gnuradio] branch master updated (bdaafcc -> 161147d), git, 2016/01/27
- [Commit-gnuradio] [gnuradio] 04/05: uhd: added a --clock-source argument, defaulting to "internal", git, 2016/01/27
- [Commit-gnuradio] [gnuradio] 05/05: Merge remote-tracking branch 'drmpeg/catv-64qam-tx', git, 2016/01/27
- [Commit-gnuradio] [gnuradio] 03/05: Merge branch 'maint', git, 2016/01/27
- [Commit-gnuradio] [gnuradio] 02/05: gr-dtv: Add ITU-T J.83B 64QAM transmitter updated files., git, 2016/01/27
- [Commit-gnuradio] [gnuradio] 01/05: gr-dtv: Add ITU-T J.83B 64QAM transmitter.,
git <=