84 lines
1.7 KiB
C++
84 lines
1.7 KiB
C++
|
|
#include <stdlib.h>
|
|
#include <algorithm>
|
|
#include <cstdint>
|
|
#include <cmath>
|
|
|
|
#include "ldpc/generic.hh"
|
|
#include "ldpc/layered_decoder.hh"
|
|
|
|
static const int DEFAULT_TRIALS = 25;
|
|
|
|
struct DVB_S2_TABLE_C9
|
|
{
|
|
static const int M = 360;
|
|
static const int N = 16200;
|
|
static const int K = 13320;
|
|
static const int LINKS_MIN_CN = 15;
|
|
static const int LINKS_MAX_CN = 19;
|
|
static const int LINKS_TOTAL = 49319;
|
|
static const int DEG_MAX = 13;
|
|
static const int DEG[];
|
|
static const int LEN[];
|
|
static const int POS[];
|
|
};
|
|
|
|
const int DVB_S2_TABLE_C9::DEG[] = {
|
|
13, 3, 0
|
|
};
|
|
|
|
const int DVB_S2_TABLE_C9::LEN[] = {
|
|
1, 36, 0
|
|
};
|
|
|
|
const int DVB_S2_TABLE_C9::POS[] = {
|
|
3, 2409, 499, 1481, 908, 559, 716, 1270, 333, 2508, 2264, 1702, 2805,
|
|
4, 2447, 1926,
|
|
5, 414, 1224,
|
|
6, 2114, 842,
|
|
7, 212, 573,
|
|
0, 2383, 2112,
|
|
1, 2286, 2348,
|
|
2, 545, 819,
|
|
3, 1264, 143,
|
|
4, 1701, 2258,
|
|
5, 964, 166,
|
|
6, 114, 2413,
|
|
7, 2243, 81,
|
|
0, 1245, 1581,
|
|
1, 775, 169,
|
|
2, 1696, 1104,
|
|
3, 1914, 2831,
|
|
4, 532, 1450,
|
|
5, 91, 974,
|
|
6, 497, 2228,
|
|
7, 2326, 1579,
|
|
0, 2482, 256,
|
|
1, 1117, 1261,
|
|
2, 1257, 1658,
|
|
3, 1478, 1225,
|
|
4, 2511, 980,
|
|
5, 2320, 2675,
|
|
6, 435, 1278,
|
|
7, 228, 503,
|
|
0, 1885, 2369,
|
|
1, 57, 483,
|
|
2, 838, 1050,
|
|
3, 1231, 1990,
|
|
4, 1738, 68,
|
|
5, 2392, 951,
|
|
6, 163, 645,
|
|
7, 2644, 1704,
|
|
};
|
|
|
|
extern "C" {
|
|
|
|
int ldpc_decode(float *symbols, int trials) {
|
|
if (trials < 0)
|
|
trials = DEFAULT_TRIALS;
|
|
|
|
LDPCDecoder<float, SumProductAlgorithm<float, SelfCorrectedUpdate<float>>, LDPC<DVB_S2_TABLE_C9>> decoder;
|
|
return decoder.run(symbols, symbols+decoder.K, trials, 1);
|
|
}
|
|
|
|
}
|