summaryrefslogtreecommitdiff
path: root/gr-dtv/lib/dvbt2/dvbt2_freqinterleaver_cc_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-dtv/lib/dvbt2/dvbt2_freqinterleaver_cc_impl.cc')
-rw-r--r--gr-dtv/lib/dvbt2/dvbt2_freqinterleaver_cc_impl.cc998
1 files changed, 491 insertions, 507 deletions
diff --git a/gr-dtv/lib/dvbt2/dvbt2_freqinterleaver_cc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_freqinterleaver_cc_impl.cc
index bda49e9540..aee8793720 100644
--- a/gr-dtv/lib/dvbt2/dvbt2_freqinterleaver_cc_impl.cc
+++ b/gr-dtv/lib/dvbt2/dvbt2_freqinterleaver_cc_impl.cc
@@ -1,17 +1,17 @@
/* -*- c++ -*- */
-/*
+/*
* Copyright 2015 Free Software Foundation, Inc.
- *
+ *
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
- *
+ *
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
@@ -26,853 +26,837 @@
#include "dvbt2_freqinterleaver_cc_impl.h"
namespace gr {
- namespace dtv {
+namespace dtv {
- dvbt2_freqinterleaver_cc::sptr
- dvbt2_freqinterleaver_cc::make(dvbt2_extended_carrier_t carriermode, dvbt2_fftsize_t fftsize, dvbt2_pilotpattern_t pilotpattern, dvb_guardinterval_t guardinterval, int numdatasyms, dvbt2_papr_t paprmode, dvbt2_version_t version, dvbt2_preamble_t preamble)
- {
- return gnuradio::get_initial_sptr
- (new dvbt2_freqinterleaver_cc_impl(carriermode, fftsize, pilotpattern, guardinterval, numdatasyms, paprmode, version, preamble));
- }
+dvbt2_freqinterleaver_cc::sptr
+dvbt2_freqinterleaver_cc::make(dvbt2_extended_carrier_t carriermode,
+ dvbt2_fftsize_t fftsize,
+ dvbt2_pilotpattern_t pilotpattern,
+ dvb_guardinterval_t guardinterval,
+ int numdatasyms,
+ dvbt2_papr_t paprmode,
+ dvbt2_version_t version,
+ dvbt2_preamble_t preamble)
+{
+ return gnuradio::get_initial_sptr(new dvbt2_freqinterleaver_cc_impl(carriermode,
+ fftsize,
+ pilotpattern,
+ guardinterval,
+ numdatasyms,
+ paprmode,
+ version,
+ preamble));
+}
- /*
- * The private constructor
- */
- dvbt2_freqinterleaver_cc_impl::dvbt2_freqinterleaver_cc_impl(dvbt2_extended_carrier_t carriermode, dvbt2_fftsize_t fftsize, dvbt2_pilotpattern_t pilotpattern, dvb_guardinterval_t guardinterval, int numdatasyms, dvbt2_papr_t paprmode, dvbt2_version_t version, dvbt2_preamble_t preamble)
- : gr::sync_block("dvbt2_freqinterleaver_cc",
- gr::io_signature::make(1, 1, sizeof(gr_complex)),
- gr::io_signature::make(1, 1, sizeof(gr_complex)))
- {
- int max_states, xor_size, pn_mask, result;
- int q_even = 0;
- int q_odd = 0;
- int q_evenP2 = 0;
- int q_oddP2 = 0;
- int q_evenFC = 0;
- int q_oddFC = 0;
- int lfsr = 0;
- int logic1k[2] = {0, 4};
- int logic2k[2] = {0, 3};
- int logic4k[2] = {0, 2};
- int logic8k[4] = {0, 1, 4, 6};
- int logic16k[6] = {0, 1, 4, 5, 9, 11};
- int logic32k[4] = {0, 1, 2, 12};
- int *logic;
- const int *bitpermeven, *bitpermodd;
- int pn_degree, even, odd;
- if ((preamble == PREAMBLE_T2_SISO) || (preamble == PREAMBLE_T2_LITE_SISO)) {
+/*
+ * The private constructor
+ */
+dvbt2_freqinterleaver_cc_impl::dvbt2_freqinterleaver_cc_impl(
+ dvbt2_extended_carrier_t carriermode,
+ dvbt2_fftsize_t fftsize,
+ dvbt2_pilotpattern_t pilotpattern,
+ dvb_guardinterval_t guardinterval,
+ int numdatasyms,
+ dvbt2_papr_t paprmode,
+ dvbt2_version_t version,
+ dvbt2_preamble_t preamble)
+ : gr::sync_block("dvbt2_freqinterleaver_cc",
+ gr::io_signature::make(1, 1, sizeof(gr_complex)),
+ gr::io_signature::make(1, 1, sizeof(gr_complex)))
+{
+ int max_states, xor_size, pn_mask, result;
+ int q_even = 0;
+ int q_odd = 0;
+ int q_evenP2 = 0;
+ int q_oddP2 = 0;
+ int q_evenFC = 0;
+ int q_oddFC = 0;
+ int lfsr = 0;
+ int logic1k[2] = { 0, 4 };
+ int logic2k[2] = { 0, 3 };
+ int logic4k[2] = { 0, 2 };
+ int logic8k[4] = { 0, 1, 4, 6 };
+ int logic16k[6] = { 0, 1, 4, 5, 9, 11 };
+ int logic32k[4] = { 0, 1, 2, 12 };
+ int* logic;
+ const int *bitpermeven, *bitpermodd;
+ int pn_degree, even, odd;
+ if ((preamble == PREAMBLE_T2_SISO) || (preamble == PREAMBLE_T2_LITE_SISO)) {
switch (fftsize) {
- case FFTSIZE_1K:
+ case FFTSIZE_1K:
N_P2 = 16;
C_P2 = 558;
break;
- case FFTSIZE_2K:
+ case FFTSIZE_2K:
N_P2 = 8;
C_P2 = 1118;
break;
- case FFTSIZE_4K:
+ case FFTSIZE_4K:
N_P2 = 4;
C_P2 = 2236;
break;
- case FFTSIZE_8K:
- case FFTSIZE_8K_T2GI:
+ case FFTSIZE_8K:
+ case FFTSIZE_8K_T2GI:
N_P2 = 2;
C_P2 = 4472;
break;
- case FFTSIZE_16K:
- case FFTSIZE_16K_T2GI:
+ case FFTSIZE_16K:
+ case FFTSIZE_16K_T2GI:
N_P2 = 1;
C_P2 = 8944;
break;
- case FFTSIZE_32K:
- case FFTSIZE_32K_T2GI:
+ case FFTSIZE_32K:
+ case FFTSIZE_32K_T2GI:
N_P2 = 1;
C_P2 = 22432;
break;
}
- }
- else {
+ } else {
switch (fftsize) {
- case FFTSIZE_1K:
+ case FFTSIZE_1K:
N_P2 = 16;
C_P2 = 546;
break;
- case FFTSIZE_2K:
+ case FFTSIZE_2K:
N_P2 = 8;
C_P2 = 1098;
break;
- case FFTSIZE_4K:
+ case FFTSIZE_4K:
N_P2 = 4;
C_P2 = 2198;
break;
- case FFTSIZE_8K:
- case FFTSIZE_8K_T2GI:
+ case FFTSIZE_8K:
+ case FFTSIZE_8K_T2GI:
N_P2 = 2;
C_P2 = 4398;
break;
- case FFTSIZE_16K:
- case FFTSIZE_16K_T2GI:
+ case FFTSIZE_16K:
+ case FFTSIZE_16K_T2GI:
N_P2 = 1;
C_P2 = 8814;
break;
- case FFTSIZE_32K:
- case FFTSIZE_32K_T2GI:
+ case FFTSIZE_32K:
+ case FFTSIZE_32K_T2GI:
N_P2 = 1;
C_P2 = 17612;
break;
}
- }
- switch (fftsize) {
- case FFTSIZE_1K:
- pn_degree = 9;
- pn_mask = 0x1ff;
- max_states = 1024;
- logic = &logic1k[0];
- xor_size = 2;
- bitpermeven = &bitperm1keven[0];
- bitpermodd = &bitperm1kodd[0];
- break;
- case FFTSIZE_2K:
- pn_degree = 10;
- pn_mask = 0x3ff;
- max_states = 2048;
- logic = &logic2k[0];
- xor_size = 2;
- bitpermeven = &bitperm2keven[0];
- bitpermodd = &bitperm2kodd[0];
- break;
- case FFTSIZE_4K:
- pn_degree = 11;
- pn_mask = 0x7ff;
- max_states = 4096;
- logic = &logic4k[0];
- xor_size = 2;
- bitpermeven = &bitperm4keven[0];
- bitpermodd = &bitperm4kodd[0];
- break;
- case FFTSIZE_8K:
- case FFTSIZE_8K_T2GI:
- pn_degree = 12;
- pn_mask = 0xfff;
- max_states = 8192;
- logic = &logic8k[0];
- xor_size = 4;
- bitpermeven = &bitperm8keven[0];
- bitpermodd = &bitperm8kodd[0];
- break;
- case FFTSIZE_16K:
- case FFTSIZE_16K_T2GI:
- pn_degree = 13;
- pn_mask = 0x1fff;
- max_states = 16384;
- logic = &logic16k[0];
- xor_size = 6;
- bitpermeven = &bitperm16keven[0];
- bitpermodd = &bitperm16kodd[0];
- break;
- case FFTSIZE_32K:
- case FFTSIZE_32K_T2GI:
- pn_degree = 14;
- pn_mask = 0x3fff;
- max_states = 32768;
- logic = &logic32k[0];
- xor_size = 4;
- bitpermeven = &bitperm32k[0];
- bitpermodd = &bitperm32k[0];
- break;
- default:
- pn_degree = 0;
- pn_mask = 0;
- max_states = 0;
- logic = &logic1k[0];
- xor_size = 0;
- bitpermeven = &bitperm1keven[0];
- bitpermodd = &bitperm1kodd[0];
- break;
- }
- switch (fftsize) {
- case FFTSIZE_1K:
- switch (pilotpattern) {
- case PILOT_PP1:
- C_DATA = 764;
- N_FC = 568;
- C_FC = 402;
- break;
- case PILOT_PP2:
- C_DATA = 768;
- N_FC = 710;
- C_FC = 654;
- break;
- case PILOT_PP3:
- C_DATA = 798;
- N_FC = 710;
- C_FC = 490;
- break;
- case PILOT_PP4:
- C_DATA = 804;
- N_FC = 780;
- C_FC = 707;
- break;
- case PILOT_PP5:
- C_DATA = 818;
- N_FC = 780;
- C_FC = 544;
- break;
- case PILOT_PP6:
- C_DATA = 0;
- N_FC = 0;
- C_FC = 0;
- break;
- case PILOT_PP7:
- C_DATA = 0;
- N_FC = 0;
- C_FC = 0;
- break;
- case PILOT_PP8:
- C_DATA = 0;
- N_FC = 0;
- C_FC = 0;
- break;
- }
- if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
+ }
+ switch (fftsize) {
+ case FFTSIZE_1K:
+ pn_degree = 9;
+ pn_mask = 0x1ff;
+ max_states = 1024;
+ logic = &logic1k[0];
+ xor_size = 2;
+ bitpermeven = &bitperm1keven[0];
+ bitpermodd = &bitperm1kodd[0];
+ break;
+ case FFTSIZE_2K:
+ pn_degree = 10;
+ pn_mask = 0x3ff;
+ max_states = 2048;
+ logic = &logic2k[0];
+ xor_size = 2;
+ bitpermeven = &bitperm2keven[0];
+ bitpermodd = &bitperm2kodd[0];
+ break;
+ case FFTSIZE_4K:
+ pn_degree = 11;
+ pn_mask = 0x7ff;
+ max_states = 4096;
+ logic = &logic4k[0];
+ xor_size = 2;
+ bitpermeven = &bitperm4keven[0];
+ bitpermodd = &bitperm4kodd[0];
+ break;
+ case FFTSIZE_8K:
+ case FFTSIZE_8K_T2GI:
+ pn_degree = 12;
+ pn_mask = 0xfff;
+ max_states = 8192;
+ logic = &logic8k[0];
+ xor_size = 4;
+ bitpermeven = &bitperm8keven[0];
+ bitpermodd = &bitperm8kodd[0];
+ break;
+ case FFTSIZE_16K:
+ case FFTSIZE_16K_T2GI:
+ pn_degree = 13;
+ pn_mask = 0x1fff;
+ max_states = 16384;
+ logic = &logic16k[0];
+ xor_size = 6;
+ bitpermeven = &bitperm16keven[0];
+ bitpermodd = &bitperm16kodd[0];
+ break;
+ case FFTSIZE_32K:
+ case FFTSIZE_32K_T2GI:
+ pn_degree = 14;
+ pn_mask = 0x3fff;
+ max_states = 32768;
+ logic = &logic32k[0];
+ xor_size = 4;
+ bitpermeven = &bitperm32k[0];
+ bitpermodd = &bitperm32k[0];
+ break;
+ default:
+ pn_degree = 0;
+ pn_mask = 0;
+ max_states = 0;
+ logic = &logic1k[0];
+ xor_size = 0;
+ bitpermeven = &bitperm1keven[0];
+ bitpermodd = &bitperm1kodd[0];
+ break;
+ }
+ switch (fftsize) {
+ case FFTSIZE_1K:
+ switch (pilotpattern) {
+ case PILOT_PP1:
+ C_DATA = 764;
+ N_FC = 568;
+ C_FC = 402;
+ break;
+ case PILOT_PP2:
+ C_DATA = 768;
+ N_FC = 710;
+ C_FC = 654;
+ break;
+ case PILOT_PP3:
+ C_DATA = 798;
+ N_FC = 710;
+ C_FC = 490;
+ break;
+ case PILOT_PP4:
+ C_DATA = 804;
+ N_FC = 780;
+ C_FC = 707;
+ break;
+ case PILOT_PP5:
+ C_DATA = 818;
+ N_FC = 780;
+ C_FC = 544;
+ break;
+ case PILOT_PP6:
+ C_DATA = 0;
+ N_FC = 0;
+ C_FC = 0;
+ break;
+ case PILOT_PP7:
+ C_DATA = 0;
+ N_FC = 0;
+ C_FC = 0;
+ break;
+ case PILOT_PP8:
+ C_DATA = 0;
+ N_FC = 0;
+ C_FC = 0;
+ break;
+ }
+ if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
if (C_DATA != 0) {
- C_DATA -= 10;
+ C_DATA -= 10;
}
if (N_FC != 0) {
- N_FC -= 10;
+ N_FC -= 10;
}
if (C_FC != 0) {
- C_FC -= 10;
+ C_FC -= 10;
}
- }
- break;
- case FFTSIZE_2K:
- switch (pilotpattern) {
- case PILOT_PP1:
- C_DATA = 1522;
- N_FC = 1136;
- C_FC = 804;
- break;
- case PILOT_PP2:
- C_DATA = 1532;
- N_FC = 1420;
- C_FC = 1309;
- break;
- case PILOT_PP3:
- C_DATA = 1596;
- N_FC = 1420;
- C_FC = 980;
- break;
- case PILOT_PP4:
- C_DATA = 1602;
- N_FC = 1562;
- C_FC = 1415;
- break;
- case PILOT_PP5:
- C_DATA = 1632;
- N_FC = 1562;
- C_FC = 1088;
- break;
- case PILOT_PP6:
- C_DATA = 0;
- N_FC = 0;
- C_FC = 0;
- break;
- case PILOT_PP7:
- C_DATA = 1646;
- N_FC = 1632;
- C_FC = 1396;
- break;
- case PILOT_PP8:
- C_DATA = 0;
- N_FC = 0;
- C_FC = 0;
- break;
- }
- if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
+ }
+ break;
+ case FFTSIZE_2K:
+ switch (pilotpattern) {
+ case PILOT_PP1:
+ C_DATA = 1522;
+ N_FC = 1136;
+ C_FC = 804;
+ break;
+ case PILOT_PP2:
+ C_DATA = 1532;
+ N_FC = 1420;
+ C_FC = 1309;
+ break;
+ case PILOT_PP3:
+ C_DATA = 1596;
+ N_FC = 1420;
+ C_FC = 980;
+ break;
+ case PILOT_PP4:
+ C_DATA = 1602;
+ N_FC = 1562;
+ C_FC = 1415;
+ break;
+ case PILOT_PP5:
+ C_DATA = 1632;
+ N_FC = 1562;
+ C_FC = 1088;
+ break;
+ case PILOT_PP6:
+ C_DATA = 0;
+ N_FC = 0;
+ C_FC = 0;
+ break;
+ case PILOT_PP7:
+ C_DATA = 1646;
+ N_FC = 1632;
+ C_FC = 1396;
+ break;
+ case PILOT_PP8:
+ C_DATA = 0;
+ N_FC = 0;
+ C_FC = 0;
+ break;
+ }
+ if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
if (C_DATA != 0) {
- C_DATA -= 18;
+ C_DATA -= 18;
}
if (N_FC != 0) {
- N_FC -= 18;
+ N_FC -= 18;
}
if (C_FC != 0) {
- C_FC -= 18;
+ C_FC -= 18;
}
- }
- break;
- case FFTSIZE_4K:
- switch (pilotpattern) {
- case PILOT_PP1:
- C_DATA = 3084;
- N_FC = 2272;
- C_FC = 1609;
- break;
- case PILOT_PP2:
- C_DATA = 3092;
- N_FC = 2840;
- C_FC = 2619;
- break;
- case PILOT_PP3:
- C_DATA = 3228;
- N_FC = 2840;
- C_FC = 1961;
- break;
- case PILOT_PP4:
- C_DATA = 3234;
- N_FC = 3124;
- C_FC = 2831;
- break;
- case PILOT_PP5:
- C_DATA = 3298;
- N_FC = 3124;
- C_FC = 2177;
- break;
- case PILOT_PP6:
- C_DATA = 0;
- N_FC = 0;
- C_FC = 0;
- break;
- case PILOT_PP7:
- C_DATA = 3328;
- N_FC = 3266;
- C_FC = 2792;
- break;
- case PILOT_PP8:
- C_DATA = 0;
- N_FC = 0;
- C_FC = 0;
- break;
- }
- if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
+ }
+ break;
+ case FFTSIZE_4K:
+ switch (pilotpattern) {
+ case PILOT_PP1:
+ C_DATA = 3084;
+ N_FC = 2272;
+ C_FC = 1609;
+ break;
+ case PILOT_PP2:
+ C_DATA = 3092;
+ N_FC = 2840;
+ C_FC = 2619;
+ break;
+ case PILOT_PP3:
+ C_DATA = 3228;
+ N_FC = 2840;
+ C_FC = 1961;
+ break;
+ case PILOT_PP4:
+ C_DATA = 3234;
+ N_FC = 3124;
+ C_FC = 2831;
+ break;
+ case PILOT_PP5:
+ C_DATA = 3298;
+ N_FC = 3124;
+ C_FC = 2177;
+ break;
+ case PILOT_PP6:
+ C_DATA = 0;
+ N_FC = 0;
+ C_FC = 0;
+ break;
+ case PILOT_PP7:
+ C_DATA = 3328;
+ N_FC = 3266;
+ C_FC = 2792;
+ break;
+ case PILOT_PP8:
+ C_DATA = 0;
+ N_FC = 0;
+ C_FC = 0;
+ break;
+ }
+ if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
if (C_DATA != 0) {
- C_DATA -= 36;
+ C_DATA -= 36;
}
if (N_FC != 0) {
- N_FC -= 36;
+ N_FC -= 36;
}
if (C_FC != 0) {
- C_FC -= 36;
+ C_FC -= 36;
}
- }
- break;
- case FFTSIZE_8K:
- case FFTSIZE_8K_T2GI:
- if (carriermode == CARRIERS_NORMAL) {
+ }
+ break;
+ case FFTSIZE_8K:
+ case FFTSIZE_8K_T2GI:
+ if (carriermode == CARRIERS_NORMAL) {
switch (pilotpattern) {
- case PILOT_PP1:
+ case PILOT_PP1:
C_DATA = 6208;
N_FC = 4544;
C_FC = 3218;
break;
- case PILOT_PP2:
+ case PILOT_PP2:
C_DATA = 6214;
N_FC = 5680;
C_FC = 5238;
break;
- case PILOT_PP3:
+ case PILOT_PP3:
C_DATA = 6494;
N_FC = 5680;
C_FC = 3922;
break;
- case PILOT_PP4:
+ case PILOT_PP4:
C_DATA = 6498;
N_FC = 6248;
C_FC = 5662;
break;
- case PILOT_PP5:
+ case PILOT_PP5:
C_DATA = 6634;
N_FC = 6248;
C_FC = 4354;
break;
- case PILOT_PP6:
+ case PILOT_PP6:
C_DATA = 0;
N_FC = 0;
C_FC = 0;
break;
- case PILOT_PP7:
+ case PILOT_PP7:
C_DATA = 6698;
N_FC = 6532;
C_FC = 5585;
break;
- case PILOT_PP8:
+ case PILOT_PP8:
C_DATA = 6698;
N_FC = 0;
C_FC = 0;
break;
}
- }
- else {
+ } else {
switch (pilotpattern) {
- case PILOT_PP1:
+ case PILOT_PP1:
C_DATA = 6296;
N_FC = 4608;
C_FC = 3264;
break;
- case PILOT_PP2:
+ case PILOT_PP2:
C_DATA = 6298;
N_FC = 5760;
C_FC = 5312;
break;
- case PILOT_PP3:
+ case PILOT_PP3:
C_DATA = 6584;
N_FC = 5760;
C_FC = 3978;
break;
- case PILOT_PP4:
+ case PILOT_PP4:
C_DATA = 6588;
N_FC = 6336;
C_FC = 5742;
break;
- case PILOT_PP5:
+ case PILOT_PP5:
C_DATA = 6728;
N_FC = 6336;
C_FC = 4416;
break;
- case PILOT_PP6:
+ case PILOT_PP6:
C_DATA = 0;
N_FC = 0;
C_FC = 0;
break;
- case PILOT_PP7:
+ case PILOT_PP7:
C_DATA = 6788;
N_FC = 6624;
C_FC = 5664;
break;
- case PILOT_PP8:
+ case PILOT_PP8:
C_DATA = 6788;
N_FC = 0;
C_FC = 0;
break;
}
- }
- if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
+ }
+ if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
if (C_DATA != 0) {
- C_DATA -= 72;
+ C_DATA -= 72;
}
if (N_FC != 0) {
- N_FC -= 72;
+ N_FC -= 72;
}
if (C_FC != 0) {
- C_FC -= 72;
+ C_FC -= 72;
}
- }
- break;
- case FFTSIZE_16K:
- case FFTSIZE_16K_T2GI:
- if (carriermode == CARRIERS_NORMAL) {
+ }
+ break;
+ case FFTSIZE_16K:
+ case FFTSIZE_16K_T2GI:
+ if (carriermode == CARRIERS_NORMAL) {
switch (pilotpattern) {
- case PILOT_PP1:
+ case PILOT_PP1:
C_DATA = 12418;
N_FC = 9088;
C_FC = 6437;
break;
- case PILOT_PP2:
+ case PILOT_PP2:
C_DATA = 12436;
N_FC = 11360;
C_FC = 10476;
break;
- case PILOT_PP3:
+ case PILOT_PP3:
C_DATA = 12988;
N_FC = 11360;
C_FC = 7845;
break;
- case PILOT_PP4:
+ case PILOT_PP4:
C_DATA = 13002;
N_FC = 12496;
C_FC = 11324;
break;
- case PILOT_PP5:
+ case PILOT_PP5:
C_DATA = 13272;
N_FC = 12496;
C_FC = 8709;
break;
- case PILOT_PP6:
+ case PILOT_PP6:
C_DATA = 13288;
N_FC = 13064;
C_FC = 11801;
break;
- case PILOT_PP7:
+ case PILOT_PP7:
C_DATA = 13416;
N_FC = 13064;
C_FC = 11170;
break;
- case PILOT_PP8:
+ case PILOT_PP8:
C_DATA = 13406;
N_FC = 0;
C_FC = 0;
break;
}
- }
- else {
+ } else {
switch (pilotpattern) {
- case PILOT_PP1:
+ case PILOT_PP1:
C_DATA = 12678;
N_FC = 9280;
C_FC = 6573;
break;
- case PILOT_PP2:
+ case PILOT_PP2:
C_DATA = 12698;
N_FC = 11600;
C_FC = 10697;
break;
- case PILOT_PP3:
+ case PILOT_PP3:
C_DATA = 13262;
N_FC = 11600;
C_FC = 8011;
break;
- case PILOT_PP4:
+ case PILOT_PP4:
C_DATA = 13276;
N_FC = 12760;
C_FC = 11563;
break;
- case PILOT_PP5:
+ case PILOT_PP5:
C_DATA = 13552;
N_FC = 12760;
C_FC = 8893;
break;
- case PILOT_PP6:
+ case PILOT_PP6:
C_DATA = 13568;
N_FC = 13340;
C_FC = 12051;
break;
- case PILOT_PP7:
+ case PILOT_PP7:
C_DATA = 13698;
N_FC = 13340;
C_FC = 11406;
break;
- case PILOT_PP8:
+ case PILOT_PP8:
C_DATA = 13688;
N_FC = 0;
C_FC = 0;
break;
}
- }
- if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
+ }
+ if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
if (C_DATA != 0) {
- C_DATA -= 144;
+ C_DATA -= 144;
}
if (N_FC != 0) {
- N_FC -= 144;
+ N_FC -= 144;
}
if (C_FC != 0) {
- C_FC -= 144;
+ C_FC -= 144;
}
- }
- break;
- case FFTSIZE_32K:
- case FFTSIZE_32K_T2GI:
- if (carriermode == CARRIERS_NORMAL) {
+ }
+ break;
+ case FFTSIZE_32K:
+ case FFTSIZE_32K_T2GI:
+ if (carriermode == CARRIERS_NORMAL) {
switch (pilotpattern) {
- case PILOT_PP1:
+ case PILOT_PP1:
C_DATA = 0;
N_FC = 0;
C_FC = 0;
break;
- case PILOT_PP2:
+ case PILOT_PP2:
C_DATA = 24886;
N_FC = 22720;
C_FC = 20952;
break;
- case PILOT_PP3:
+ case PILOT_PP3:
C_DATA = 0;
N_FC = 0;
C_FC = 0;
break;
- case PILOT_PP4:
+ case PILOT_PP4:
C_DATA = 26022;
N_FC = 24992;
C_FC = 22649;
break;
- case PILOT_PP5:
+ case PILOT_PP5:
C_DATA = 0;
N_FC = 0;
C_FC = 0;
break;
- case PILOT_PP6:
+ case PILOT_PP6:
C_DATA = 26592;
N_FC = 26128;
C_FC = 23603;
break;
- case PILOT_PP7:
+ case PILOT_PP7:
C_DATA = 26836;
N_FC = 0;
C_FC = 0;
break;
- case PILOT_PP8:
+ case PILOT_PP8:
C_DATA = 26812;
N_FC = 0;
C_FC = 0;
break;
}
- }
- else {
+ } else {
switch (pilotpattern) {
- case PILOT_PP1:
+ case PILOT_PP1:
C_DATA = 0;
N_FC = 0;
C_FC = 0;
break;
- case PILOT_PP2:
+ case PILOT_PP2:
C_DATA = 25412;
N_FC = 23200;
C_FC = 21395;
break;
- case PILOT_PP3:
+ case PILOT_PP3:
C_DATA = 0;
N_FC = 0;
C_FC = 0;
break;
- case PILOT_PP4:
+ case PILOT_PP4:
C_DATA = 26572;
N_FC = 25520;
C_FC = 23127;
break;
- case PILOT_PP5:
+ case PILOT_PP5:
C_DATA = 0;
N_FC = 0;
C_FC = 0;
break;
- case PILOT_PP6:
+ case PILOT_PP6:
C_DATA = 27152;
N_FC = 26680;
C_FC = 24102;
break;
- case PILOT_PP7:
+ case PILOT_PP7:
C_DATA = 27404;
N_FC = 0;
C_FC = 0;
break;
- case PILOT_PP8:
+ case PILOT_PP8:
C_DATA = 27376;
N_FC = 0;
C_FC = 0;
break;
}
- }
- if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
+ }
+ if (paprmode == PAPR_TR || paprmode == PAPR_BOTH) {
if (C_DATA != 0) {
- C_DATA -= 288;
+ C_DATA -= 288;
}
if (N_FC != 0) {
- N_FC -= 288;
+ N_FC -= 288;
}
if (C_FC != 0) {
- C_FC -= 288;
+ C_FC -= 288;
}
- }
- break;
- }
- if ((preamble == PREAMBLE_T2_SISO) || (preamble == PREAMBLE_T2_LITE_SISO)) {
+ }
+ break;
+ }
+ if ((preamble == PREAMBLE_T2_SISO) || (preamble == PREAMBLE_T2_LITE_SISO)) {
if (guardinterval == GI_1_128 && pilotpattern == PILOT_PP7) {
- N_FC = 0;
- C_FC = 0;
+ N_FC = 0;
+ C_FC = 0;
}
if (guardinterval == GI_1_32 && pilotpattern == PILOT_PP4) {
- N_FC = 0;
- C_FC = 0;
+ N_FC = 0;
+ C_FC = 0;
}
if (guardinterval == GI_1_16 && pilotpattern == PILOT_PP2) {
- N_FC = 0;
- C_FC = 0;
+ N_FC = 0;
+ C_FC = 0;
}
if (guardinterval == GI_19_256 && pilotpattern == PILOT_PP2) {
- N_FC = 0;
- C_FC = 0;
+ N_FC = 0;
+ C_FC = 0;
}
- }
- for (int i = 0; i < max_states; i++) {
+ }
+ for (int i = 0; i < max_states; i++) {
if (i == 0 || i == 1) {
- lfsr = 0;
- }
- else if (i == 2) {
- lfsr = 1;
- }
- else {
- result = 0;
- for (int k = 0; k < xor_size; k++) {
- result ^= (lfsr >> logic[k]) & 1;
- }
- lfsr &= pn_mask;
- lfsr >>= 1;
- lfsr |= result << (pn_degree - 1);
+ lfsr = 0;
+ } else if (i == 2) {
+ lfsr = 1;
+ } else {
+ result = 0;
+ for (int k = 0; k < xor_size; k++) {
+ result ^= (lfsr >> logic[k]) & 1;
+ }
+ lfsr &= pn_mask;
+ lfsr >>= 1;
+ lfsr |= result << (pn_degree - 1);
}
even = 0;
odd = 0;
for (int n = 0; n < pn_degree; n++) {
- even |= ((lfsr >> n) & 0x1) << bitpermeven[n];
+ even |= ((lfsr >> n) & 0x1) << bitpermeven[n];
}
for (int n = 0; n < pn_degree; n++) {
- odd |= ((lfsr >> n) & 0x1) << bitpermodd[n];
+ odd |= ((lfsr >> n) & 0x1) << bitpermodd[n];
}
even = even + ((i % 2) * (max_states / 2));
odd = odd + ((i % 2) * (max_states / 2));
if (even < C_DATA) {
- Heven[q_even++] = even;
+ Heven[q_even++] = even;
}
if (odd < C_DATA) {
- Hodd[q_odd++] = odd;
+ Hodd[q_odd++] = odd;
}
if (even < C_P2) {
- HevenP2[q_evenP2++] = even;
+ HevenP2[q_evenP2++] = even;
}
if (odd < C_P2) {
- HoddP2[q_oddP2++] = odd;
+ HoddP2[q_oddP2++] = odd;
}
if (even < N_FC) {
- HevenFC[q_evenFC++] = even;
+ HevenFC[q_evenFC++] = even;
}
if (odd < N_FC) {
- HoddFC[q_oddFC++] = odd;
+ HoddFC[q_oddFC++] = odd;
}
- }
- if (fftsize == FFTSIZE_32K || fftsize == FFTSIZE_32K_T2GI) {
+ }
+ if (fftsize == FFTSIZE_32K || fftsize == FFTSIZE_32K_T2GI) {
for (int j = 0; j < q_odd; j++) {
- int a;
- a = Hodd[j];
- Heven[a] = j;
+ int a;
+ a = Hodd[j];
+ Heven[a] = j;
}
for (int j = 0; j < q_oddP2; j++) {
- int a;
- a = HoddP2[j];
- HevenP2[a] = j;
+ int a;
+ a = HoddP2[j];
+ HevenP2[a] = j;
}
for (int j = 0; j < q_oddFC; j++) {
- int a;
- a = HoddFC[j];
- HevenFC[a] = j;
+ int a;
+ a = HoddFC[j];
+ HevenFC[a] = j;
}
- }
- if (N_FC == 0) {
+ }
+ if (N_FC == 0) {
set_output_multiple((N_P2 * C_P2) + (numdatasyms * C_DATA));
interleaved_items = (N_P2 * C_P2) + (numdatasyms * C_DATA);
num_data_symbols = numdatasyms;
- }
- else {
+ } else {
set_output_multiple((N_P2 * C_P2) + ((numdatasyms - 1) * C_DATA) + N_FC);
interleaved_items = (N_P2 * C_P2) + ((numdatasyms - 1) * C_DATA) + N_FC;
num_data_symbols = numdatasyms - 1;
- }
}
+}
- /*
- * Our virtual destructor.
- */
- dvbt2_freqinterleaver_cc_impl::~dvbt2_freqinterleaver_cc_impl()
- {
- }
+/*
+ * Our virtual destructor.
+ */
+dvbt2_freqinterleaver_cc_impl::~dvbt2_freqinterleaver_cc_impl() {}
- int
- dvbt2_freqinterleaver_cc_impl::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
- {
- const gr_complex *in = (const gr_complex *) input_items[0];
- gr_complex *out = (gr_complex *) output_items[0];
- int symbol = 0;
- int *H;
+int dvbt2_freqinterleaver_cc_impl::work(int noutput_items,
+ gr_vector_const_void_star& input_items,
+ gr_vector_void_star& output_items)
+{
+ const gr_complex* in = (const gr_complex*)input_items[0];
+ gr_complex* out = (gr_complex*)output_items[0];
+ int symbol = 0;
+ int* H;
- for (int i = 0; i < noutput_items; i += interleaved_items) {
+ for (int i = 0; i < noutput_items; i += interleaved_items) {
for (int j = 0; j < N_P2; j++) {
- if ((symbol % 2) == 0) {
- H = HevenP2;
- }
- else {
- H = HoddP2;
- }
- for (int j = 0; j < C_P2; j++) {
- *out++ = in[H[j]];
- }
- symbol++;
- in += C_P2;
+ if ((symbol % 2) == 0) {
+ H = HevenP2;
+ } else {
+ H = HoddP2;
+ }
+ for (int j = 0; j < C_P2; j++) {
+ *out++ = in[H[j]];
+ }
+ symbol++;
+ in += C_P2;
}
for (int j = 0; j < num_data_symbols; j++) {
- if ((symbol % 2) == 0) {
- H = Heven;
- }
- else {
- H = Hodd;
- }
- for (int j = 0; j < C_DATA; j++) {
- *out++ = in[H[j]];
- }
- symbol++;
- in += C_DATA;
+ if ((symbol % 2) == 0) {
+ H = Heven;
+ } else {
+ H = Hodd;
+ }
+ for (int j = 0; j < C_DATA; j++) {
+ *out++ = in[H[j]];
+ }
+ symbol++;
+ in += C_DATA;
}
if (N_FC != 0) {
- if ((symbol % 2) == 0) {
- H = HevenFC;
- }
- else {
- H = HoddFC;
- }
- for (int j = 0; j < N_FC; j++) {
- *out++ = in[H[j]];
- }
- symbol++;
- in += N_FC;
- }
- }
-
- // Tell runtime system how many output items we produced.
- return noutput_items;
+ if ((symbol % 2) == 0) {
+ H = HevenFC;
+ } else {
+ H = HoddFC;
+ }
+ for (int j = 0; j < N_FC; j++) {
+ *out++ = in[H[j]];
+ }
+ symbol++;
+ in += N_FC;
+ }
}
- const int dvbt2_freqinterleaver_cc_impl::bitperm1keven[9] =
- {
- 8, 7, 6, 5, 0, 1, 2, 3, 4
- };
+ // Tell runtime system how many output items we produced.
+ return noutput_items;
+}
- const int dvbt2_freqinterleaver_cc_impl::bitperm1kodd[9] =
- {
- 6, 8, 7, 4, 1, 0, 5, 2, 3
- };
+const int dvbt2_freqinterleaver_cc_impl::bitperm1keven[9] = { 8, 7, 6, 5, 0, 1, 2, 3, 4 };
- const int dvbt2_freqinterleaver_cc_impl::bitperm2keven[10] =
- {
- 4, 3, 9, 6, 2, 8, 1, 5, 7, 0
- };
+const int dvbt2_freqinterleaver_cc_impl::bitperm1kodd[9] = { 6, 8, 7, 4, 1, 0, 5, 2, 3 };
- const int dvbt2_freqinterleaver_cc_impl::bitperm2kodd[10] =
- {
- 6, 9, 4, 8, 5, 1, 0, 7, 2, 3
- };
+const int dvbt2_freqinterleaver_cc_impl::bitperm2keven[10] = { 4, 3, 9, 6, 2,
+ 8, 1, 5, 7, 0 };
- const int dvbt2_freqinterleaver_cc_impl::bitperm4keven[11] =
- {
- 6, 3, 0, 9, 4, 2, 1, 8, 5, 10, 7
- };
+const int dvbt2_freqinterleaver_cc_impl::bitperm2kodd[10] = {
+ 6, 9, 4, 8, 5, 1, 0, 7, 2, 3
+};
- const int dvbt2_freqinterleaver_cc_impl::bitperm4kodd[11] =
- {
- 5, 9, 1, 4, 3, 0, 8, 10, 7, 2, 6
- };
+const int dvbt2_freqinterleaver_cc_impl::bitperm4keven[11] = { 6, 3, 0, 9, 4, 2,
+ 1, 8, 5, 10, 7 };
- const int dvbt2_freqinterleaver_cc_impl::bitperm8keven[12] =
- {
- 7, 1, 4, 2, 9, 6, 8, 10, 0, 3, 11, 5
- };
+const int dvbt2_freqinterleaver_cc_impl::bitperm4kodd[11] = { 5, 9, 1, 4, 3, 0,
+ 8, 10, 7, 2, 6 };
- const int dvbt2_freqinterleaver_cc_impl::bitperm8kodd[12] =
- {
- 11, 4, 9, 3, 1, 2, 5, 0, 6, 7, 10, 8
- };
+const int dvbt2_freqinterleaver_cc_impl::bitperm8keven[12] = { 7, 1, 4, 2, 9, 6,
+ 8, 10, 0, 3, 11, 5 };
- const int dvbt2_freqinterleaver_cc_impl::bitperm16keven[13] =
- {
- 9, 7, 6, 10, 12, 5, 1, 11, 0, 2, 3, 4, 8
- };
+const int dvbt2_freqinterleaver_cc_impl::bitperm8kodd[12] = { 11, 4, 9, 3, 1, 2,
+ 5, 0, 6, 7, 10, 8 };
- const int dvbt2_freqinterleaver_cc_impl::bitperm16kodd[13] =
- {
- 6, 8, 10, 12, 2, 0, 4, 1, 11, 3, 5, 9, 7
- };
+const int dvbt2_freqinterleaver_cc_impl::bitperm16keven[13] = { 9, 7, 6, 10, 12, 5, 1,
+ 11, 0, 2, 3, 4, 8 };
- const int dvbt2_freqinterleaver_cc_impl::bitperm32k[14] =
- {
- 7, 13, 3, 4, 9, 2, 12, 11, 1, 8, 10, 0, 5, 6
- };
+const int dvbt2_freqinterleaver_cc_impl::bitperm16kodd[13] = { 6, 8, 10, 12, 2, 0, 4,
+ 1, 11, 3, 5, 9, 7 };
- } /* namespace dtv */
-} /* namespace gr */
+const int dvbt2_freqinterleaver_cc_impl::bitperm32k[14] = { 7, 13, 3, 4, 9, 2, 12,
+ 11, 1, 8, 10, 0, 5, 6 };
+} /* namespace dtv */
+} /* namespace gr */