|
static void | deserialize_qpsk (plslot< SOFTSYMB > *pin, int nslots, SOFTBYTE *pout) |
|
static void | deinterleave (int bps, int rows, const plslot< SOFTSYMB > *pin, int nslots, bool msb_first, SOFTBYTE *pout) |
|
template<int MSB_FIRST, int BPS> |
static void | deinterleave (int rows, const plslot< SOFTSYMB > *pin, int nslots, SOFTBYTE *pout) |
|
static void | deinterleave4050 (const plslot< SOFTSYMB > *pin, int nslots, SOFTBYTE *pout) |
|
static void | split_symbol (const llr_ss &ps, int bps, hard_sb accs[], int nacc, bool msb_first) |
|
template<int MSB_FIRST, int BPS> |
static void | split_symbol (const llr_ss &ps, hard_sb accs[], int nacc) |
|
static void | split_symbol (const llr_ss &ps, int bps, llr_sb accs[], int nacc, bool msb_first) |
|
template<int MSB_FIRST, int BPS> |
static void | split_symbol (const llr_ss &ps, llr_sb accs[], int nacc) |
|
static void | pack_qpsk_symbol (const llr_ss &ps, hard_sb *acc, int nacc) |
|
static void | pack_qpsk_symbol (const llr_ss &ps, llr_sb *acc, int nacc) |
|
template<typename SOFTSYMB, typename SOFTBYTE>
struct leansdr::s2_deinterleaver< SOFTSYMB, SOFTBYTE >
Definition at line 1559 of file dvbs2.h.
template<typename SOFTSYMB, typename SOFTBYTE>
template<int MSB_FIRST, int BPS>
Definition at line 1698 of file dvbs2.h.
References leansdr::fail(), leansdr::fatal(), leansdr::plslot< SOFTSYMB >::LENGTH, leansdr::softword_clear(), and leansdr::plslot< SOFTSYMB >::symbols.
1701 if (BPS == 4 && rows == 4050 && MSB_FIRST)
1704 fatal(
"modcod/framesize combination not supported\n");
1705 int stride = rows / 8;
1707 for (
int b = 0; b < BPS; ++b)
1710 for (; nslots; --nslots, ++pin)
1712 const SOFTSYMB *ps = pin->symbols;
1713 for (
int ns = pin->LENGTH; ns--; ++ps)
1719 SOFTBYTE *po = pout;
1721 for (
int b = 0; b < BPS; ++b, po += stride)
1729 fail(
"Bug: s2_deinterleaver");
static void deinterleave4050(const plslot< SOFTSYMB > *pin, int nslots, SOFTBYTE *pout)
static void split_symbol(const llr_ss &ps, int bps, hard_sb accs[], int nacc, bool msb_first)
void fatal(const char *s)
void softword_clear(hard_sb *p)
template<typename SOFTSYMB, typename SOFTBYTE>
Reimplemented from leansdr::runnable_common.
Definition at line 1568 of file dvbs2.h.
References leansdr::fecframe< SOFTBYTE >::bytes, leansdr::check_modcod(), leansdr::fail(), leansdr::FEC35, leansdr::s2_pls::framebits(), leansdr::plslot< SOFTSYMB >::is_pls, leansdr::s2_pls::modcod, leansdr::modcod_info::nslots_nf, leansdr::modcod_info::nsymbols, leansdr::plslot< SOFTSYMB >::pls, leansdr::fecframe< SOFTBYTE >::pls, leansdr::modcod_info::rate, leansdr::pipereader< T >::rd(), leansdr::pipereader< T >::read(), leansdr::pipereader< T >::readable(), leansdr::s2_pls::sf, leansdr::pipewriter< T >::wr(), leansdr::pipewriter< T >::writable(), and leansdr::pipewriter< T >::written().
1570 while (
in.readable() >= 1 &&
out.writable() >= 1)
1572 plslot<SOFTSYMB> *pin =
in.rd();
1574 fail(
"s2_deinterleaver: bad input sequence");
1575 s2_pls *pls = &pin->pls;
1577 int nslots = pls->sf ? mcinfo->nslots_nf / 4 : mcinfo->nslots_nf;
1578 if (
in.readable() < 1 + nslots)
1580 fecframe<SOFTBYTE> *pout =
out.wr();
1582 SOFTBYTE *pbytes = pout->bytes;
1583 if (mcinfo->nsymbols == 4)
1587 int bps = log2(mcinfo->nsymbols);
1588 int rows = pls->framebits() / bps;
1589 if (mcinfo->nsymbols == 8 && mcinfo->rate ==
FEC35)
1590 deinterleave(bps, rows, pin + 1, nslots,
false, pbytes);
1592 deinterleave(bps, rows, pin + 1, nslots,
true, pbytes);
1594 in.read(1 + nslots);
static void deinterleave(int bps, int rows, const plslot< SOFTSYMB > *pin, int nslots, bool msb_first, SOFTBYTE *pout)
pipewriter< fecframe< SOFTBYTE > > out
pipereader< plslot< SOFTSYMB > > in
static void deserialize_qpsk(plslot< SOFTSYMB > *pin, int nslots, SOFTBYTE *pout)
const modcod_info * check_modcod(int m)