summaryrefslogtreecommitdiff
path: root/gr-dtv
diff options
context:
space:
mode:
authorRon Economos <w6rz@comcast.net>2016-09-18 20:52:24 -0700
committerRon Economos <w6rz@comcast.net>2016-09-18 20:52:24 -0700
commit2f1dd2faf8e56d3049217531eeed59f2a63ad5af (patch)
tree604446db69e664950d81d823a0f2e0f83445ba46 /gr-dtv
parentda0a102e9b076db83fe5a63b3730ac39b588eb92 (diff)
dtv: Refactor DVB-T2 interleaver to match specification demux tables.
Diffstat (limited to 'gr-dtv')
-rw-r--r--gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc48
1 files changed, 18 insertions, 30 deletions
diff --git a/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc
index 9ebfb143ed..1b250a7224 100644
--- a/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc
+++ b/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc
@@ -271,13 +271,10 @@ namespace gr {
pack = 0;
for (int e = 0; e < (mod * 2); e++) {
offset = mux[e];
- pack |= tempu[index + offset];
- pack <<= 1;
+ pack |= tempu[index++] << (((mod * 2) - 1) - offset);
}
- pack >>= 1;
out[produced++] = pack >> 4;
out[produced++] = pack & 0xf;
- index += (mod * 2);
consumed += (mod * 2);
}
}
@@ -356,13 +353,10 @@ namespace gr {
pack = 0;
for (int e = 0; e < (mod * 2); e++) {
offset = mux[e];
- pack |= tempu[index + offset];
- pack <<= 1;
+ pack |= tempu[index++] << (((mod * 2) - 1) - offset);
}
- pack >>= 1;
out[produced++] = pack >> 6;
out[produced++] = pack & 0x3f;
- index += (mod * 2);
consumed += (mod * 2);
}
}
@@ -442,13 +436,10 @@ namespace gr {
pack = 0;
for (int e = 0; e < (mod * 2); e++) {
offset = mux[e];
- pack |= tempu[index + offset];
- pack <<= 1;
+ pack |= tempu[index++] << (((mod * 2) - 1) - offset);
}
- pack >>= 1;
out[produced++] = pack >> 8;
out[produced++] = pack & 0xff;
- index += (mod * 2);
consumed += (mod * 2);
}
}
@@ -510,12 +501,9 @@ namespace gr {
pack = 0;
for (int e = 0; e < mod; e++) {
offset = mux[e];
- pack |= tempu[index + offset];
- pack <<= 1;
+ pack |= tempu[index++] << ((mod - 1) - offset);
}
- pack >>= 1;
out[produced++] = pack & 0xff;
- index += mod;
consumed += mod;
}
}
@@ -563,72 +551,72 @@ namespace gr {
const int dvbt2_interleaver_bb_impl::mux16[8] =
{
- 7, 1, 3, 5, 2, 4, 6, 0
+ 7, 1, 4, 2, 5, 3, 6, 0
};
const int dvbt2_interleaver_bb_impl::mux64[12] =
{
- 11, 8, 5, 2, 10, 7, 4, 1, 9, 6, 3, 0
+ 11, 7, 3, 10, 6, 2, 9, 5, 1, 8, 4, 0
};
const int dvbt2_interleaver_bb_impl::mux256[16] =
{
- 15, 1, 13, 3, 10, 7, 9, 11, 4, 6, 8, 5, 12, 2, 14, 0
+ 15, 1, 13, 3, 8, 11, 9, 5, 10, 6, 4, 7, 12, 2, 14, 0
};
const int dvbt2_interleaver_bb_impl::mux16_35[8] =
{
- 0, 2, 3, 6, 4, 1, 7, 5
+ 0, 5, 1, 2, 4, 7, 3, 6
};
const int dvbt2_interleaver_bb_impl::mux16_13[8] =
{
- 1, 6, 5, 2, 3, 4, 0, 7
+ 6, 0, 3, 4, 5, 2, 1, 7
};
const int dvbt2_interleaver_bb_impl::mux16_25[8] =
{
- 3, 5, 6, 4, 2, 1, 7, 0
+ 7, 5, 4, 0, 3, 1, 2, 6
};
const int dvbt2_interleaver_bb_impl::mux64_35[12] =
{
- 4, 6, 0, 5, 8, 10, 2, 1, 7, 3, 11, 9
+ 2, 7, 6, 9, 0, 3, 1, 8, 4, 11, 5, 10
};
const int dvbt2_interleaver_bb_impl::mux64_13[12] =
{
- 2, 5, 1, 6, 0, 3, 4, 7, 8, 9, 10, 11
+ 4, 2, 0, 5, 6, 1, 3, 7, 8, 9, 10, 11
};
const int dvbt2_interleaver_bb_impl::mux64_25[12] =
{
- 1, 2, 4, 5, 0, 6, 3, 8, 7, 10, 9, 11
+ 4, 0, 1, 6, 2, 3, 5, 8, 7, 10, 9, 11
};
const int dvbt2_interleaver_bb_impl::mux256_35[16] =
{
- 4, 6, 0, 2, 3, 14, 12, 10, 7, 5, 8, 1, 15, 9, 11, 13
+ 2, 11, 3, 4, 0, 9, 1, 8, 10, 13, 7, 14, 6, 15, 5, 12
};
const int dvbt2_interleaver_bb_impl::mux256_23[16] =
{
- 3, 15, 1, 7, 4, 11, 5, 0, 12, 2, 9, 14, 13, 6, 8, 10
+ 7, 2, 9, 0, 4, 6, 13, 3, 14, 10, 15, 5, 8, 12, 11, 1
};
const int dvbt2_interleaver_bb_impl::mux256s[8] =
{
- 7, 2, 4, 1, 6, 3, 5, 0
+ 7, 3, 1, 5, 2, 6, 4, 0
};
const int dvbt2_interleaver_bb_impl::mux256s_13[8] =
{
- 1, 2, 3, 5, 0, 4, 6, 7
+ 4, 0, 1, 2, 5, 3, 6, 7
};
const int dvbt2_interleaver_bb_impl::mux256s_25[8] =
{
- 1, 3, 4, 5, 0, 2, 6, 7
+ 4, 0, 5, 1, 2, 3, 6, 7
};
} /* namespace dtv */