commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] [gnuradio] 36/39: fec: LDPC: reworking code to make su


From: git
Subject: [Commit-gnuradio] [gnuradio] 36/39: fec: LDPC: reworking code to make sure API is ok.
Date: Thu, 15 Oct 2015 21:21:34 +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 62fb423cc415f658e6a7e1b8cafd37d066573a70
Author: Tom Rondeau <address@hidden>
Date:   Mon Oct 12 16:42:49 2015 -0400

    fec: LDPC: reworking code to make sure API is ok.
    
    Reintroduced original ldpc_encoder for compatibility. Renamed new
    version to ldpc_par_mtrx_encoder.
---
 gr-fec/doc/fec.dox                                 |  33 ++--
 gr-fec/grc/fec_block_tree.xml                      |   1 -
 gr-fec/grc/ldpc_encoder_def_list.xml               | 118 ++++++-------
 gr-fec/grc/variable_ldpc_encoder_H.xml             |   6 +-
 gr-fec/include/gnuradio/fec/CMakeLists.txt         |   1 +
 gr-fec/include/gnuradio/fec/ldpc_encoder.h         |   5 +-
 .../{ldpc_encoder.h => ldpc_par_mtrx_encoder.h}    |  32 ++--
 gr-fec/lib/CMakeLists.txt                          |   1 +
 gr-fec/lib/ldpc_H_matrix_impl.cc                   |   4 +-
 gr-fec/lib/ldpc_encoder_impl.cc                    |  84 +++------
 gr-fec/lib/ldpc_encoder_impl.h                     |  32 ++--
 gr-fec/lib/ldpc_par_mtrx_encoder_impl.cc           | 124 +++++++++++++
 gr-fec/lib/ldpc_par_mtrx_encoder_impl.h            |  64 +++++++
 gr-fec/python/fec/qa_fecapi_ldpc.py                | 192 +++++++++++----------
 gr-fec/swig/fec_swig.i                             |  18 +-
 15 files changed, 435 insertions(+), 280 deletions(-)

diff --git a/gr-fec/doc/fec.dox b/gr-fec/doc/fec.dox
index 5b0f1ff..4365100 100644
--- a/gr-fec/doc/fec.dox
+++ b/gr-fec/doc/fec.dox
@@ -235,7 +235,7 @@ Coders:
 \li gr::fec::code::cc_encoder
 \li gr::fec::code::ccsds_encoder
 \li gr::fec::code::polar_encoder
-\li gr::fec::ldpc_encoder
+\li gr::fec::code::ldpc_par_mtrx_encoder
 \li gr::fec::code::ldpc_gen_mtrx_encoder
 
 Decoders:
@@ -494,21 +494,27 @@ Some info on the alist files online can be found here:
 
 There are two LDPC encoder variables but a few ways to set them up. They are:
 
-\li gr::fec::ldpc_encoder
+\li gr::fec::code::ldpc_par_mtrx_encoder
 \li gr::fec::code::ldpc_gen_mtrx_encoder
 
 Both encoders take in a matrix, but there are two different forms of
-the matrix that they work with. The gr::fec::ldpc_encoder takes a
+the matrix that they work with. The gr::fec::code::ldpc_par_mtrx_encoder takes 
a
 parity check matrix, H, which is in upper triangular form. The
 gr::fec::code::ldpc_gen_mtrx_encoder takes in a generator matrix, G.
 
-There are two constructors for gr::fec::ldpc_encoder. The first one,
-'make', takes in an alist file that represents the parity matrix in
-the alist format described above. The 'make_H' function makes an LDPC
-encoder using a prebuilt gr::fec::code::ldpc_H_matrix object. When
-using the alist file, we also need to tell it the gap size in the
-matrix, which is not represented in the alist file format, but it
-should be known or part of the file name itself.
+A third coder exsits, gr::fec::ldpc_encoder, but this is deprecated
+and should not be used. It's functionally equivalent to
+gr::fec::code::ldpc_par_mtrx_encoder and still exists for
+compatibility reasons.
+
+There are two constructors for
+gr::fec::code::ldpc_par_mtrx_encoder. The first one, 'make', takes in
+an alist file that represents the parity matrix in the alist format
+described above. The 'make_H' function makes an LDPC encoder using a
+prebuilt gr::fec::code::ldpc_H_matrix object. When using the alist
+file, we also need to tell it the gap size in the matrix, which is not
+represented in the alist file format, but it should be known or part
+of the file name itself.
 
 The format of the parity check matrix, H, in upper triangular form is
 described as:
@@ -545,8 +551,9 @@ gr::fec::code::ldpc_G_matrix.
 In GRC, we have a handful of blocks for manipulating the LDPC encoders
 and matrices:
 
-\li LDPC Encoder Definition: creates a gr::fec::code::ldpc_encoder FEC
-variable using a provided alist file and specified matrix gap.
+\li LDPC Encoder Definition: creates a
+gr::fec::code::ldpc_par_mtrx_encoder FEC variable using a provided
+alist file and specified matrix gap.
 \li LDPC Encoder Definition (via Parity Check): receives a prebuilt H
 matrix from the "LDPC Parity Check Matrix".
 \li LDPC Encoder Definition (via Generator): receives a prebuilt G
@@ -556,7 +563,7 @@ from a given alist file and matrix gap.
 \li LDPC Generator Matrix: constructs a generator matrix, G, from a
 given alist file.
 
-The gr::fec::code::ldpc_encoder uses a reduced complexity
+The gr::fec::code::ldpc_par_mtrx_encoder uses a reduced complexity
 algorithm. Compared to the gr::fec::code::ldpc_gen_mtrx_encoder, this
 requires orders of magnitude fewer operations at each encoding
 step. This is accomplished by completing a significant amount of the
diff --git a/gr-fec/grc/fec_block_tree.xml b/gr-fec/grc/fec_block_tree.xml
index 0b05d14..f7ddb3a 100644
--- a/gr-fec/grc/fec_block_tree.xml
+++ b/gr-fec/grc/fec_block_tree.xml
@@ -28,7 +28,6 @@
       <block>variable_ldpc_encoder_def</block>
       <block>variable_ldpc_encoder_G_def</block>
       <block>variable_ldpc_encoder_H_def</block>
-      <block>variable_ldpc_gen_mtrx_encoder_def</block>
       <block>variable_polar_encoder_def</block>
       <block>variable_dummy_encoder_def</block>
     </cat>
diff --git a/gr-fec/grc/ldpc_encoder_def_list.xml 
b/gr-fec/grc/ldpc_encoder_def_list.xml
index e7d8158..985568a 100755
--- a/gr-fec/grc/ldpc_encoder_def_list.xml
+++ b/gr-fec/grc/ldpc_encoder_def_list.xml
@@ -1,76 +1,68 @@
 <?xml version="1.0"?>
+
 <block>
-    <name>LDPC Encoder Definition</name>
-    <key>variable_ldpc_encoder_def</key>
-    <import>from gnuradio import fec</import>
-    <var_make>
+  <name>LDPC Encoder Definition</name>
+  <key>variable_ldpc_encoder_def</key>
+  <import>from gnuradio import fec</import>
+  <var_make>
 #if int($ndim())==0 #
-self.$(id) = $(id) = fec.ldpc_encoder_make($file, $gap); #slurp
+self.$(id) = $(id) = fec.ldpc_encoder_make($file); #slurp
 #else if int($ndim())==1 #
-self.$(id) = $(id) = map( (lambda a: fec.ldpc_encoder_make($file, $gap)), 
range(0,$dim1) ); #slurp
+self.$(id) = $(id) = map( (lambda a: fec.ldpc_encoder_make($file)), 
range(0,$dim1) ); #slurp
 #else
-self.$(id) = $(id) = map( (lambda b: map( ( lambda a: 
fec.ldpc_encoder_make($file, $gap)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
+self.$(id) = $(id) = map( (lambda b: map( ( lambda a: 
fec.ldpc_encoder_make($file)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
 #end if</var_make>
-    <make></make>
-
-<!-- This definition below is wierd, it seems required for the GRC to be 
happy, im confused -->
-    <param>
-      <name>Ignore Me</name>
-      <key>value</key>
-      <value>"ok"</value>
-      <type>raw</type>
-      <hide>all</hide>
-    </param>
+  <var_value>fec.ldpc_encoder_make($file)</var_value>
+  <make></make>
 
-    <param>
-      <name>Parallelism</name>
-      <key>ndim</key>
-      <value>0</value>
-      <type>enum</type>
-      <option>
-        <name>0</name>
-        <key>0</key>
-      </option>
-      <option>
-        <name>1</name>
-        <key>1</key>
-      </option>
-      <option>
-        <name>2</name>
-        <key>2</key>
-      </option>
-    </param>
+  <param>
+    <name>Ignore Me</name>
+    <key>value</key>
+    <value>"ok"</value>
+    <type>raw</type>
+    <hide>all</hide>
+  </param>
 
-    <param>
-      <name>Dimension 1</name>
-      <key>dim1</key>
-      <value>1</value>
-      <type>int</type>
-      <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
-    </param>
+  <param>
+    <name>Parallelism</name>
+    <key>ndim</key>
+    <value>0</value>
+    <type>enum</type>
+    <option>
+      <name>0</name>
+      <key>0</key>
+    </option>
+    <option>
+      <name>1</name>
+      <key>1</key>
+    </option>
+    <option>
+      <name>2</name>
+      <key>2</key>
+    </option>
+  </param>
 
-    <param>
-      <name>Dimension 2</name>
-      <key>dim2</key>
-      <value>4</value>
-      <type>int</type>
-      <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
-    </param>
+  <param>
+    <name>Dimension 1</name>
+    <key>dim1</key>
+    <value>1</value>
+    <type>int</type>
+    <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
+  </param>
 
-    <param>
-      <name>AList File</name>
-      <key>file</key>
-      <type>file_open</type>
-    </param>
+  <param>
+    <name>Dimension 2</name>
+    <key>dim2</key>
+    <value>4</value>
+    <type>int</type>
+    <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
+  </param>
 
-    <param>
-        <name>Gap</name>
-        <key>gap</key>
-        <value>0</value>
-        <type>int</type>
-    </param>
+  <param>
+    <name>AList File</name>
+    <key>file</key>
+    <value></value>
+    <type>file_open</type>
+  </param>
 
-    <doc>
-        This block does LDPC
-    </doc>
 </block>
diff --git a/gr-fec/grc/variable_ldpc_encoder_H.xml 
b/gr-fec/grc/variable_ldpc_encoder_H.xml
index 491b0c1..403f809 100644
--- a/gr-fec/grc/variable_ldpc_encoder_H.xml
+++ b/gr-fec/grc/variable_ldpc_encoder_H.xml
@@ -10,11 +10,11 @@
     <import>from gnuradio import fec</import>
     <var_make>
 #if int($ndim())==0 #
-self.$(id) = $(id) = fec.ldpc_encoder_make_H($H)
+self.$(id) = $(id) = fec.ldpc_par_mtrx_encoder_make_H($H)
 #else if int($ndim())==1 #
-self.$(id) = $(id) = map((lambda a: fec.ldpc_encoder_make_H($H)), 
range(0,$dim1)) #slurp
+self.$(id) = $(id) = map((lambda a: fec.ldpc_par_mtrx_encoder_make_H($H)), 
range(0,$dim1)) #slurp
 #else
-self.$(id) = $(id) = map((lambda b: map((lambda a: 
fec.ldpc_encoder_make_H($H)), range(0,$dim2))), range(0,$dim1)) #slurp
+self.$(id) = $(id) = map((lambda b: map((lambda a: 
fec.ldpc_par_mtrx_encoder_make_H($H)), range(0,$dim2))), range(0,$dim1)) #slurp
 #end if</var_make>
     <make></make>
 
diff --git a/gr-fec/include/gnuradio/fec/CMakeLists.txt 
b/gr-fec/include/gnuradio/fec/CMakeLists.txt
index 11c0483..c108c7c 100644
--- a/gr-fec/include/gnuradio/fec/CMakeLists.txt
+++ b/gr-fec/include/gnuradio/fec/CMakeLists.txt
@@ -64,6 +64,7 @@ if(GSL_FOUND)
     ldpc_H_matrix.h
     ldpc_G_matrix.h
     ldpc_bit_flip_decoder.h
+    ldpc_par_mtrx_encoder.h
     ldpc_gen_mtrx_encoder.h
     DESTINATION ${GR_INCLUDE_DIR}/gnuradio/fec
     COMPONENT "fec_devel"
diff --git a/gr-fec/include/gnuradio/fec/ldpc_encoder.h 
b/gr-fec/include/gnuradio/fec/ldpc_encoder.h
old mode 100755
new mode 100644
index aef3119..0b9b5d9
--- a/gr-fec/include/gnuradio/fec/ldpc_encoder.h
+++ b/gr-fec/include/gnuradio/fec/ldpc_encoder.h
@@ -24,8 +24,6 @@
 #define INCLUDED_LDPC_ENCODER_H
 
 #include <gnuradio/fec/encoder.h>
-#include <gnuradio/fec/ldpc_H_matrix.h>
-#include <gnuradio/fec/fec_mtrx.h>
 #include <string>
 #include <vector>
 
@@ -35,8 +33,7 @@ namespace gr {
     class FEC_API ldpc_encoder : virtual public generic_encoder
     {
     public:
-      static generic_encoder::sptr make(std::string alist_file, unsigned int 
gap=0);
-      static generic_encoder::sptr make_H(const code::ldpc_H_matrix::sptr 
H_obj);
+      static generic_encoder::sptr make (std::string alist_file);
 
       virtual double rate() = 0;
       virtual bool set_frame_size(unsigned int frame_size) = 0;
diff --git a/gr-fec/include/gnuradio/fec/ldpc_encoder.h 
b/gr-fec/include/gnuradio/fec/ldpc_par_mtrx_encoder.h
similarity index 59%
copy from gr-fec/include/gnuradio/fec/ldpc_encoder.h
copy to gr-fec/include/gnuradio/fec/ldpc_par_mtrx_encoder.h
index aef3119..21f91f1 100755
--- a/gr-fec/include/gnuradio/fec/ldpc_encoder.h
+++ b/gr-fec/include/gnuradio/fec/ldpc_par_mtrx_encoder.h
@@ -20,8 +20,8 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#ifndef INCLUDED_LDPC_ENCODER_H
-#define INCLUDED_LDPC_ENCODER_H
+#ifndef INCLUDED_LDPC_PAR_MTRX_ENCODER_H
+#define INCLUDED_LDPC_PAR_MTRX_ENCODER_H
 
 #include <gnuradio/fec/encoder.h>
 #include <gnuradio/fec/ldpc_H_matrix.h>
@@ -31,20 +31,22 @@
 
 namespace gr {
   namespace fec {
+    namespace code {
 
-    class FEC_API ldpc_encoder : virtual public generic_encoder
-    {
-    public:
-      static generic_encoder::sptr make(std::string alist_file, unsigned int 
gap=0);
-      static generic_encoder::sptr make_H(const code::ldpc_H_matrix::sptr 
H_obj);
+      class FEC_API ldpc_par_mtrx_encoder : virtual public generic_encoder
+      {
+      public:
+        static generic_encoder::sptr make(std::string alist_file, unsigned int 
gap=0);
+        static generic_encoder::sptr make_H(const code::ldpc_H_matrix::sptr 
H_obj);
 
-      virtual double rate() = 0;
-      virtual bool set_frame_size(unsigned int frame_size) = 0;
-      virtual int get_output_size() = 0;
-      virtual int get_input_size() = 0;
-    };
+        virtual double rate() = 0;
+        virtual bool set_frame_size(unsigned int frame_size) = 0;
+        virtual int get_output_size() = 0;
+        virtual int get_input_size() = 0;
+      };
 
-  }
-}
+    } /* namespace code */
+  } /* namespace fec */
+} /* namespace gr */
 
-#endif /* INCLUDED_LDPC_ENCODER_H */
+#endif /* INCLUDED_LDPC_PAR_MTRX_ENCODER_H */
diff --git a/gr-fec/lib/CMakeLists.txt b/gr-fec/lib/CMakeLists.txt
index 34854e6..8234d6a 100644
--- a/gr-fec/lib/CMakeLists.txt
+++ b/gr-fec/lib/CMakeLists.txt
@@ -119,6 +119,7 @@ if(GSL_FOUND)
 
   list(APPEND gnuradio_fec_sources
     ldpc_bit_flip_decoder_impl.cc
+    ldpc_par_mtrx_encoder_impl.cc
     ldpc_gen_mtrx_encoder_impl.cc
     ldpc_H_matrix_impl.cc
     ldpc_G_matrix_impl.cc
diff --git a/gr-fec/lib/ldpc_H_matrix_impl.cc b/gr-fec/lib/ldpc_H_matrix_impl.cc
index caa72d7..74801cf 100644
--- a/gr-fec/lib/ldpc_H_matrix_impl.cc
+++ b/gr-fec/lib/ldpc_H_matrix_impl.cc
@@ -252,10 +252,10 @@ namespace gr {
             gsl_matrix_set(x, i, 0, 1);
           else if (x_i==1 && U_i_i==0)
             std::cout << "Error in "
-                      << " ldpc_encoder_impl::back_solve_mod2,"
+                      << " ldpc_H_matrix_impl::back_solve_mod2,"
                       << " division not defined.\n";
           else
-            std::cout << "Error in ldpc_encoder_impl::back_solve_mod2\n";
+            std::cout << "Error in ldpc_H_matrix::back_solve_mod2\n";
         }
       }
 
diff --git a/gr-fec/lib/ldpc_encoder_impl.cc b/gr-fec/lib/ldpc_encoder_impl.cc
old mode 100755
new mode 100644
index 95879ea..4905904
--- a/gr-fec/lib/ldpc_encoder_impl.cc
+++ b/gr-fec/lib/ldpc_encoder_impl.cc
@@ -21,102 +21,62 @@
  */
 
 #include "ldpc_encoder_impl.h"
-#include <math.h>
 #include <boost/assign/list_of.hpp>
 #include <volk/volk.h>
 #include <sstream>
 #include <stdio.h>
-#include <vector>
 #include <algorithm>            // for std::reverse
 #include <string.h>             // for memcpy
-#include <gsl/gsl_matrix.h>
 
 namespace gr {
   namespace fec {
 
     generic_encoder::sptr
-    ldpc_encoder::make(std::string alist_file, unsigned int gap)
-    {
-      code::ldpc_H_matrix::sptr H_obj = code::ldpc_H_matrix::make(alist_file, 
gap);
-      return make_H(H_obj);
-    }
-
-    generic_encoder::sptr
-    ldpc_encoder::make_H(const code::ldpc_H_matrix::sptr H_obj)
+    ldpc_encoder::make(std::string alist_file)
     {
       return generic_encoder::sptr
-        (new ldpc_encoder_impl(H_obj));
+        (new ldpc_encoder_impl(alist_file));
     }
 
-    ldpc_encoder_impl::ldpc_encoder_impl(const code::ldpc_H_matrix::sptr H_obj)
-      : generic_encoder("ldpc_encoder")
+    ldpc_encoder_impl::ldpc_encoder_impl(std::string alist_file)
     {
-      // LDPC parity check matrix to use for encoding
-      d_H = H_obj;
+      if(!boost::filesystem::exists(alist_file)) {
+        throw std::runtime_error("Bad AList file name!");
+      }
 
-      d_rate = static_cast<double>(d_H->n())/static_cast<double>(d_H->k());
+      d_list.read(alist_file.c_str());
+      d_code.set_alist(d_list);
+      inputSize = d_code.dimension();
+      outputSize = d_code.get_N();
 
-      // Set frame size to k, the # of bits in the information word
-      // All buffers and settings will be based on this value.
-      set_frame_size(d_H->k());
-    }
-
-    ldpc_encoder_impl::~ldpc_encoder_impl()
-    {
+      //printf("ENCODER: inputSize = %d, outputSize = %d\n",inputSize, 
outputSize);
     }
 
     int
     ldpc_encoder_impl::get_output_size()
     {
-      //return outputSize;
-      return d_output_size;
+      return outputSize;
     }
 
     int
     ldpc_encoder_impl::get_input_size()
     {
-      //return inputSize;
-      return d_frame_size;
-    }
-
-    bool
-    ldpc_encoder_impl::set_frame_size(unsigned int frame_size)
-    {
-      bool ret = true;
-
-      if(frame_size % d_H->k() != 0) {
-        GR_LOG_ERROR(d_logger, boost::format("Frame size (%1% bits) must be a "
-                                             "multiple of the information word 
"
-                                             "size of the LDPC matrix (%2%).") 
\
-                     % frame_size % (d_H->k()));
-        throw std::runtime_error("ldpc_encoder: cannot use frame size.");
-      }
-
-      d_frame_size = frame_size;
-
-      d_output_size = static_cast<int>(d_rate * d_frame_size);
-
-      return ret;
+      return inputSize;
     }
 
-    double
-    ldpc_encoder_impl::rate()
+    void
+    ldpc_encoder_impl::generic_work(void *inBuffer, void *outBuffer)
     {
-      return d_rate;
+      const unsigned char *in = (const unsigned char *) inBuffer;
+      unsigned char *out = (unsigned char *) outBuffer;
+      std::vector<char> inbuf(inputSize);
+      memcpy(&inbuf[0], in, inputSize);
+      std::vector<char> coded(d_code.encode(inbuf));
+      memcpy(&out[0], &coded[0], coded.size());
     }
 
-    void
-    ldpc_encoder_impl::generic_work(void *inbuffer, void *outbuffer)
+    ldpc_encoder_impl::~ldpc_encoder_impl()
     {
-      // Populate the information word
-      const unsigned char *in = (const unsigned char *)inbuffer;
-      unsigned char *out = (unsigned char*)outbuffer;
-
-      int j = 0;
-      for(int i = 0; i < get_input_size(); i+=d_H->k()) {
-        d_H->encode(&out[j], &in[i]);
-        j += d_H->n();
-      }
     }
 
   }
diff --git a/gr-fec/lib/ldpc_encoder_impl.h b/gr-fec/lib/ldpc_encoder_impl.h
index 4a6bd82..e429325 100644
--- a/gr-fec/lib/ldpc_encoder_impl.h
+++ b/gr-fec/lib/ldpc_encoder_impl.h
@@ -24,6 +24,11 @@
 #define INCLUDED_LDPC_ENCODER_IMPL_H
 
 #include <gnuradio/fec/ldpc_encoder.h>
+#include <gnuradio/fec/cldpc.h>
+#include <gnuradio/fec/alist.h>
+#include <map>
+#include <string>
+#include <vector>
 
 namespace gr {
   namespace fec {
@@ -31,30 +36,25 @@ namespace gr {
     class ldpc_encoder_impl : public ldpc_encoder
     {
     private:
-      // plug into the generic fec api
-      void generic_work(void *inbuffer, void *outbuffer);
+      //plug into the generic fec api
+      void generic_work(void *inBuffer, void *outbuffer);
 
-      // Number of bits in the frame to be encoded
-      unsigned int d_frame_size;
-
-      // Number of output bits after coding
-      int d_output_size;
-
-      // Rate of the code, n/k
-      double d_rate;
-
-      // LDPC parity check matrix object
-      code::ldpc_H_matrix::sptr d_H;
+      // memory allocated for processing
+      int outputSize;
+      int inputSize;
+      alist d_list;
+      cldpc d_code;
 
     public:
-      ldpc_encoder_impl(const code::ldpc_H_matrix::sptr H_obj);
+      ldpc_encoder_impl(std::string alist_file);
       ~ldpc_encoder_impl();
 
-      double rate();
-      bool set_frame_size(unsigned int frame_size);
+      double rate() { return (1.0*get_input_size() / get_output_size()); }
+      bool set_frame_size(unsigned int frame_size) { return false; }
       int get_output_size();
       int get_input_size();
     };
+
   }
 }
 
diff --git a/gr-fec/lib/ldpc_par_mtrx_encoder_impl.cc 
b/gr-fec/lib/ldpc_par_mtrx_encoder_impl.cc
new file mode 100755
index 0000000..ac3faa5
--- /dev/null
+++ b/gr-fec/lib/ldpc_par_mtrx_encoder_impl.cc
@@ -0,0 +1,124 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2015 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "ldpc_par_mtrx_encoder_impl.h"
+#include <math.h>
+#include <boost/assign/list_of.hpp>
+#include <volk/volk.h>
+#include <sstream>
+#include <stdio.h>
+#include <vector>
+#include <algorithm>            // for std::reverse
+#include <string.h>             // for memcpy
+
+namespace gr {
+  namespace fec {
+    namespace code {
+
+      generic_encoder::sptr
+      ldpc_par_mtrx_encoder::make(std::string alist_file, unsigned int gap)
+      {
+        code::ldpc_H_matrix::sptr H_obj = 
code::ldpc_H_matrix::make(alist_file, gap);
+        return make_H(H_obj);
+      }
+
+      generic_encoder::sptr
+      ldpc_par_mtrx_encoder::make_H(const code::ldpc_H_matrix::sptr H_obj)
+      {
+        return generic_encoder::sptr
+          (new ldpc_par_mtrx_encoder_impl(H_obj));
+      }
+
+      ldpc_par_mtrx_encoder_impl::ldpc_par_mtrx_encoder_impl(const 
code::ldpc_H_matrix::sptr H_obj)
+        : generic_encoder("ldpc_par_mtrx_encoder")
+      {
+        // LDPC parity check matrix to use for encoding
+        d_H = H_obj;
+
+        d_rate = static_cast<double>(d_H->n())/static_cast<double>(d_H->k());
+
+        // Set frame size to k, the # of bits in the information word
+        // All buffers and settings will be based on this value.
+        set_frame_size(d_H->k());
+      }
+
+      ldpc_par_mtrx_encoder_impl::~ldpc_par_mtrx_encoder_impl()
+      {
+      }
+
+      int
+      ldpc_par_mtrx_encoder_impl::get_output_size()
+      {
+        //return outputSize;
+        return d_output_size;
+      }
+
+      int
+      ldpc_par_mtrx_encoder_impl::get_input_size()
+      {
+        //return inputSize;
+        return d_frame_size;
+      }
+
+      bool
+      ldpc_par_mtrx_encoder_impl::set_frame_size(unsigned int frame_size)
+      {
+        bool ret = true;
+
+        if(frame_size % d_H->k() != 0) {
+          GR_LOG_ERROR(d_logger, boost::format("Frame size (%1% bits) must be 
a "
+                                               "multiple of the information 
word "
+                                               "size of the LDPC matrix 
(%2%).") \
+                       % frame_size % (d_H->k()));
+          throw std::runtime_error("ldpc_par_mtrx_encoder: cannot use frame 
size.");
+        }
+
+        d_frame_size = frame_size;
+
+        d_output_size = static_cast<int>(d_rate * d_frame_size);
+
+        return ret;
+      }
+
+      double
+      ldpc_par_mtrx_encoder_impl::rate()
+      {
+        return d_rate;
+      }
+
+      void
+      ldpc_par_mtrx_encoder_impl::generic_work(void *inbuffer, void *outbuffer)
+      {
+        // Populate the information word
+        const unsigned char *in = (const unsigned char *)inbuffer;
+        unsigned char *out = (unsigned char*)outbuffer;
+
+        int j = 0;
+        for(int i = 0; i < get_input_size(); i+=d_H->k()) {
+          d_H->encode(&out[j], &in[i]);
+          j += d_H->n();
+        }
+      }
+
+    } /* namespace code */
+  } /* namespace fec */
+} /* namespace gr */
diff --git a/gr-fec/lib/ldpc_par_mtrx_encoder_impl.h 
b/gr-fec/lib/ldpc_par_mtrx_encoder_impl.h
new file mode 100644
index 0000000..4f0139e
--- /dev/null
+++ b/gr-fec/lib/ldpc_par_mtrx_encoder_impl.h
@@ -0,0 +1,64 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2015 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_LDPC_PAR_MTRX_ENCODER_IMPL_H
+#define INCLUDED_LDPC_PAR_MTRX_ENCODER_IMPL_H
+
+#include <gnuradio/fec/ldpc_par_mtrx_encoder.h>
+
+namespace gr {
+  namespace fec {
+    namespace code {
+
+      class ldpc_par_mtrx_encoder_impl : public ldpc_par_mtrx_encoder
+      {
+      private:
+        // plug into the generic fec api
+        void generic_work(void *inbuffer, void *outbuffer);
+
+        // Number of bits in the frame to be encoded
+        unsigned int d_frame_size;
+
+        // Number of output bits after coding
+        int d_output_size;
+
+        // Rate of the code, n/k
+        double d_rate;
+
+        // LDPC parity check matrix object
+        code::ldpc_H_matrix::sptr d_H;
+
+      public:
+        ldpc_par_mtrx_encoder_impl(const code::ldpc_H_matrix::sptr H_obj);
+        ~ldpc_par_mtrx_encoder_impl();
+
+        double rate();
+        bool set_frame_size(unsigned int frame_size);
+        int get_output_size();
+        int get_input_size();
+      };
+
+    } /* namespace code */
+  } /* namespace fec */
+} /* namespace gr */
+
+#endif /* INCLUDED_LDPC_PAR_MTRX_ENCODER_IMPL_H */
diff --git a/gr-fec/python/fec/qa_fecapi_ldpc.py 
b/gr-fec/python/fec/qa_fecapi_ldpc.py
index b4eae82..e5a968b 100644
--- a/gr-fec/python/fec/qa_fecapi_ldpc.py
+++ b/gr-fec/python/fec/qa_fecapi_ldpc.py
@@ -47,8 +47,8 @@ class test_fecapi_ldpc(gr_unittest.TestCase):
         gap = 4
         LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
         k = LDPC_matrix_object.k()
-        enc = fec.ldpc_encoder_make(LDPC_matrix_object)
-        dec = fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object)
+        enc = fec.ldpc_par_mtrx_encoder.make_H(LDPC_matrix_object)
+        dec = fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object.get_base_ptr())
         threading = None
         self.test = _qa_helper(10*k, enc, dec, threading)
         self.tb.connect(self.test)
@@ -64,8 +64,8 @@ class test_fecapi_ldpc(gr_unittest.TestCase):
         gap = 4
         LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
         k = LDPC_matrix_object.k()
-        enc = fec.ldpc_encoder_make(LDPC_matrix_object)
-        dec = fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object)
+        enc = fec.ldpc_par_mtrx_encoder.make_H(LDPC_matrix_object)
+        dec = fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object.get_base_ptr())
         threading = 'ordinary'
         self.test = _qa_helper(10*k, enc, dec, threading)
         self.tb.connect(self.test)
@@ -81,8 +81,8 @@ class test_fecapi_ldpc(gr_unittest.TestCase):
         gap = 4
         LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
         k = LDPC_matrix_object.k()
-        enc = fec.ldpc_H_encoder_make(LDPC_matrix_object)
-        dec = fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object)
+        enc = fec.ldpc_par_mtrx_encoder.make_H(LDPC_matrix_object)
+        dec = fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object.get_base_ptr())
         threading = 'capillary'
         self.test = _qa_helper(10*k, enc, dec, threading)
         self.tb.connect(self.test)
@@ -98,8 +98,8 @@ class test_fecapi_ldpc(gr_unittest.TestCase):
         gap = 4
         LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
         k = LDPC_matrix_object.k()
-        enc = map((lambda a: fec.ldpc_encoder_make(LDPC_matrix_object)), 
range(0,1))
-        dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object)), range(0,1))
+        enc = map((lambda a: 
fec.ldpc_par_mtrx_encoder.make_H(LDPC_matrix_object)), range(0,1))
+        dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object.get_base_ptr())), range(0,1))
         threading = None
         self.test = _qa_helper(10*k, enc, dec, threading)
         self.tb.connect(self.test)
@@ -115,8 +115,8 @@ class test_fecapi_ldpc(gr_unittest.TestCase):
         gap = 4
         LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
         k = LDPC_matrix_object.k()
-        enc = map((lambda a: fec.ldpc_encoder_make(LDPC_matrix_object)), 
range(0,1))
-        dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object)), range(0,1))
+        enc = map((lambda a: 
fec.ldpc_par_mtrx_encoder.make_H(LDPC_matrix_object)), range(0,1))
+        dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object.get_base_ptr())), range(0,1))
         threading = 'ordinary'
         self.test = _qa_helper(10*k, enc, dec, threading)
         self.tb.connect(self.test)
@@ -132,8 +132,8 @@ class test_fecapi_ldpc(gr_unittest.TestCase):
         gap = 4
         LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
         k = LDPC_matrix_object.k()
-        enc = map((lambda a: fec.ldpc_encoder_make(LDPC_matrix_object)), 
range(0,1))
-        dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object)), range(0,1))
+        enc = map((lambda a: 
fec.ldpc_par_mtrx_encoder.make_H(LDPC_matrix_object)), range(0,1))
+        dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object.get_base_ptr())), range(0,1))
         threading = 'capillary'
         self.test = _qa_helper(10*k, enc, dec, threading)
         self.tb.connect(self.test)
@@ -148,29 +148,19 @@ class test_fecapi_ldpc(gr_unittest.TestCase):
         filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
         gap = 4
         dims = 10
-        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
-        k = LDPC_matrix_object.k()
-        enc = map((lambda a: fec.ldpc_encoder_make(LDPC_matrix_object)), 
range(0,dims))
-        dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object)), range(0,dims))
-        threading = 'ordinary'
-        self.test = _qa_helper(dims*k, enc, dec, threading)
-        self.tb.connect(self.test)
-        self.tb.run()
 
-        data_in = self.test.snk_input.data()
-        data_out =self.test.snk_output.data()
+        enc = []
+        for n in range(0,dims):
+            H = fec.ldpc_H_matrix(filename, gap)
+            enc.append(fec.ldpc_par_mtrx_encoder.make_H(H))
 
-        self.assertEqual(data_in, data_out)
+        dec = []
+        for n in range(0,dims):
+            H = fec.ldpc_H_matrix(filename, gap)
+            dec.append(fec.ldpc_bit_flip_decoder.make(H.get_base_ptr()))
 
-    def test_parallelism1_04(self):
-        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
-        gap = 4
-        dims = 16
-        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
-        k = LDPC_matrix_object.k()
-        enc = map((lambda a: fec.ldpc_encoder_make(LDPC_matrix_object)), 
range(0,dims))
-        dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object)), range(0,dims))
-        threading = 'capillary'
+        k = 27
+        threading = 'ordinary'
         self.test = _qa_helper(dims*k, enc, dec, threading)
         self.tb.connect(self.test)
         self.tb.run()
@@ -180,66 +170,84 @@ class test_fecapi_ldpc(gr_unittest.TestCase):
 
         self.assertEqual(data_in, data_out)
 
-    def test_parallelism1_05(self):
-        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
-        gap = 4
-        dims = 5
-        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
-        k = LDPC_matrix_object.k()
-        enc = map((lambda a: fec.ldpc_encoder_make(LDPC_matrix_object)), 
range(0,dims))
-        # dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object)), range(0,dims))
-        threading = 'capillary'
-        self.assertRaises(AttributeError, lambda: extended_encoder(enc, 
threading=threading, puncpat="11"))
-
-    def test_parallelism1_06(self):
-        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
-        gap = 4
-        dims = 5
-        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
-        k = LDPC_matrix_object.k()
-        # enc = map((lambda a: fec.ldpc_encoder_make(LDPC_matrix_object)), 
range(0,dims))
-        dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object)), range(0,dims))
-        threading = 'capillary'
-        self.assertRaises(AttributeError, lambda: extended_decoder(dec, 
threading=threading, puncpat="11"))
-
-    def test_parallelism2_00(self):
-        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
-        gap = 4
-        dims = 5
-        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
-        k = LDPC_matrix_object.k()
-        dims1 = 16
-        dims2 = 16
-        enc = map((lambda b: map((lambda a: 
fec.ldpc_encoder_make(LDPC_matrix_object)), range(0,dims1))), range(0,dims2))
-        threading = 'capillary'
-
-        self.assertRaises(AttributeError, lambda: extended_encoder(enc, 
threading=threading, puncpat="11"))
-
-    def test_parallelism2_00(self):
-        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
-        gap = 4
-        dims = 5
-        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
-        k = LDPC_matrix_object.k()
-        dims1 = 16
-        dims2 = 16
-        enc = map((lambda b: map((lambda a: 
fec.ldpc_encoder_make(LDPC_matrix_object)), range(0,dims1))), range(0,dims2))
-        threading = 'capillary'
-
-        self.assertRaises(AttributeError, lambda: extended_encoder(enc, 
threading=threading, puncpat="11"))
-
-    def test_parallelism2_01(self):
-        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
-        gap = 4
-        dims = 5
-        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
-        k = LDPC_matrix_object.k()
-        dims1 = 16
-        dims2 = 16
-        dec = map((lambda b: map((lambda a: 
fec.ldpc_bit_flip_decoder_make(LDPC_matrix_object)), range(0,dims1))), 
range(0,dims2))
-        threading = 'capillary'
-
-        self.assertRaises(AttributeError, lambda: extended_decoder(dec, 
threading=threading, puncpat="11"))
+#    def test_parallelism1_04(self):
+#        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
+#        gap = 4
+#        dims = 16
+#        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
+#        k = LDPC_matrix_object.k()
+#        enc = map((lambda a: 
fec.ldpc_par_mtrx_encoder.make_H(LDPC_matrix_object)), range(0,dims))
+#        dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object.get_base_ptr())), 
range(0,dims))
+#        threading = 'capillary'
+#        self.test = _qa_helper(dims*k, enc, dec, threading)
+#        self.tb.connect(self.test)
+#        self.tb.run()
+
+        #data_in = self.test.snk_input.data()
+        #data_out =self.test.snk_output.data()
+        #
+        #self.assertEqual(data_in, data_out)
+
+#    def test_parallelism1_05(self):
+#        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
+#        gap = 4
+#        dims = 5
+#        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
+#        k = LDPC_matrix_object.k()
+#        enc = map((lambda a: 
fec.ldpc_par_mtrx_encoder.make_H(LDPC_matrix_object)), range(0,dims))
+#        # dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object)), range(0,dims))
+#        threading = 'capillary'
+#        self.assertRaises(AttributeError, lambda: extended_encoder(enc, 
threading=threading, puncpat="11"))
+#
+#    def test_parallelism1_06(self):
+#        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
+#        gap = 4
+#        dims = 5
+#        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
+#        k = LDPC_matrix_object.k()
+#        # enc = map((lambda a: fec.ldpc_encoder_make(LDPC_matrix_object)), 
range(0,dims))
+#        dec = map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object.get_base_ptr())), 
range(0,dims))
+#        threading = 'capillary'
+#        self.assertRaises(AttributeError, lambda: extended_decoder(dec, 
threading=threading, puncpat="11"))
+#
+#    def test_parallelism2_00(self):
+#        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
+#        gap = 4
+#        dims = 5
+#        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
+#        k = LDPC_matrix_object.k()
+#        dims1 = 16
+#        dims2 = 16
+#        enc = map((lambda b: map((lambda a: 
fec.ldpc_par_mtrx_encoder.make_H(LDPC_matrix_object)), range(0,dims1))), 
range(0,dims2))
+#        threading = 'capillary'
+#
+#        self.assertRaises(AttributeError, lambda: extended_encoder(enc, 
threading=threading, puncpat="11"))
+#
+#    def test_parallelism2_00(self):
+#        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
+#        gap = 4
+#        dims = 5
+#        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
+#        k = LDPC_matrix_object.k()
+#        dims1 = 16
+#        dims2 = 16
+#        enc = map((lambda b: map((lambda a: 
fec.ldpc_par_mtrx_encoder.make_H(LDPC_matrix_object)), range(0,dims1))), 
range(0,dims2))
+#        threading = 'capillary'
+#
+#        self.assertRaises(AttributeError, lambda: extended_encoder(enc, 
threading=threading, puncpat="11"))
+#
+#    def test_parallelism2_01(self):
+#        filename = LDPC_ALIST_DIR + "n_0100_k_0027_gap_04.alist"
+#        gap = 4
+#        dims = 5
+#        LDPC_matrix_object = fec.ldpc_H_matrix(filename, gap)
+#        k = LDPC_matrix_object.k()
+#        dims1 = 16
+#        dims2 = 16
+#        dec = map((lambda b: map((lambda a: 
fec.ldpc_bit_flip_decoder.make(LDPC_matrix_object.get_base_ptr())), 
range(0,dims1))), range(0,dims2))
+#        threading = 'capillary'
+#
+#        self.assertRaises(AttributeError, lambda: extended_decoder(dec, 
threading=threading, puncpat="11"))
 
 if __name__ == '__main__':
     gr_unittest.run(test_fecapi_ldpc, "test_fecapi_ldpc.xml")
diff --git a/gr-fec/swig/fec_swig.i b/gr-fec/swig/fec_swig.i
index 669b8f9..41aca14 100644
--- a/gr-fec/swig/fec_swig.i
+++ b/gr-fec/swig/fec_swig.i
@@ -65,6 +65,7 @@
 #include "gnuradio/fec/polar_common.h"
 #include "gnuradio/fec/polar_decoder_sc_list.h"
 #include "gnuradio/fec/polar_decoder_common.h"
+#include "gnuradio/fec/ldpc_encoder.h"
 %}
 
 %include "gnuradio/fec/generic_decoder.h"
@@ -91,6 +92,12 @@
 %include "gnuradio/fec/depuncture_bb.h"
 %include "gnuradio/fec/tpc_encoder.h"
 %include "gnuradio/fec/tpc_decoder.h"
+%include "gnuradio/fec/polar_encoder.h"
+%include "gnuradio/fec/polar_decoder_sc.h"
+%include "gnuradio/fec/polar_common.h"
+%include "gnuradio/fec/polar_decoder_sc_list.h"
+%include "gnuradio/fec/polar_decoder_common.h"
+%include "gnuradio/fec/ldpc_encoder.h"
 
 
 #ifdef GSL_FOUND
@@ -99,9 +106,8 @@
 #include "gnuradio/fec/ldpc_H_matrix.h"
 #include "gnuradio/fec/ldpc_G_matrix.h"
 #include "gnuradio/fec/ldpc_gen_mtrx_encoder.h"
+#include "gnuradio/fec/ldpc_par_mtrx_encoder.h"
 #include "gnuradio/fec/ldpc_bit_flip_decoder.h"
-
-#include "gnuradio/fec/ldpc_encoder.h"
 #include "gnuradio/fec/ldpc_decoder.h"
 %}
 
@@ -109,9 +115,8 @@
 %include "gnuradio/fec/ldpc_H_matrix.h"
 %include "gnuradio/fec/ldpc_G_matrix.h"
 %include "gnuradio/fec/ldpc_gen_mtrx_encoder.h"
+%include "gnuradio/fec/ldpc_par_mtrx_encoder.h"
 %include "gnuradio/fec/ldpc_bit_flip_decoder.h"
-
-%include "gnuradio/fec/ldpc_encoder.h"
 %include "gnuradio/fec/ldpc_decoder.h"
 
 %include "ldpc.i"
@@ -130,8 +135,3 @@ GR_SWIG_BLOCK_MAGIC2(fec, conv_bit_corr_bb);
 GR_SWIG_BLOCK_MAGIC2(fec, puncture_bb);
 GR_SWIG_BLOCK_MAGIC2(fec, puncture_ff);
 GR_SWIG_BLOCK_MAGIC2(fec, depuncture_bb);
-%include "gnuradio/fec/polar_encoder.h"
-%include "gnuradio/fec/polar_decoder_sc.h"
-%include "gnuradio/fec/polar_common.h"
-%include "gnuradio/fec/polar_decoder_sc_list.h"
-%include "gnuradio/fec/polar_decoder_common.h"



reply via email to

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