commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] [gnuradio] 01/06: Add DVB-S2X VL-SNR code rates for AM


From: git
Subject: [Commit-gnuradio] [gnuradio] 01/06: Add DVB-S2X VL-SNR code rates for AMSAT.
Date: Mon, 20 Jun 2016 19:02:01 +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 991b3a641577cb022dae536bb55dfcf074a9fde8
Author: Ron Economos <address@hidden>
Date:   Thu Jun 16 20:00:04 2016 -0700

    Add DVB-S2X VL-SNR code rates for AMSAT.
---
 gr-dtv/grc/dtv_dvb_bbheader_bb.xml               | 109 ++++++++-
 gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml            | 109 ++++++++-
 gr-dtv/grc/dtv_dvb_bch_bb.xml                    | 109 ++++++++-
 gr-dtv/grc/dtv_dvb_ldpc_bb.xml                   | 109 ++++++++-
 gr-dtv/include/gnuradio/dtv/dvb_bbheader_bb.h    |   4 +-
 gr-dtv/include/gnuradio/dtv/dvb_bbscrambler_bb.h |   4 +-
 gr-dtv/include/gnuradio/dtv/dvb_bch_bb.h         |   4 +-
 gr-dtv/include/gnuradio/dtv/dvb_config.h         |  12 +-
 gr-dtv/include/gnuradio/dtv/dvb_ldpc_bb.h        |   6 +-
 gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc           | 181 ++++++++++----
 gr-dtv/lib/dvb/dvb_bbheader_bb_impl.h            |   7 +-
 gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.cc        |  38 ++-
 gr-dtv/lib/dvb/dvb_bch_bb_impl.cc                | 112 ++++++++-
 gr-dtv/lib/dvb/dvb_bch_bb_impl.h                 |   3 +-
 gr-dtv/lib/dvb/dvb_defines.h                     |   4 +-
 gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc               | 289 ++++++++++++++++++++++-
 gr-dtv/lib/dvb/dvb_ldpc_bb_impl.h                |  13 +-
 17 files changed, 999 insertions(+), 114 deletions(-)

diff --git a/gr-dtv/grc/dtv_dvb_bbheader_bb.xml 
b/gr-dtv/grc/dtv_dvb_bbheader_bb.xml
index 49b8595..5b0cbc2 100644
--- a/gr-dtv/grc/dtv_dvb_bbheader_bb.xml
+++ b/gr-dtv/grc/dtv_dvb_bbheader_bb.xml
@@ -8,18 +8,25 @@
   <name>BBheader</name>
   <key>dtv_dvb_bbheader_bb</key>
   <import>from gnuradio import dtv</import>
-  <make>dtv.dvb_bbheader_bb($standard.val, $framesize.val, #slurp
+  <make>dtv.dvb_bbheader_bb($standard.val, #slurp
 #if str($standard) == 'STANDARD_DVBT2'
-#if str($framesize) == 'FECFRAME_NORMAL'
+$framesize1.val, #slurp
+#else
+$framesize2.val, #slurp
+#end if
+#if str($standard) == 'STANDARD_DVBT2'
+#if str($framesize1) == 'FECFRAME_NORMAL'
 $rate1.val, #slurp
 #else
 $rate2.val, #slurp
 #end if
 #else
-#if str($framesize) == 'FECFRAME_NORMAL'
+#if str($framesize2) == 'FECFRAME_NORMAL'
 $rate3.val, #slurp
-#else
+#else if str($framesize2) == 'FECFRAME_MEDIUM'
 $rate4.val, #slurp
+#else
+$rate5.val, #slurp
 #end if
 #end if
 $rolloff.val, $mode.val, $inband.val, $fecblocks, $tsrate)</make>
@@ -44,13 +51,15 @@ $rolloff.val, $mode.val, $inband.val, $fecblocks, 
$tsrate)</make>
   </param>
   <param>
     <name>FECFRAME size</name>
-    <key>framesize</key>
+    <key>framesize1</key>
     <type>enum</type>
+    <hide>$standard.hide_dvbt2</hide>
     <option>
       <name>Normal</name>
       <key>FECFRAME_NORMAL</key>
       <opt>val:dtv.FECFRAME_NORMAL</opt>
       <opt>hide_normal:</opt>
+      <opt>hide_medium:all</opt>
       <opt>hide_short:all</opt>
     </option>
     <option>
@@ -58,6 +67,37 @@ $rolloff.val, $mode.val, $inband.val, $fecblocks, 
$tsrate)</make>
       <key>FECFRAME_SHORT</key>
       <opt>val:dtv.FECFRAME_SHORT</opt>
       <opt>hide_normal:all</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:</opt>
+    </option>
+  </param>
+  <param>
+    <name>FECFRAME size</name>
+    <key>framesize2</key>
+    <type>enum</type>
+    <hide>$standard.hide_dvbs2</hide>
+    <option>
+      <name>Normal</name>
+      <key>FECFRAME_NORMAL</key>
+      <opt>val:dtv.FECFRAME_NORMAL</opt>
+      <opt>hide_normal:</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:all</opt>
+    </option>
+    <option>
+      <name>Medium</name>
+      <key>FECFRAME_MEDIUM</key>
+      <opt>val:dtv.FECFRAME_MEDIUM</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:</opt>
+      <opt>hide_short:all</opt>
+    </option>
+    <option>
+      <name>Short</name>
+      <key>FECFRAME_SHORT</key>
+      <opt>val:dtv.FECFRAME_SHORT</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:all</opt>
       <opt>hide_short:</opt>
     </option>
   </param>
@@ -65,7 +105,7 @@ $rolloff.val, $mode.val, $inband.val, $fecblocks, 
$tsrate)</make>
     <name>Code rate</name>
     <key>rate1</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize.hide_normal 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_normal 
else 'all'</hide>
     <option>
       <name>1/2</name>
       <key>C1_2</key>
@@ -101,7 +141,7 @@ $rolloff.val, $mode.val, $inband.val, $fecblocks, 
$tsrate)</make>
     <name>Code rate</name>
     <key>rate2</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize.hide_short 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_short 
else 'all'</hide>
     <option>
       <name>1/3</name>
       <key>C1_3</key>
@@ -147,7 +187,12 @@ $rolloff.val, $mode.val, $inband.val, $fecblocks, 
$tsrate)</make>
     <name>Code rate</name>
     <key>rate3</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize.hide_normal 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal 
else 'all'</hide>
+    <option>
+      <name>2/9 VL-SNR</name>
+      <key>C2_9_VLSNR</key>
+      <opt>val:dtv.C2_9_VLSNR</opt>
+    </option>
     <option>
       <name>1/4</name>
       <key>C1_4</key>
@@ -323,7 +368,28 @@ $rolloff.val, $mode.val, $inband.val, $fecblocks, 
$tsrate)</make>
     <name>Code rate</name>
     <key>rate4</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize.hide_short 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_medium 
else 'all'</hide>
+    <option>
+      <name>1/5</name>
+      <key>C1_5_MEDIUM</key>
+      <opt>val:dtv.C1_5_MEDIUM</opt>
+    </option>
+    <option>
+      <name>11/45</name>
+      <key>C11_45_MEDIUM</key>
+      <opt>val:dtv.C11_45_MEDIUM</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3_MEDIUM</key>
+      <opt>val:dtv.C1_3_MEDIUM</opt>
+    </option>
+  </param>
+  <param>
+    <name>Code rate</name>
+    <key>rate5</key>
+    <type>enum</type>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_short 
else 'all'</hide>
     <option>
       <name>1/4</name>
       <key>C1_4</key>
@@ -409,6 +475,31 @@ $rolloff.val, $mode.val, $inband.val, $fecblocks, 
$tsrate)</make>
       <key>C32_45</key>
       <opt>val:dtv.C32_45</opt>
     </option>
+    <option>
+      <name>1/5 VL-SNR SF2</name>
+      <key>C1_5_VLSNR_SF2</key>
+      <opt>val:dtv.C1_5_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>11/45 VL-SNR SF2</name>
+      <key>C11_45_VLSNR_SF2</key>
+      <opt>val:dtv.C11_45_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>1/5 VL-SNR</name>
+      <key>C1_5_VLSNR</key>
+      <opt>val:dtv.C1_5_VLSNR</opt>
+    </option>
+    <option>
+      <name>4/15 VL-SNR</name>
+      <key>C4_15_VLSNR</key>
+      <opt>val:dtv.C4_15_VLSNR</opt>
+    </option>
+    <option>
+      <name>1/3 VL-SNR</name>
+      <key>C1_3_VLSNR</key>
+      <opt>val:dtv.C1_3_VLSNR</opt>
+    </option>
   </param>
   <param>
     <name>Rolloff factor</name>
diff --git a/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml 
b/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml
index f14d8dd..34f96d3 100644
--- a/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml
+++ b/gr-dtv/grc/dtv_dvb_bbscrambler_bb.xml
@@ -8,18 +8,25 @@
   <name>BBscrambler</name>
   <key>dtv_dvb_bbscrambler_bb</key>
   <import>from gnuradio import dtv</import>
-  <make>dtv.dvb_bbscrambler_bb($standard.val, $framesize.val, #slurp
+  <make>dtv.dvb_bbscrambler_bb($standard.val, #slurp
 #if str($standard) == 'STANDARD_DVBT2'
-#if str($framesize) == 'FECFRAME_NORMAL'
+$framesize1.val, #slurp
+#else
+$framesize2.val, #slurp
+#end if
+#if str($standard) == 'STANDARD_DVBT2'
+#if str($framesize1) == 'FECFRAME_NORMAL'
 $rate1.val, #slurp
 #else
 $rate2.val, #slurp
 #end if
 #else
-#if str($framesize) == 'FECFRAME_NORMAL'
+#if str($framesize2) == 'FECFRAME_NORMAL'
 $rate3.val, #slurp
-#else
+#else if str($framesize2) == 'FECFRAME_MEDIUM'
 $rate4.val, #slurp
+#else
+$rate5.val, #slurp
 #end if
 #end if
 )</make>
@@ -44,13 +51,15 @@ $rate4.val, #slurp
   </param>
   <param>
     <name>FECFRAME size</name>
-    <key>framesize</key>
+    <key>framesize1</key>
     <type>enum</type>
+    <hide>$standard.hide_dvbt2</hide>
     <option>
       <name>Normal</name>
       <key>FECFRAME_NORMAL</key>
       <opt>val:dtv.FECFRAME_NORMAL</opt>
       <opt>hide_normal:</opt>
+      <opt>hide_medium:all</opt>
       <opt>hide_short:all</opt>
     </option>
     <option>
@@ -58,6 +67,37 @@ $rate4.val, #slurp
       <key>FECFRAME_SHORT</key>
       <opt>val:dtv.FECFRAME_SHORT</opt>
       <opt>hide_normal:all</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:</opt>
+    </option>
+  </param>
+  <param>
+    <name>FECFRAME size</name>
+    <key>framesize2</key>
+    <type>enum</type>
+    <hide>$standard.hide_dvbs2</hide>
+    <option>
+      <name>Normal</name>
+      <key>FECFRAME_NORMAL</key>
+      <opt>val:dtv.FECFRAME_NORMAL</opt>
+      <opt>hide_normal:</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:all</opt>
+    </option>
+    <option>
+      <name>Medium</name>
+      <key>FECFRAME_MEDIUM</key>
+      <opt>val:dtv.FECFRAME_MEDIUM</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:</opt>
+      <opt>hide_short:all</opt>
+    </option>
+    <option>
+      <name>Short</name>
+      <key>FECFRAME_SHORT</key>
+      <opt>val:dtv.FECFRAME_SHORT</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:all</opt>
       <opt>hide_short:</opt>
     </option>
   </param>
@@ -65,7 +105,7 @@ $rate4.val, #slurp
     <name>Code rate</name>
     <key>rate1</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize.hide_normal 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_normal 
else 'all'</hide>
     <option>
       <name>1/2</name>
       <key>C1_2</key>
@@ -101,7 +141,7 @@ $rate4.val, #slurp
     <name>Code rate</name>
     <key>rate2</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize.hide_short 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_short 
else 'all'</hide>
     <option>
       <name>1/3</name>
       <key>C1_3</key>
@@ -147,7 +187,12 @@ $rate4.val, #slurp
     <name>Code rate</name>
     <key>rate3</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize.hide_normal 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal 
else 'all'</hide>
+    <option>
+      <name>2/9 VL-SNR</name>
+      <key>C2_9_VLSNR</key>
+      <opt>val:dtv.C2_9_VLSNR</opt>
+    </option>
     <option>
       <name>1/4</name>
       <key>C1_4</key>
@@ -323,7 +368,28 @@ $rate4.val, #slurp
     <name>Code rate</name>
     <key>rate4</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize.hide_short 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_medium 
else 'all'</hide>
+    <option>
+      <name>1/5</name>
+      <key>C1_5_MEDIUM</key>
+      <opt>val:dtv.C1_5_MEDIUM</opt>
+    </option>
+    <option>
+      <name>11/45</name>
+      <key>C11_45_MEDIUM</key>
+      <opt>val:dtv.C11_45_MEDIUM</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3_MEDIUM</key>
+      <opt>val:dtv.C1_3_MEDIUM</opt>
+    </option>
+  </param>
+  <param>
+    <name>Code rate</name>
+    <key>rate5</key>
+    <type>enum</type>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_short 
else 'all'</hide>
     <option>
       <name>1/4</name>
       <key>C1_4</key>
@@ -409,6 +475,31 @@ $rate4.val, #slurp
       <key>C32_45</key>
       <opt>val:dtv.C32_45</opt>
     </option>
+    <option>
+      <name>1/5 VL-SNR SF2</name>
+      <key>C1_5_VLSNR_SF2</key>
+      <opt>val:dtv.C1_5_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>11/45 VL-SNR SF2</name>
+      <key>C11_45_VLSNR_SF2</key>
+      <opt>val:dtv.C11_45_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>1/5 VL-SNR</name>
+      <key>C1_5_VLSNR</key>
+      <opt>val:dtv.C1_5_VLSNR</opt>
+    </option>
+    <option>
+      <name>4/15 VL-SNR</name>
+      <key>C4_15_VLSNR</key>
+      <opt>val:dtv.C4_15_VLSNR</opt>
+    </option>
+    <option>
+      <name>1/3 VL-SNR</name>
+      <key>C1_3_VLSNR</key>
+      <opt>val:dtv.C1_3_VLSNR</opt>
+    </option>
   </param>
   <sink>
     <name>in</name>
diff --git a/gr-dtv/grc/dtv_dvb_bch_bb.xml b/gr-dtv/grc/dtv_dvb_bch_bb.xml
index dd63b05..99fa6aa 100644
--- a/gr-dtv/grc/dtv_dvb_bch_bb.xml
+++ b/gr-dtv/grc/dtv_dvb_bch_bb.xml
@@ -8,18 +8,25 @@
   <name>BCH Encoder</name>
   <key>dtv_dvb_bch_bb</key>
   <import>from gnuradio import dtv</import>
-  <make>dtv.dvb_bch_bb($standard.val, $framesize.val, #slurp
+  <make>dtv.dvb_bch_bb($standard.val, #slurp
 #if str($standard) == 'STANDARD_DVBT2'
-#if str($framesize) == 'FECFRAME_NORMAL'
+$framesize1.val, #slurp
+#else
+$framesize2.val, #slurp
+#end if
+#if str($standard) == 'STANDARD_DVBT2'
+#if str($framesize1) == 'FECFRAME_NORMAL'
 $rate1.val, #slurp
 #else
 $rate2.val, #slurp
 #end if
 #else
-#if str($framesize) == 'FECFRAME_NORMAL'
+#if str($framesize2) == 'FECFRAME_NORMAL'
 $rate3.val, #slurp
-#else
+#else if str($framesize2) == 'FECFRAME_MEDIUM'
 $rate4.val, #slurp
+#else
+$rate5.val, #slurp
 #end if
 #end if
 )</make>
@@ -44,13 +51,15 @@ $rate4.val, #slurp
   </param>
   <param>
     <name>FECFRAME size</name>
-    <key>framesize</key>
+    <key>framesize1</key>
     <type>enum</type>
+    <hide>$standard.hide_dvbt2</hide>
     <option>
       <name>Normal</name>
       <key>FECFRAME_NORMAL</key>
       <opt>val:dtv.FECFRAME_NORMAL</opt>
       <opt>hide_normal:</opt>
+      <opt>hide_medium:all</opt>
       <opt>hide_short:all</opt>
     </option>
     <option>
@@ -58,6 +67,37 @@ $rate4.val, #slurp
       <key>FECFRAME_SHORT</key>
       <opt>val:dtv.FECFRAME_SHORT</opt>
       <opt>hide_normal:all</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:</opt>
+    </option>
+  </param>
+  <param>
+    <name>FECFRAME size</name>
+    <key>framesize2</key>
+    <type>enum</type>
+    <hide>$standard.hide_dvbs2</hide>
+    <option>
+      <name>Normal</name>
+      <key>FECFRAME_NORMAL</key>
+      <opt>val:dtv.FECFRAME_NORMAL</opt>
+      <opt>hide_normal:</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:all</opt>
+    </option>
+    <option>
+      <name>Medium</name>
+      <key>FECFRAME_MEDIUM</key>
+      <opt>val:dtv.FECFRAME_MEDIUM</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:</opt>
+      <opt>hide_short:all</opt>
+    </option>
+    <option>
+      <name>Short</name>
+      <key>FECFRAME_SHORT</key>
+      <opt>val:dtv.FECFRAME_SHORT</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:all</opt>
       <opt>hide_short:</opt>
     </option>
   </param>
@@ -65,7 +105,7 @@ $rate4.val, #slurp
     <name>Code rate</name>
     <key>rate1</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize.hide_normal 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_normal 
else 'all'</hide>
     <option>
       <name>1/2</name>
       <key>C1_2</key>
@@ -101,7 +141,7 @@ $rate4.val, #slurp
     <name>Code rate</name>
     <key>rate2</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize.hide_short 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_short 
else 'all'</hide>
     <option>
       <name>1/3</name>
       <key>C1_3</key>
@@ -147,7 +187,12 @@ $rate4.val, #slurp
     <name>Code rate</name>
     <key>rate3</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize.hide_normal 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal 
else 'all'</hide>
+    <option>
+      <name>2/9 VL-SNR</name>
+      <key>C2_9_VLSNR</key>
+      <opt>val:dtv.C2_9_VLSNR</opt>
+    </option>
     <option>
       <name>1/4</name>
       <key>C1_4</key>
@@ -323,7 +368,28 @@ $rate4.val, #slurp
     <name>Code rate</name>
     <key>rate4</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize.hide_short 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_medium 
else 'all'</hide>
+    <option>
+      <name>1/5</name>
+      <key>C1_5_MEDIUM</key>
+      <opt>val:dtv.C1_5_MEDIUM</opt>
+    </option>
+    <option>
+      <name>11/45</name>
+      <key>C11_45_MEDIUM</key>
+      <opt>val:dtv.C11_45_MEDIUM</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3_MEDIUM</key>
+      <opt>val:dtv.C1_3_MEDIUM</opt>
+    </option>
+  </param>
+  <param>
+    <name>Code rate</name>
+    <key>rate5</key>
+    <type>enum</type>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_short 
else 'all'</hide>
     <option>
       <name>1/4</name>
       <key>C1_4</key>
@@ -409,6 +475,31 @@ $rate4.val, #slurp
       <key>C32_45</key>
       <opt>val:dtv.C32_45</opt>
     </option>
+    <option>
+      <name>1/5 VL-SNR SF2</name>
+      <key>C1_5_VLSNR_SF2</key>
+      <opt>val:dtv.C1_5_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>11/45 VL-SNR SF2</name>
+      <key>C11_45_VLSNR_SF2</key>
+      <opt>val:dtv.C11_45_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>1/5 VL-SNR</name>
+      <key>C1_5_VLSNR</key>
+      <opt>val:dtv.C1_5_VLSNR</opt>
+    </option>
+    <option>
+      <name>4/15 VL-SNR</name>
+      <key>C4_15_VLSNR</key>
+      <opt>val:dtv.C4_15_VLSNR</opt>
+    </option>
+    <option>
+      <name>1/3 VL-SNR</name>
+      <key>C1_3_VLSNR</key>
+      <opt>val:dtv.C1_3_VLSNR</opt>
+    </option>
   </param>
   <sink>
     <name>in</name>
diff --git a/gr-dtv/grc/dtv_dvb_ldpc_bb.xml b/gr-dtv/grc/dtv_dvb_ldpc_bb.xml
index 45187d5..ec5de0c 100644
--- a/gr-dtv/grc/dtv_dvb_ldpc_bb.xml
+++ b/gr-dtv/grc/dtv_dvb_ldpc_bb.xml
@@ -8,18 +8,25 @@
   <name>LDPC Encoder</name>
   <key>dtv_dvb_ldpc_bb</key>
   <import>from gnuradio import dtv</import>
-  <make>dtv.dvb_ldpc_bb($standard.val, $framesize.val, #slurp
+  <make>dtv.dvb_ldpc_bb($standard.val, #slurp
 #if str($standard) == 'STANDARD_DVBT2'
-#if str($framesize) == 'FECFRAME_NORMAL'
+$framesize1.val, #slurp
+#else
+$framesize2.val, #slurp
+#end if
+#if str($standard) == 'STANDARD_DVBT2'
+#if str($framesize1) == 'FECFRAME_NORMAL'
 $rate1.val, #slurp
 #else
 $rate2.val, #slurp
 #end if
 #else
-#if str($framesize) == 'FECFRAME_NORMAL'
+#if str($framesize2) == 'FECFRAME_NORMAL'
 $rate3.val, #slurp
-#else
+#else if str($framesize2) == 'FECFRAME_MEDIUM'
 $rate4.val, #slurp
+#else
+$rate5.val, #slurp
 #end if
 #end if
 $constellation.val)</make>
@@ -44,13 +51,45 @@ $constellation.val)</make>
   </param>
   <param>
     <name>FECFRAME size</name>
-    <key>framesize</key>
+    <key>framesize1</key>
+    <type>enum</type>
+    <hide>$standard.hide_dvbt2</hide>
+    <option>
+      <name>Normal</name>
+      <key>FECFRAME_NORMAL</key>
+      <opt>val:dtv.FECFRAME_NORMAL</opt>
+      <opt>hide_normal:</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:all</opt>
+    </option>
+    <option>
+      <name>Short</name>
+      <key>FECFRAME_SHORT</key>
+      <opt>val:dtv.FECFRAME_SHORT</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:</opt>
+    </option>
+  </param>
+  <param>
+    <name>FECFRAME size</name>
+    <key>framesize2</key>
     <type>enum</type>
+    <hide>$standard.hide_dvbs2</hide>
     <option>
       <name>Normal</name>
       <key>FECFRAME_NORMAL</key>
       <opt>val:dtv.FECFRAME_NORMAL</opt>
       <opt>hide_normal:</opt>
+      <opt>hide_medium:all</opt>
+      <opt>hide_short:all</opt>
+    </option>
+    <option>
+      <name>Medium</name>
+      <key>FECFRAME_MEDIUM</key>
+      <opt>val:dtv.FECFRAME_MEDIUM</opt>
+      <opt>hide_normal:all</opt>
+      <opt>hide_medium:</opt>
       <opt>hide_short:all</opt>
     </option>
     <option>
@@ -58,6 +97,7 @@ $constellation.val)</make>
       <key>FECFRAME_SHORT</key>
       <opt>val:dtv.FECFRAME_SHORT</opt>
       <opt>hide_normal:all</opt>
+      <opt>hide_medium:all</opt>
       <opt>hide_short:</opt>
     </option>
   </param>
@@ -65,7 +105,7 @@ $constellation.val)</make>
     <name>Code rate</name>
     <key>rate1</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize.hide_normal 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_normal 
else 'all'</hide>
     <option>
       <name>1/2</name>
       <key>C1_2</key>
@@ -101,7 +141,7 @@ $constellation.val)</make>
     <name>Code rate</name>
     <key>rate2</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize.hide_short 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBT2' then $framesize1.hide_short 
else 'all'</hide>
     <option>
       <name>1/3</name>
       <key>C1_3</key>
@@ -147,7 +187,12 @@ $constellation.val)</make>
     <name>Code rate</name>
     <key>rate3</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize.hide_normal 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_normal 
else 'all'</hide>
+    <option>
+      <name>2/9 VL-SNR</name>
+      <key>C2_9_VLSNR</key>
+      <opt>val:dtv.C2_9_VLSNR</opt>
+    </option>
     <option>
       <name>1/4</name>
       <key>C1_4</key>
@@ -323,7 +368,28 @@ $constellation.val)</make>
     <name>Code rate</name>
     <key>rate4</key>
     <type>enum</type>
-    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize.hide_short 
else 'all'</hide>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_medium 
else 'all'</hide>
+    <option>
+      <name>1/5</name>
+      <key>C1_5_MEDIUM</key>
+      <opt>val:dtv.C1_5_MEDIUM</opt>
+    </option>
+    <option>
+      <name>11/45</name>
+      <key>C11_45_MEDIUM</key>
+      <opt>val:dtv.C11_45_MEDIUM</opt>
+    </option>
+    <option>
+      <name>1/3</name>
+      <key>C1_3_MEDIUM</key>
+      <opt>val:dtv.C1_3_MEDIUM</opt>
+    </option>
+  </param>
+  <param>
+    <name>Code rate</name>
+    <key>rate5</key>
+    <type>enum</type>
+    <hide>#if str($standard) == 'STANDARD_DVBS2' then $framesize2.hide_short 
else 'all'</hide>
     <option>
       <name>1/4</name>
       <key>C1_4</key>
@@ -409,6 +475,31 @@ $constellation.val)</make>
       <key>C32_45</key>
       <opt>val:dtv.C32_45</opt>
     </option>
+    <option>
+      <name>1/5 VL-SNR SF2</name>
+      <key>C1_5_VLSNR_SF2</key>
+      <opt>val:dtv.C1_5_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>11/45 VL-SNR SF2</name>
+      <key>C11_45_VLSNR_SF2</key>
+      <opt>val:dtv.C11_45_VLSNR_SF2</opt>
+    </option>
+    <option>
+      <name>1/5 VL-SNR</name>
+      <key>C1_5_VLSNR</key>
+      <opt>val:dtv.C1_5_VLSNR</opt>
+    </option>
+    <option>
+      <name>4/15 VL-SNR</name>
+      <key>C4_15_VLSNR</key>
+      <opt>val:dtv.C4_15_VLSNR</opt>
+    </option>
+    <option>
+      <name>1/3 VL-SNR</name>
+      <key>C1_3_VLSNR</key>
+      <opt>val:dtv.C1_3_VLSNR</opt>
+    </option>
   </param>
   <param>
     <name>Constellation</name>
diff --git a/gr-dtv/include/gnuradio/dtv/dvb_bbheader_bb.h 
b/gr-dtv/include/gnuradio/dtv/dvb_bbheader_bb.h
index 48b6b4c..0fb6c94 100644
--- a/gr-dtv/include/gnuradio/dtv/dvb_bbheader_bb.h
+++ b/gr-dtv/include/gnuradio/dtv/dvb_bbheader_bb.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -49,7 +49,7 @@ namespace gr {
        * \brief Create a baseband header formatter.
        *
        * \param standard DVB standard (DVB-S2 or DVB-T2).
-       * \param framesize FEC frame size (normal or short).
+       * \param framesize FEC frame size (normal, medium or short).
        * \param rate FEC code rate.
        * \param rolloff DVB-S2 root-raised-cosine filter roll-off.
        * \param mode DVB-T2 input processing mode.
diff --git a/gr-dtv/include/gnuradio/dtv/dvb_bbscrambler_bb.h 
b/gr-dtv/include/gnuradio/dtv/dvb_bbscrambler_bb.h
index dc14f55..f8ee7bd 100644
--- a/gr-dtv/include/gnuradio/dtv/dvb_bbscrambler_bb.h
+++ b/gr-dtv/include/gnuradio/dtv/dvb_bbscrambler_bb.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -45,7 +45,7 @@ namespace gr {
        * \brief Create a baseband frame scrambler.
        *
        * \param standard DVB standard (DVB-S2 or DVB-T2).
-       * \param framesize FEC frame size (normal or short).
+       * \param framesize FEC frame size (normal, medium or short).
        * \param rate FEC code rate.
        */
       static sptr make(dvb_standard_t standard, dvb_framesize_t framesize, 
dvb_code_rate_t rate);
diff --git a/gr-dtv/include/gnuradio/dtv/dvb_bch_bb.h 
b/gr-dtv/include/gnuradio/dtv/dvb_bch_bb.h
index 31dff47..59dd162 100644
--- a/gr-dtv/include/gnuradio/dtv/dvb_bch_bb.h
+++ b/gr-dtv/include/gnuradio/dtv/dvb_bch_bb.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -46,7 +46,7 @@ namespace gr {
        * \brief Create a baseband frame BCH encoder.
        *
        * \param standard DVB standard (DVB-S2 or DVB-T2).
-       * \param framesize FEC frame size (normal or short).
+       * \param framesize FEC frame size (normal, medium or short).
        * \param rate FEC code rate.
        */
       static sptr make(dvb_standard_t standard, dvb_framesize_t framesize, 
dvb_code_rate_t rate);
diff --git a/gr-dtv/include/gnuradio/dtv/dvb_config.h 
b/gr-dtv/include/gnuradio/dtv/dvb_config.h
index 9405f96..ad26789 100644
--- a/gr-dtv/include/gnuradio/dtv/dvb_config.h
+++ b/gr-dtv/include/gnuradio/dtv/dvb_config.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -70,12 +70,22 @@ namespace gr {
       C7_15,
       C8_15,
       C32_45,
+      C2_9_VLSNR,
+      C1_5_MEDIUM,
+      C11_45_MEDIUM,
+      C1_3_MEDIUM,
+      C1_5_VLSNR_SF2,
+      C11_45_VLSNR_SF2,
+      C1_5_VLSNR,
+      C4_15_VLSNR,
+      C1_3_VLSNR,
       C_OTHER,
     };
 
     enum dvb_framesize_t {
       FECFRAME_SHORT = 0,
       FECFRAME_NORMAL,
+      FECFRAME_MEDIUM,
     };
 
     enum dvb_constellation_t {
diff --git a/gr-dtv/include/gnuradio/dtv/dvb_ldpc_bb.h 
b/gr-dtv/include/gnuradio/dtv/dvb_ldpc_bb.h
index 76923a8..2ed17f3 100644
--- a/gr-dtv/include/gnuradio/dtv/dvb_ldpc_bb.h
+++ b/gr-dtv/include/gnuradio/dtv/dvb_ldpc_bb.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -33,7 +33,7 @@ namespace gr {
      * \ingroup dtv
      *
      * Input: Variable length FEC baseband frames with appended BCH (BCHFEC).
-     * Output: Normal or short FEC baseband frames with appended LPDC 
(LDPCFEC).
+     * Output: Normal, medium or short FEC baseband frames with appended LPDC 
(LDPCFEC).
      */
     class DTV_API dvb_ldpc_bb : virtual public gr::block
     {
@@ -44,7 +44,7 @@ namespace gr {
        * \brief Create a baseband frame LDPC encoder.
        *
        * \param standard DVB standard (DVB-S2 or DVB-T2).
-       * \param framesize FEC frame size (normal or short).
+       * \param framesize FEC frame size (normal, medium or short).
        * \param rate FEC code rate.
        * \param constellation DVB-S2 constellation.
        */
diff --git a/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc 
b/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc
index 551191c..6961c22 100644
--- a/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc
+++ b/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -48,6 +48,8 @@ namespace gr {
       crc = 0x0;
       dvbs2x = FALSE;
       alternate = TRUE;
+      nibble = TRUE;
+      frame_size = framesize;
       BBHeader *f = &m_format[0].bb_header;
       if (framesize == FECFRAME_NORMAL) {
         switch (rate) {
@@ -84,6 +86,9 @@ namespace gr {
           case C9_10:
             kbch = 58192;
             break;
+          case C2_9_VLSNR:
+            kbch = 14208;
+            break;
           case C13_45:
             kbch = 18528;
             break;
@@ -158,7 +163,7 @@ namespace gr {
             break;
         }
       }
-      else {
+      else if (framesize == FECFRAME_SHORT) {
         switch (rate) {
           case C1_4:
             kbch = 3072;
@@ -211,6 +216,37 @@ namespace gr {
           case C32_45:
             kbch = 11352;
             break;
+          case C1_5_VLSNR_SF2:
+            kbch = 2512;
+            break;
+          case C11_45_VLSNR_SF2:
+            kbch = 3792;
+            break;
+          case C1_5_VLSNR:
+            kbch = 3072;
+            break;
+          case C4_15_VLSNR:
+            kbch = 4152;
+            break;
+          case C1_3_VLSNR:
+            kbch = 5232;
+            break;
+          default:
+            kbch = 0;
+            break;
+        }
+      }
+      else {
+        switch (rate) {
+          case C1_5_MEDIUM:
+            kbch = 5660;
+            break;
+          case C11_45_MEDIUM:
+            kbch = 7740;
+            break;
+          case C1_3_MEDIUM:
+            kbch = 10620;
+            break;
           default:
             kbch = 0;
             break;
@@ -253,7 +289,12 @@ namespace gr {
       fec_block = 0;
       ts_rate = tsrate;
       extra = (((kbch - 80) / 8) / 187) + 1;
-      set_output_multiple(kbch);
+      if (framesize != FECFRAME_MEDIUM) {
+        set_output_multiple(kbch);
+      }
+      else {
+        set_output_multiple(kbch * 2);
+      }
     }
 
     /*
@@ -267,7 +308,12 @@ namespace gr {
     dvb_bbheader_bb_impl::forecast (int noutput_items, gr_vector_int 
&ninput_items_required)
     {
       if (input_mode == INPUTMODE_NORMAL) {
-        ninput_items_required[0] = ((noutput_items - 80) / 8);
+        if (frame_size != FECFRAME_MEDIUM) {
+          ninput_items_required[0] = ((noutput_items - 80) / 8);
+        }
+        else {
+          ninput_items_required[0] = ((noutput_items - 160) / 8);
+        }
       }
       else {
         ninput_items_required[0] = ((noutput_items - 80) / 8) + extra;
@@ -329,7 +375,7 @@ namespace gr {
     }
 
     void
-    dvb_bbheader_bb_impl::add_bbheader(unsigned char *out, int count, int 
padding)
+    dvb_bbheader_bb_impl::add_bbheader(unsigned char *out, int count, int 
padding, bool nibble)
     {
       int temp, m_frame_offset_bits;
       unsigned char *m_frame = out;
@@ -389,6 +435,9 @@ namespace gr {
       else {
         temp = (188 - count) * 8;
       }
+      if (nibble == FALSE) {
+        temp += 4;
+      }
       for (int n = 15; n >= 0; n--) {
         m_frame[m_frame_offset_bits++] = temp & (1 << n) ? 1 : 0;
       }
@@ -441,65 +490,101 @@ namespace gr {
       unsigned char b;
 
       for (int i = 0; i < noutput_items; i += kbch) {
-        if (fec_block == 0 && inband_type_b == TRUE) {
-          padding = 104;
-        }
-        else {
-          padding = 0;
-        }
-        add_bbheader(&out[offset], count, padding);
-        offset = offset + 80;
+        if (frame_size != FECFRAME_MEDIUM) {
+          if (fec_block == 0 && inband_type_b == TRUE) {
+            padding = 104;
+          }
+          else {
+            padding = 0;
+          }
+          add_bbheader(&out[offset], count, padding, TRUE);
+          offset = offset + 80;
 
-        if (input_mode == INPUTMODE_HIEFF) {
-          for (int j = 0; j < (int)((kbch - 80 - padding) / 8); j++) {
-            if (count == 0) {
-              if (*in != 0x47) {
-                printf("Transport Stream sync error!\n");
+          if (input_mode == INPUTMODE_HIEFF) {
+            for (int j = 0; j < (int)((kbch - 80 - padding) / 8); j++) {
+              if (count == 0) {
+                if (*in != 0x47) {
+                  printf("Transport Stream sync error!\n");
+                }
+                j--;
+                in++;
               }
-              j--;
-              in++;
+              else {
+                b = *in++;
+                for (int n = 7; n >= 0; n--) {
+                  out[offset++] = b & (1 << n) ? 1 : 0;
+                }
+              }
+              count = (count + 1) % 188;
+              consumed++;
             }
-            else {
-              b = *in++;
+            if (fec_block == 0 && inband_type_b == TRUE) {
+              add_inband_type_b(&out[offset], ts_rate);
+              offset = offset + 104;
+            }
+          }
+          else {
+            for (int j = 0; j < (int)((kbch - 80 - padding) / 8); j++) {
+              if (count == 0) {
+                if (*in != 0x47) {
+                  printf("Transport Stream sync error!\n");
+                }
+                in++;
+                b = crc;
+                crc = 0;
+              }
+              else {
+                b = *in++;
+                crc = crc_tab[b ^ crc];
+              }
+              count = (count + 1) % 188;
+              consumed++;
               for (int n = 7; n >= 0; n--) {
                 out[offset++] = b & (1 << n) ? 1 : 0;
               }
             }
-            count = (count + 1) % 188;
-            consumed++;
+            if (fec_block == 0 && inband_type_b == TRUE) {
+              add_inband_type_b(&out[offset], ts_rate);
+              offset = offset + 104;
+            }
           }
-          if (fec_block == 0 && inband_type_b == TRUE) {
-            add_inband_type_b(&out[offset], ts_rate);
-            offset = offset + 104;
+          if (inband_type_b == TRUE) {
+            fec_block = (fec_block + 1) % fec_blocks;
           }
         }
         else {
-          for (int j = 0; j < (int)((kbch - 80 - padding) / 8); j++) {
-            if (count == 0) {
-              if (*in != 0x47) {
-                printf("Transport Stream sync error!\n");
+          padding = 0;
+          add_bbheader(&out[offset], count, padding, nibble);
+          offset = offset + 80;
+          for (int j = 0; j < (int)((kbch - 80) / 4); j++) {
+            if (nibble == TRUE) {
+              if (count == 0) {
+                if (*in != 0x47) {
+                  printf("Transport Stream sync error!\n");
+                }
+                in++;
+                b = crc;
+                crc = 0;
+              }
+              else {
+                b = *in++;
+                crc = crc_tab[b ^ crc];
               }
-              in++;
-              b = crc;
-              crc = 0;
+              bsave = b;
+              count = (count + 1) % 188;
+              consumed++;
+              for (int n = 7; n >= 4; n--) {
+                out[offset++] = b & (1 << n) ? 1 : 0;
+              }
+              nibble = FALSE;
             }
             else {
-              b = *in++;
-              crc = crc_tab[b ^ crc];
-            }
-            count = (count + 1) % 188;
-            consumed++;
-            for (int n = 7; n >= 0; n--) {
-              out[offset++] = b & (1 << n) ? 1 : 0;
+              for (int n = 3; n >= 0; n--) {
+                out[offset++] = bsave & (1 << n) ? 1 : 0;
+              }
+              nibble = TRUE;
             }
           }
-          if (fec_block == 0 && inband_type_b == TRUE) {
-            add_inband_type_b(&out[offset], ts_rate);
-            offset = offset + 104;
-          }
-        }
-        if (inband_type_b == TRUE) {
-          fec_block = (fec_block + 1) % fec_blocks;
         }
       }
 
diff --git a/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.h 
b/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.h
index 97e0751..76f3369 100644
--- a/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.h
+++ b/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -53,15 +53,18 @@ namespace gr {
       unsigned char crc;
       unsigned int input_mode;
       unsigned int extra;
+      unsigned int frame_size;
+      unsigned char bsave;
       int inband_type_b;
       int fec_blocks;
       int fec_block;
       int ts_rate;
       bool dvbs2x;
       bool alternate;
+      bool nibble;
       FrameFormat m_format[1];
       unsigned char crc_tab[256];
-      void add_bbheader(unsigned char *, int, int);
+      void add_bbheader(unsigned char *, int, int, bool);
       void build_crc8_table(void);
       int add_crc8_bits(unsigned char *, int);
       void add_inband_type_b(unsigned char *, int);
diff --git a/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.cc 
b/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.cc
index 46a8d78..ef1c184 100644
--- a/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.cc
+++ b/gr-dtv/lib/dvb/dvb_bbscrambler_bb_impl.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -78,6 +78,9 @@ namespace gr {
           case C9_10:
             kbch = 58192;
             break;
+          case C2_9_VLSNR:
+            kbch = 14208;
+            break;
           case C13_45:
             kbch = 18528;
             break;
@@ -152,7 +155,7 @@ namespace gr {
             break;
         }
       }
-      else {
+      else if (framesize == FECFRAME_SHORT) {
         switch (rate) {
           case C1_4:
             kbch = 3072;
@@ -205,6 +208,37 @@ namespace gr {
           case C32_45:
             kbch = 11352;
             break;
+          case C1_5_VLSNR_SF2:
+            kbch = 2512;
+            break;
+          case C11_45_VLSNR_SF2:
+            kbch = 3792;
+            break;
+          case C1_5_VLSNR:
+            kbch = 3072;
+            break;
+          case C4_15_VLSNR:
+            kbch = 4152;
+            break;
+          case C1_3_VLSNR:
+            kbch = 5232;
+            break;
+          default:
+            kbch = 0;
+            break;
+        }
+      }
+      else {
+        switch (rate) {
+          case C1_5_MEDIUM:
+            kbch = 5660;
+            break;
+          case C11_45_MEDIUM:
+            kbch = 7740;
+            break;
+          case C1_3_MEDIUM:
+            kbch = 10620;
+            break;
           default:
             kbch = 0;
             break;
diff --git a/gr-dtv/lib/dvb/dvb_bch_bb_impl.cc 
b/gr-dtv/lib/dvb/dvb_bch_bb_impl.cc
index f035750..b1ebb6d 100644
--- a/gr-dtv/lib/dvb/dvb_bch_bb_impl.cc
+++ b/gr-dtv/lib/dvb/dvb_bch_bb_impl.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -100,6 +100,11 @@ namespace gr {
             nbch = 58320;
             bch_code = BCH_CODE_N8;
             break;
+          case C2_9_VLSNR:
+            kbch = 14208;
+            nbch = 14400;
+            bch_code = BCH_CODE_N12;
+            break;
           case C13_45:
             kbch = 18528;
             nbch = 18720;
@@ -222,7 +227,7 @@ namespace gr {
             break;
         }
       }
-      else {
+      else if (framesize == FECFRAME_SHORT) {
         switch (rate) {
           case C1_4:
             kbch = 3072;
@@ -309,6 +314,55 @@ namespace gr {
             nbch = 11520;
             bch_code = BCH_CODE_S12;
             break;
+          case C1_5_VLSNR_SF2:
+            kbch = 2512;
+            nbch = 2680;
+            bch_code = BCH_CODE_S12;
+            break;
+          case C11_45_VLSNR_SF2:
+            kbch = 3792;
+            nbch = 3960;
+            bch_code = BCH_CODE_S12;
+            break;
+          case C1_5_VLSNR:
+            kbch = 3072;
+            nbch = 3240;
+            bch_code = BCH_CODE_S12;
+            break;
+          case C4_15_VLSNR:
+            kbch = 4152;
+            nbch = 4320;
+            bch_code = BCH_CODE_S12;
+            break;
+          case C1_3_VLSNR:
+            kbch = 5232;
+            nbch = 5400;
+            bch_code = BCH_CODE_S12;
+            break;
+          default:
+            kbch = 0;
+            nbch = 0;
+            bch_code = 0;
+            break;
+        }
+      }
+      else {
+        switch (rate) {
+          case C1_5_MEDIUM:
+            kbch = 5660;
+            nbch = 5840;
+            bch_code = BCH_CODE_M12;
+            break;
+          case C11_45_MEDIUM:
+            kbch = 7740;
+            nbch = 7920;
+            bch_code = BCH_CODE_M12;
+            break;
+          case C1_3_MEDIUM:
+            kbch = 10620;
+            nbch = 10800;
+            bch_code = BCH_CODE_M12;
+            break;
           default:
             kbch = 0;
             nbch = 0;
@@ -453,6 +507,20 @@ namespace gr {
       const int polyn11[]={1,0,1,1,0,1,0,0,0,1,0,1,1,1,0,0,1};
       const int polyn12[]={1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,0,1};
 
+      // Medium polynomials
+      const int polym01[]={1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,1};
+      const int polym02[]={1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,1};
+      const int polym03[]={1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1};
+      const int polym04[]={1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1};
+      const int polym05[]={1,1,1,0,1,0,1,1,0,0,1,0,1,0,0,1};
+      const int polym06[]={1,0,0,0,1,0,1,1,0,0,0,0,1,1,0,1};
+      const int polym07[]={1,0,1,0,1,1,0,1,0,0,0,1,1,0,1,1};
+      const int polym08[]={1,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1};
+      const int polym09[]={1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1};
+      const int polym10[]={1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,1};
+      const int polym11[]={1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,1};
+      const int polym12[]={1,0,1,0,1,0,0,0,1,0,1,1,0,1,1,1};
+
       // Short polynomials
       const int polys01[]={1,1,0,1,0,1,0,0,0,0,0,0,0,0,1};
       const int polys02[]={1,0,0,0,0,0,1,0,1,0,0,1,0,0,1};
@@ -499,6 +567,19 @@ namespace gr {
       len = poly_mult(polys11, 15, polyout[0], len, polyout[1]);
       len = poly_mult(polys12, 15, polyout[1], len, polyout[0]);
       poly_pack(polyout[0], m_poly_s_12, 168);
+
+      len = poly_mult(polym01, 16, polym02,    16,  polyout[0]);
+      len = poly_mult(polym03, 16, polyout[0], len, polyout[1]);
+      len = poly_mult(polym04, 16, polyout[1], len, polyout[0]);
+      len = poly_mult(polym05, 16, polyout[0], len, polyout[1]);
+      len = poly_mult(polym06, 16, polyout[1], len, polyout[0]);
+      len = poly_mult(polym07, 16, polyout[0], len, polyout[1]);
+      len = poly_mult(polym08, 16, polyout[1], len, polyout[0]);
+      len = poly_mult(polym09, 16, polyout[0], len, polyout[1]);
+      len = poly_mult(polym10, 16, polyout[1], len, polyout[0]);
+      len = poly_mult(polym11, 16, polyout[0], len, polyout[1]);
+      len = poly_mult(polym12, 16, polyout[1], len, polyout[0]);
+      poly_pack(polyout[0], m_poly_m_12, 180);
     }
 
     int
@@ -619,6 +700,33 @@ namespace gr {
             }
           }
           break;
+        case BCH_CODE_M12:
+          for (int i = 0; i < noutput_items; i += nbch) {
+            //Zero the shift register
+            memset(shift, 0, sizeof(unsigned int) * 6);
+            // MSB of the codeword first
+            for (int j = 0; j < (int)kbch; j++) {
+              temp = *in++;
+              *out++ = temp;
+              consumed++;
+              b = (temp ^ ((shift[5] & 0x00001000) ? 1 : 0));
+              reg_6_shift(shift);
+              if (b) {
+                shift[0] ^= m_poly_m_12[0];
+                shift[1] ^= m_poly_m_12[1];
+                shift[2] ^= m_poly_m_12[2];
+                shift[3] ^= m_poly_m_12[3];
+                shift[4] ^= m_poly_m_12[4];
+                shift[5] ^= m_poly_m_12[5];
+              }
+            }
+            // Now add the parity bits to the output
+            for (int n = 0; n < 180; n++) {
+              *out++ = (shift[5] & 0x00001000) ? 1 : 0;
+              reg_6_shift(shift);
+            }
+          }
+          break;
       }
 
       // Tell runtime system how many input items we consumed on
diff --git a/gr-dtv/lib/dvb/dvb_bch_bb_impl.h b/gr-dtv/lib/dvb/dvb_bch_bb_impl.h
index 5cba0a1..56b4772 100644
--- a/gr-dtv/lib/dvb/dvb_bch_bb_impl.h
+++ b/gr-dtv/lib/dvb/dvb_bch_bb_impl.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -37,6 +37,7 @@ namespace gr {
       unsigned int m_poly_n_10[5];
       unsigned int m_poly_n_12[6];
       unsigned int m_poly_s_12[6];
+      unsigned int m_poly_m_12[6];
       int poly_mult(const int*, int, const int*, int, int*);
       void poly_pack(const int*, unsigned int*, int);
       void poly_reverse(int*, int*, int);
diff --git a/gr-dtv/lib/dvb/dvb_defines.h b/gr-dtv/lib/dvb/dvb_defines.h
index 2c2603a..885d640 100644
--- a/gr-dtv/lib/dvb/dvb_defines.h
+++ b/gr-dtv/lib/dvb/dvb_defines.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -45,6 +45,7 @@
 #define NPD_NOT_ACTIVE 0
 
 #define FRAME_SIZE_NORMAL 64800
+#define FRAME_SIZE_MEDIUM 32400
 #define FRAME_SIZE_SHORT  16200
 
 // BCH Code
@@ -52,6 +53,7 @@
 #define BCH_CODE_N10 1
 #define BCH_CODE_N12 2
 #define BCH_CODE_S12 3
+#define BCH_CODE_M12 4
 
 #define LDPC_ENCODE_TABLE_LENGTH (FRAME_SIZE_NORMAL * 10)
 
diff --git a/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc 
b/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc
index c1738e1..b5b9065 100644
--- a/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc
+++ b/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -41,8 +41,12 @@ namespace gr {
     dvb_ldpc_bb_impl::dvb_ldpc_bb_impl(dvb_standard_t standard, 
dvb_framesize_t framesize, dvb_code_rate_t rate, dvb_constellation_t 
constellation)
       : gr::block("dvb_ldpc_bb",
               gr::io_signature::make(1, 1, sizeof(unsigned char)),
-              gr::io_signature::make(1, 1, sizeof(unsigned char)))
+              gr::io_signature::make(1, 1, sizeof(unsigned char))),
+      Xs(0),
+      P(0),
+      Xp(0)
     {
+      frame_size_type = framesize;
       if (framesize == FECFRAME_NORMAL) {
         frame_size = FRAME_SIZE_NORMAL;
         frame_size_real = FRAME_SIZE_NORMAL;
@@ -91,6 +95,14 @@ namespace gr {
             nbch = 58320;
             q_val = 18;
             break;
+          case C2_9_VLSNR:
+            nbch = 14400;
+            q_val = 140;
+            frame_size -= 3240;
+            frame_size_real -= 3240;
+            P = 15;
+            Xp = 3240;
+            break;
           case C13_45:
             nbch = 18720;
             q_val = 128;
@@ -189,7 +201,7 @@ namespace gr {
             break;
         }
       }
-      else {
+      else if (framesize == FECFRAME_SHORT) {
         frame_size = FRAME_SIZE_SHORT;
         frame_size_real = FRAME_SIZE_SHORT;
         switch (rate) {
@@ -261,6 +273,76 @@ namespace gr {
             nbch = 11520;
             q_val = 13;
             break;
+          case C1_5_VLSNR_SF2:
+            nbch = 2680;
+            q_val = 135;
+            frame_size -= 810;
+            frame_size_real -= 810;
+            Xs = 560;
+            P = 30;
+            Xp = 250;
+            break;
+          case C11_45_VLSNR_SF2:
+            nbch = 3960;
+            q_val = 34;
+            frame_size -= 810;
+            frame_size_real -= 810;
+            P = 15;
+            Xp = 810;
+            break;
+          case C1_5_VLSNR:
+            nbch = 3240;
+            q_val = 135;
+            frame_size -= 1224;
+            frame_size_real -= 1224;
+            P = 10;
+            Xp = 1224;
+            break;
+          case C4_15_VLSNR:
+            nbch = 4320;
+            q_val = 33;
+            frame_size -= 1224;
+            frame_size_real -= 1224;
+            P = 8;
+            Xp = 1224;
+            break;
+          case C1_3_VLSNR:
+            nbch = 5400;
+            q_val = 120;
+            frame_size -= 1224;
+            frame_size_real -= 1224;
+            P = 8;
+            Xp = 1224;
+            break;
+          default:
+            nbch = 0;
+            q_val = 0;
+            break;
+        }
+      }
+      else {
+        frame_size = FRAME_SIZE_MEDIUM - 1620;
+        frame_size_real = FRAME_SIZE_MEDIUM - 1620;
+        switch (rate) {
+          case C1_5_MEDIUM:
+            nbch = 5840;
+            q_val = 72;
+            Xs = 640;
+            P = 25;
+            Xp = 980;
+            break;
+          case C11_45_MEDIUM:
+            nbch = 7920;
+            q_val = 68;
+            P = 15;
+            Xp = 1620;
+            break;
+          case C1_3_MEDIUM:
+            nbch = 10800;
+            q_val = 60;
+            P = 13;
+            Xp = 1620;
+            break;
           default:
             nbch = 0;
             q_val = 0;
@@ -312,10 +394,10 @@ for (int row = 0; row < ROWS; row++) { \
       index = 0;
       im = 0;
 
-      pbits = frame_size - nbch;    //number of parity bits
+      pbits = (frame_size_real + Xp) - nbch;    //number of parity bits
       q = q_val;
 
-      if (frame_size_real == FRAME_SIZE_NORMAL) {
+      if (frame_size_type == FECFRAME_NORMAL) {
         if (code_rate == C1_4) {
           LDPC_BF(ldpc_tab_1_4N,  45);
         }
@@ -354,6 +436,9 @@ for (int row = 0; row < ROWS; row++) { \
         if (code_rate == C9_10) {
           LDPC_BF(ldpc_tab_9_10N, 162);
         }
+        if (code_rate == C2_9_VLSNR) {
+          LDPC_BF(ldpc_tab_2_9N,      40);
+        }
         if (code_rate == C13_45) {
           LDPC_BF(ldpc_tab_13_45N,    52);
         }
@@ -424,7 +509,7 @@ for (int row = 0; row < ROWS; row++) { \
           LDPC_BF(ldpc_tab_154_180N, 154);
         }
       }
-      else {
+      else if (frame_size_type == FECFRAME_SHORT) {
         if (code_rate == C1_4) {
           LDPC_BF(ldpc_tab_1_4S, 9);
         }
@@ -481,6 +566,32 @@ for (int row = 0; row < ROWS; row++) { \
         if (code_rate == C32_45) {
           LDPC_BF(ldpc_tab_32_45S, 32);
         }
+        if (code_rate == C1_5_VLSNR_SF2) {
+          LDPC_BF(ldpc_tab_1_4S,    9);
+        }
+        if (code_rate == C11_45_VLSNR_SF2) {
+          LDPC_BF(ldpc_tab_11_45S, 11);
+        }
+        if (code_rate == C1_5_VLSNR) {
+          LDPC_BF(ldpc_tab_1_4S,    9);
+        }
+        if (code_rate == C4_15_VLSNR) {
+          LDPC_BF(ldpc_tab_4_15S,  12);
+        }
+        if (code_rate == C1_3_VLSNR) {
+          LDPC_BF(ldpc_tab_1_3S,   15);
+        }
+      }
+      else {
+        if (code_rate == C1_5_MEDIUM) {
+          LDPC_BF(ldpc_tab_1_5M,   18);
+        }
+        if (code_rate == C11_45_MEDIUM) {
+          LDPC_BF(ldpc_tab_11_45M, 22);
+        }
+        if (code_rate == C1_3_MEDIUM) {
+          LDPC_BF(ldpc_tab_1_3M,   30);
+        }
       }
       ldpc_encode.table_length = index;
     }
@@ -495,24 +606,54 @@ for (int row = 0; row < ROWS; row++) { \
       unsigned char *out = (unsigned char *) output_items[0];
       const unsigned char *d;
       unsigned char *p;
+      unsigned char *b;
+      unsigned char *s;
       // Calculate the number of parity bits
-      int plen = frame_size_real - nbch;
+      int plen = (frame_size_real + Xp) - nbch;
       d = in;
       p = &out[nbch];
       int consumed = 0;
+      int puncture, index;
 
       for (int i = 0; i < noutput_items; i += frame_size) {
+        if (Xs != 0) {
+          s = &shortening_buffer[0];
+          memset(s, 0, sizeof(unsigned char) * Xs);
+          memcpy(&s[Xs], &in[consumed], sizeof(unsigned char) * nbch);
+          d = s;
+        }
+        if (P != 0) {
+          p = &puncturing_buffer[nbch];
+          b = &out[i + nbch];
+        }
         // First zero all the parity bits
-        memset(p, 0, sizeof(unsigned char)*plen);
-        for(int j = 0; j < (int)nbch; j++) {
+        memset(p, 0, sizeof(unsigned char) * plen);
+        for (int j = 0; j < (int)nbch; j++) {
           out[i + j] = in[consumed];
           consumed++;
         }
         // now do the parity checking
-        for(int j = 0; j < ldpc_encode.table_length; j++) {
+        for (int j = 0; j < ldpc_encode.table_length; j++) {
           p[ldpc_encode.p[j]] ^= d[ldpc_encode.d[j]];
         }
-        for(int j = 1; j < plen; j++) {
+        if (P != 0) {
+          puncture = 0;
+          for (int j = 0; j < plen; j += P) {
+            p[j] = 0x55;
+            puncture++;
+            if (puncture == Xp) {
+              break;
+            }
+          }
+          index = 0;
+          for (int j = 0; j < plen; j++) {
+            if (p[j] != 0x55) {
+              b[index++] = p[j];
+            }
+          }
+          p = &out[nbch];
+        }
+        for (int j = 1; j < (plen - Xp); j++) {
           p[j] ^= p[j-1];
         }
         if (signal_constellation == MOD_128APSK) {
@@ -1946,6 +2087,50 @@ for (int row = 0; row < ROWS; row++) { \
       {3,17,3392,1991,0}
     };
 
+    const int dvb_ldpc_bb_impl::ldpc_tab_2_9N[40][12]=
+    {
+      {11,5332,8018,35444,13098,9655,41945,44273,22741,9371,8727,43219},
+      {11,41410,43593,14611,46707,16041,1459,29246,12748,32996,676,46909},
+      {11,9340,35072,35640,17537,10512,44339,30965,25175,9918,21079,29835},
+      {11,3332,12088,47966,25168,50180,42842,40914,46726,17073,41812,34356},
+      {11,15159,2209,7971,22590,20020,27567,4853,10294,38839,15314,49808},
+      {11,20936,14497,23365,22630,38728,28361,34659,956,8559,44957,22222},
+      {11,28043,4641,25208,47039,30612,25796,14661,44139,27335,12884,6980},
+      {11,32584,33453,1867,20185,36106,30357,809,28513,46045,27862,4802},
+      {11,43744,13375,36066,23604,30766,6233,45051,23660,20815,19525,25207},
+      {11,27522,3854,9311,21925,41107,25773,26323,24237,24344,46187,44503},
+      {11,10256,20038,12177,26635,5214,14191,34404,45807,4938,4173,31344},
+      {11,32043,26501,46725,4648,16718,31060,26633,19036,14222,13886,26535},
+      {11,18103,8498,36814,34600,36495,36712,29833,27396,11877,42861,1834},
+      {11,36592,1645,3649,30521,14674,3630,890,13307,41412,24682,9907},
+      {11,4401,44543,13784,5828,32862,25179,29736,39614,5186,49749,38317},
+      {11,41460,39101,50080,40137,32691,26528,35332,44067,8467,14286,10470},
+      {11,12211,34019,37870,36918,36419,33153,50070,41498,47741,30538,12342},
+      {11,33751,23988,33624,41882,34075,25552,3106,17611,13190,29336,312},
+      {11,5667,35483,35460,16153,37267,28308,50009,46345,34204,32756,38243},
+      {11,5657,24157,36834,6890,49576,46244,43875,16738,47225,2944,36882},
+      {3,30341,48485,3700,0,0,0,0,0,0,0,0},
+      {3,14451,20438,18875,0,0,0,0,0,0,0,0},
+      {3,13634,41138,42962,0,0,0,0,0,0,0,0},
+      {3,46459,13369,27974,0,0,0,0,0,0,0,0},
+      {3,21493,14629,2369,0,0,0,0,0,0,0,0},
+      {3,11351,40226,42457,0,0,0,0,0,0,0,0},
+      {3,34749,39000,3912,0,0,0,0,0,0,0,0},
+      {3,18128,46776,47055,0,0,0,0,0,0,0,0},
+      {3,2221,26806,11345,0,0,0,0,0,0,0,0},
+      {3,35143,630,2229,0,0,0,0,0,0,0,0},
+      {3,44009,41295,34646,0,0,0,0,0,0,0,0},
+      {3,32163,16657,26544,0,0,0,0,0,0,0,0},
+      {3,31770,23641,43623,0,0,0,0,0,0,0,0},
+      {3,45826,10902,39490,0,0,0,0,0,0,0,0},
+      {3,7514,20480,28511,0,0,0,0,0,0,0,0},
+      {3,11429,19834,35430,0,0,0,0,0,0,0,0},
+      {3,50112,38163,5738,0,0,0,0,0,0,0,0},
+      {3,16191,16862,6783,0,0,0,0,0,0,0,0},
+      {3,6085,39149,34988,0,0,0,0,0,0,0,0},
+      {3,41497,32023,28688,0,0,0,0,0,0,0,0}
+    };
+
     const int dvb_ldpc_bb_impl::ldpc_tab_13_45N[52][13]=
     {
       
{12,15210,4519,18217,34427,18474,16813,28246,17687,44527,31465,13004,43601},
@@ -5178,6 +5363,88 @@ for (int row = 0; row < ROWS; row++) { \
       {3,1523,3311,389,0,0,0,0,0,0,0,0,0}
     };
 
+    const int dvb_ldpc_bb_impl::ldpc_tab_1_5M[18][14]=
+    {
+      
{13,18222,6715,4908,21568,22821,11708,4769,4495,22243,25872,9051,19072,13956},
+      {13,2038,5205,21215,21009,9584,2403,23652,20866,20130,677,9509,6136,773},
+      
{13,19936,14590,17829,473,4432,23171,11386,17937,22084,24450,267,8822,19335},
+      
{13,16376,16769,5111,9794,18907,827,12385,12370,21647,10938,23619,11633,15865},
+      
{13,23417,7631,12243,21546,4192,22117,14757,4118,9686,17021,8531,15989,8807},
+      
{13,15533,16584,18529,19699,17821,4252,1254,5952,3163,20295,6944,1022,19743},
+      
{13,129,16579,23524,25897,14690,11222,16250,9925,4268,999,7102,24528,152},
+      
{13,18361,3708,3454,16604,1551,5809,20324,4775,22418,19091,19674,10975,7327},
+      
{13,24133,10950,22779,11388,13818,20668,7556,12333,16446,19684,12510,25118,8162},
+      {3,17026,6850,1269,0,0,0,0,0,0,0,0,0,0},
+      {3,21895,7137,25270,0,0,0,0,0,0,0,0,0,0},
+      {3,11858,24153,13303,0,0,0,0,0,0,0,0,0,0},
+      {3,7885,16438,12805,0,0,0,0,0,0,0,0,0,0},
+      {3,10473,15004,8052,0,0,0,0,0,0,0,0,0,0},
+      {3,2088,10379,10067,0,0,0,0,0,0,0,0,0,0},
+      {3,21438,13426,10440,0,0,0,0,0,0,0,0,0,0},
+      {3,17696,727,12164,0,0,0,0,0,0,0,0,0,0},
+      {3,22623,8408,17849,0,0,0,0,0,0,0,0,0,0}
+    };
+
+    const int dvb_ldpc_bb_impl::ldpc_tab_11_45M[22][11]=
+    {
+      {10,20617,6867,14845,11974,22563,190,17207,4052,7406,16007},
+      {10,21448,14846,2543,23380,16633,20365,16869,13411,19853,795},
+      {10,5200,2330,2775,23620,20643,10745,14742,6493,14222,20939},
+      {10,9445,9523,12769,7332,21792,18717,16397,14016,9481,22162},
+      {10,2922,6427,4497,4116,17658,2581,14364,3781,18851,22974},
+      {10,10383,2184,1433,3889,12828,17424,17580,20936,1390,21374},
+      {10,425,2063,22398,20907,9445,14790,4457,723,7048,4072},
+      {10,11771,9640,23212,9613,12042,8335,21386,20129,13521,16301},
+      {10,14867,12501,1086,21526,17701,17731,20907,8790,19224,5784},
+      {10,7107,19690,17616,5800,9501,23320,16878,794,15931,17539},
+      {3,4556,21783,1524,0,0,0,0,0,0,0},
+      {3,20100,11706,23663,0,0,0,0,0,0,0},
+      {3,2535,15530,6116,0,0,0,0,0,0,0},
+      {3,12078,3867,2663,0,0,0,0,0,0,0},
+      {3,19629,20246,7024,0,0,0,0,0,0,0},
+      {3,11748,11426,19802,0,0,0,0,0,0,0},
+      {3,15942,12333,5316,0,0,0,0,0,0,0},
+      {3,11521,3170,17818,0,0,0,0,0,0,0},
+      {3,2289,23780,16575,0,0,0,0,0,0,0},
+      {3,6649,16991,13025,0,0,0,0,0,0,0},
+      {3,20050,10619,10250,0,0,0,0,0,0,0},
+      {3,3944,13063,5656,0,0,0,0,0,0,0}
+    };
+
+    const int dvb_ldpc_bb_impl::ldpc_tab_1_3M[30][13]=
+    {
+      {12,7416,4093,16722,1023,20586,12219,9175,16284,1554,10113,19849,17545},
+      {12,13140,3257,2110,13888,3023,1537,1598,15018,18931,13905,10617,1014},
+      {12,339,14366,3309,15360,18358,3196,4412,6023,7070,17380,2777,6691},
+      {12,12720,17634,4141,1400,8247,18201,16077,11314,11928,3494,3155,2865},
+      {12,21038,6928,3860,1943,20292,6526,12939,15182,3957,5651,356,2673},
+      {12,20555,17905,5724,13932,1218,17763,5912,5164,6233,6220,1277,19209},
+      {12,19190,4498,4950,6645,5482,5667,13701,16334,15231,735,8589,12344},
+      {12,679,17849,17807,16033,10181,3368,5778,8275,2736,14042,17506,6005},
+      {12,1576,10259,10525,3007,16522,697,7726,8641,14323,2893,8168,11070},
+      {12,17270,10180,18740,847,4969,14715,19316,5530,17428,11193,9861,13562},
+      {3,6156,18787,10467,0,0,0,0,0,0,0,0,0},
+      {3,2422,3723,10769,0,0,0,0,0,0,0,0,0},
+      {3,8015,18716,13406,0,0,0,0,0,0,0,0,0},
+      {3,5969,15949,3084,0,0,0,0,0,0,0,0,0},
+      {3,6855,13990,3764,0,0,0,0,0,0,0,0,0},
+      {3,10351,15779,10392,0,0,0,0,0,0,0,0,0},
+      {3,16078,19034,11279,0,0,0,0,0,0,0,0,0},
+      {3,11747,6608,4188,0,0,0,0,0,0,0,0,0},
+      {3,19699,8928,8045,0,0,0,0,0,0,0,0,0},
+      {3,4598,7219,11391,0,0,0,0,0,0,0,0,0},
+      {3,19766,11871,5692,0,0,0,0,0,0,0,0,0},
+      {3,7487,15905,17621,0,0,0,0,0,0,0,0,0},
+      {3,8554,7751,16516,0,0,0,0,0,0,0,0,0},
+      {3,4981,20250,16146,0,0,0,0,0,0,0,0,0},
+      {3,12524,21364,10793,0,0,0,0,0,0,0,0,0},
+      {3,17083,2051,8862,0,0,0,0,0,0,0,0,0},
+      {3,1315,6246,7721,0,0,0,0,0,0,0,0,0},
+      {3,18043,16652,5502,0,0,0,0,0,0,0,0,0},
+      {3,1432,5674,2224,0,0,0,0,0,0,0,0,0},
+      {3,11257,1312,8453,0,0,0,0,0,0,0,0,0}
+    };
+
   } /* namespace dtv */
 } /* namespace gr */
 
diff --git a/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.h 
b/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.h
index 92c9eb3..c8f0fab 100644
--- a/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.h
+++ b/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.h
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /* 
- * Copyright 2015 Free Software Foundation, Inc.
+ * Copyright 2015,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
@@ -38,11 +38,17 @@ namespace gr {
      private:
       unsigned int frame_size;
       unsigned int frame_size_real;
+      unsigned int frame_size_type;
       unsigned int signal_constellation;
       unsigned int nbch;
       unsigned int code_rate;
       unsigned int q_val;
       unsigned int dvb_standard;
+      int Xs;
+      int P;
+      int Xp;
+      unsigned char puncturing_buffer[FRAME_SIZE_NORMAL];
+      unsigned char shortening_buffer[FRAME_SIZE_NORMAL];
       void ldpc_lookup_generate(void);
       ldpc_encode_table ldpc_encode;
 
@@ -71,6 +77,7 @@ namespace gr {
       const static int ldpc_tab_5_6S[37][14];
       const static int ldpc_tab_8_9S[40][5];
 
+      const static int ldpc_tab_2_9N[40][12];
       const static int ldpc_tab_13_45N[52][13];
       const static int ldpc_tab_9_20N[81][13];
       const static int ldpc_tab_11_20N[99][14];
@@ -103,6 +110,10 @@ namespace gr {
       const static int ldpc_tab_26_45S[26][14];
       const static int ldpc_tab_32_45S[32][13];
 
+      const static int ldpc_tab_1_5M[18][14];
+      const static int ldpc_tab_11_45M[22][11];
+      const static int ldpc_tab_1_3M[30][13];
+
      public:
       dvb_ldpc_bb_impl(dvb_standard_t standard, dvb_framesize_t framesize, 
dvb_code_rate_t rate, dvb_constellation_t constellation);
       ~dvb_ldpc_bb_impl();



reply via email to

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