commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] [gnuradio] 01/07: gr-dtv: Reduce DVB-T transmitter CPU


From: git
Subject: [Commit-gnuradio] [gnuradio] 01/07: gr-dtv: Reduce DVB-T transmitter CPU usage.
Date: Wed, 31 Aug 2016 19:40:52 +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 fac58ba790528a692ce4df0c4f5b1e77f1992075
Author: Ron Economos <address@hidden>
Date:   Fri Aug 19 00:03:33 2016 -0700

    gr-dtv: Reduce DVB-T transmitter CPU usage.
---
 gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc | 162 +++++++++++++++++----
 gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h  |   5 +-
 gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc           |  35 +++--
 gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h            |   7 +-
 4 files changed, 163 insertions(+), 46 deletions(-)

diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc 
b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc
index 43146f0..bfd9bde 100644
--- a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc
@@ -34,36 +34,6 @@ namespace gr {
 
     const int dvbt_bit_inner_interleaver_impl::d_bsize = 
INTERLEAVER_BLOCK_SIZE;
 
-    int
-    dvbt_bit_inner_interleaver_impl::H(int e, int w)
-    {
-      int rez = 0;
-
-      switch (e) {
-        case 0:
-          rez = w;
-          break;
-        case 1:
-          rez = (w + 63) % d_bsize;
-          break;
-        case 2:
-          rez = (w + 105) % d_bsize;
-          break;
-        case 3:
-          rez = (w + 42) % d_bsize;
-          break;
-        case 4:
-          rez = (w + 21) % d_bsize;
-          break;
-        case 5:
-          rez = (w + 84) % d_bsize;
-          break;
-        default:
-          break;
-      }
-
-      return rez;
-    }
 
     dvbt_bit_inner_interleaver::sptr
     dvbt_bit_inner_interleaver::make(int nsize, \
@@ -175,7 +145,7 @@ namespace gr {
           int val = 0;
 
           for (int e = 0; e < d_v; e++) {
-            val = (val << 1) | d_b[e][H(e, w)];
+            val = (val << 1) | d_b[e][d_lookup_H[w][e]];
           }
 
           out[(bcount * d_bsize) + w] = val;
@@ -190,6 +160,136 @@ namespace gr {
       return noutput_items;
     }
 
+    const int 
dvbt_bit_inner_interleaver_impl::d_lookup_H[INTERLEAVER_BLOCK_SIZE][MAX_MODULATION_ORDER]
 =
+    {
+      {0, 63, 105, 42, 21, 84},
+      {1, 64, 106, 43, 22, 85},
+      {2, 65, 107, 44, 23, 86},
+      {3, 66, 108, 45, 24, 87},
+      {4, 67, 109, 46, 25, 88},
+      {5, 68, 110, 47, 26, 89},
+      {6, 69, 111, 48, 27, 90},
+      {7, 70, 112, 49, 28, 91},
+      {8, 71, 113, 50, 29, 92},
+      {9, 72, 114, 51, 30, 93},
+      {10, 73, 115, 52, 31, 94},
+      {11, 74, 116, 53, 32, 95},
+      {12, 75, 117, 54, 33, 96},
+      {13, 76, 118, 55, 34, 97},
+      {14, 77, 119, 56, 35, 98},
+      {15, 78, 120, 57, 36, 99},
+      {16, 79, 121, 58, 37, 100},
+      {17, 80, 122, 59, 38, 101},
+      {18, 81, 123, 60, 39, 102},
+      {19, 82, 124, 61, 40, 103},
+      {20, 83, 125, 62, 41, 104},
+      {21, 84, 0, 63, 42, 105},
+      {22, 85, 1, 64, 43, 106},
+      {23, 86, 2, 65, 44, 107},
+      {24, 87, 3, 66, 45, 108},
+      {25, 88, 4, 67, 46, 109},
+      {26, 89, 5, 68, 47, 110},
+      {27, 90, 6, 69, 48, 111},
+      {28, 91, 7, 70, 49, 112},
+      {29, 92, 8, 71, 50, 113},
+      {30, 93, 9, 72, 51, 114},
+      {31, 94, 10, 73, 52, 115},
+      {32, 95, 11, 74, 53, 116},
+      {33, 96, 12, 75, 54, 117},
+      {34, 97, 13, 76, 55, 118},
+      {35, 98, 14, 77, 56, 119},
+      {36, 99, 15, 78, 57, 120},
+      {37, 100, 16, 79, 58, 121},
+      {38, 101, 17, 80, 59, 122},
+      {39, 102, 18, 81, 60, 123},
+      {40, 103, 19, 82, 61, 124},
+      {41, 104, 20, 83, 62, 125},
+      {42, 105, 21, 84, 63, 0},
+      {43, 106, 22, 85, 64, 1},
+      {44, 107, 23, 86, 65, 2},
+      {45, 108, 24, 87, 66, 3},
+      {46, 109, 25, 88, 67, 4},
+      {47, 110, 26, 89, 68, 5},
+      {48, 111, 27, 90, 69, 6},
+      {49, 112, 28, 91, 70, 7},
+      {50, 113, 29, 92, 71, 8},
+      {51, 114, 30, 93, 72, 9},
+      {52, 115, 31, 94, 73, 10},
+      {53, 116, 32, 95, 74, 11},
+      {54, 117, 33, 96, 75, 12},
+      {55, 118, 34, 97, 76, 13},
+      {56, 119, 35, 98, 77, 14},
+      {57, 120, 36, 99, 78, 15},
+      {58, 121, 37, 100, 79, 16},
+      {59, 122, 38, 101, 80, 17},
+      {60, 123, 39, 102, 81, 18},
+      {61, 124, 40, 103, 82, 19},
+      {62, 125, 41, 104, 83, 20},
+      {63, 0, 42, 105, 84, 21},
+      {64, 1, 43, 106, 85, 22},
+      {65, 2, 44, 107, 86, 23},
+      {66, 3, 45, 108, 87, 24},
+      {67, 4, 46, 109, 88, 25},
+      {68, 5, 47, 110, 89, 26},
+      {69, 6, 48, 111, 90, 27},
+      {70, 7, 49, 112, 91, 28},
+      {71, 8, 50, 113, 92, 29},
+      {72, 9, 51, 114, 93, 30},
+      {73, 10, 52, 115, 94, 31},
+      {74, 11, 53, 116, 95, 32},
+      {75, 12, 54, 117, 96, 33},
+      {76, 13, 55, 118, 97, 34},
+      {77, 14, 56, 119, 98, 35},
+      {78, 15, 57, 120, 99, 36},
+      {79, 16, 58, 121, 100, 37},
+      {80, 17, 59, 122, 101, 38},
+      {81, 18, 60, 123, 102, 39},
+      {82, 19, 61, 124, 103, 40},
+      {83, 20, 62, 125, 104, 41},
+      {84, 21, 63, 0, 105, 42},
+      {85, 22, 64, 1, 106, 43},
+      {86, 23, 65, 2, 107, 44},
+      {87, 24, 66, 3, 108, 45},
+      {88, 25, 67, 4, 109, 46},
+      {89, 26, 68, 5, 110, 47},
+      {90, 27, 69, 6, 111, 48},
+      {91, 28, 70, 7, 112, 49},
+      {92, 29, 71, 8, 113, 50},
+      {93, 30, 72, 9, 114, 51},
+      {94, 31, 73, 10, 115, 52},
+      {95, 32, 74, 11, 116, 53},
+      {96, 33, 75, 12, 117, 54},
+      {97, 34, 76, 13, 118, 55},
+      {98, 35, 77, 14, 119, 56},
+      {99, 36, 78, 15, 120, 57},
+      {100, 37, 79, 16, 121, 58},
+      {101, 38, 80, 17, 122, 59},
+      {102, 39, 81, 18, 123, 60},
+      {103, 40, 82, 19, 124, 61},
+      {104, 41, 83, 20, 125, 62},
+      {105, 42, 84, 21, 0, 63},
+      {106, 43, 85, 22, 1, 64},
+      {107, 44, 86, 23, 2, 65},
+      {108, 45, 87, 24, 3, 66},
+      {109, 46, 88, 25, 4, 67},
+      {110, 47, 89, 26, 5, 68},
+      {111, 48, 90, 27, 6, 69},
+      {112, 49, 91, 28, 7, 70},
+      {113, 50, 92, 29, 8, 71},
+      {114, 51, 93, 30, 9, 72},
+      {115, 52, 94, 31, 10, 73},
+      {116, 53, 95, 32, 11, 74},
+      {117, 54, 96, 33, 12, 75},
+      {118, 55, 97, 34, 13, 76},
+      {119, 56, 98, 35, 14, 77},
+      {120, 57, 99, 36, 15, 78},
+      {121, 58, 100, 37, 16, 79},
+      {122, 59, 101, 38, 17, 80},
+      {123, 60, 102, 39, 18, 81},
+      {124, 61, 103, 40, 19, 82},
+      {125, 62, 104, 41, 20, 83}
+    };
+
   } /* namespace dtv */
 } /* namespace gr */
 
diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h 
b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h
index c5fcbe2..824fdb5 100644
--- a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h
+++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h
@@ -32,6 +32,8 @@ namespace gr {
      private:
       const dvbt_configure config;
 
+      static const int d_lookup_H[126][6];
+
       int d_nsize;
       dvbt_hierarchy_t d_hierarchy;
 
@@ -43,9 +45,6 @@ namespace gr {
       // Table to keep interleaved indices
       unsigned char * d_perm;
 
-      // Permutation function
-      int H(int e, int w);
-
      public:
       dvbt_bit_inner_interleaver_impl(int nsize, dvb_constellation_t 
constellation, dvbt_hierarchy_t hierarchy, dvbt_transmission_mode_t 
transmission);
       ~dvbt_bit_inner_interleaver_impl();
diff --git a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc 
b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc
index 54d25e4..9d0c93c 100644
--- a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc
+++ b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc
@@ -30,21 +30,16 @@
 namespace gr {
   namespace dtv {
 
-    void
+    inline void
     dvbt_inner_coder_impl::generate_codeword(unsigned char in, int &x, int &y)
     {
       //insert input bit
       d_reg |= ((in & 0x1) << 7);
 
-      d_reg  = d_reg >> 1;
+      d_reg = d_reg >> 1;
 
-      // TODO - do this with polynoms and bitcnt
-      //generate output G1=171(OCT)
-      x = ((d_reg >> 6) ^ (d_reg >> 5) ^ (d_reg >> 4) ^ \
-                        (d_reg >> 3) ^ d_reg) & 0x1;
-      //generate output G2=133(OCT)
-      y = ((d_reg >> 6) ^ (d_reg >> 4) ^ (d_reg >> 3) ^ \
-                        (d_reg >> 1) ^ d_reg) & 0x1;
+      x = d_lookup_171[d_reg];
+      y = d_lookup_133[d_reg];
     }
 
     //TODO - do this based on puncturing matrix
@@ -55,7 +50,7 @@ namespace gr {
      * 00000c0c1c2
      */
 
-    void
+    inline void
     dvbt_inner_coder_impl::generate_punctured_code(dvb_code_rate_t coderate, 
unsigned char * in, unsigned char * out)
     {
       int x, y;
@@ -251,6 +246,26 @@ namespace gr {
       return noutput_items;
     }
 
+    const int dvbt_inner_coder_impl::d_lookup_171[128] = 
+    {0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0,
+     1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1,
+     1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1,
+     0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0,
+     1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1,
+     0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0,
+     0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0,
+     1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1};
+
+    const int dvbt_inner_coder_impl::d_lookup_133[128] =
+    {0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1,
+     1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
+     0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1,
+     1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
+     1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
+     0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1,
+     1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
+     0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1};
+
   } /* namespace dtv */
 } /* namespace gr */
 
diff --git a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h 
b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h
index 7a46a22..56ce828 100644
--- a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h
+++ b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h
@@ -32,6 +32,9 @@ namespace gr {
      private:
       const dvbt_configure config;
 
+      static const int d_lookup_171[128];
+      static const int d_lookup_133[128];
+
       int d_ninput;
       int d_noutput;
 
@@ -57,8 +60,8 @@ namespace gr {
       // bit output buffer
       unsigned char * d_out_buff;
 
-      void generate_codeword(unsigned char in, int &x, int &y);
-      void generate_punctured_code(dvb_code_rate_t coderate, unsigned char * 
in, unsigned char * out);
+      inline void generate_codeword(unsigned char in, int &x, int &y);
+      inline void generate_punctured_code(dvb_code_rate_t coderate, unsigned 
char * in, unsigned char * out);
 
      public:
       dvbt_inner_coder_impl(int ninput, int noutput, dvb_constellation_t 
constellation, dvbt_hierarchy_t hierarchy, dvb_code_rate_t coderate);



reply via email to

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