mirror of
https://git.vladimir.cc/vladimir/libfec.git
synced 2026-08-25 17:27:34 +00:00
init commit
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
|
||||
#define MCQLI24 1 // used by ICE
|
||||
//#define RJ1 1
|
||||
//#define RJ2 1
|
||||
//#define BJ24 1
|
||||
//#define MJ 1
|
||||
//#define MCQLI24 1 // k=24 r=1/2 code for ICE
|
||||
//#define JQLIODP48 1
|
||||
//#define MCQLI48 1
|
||||
//#define OT24 1
|
||||
//#define QR24 1
|
||||
//#define LL 1
|
||||
//#define J60 1
|
||||
//#define J50 1
|
||||
|
||||
//#define MCQLI32 1 // NASA standard
|
||||
//#define JP24 1
|
||||
//#define JSODP47 1
|
||||
//#define BLLF47 1
|
||||
|
||||
// Convolutional coding polynomials. All are rate 1/2
|
||||
|
||||
#if defined(MCQLI32)
|
||||
//"NASA standard" code by Massey & Costello
|
||||
// Shortened from MCQLI-48:
|
||||
// Nonsystematic, quick look-in, dmin=11, dfree=23
|
||||
// used on Pioneer 10-12, Helios A,B
|
||||
#define POLY1 0xbbef6bb7 // 111 011 011 101 011 011 110 111 110 111 010 = 73353367672
|
||||
#define POLY2 0xbbef6bb5 // 101 011 011 101 011 011 110 111 110 111 010 = 53353367672
|
||||
#define K 32
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
#elif defined(MJ)
|
||||
// Massey-Johannesson code
|
||||
// Nonsystematic, quick look-in, dmin=13, dfree>=23
|
||||
// Purported to be more computationally efficient than Massey-Costello
|
||||
// Appears related to 1JQLIODP-24
|
||||
#define POLY1 0xb840a20f // 111 100 000 100 010 100 000 010 000 111 010 = 74042402072
|
||||
#define POLY2 0xb840a20d // 101 100 000 100 010 100 000 010 000 111 010 = 54042402072
|
||||
#define K 32
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
#elif defined(LL)
|
||||
// Layland-Lushbaugh code
|
||||
// Nonsystematic, non-quick look-in, dmin=?, dfree=?
|
||||
#define POLY1 0xf2d05351 // 100 010 101 100 101 000 001 011 010 011 110 = 42545013236
|
||||
#define POLY2 0xe4613c47 // 111 000 100 011 110 010 000 110 001 001 110 = 70436206116
|
||||
#define K 32
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
|
||||
#elif defined(MCQLI24)
|
||||
// MCQLI-24
|
||||
// k=24 r=1/2 Massey QLI code for ISEE-3/International Comet Explorer
|
||||
// The ref gives the polynomials as 073353367 and 053353367 (octal)
|
||||
// Shortened from MCQLI-48
|
||||
#define POLY1 073665667
|
||||
#define POLY2 073665665
|
||||
#define K 24
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 1 // Invert the second symbol
|
||||
|
||||
// 1JQLIODP-24
|
||||
// Johannassen QLI ODP k=24
|
||||
#elif defined(RJ1)
|
||||
#define POLY1 074121017
|
||||
#define POLY2 074121015
|
||||
#define K 24
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
// 2JQLIODP-24
|
||||
// Johannassen QLI ODP k=24
|
||||
#elif defined(RJ2)
|
||||
#define POLY1 073541017
|
||||
#define POLY2 073541015
|
||||
#define K 24
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
// BJ-24
|
||||
// Bahl-Jelinek k=24 complementary code
|
||||
#elif defined(BJ24)
|
||||
#define POLY1 054220245
|
||||
#define POLY2 063557533
|
||||
#define K 24
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
// QR-24 code
|
||||
// Massey, Costello, Justesen Quadratic k=24 residue code
|
||||
#elif defined(QR24)
|
||||
#define POLY1 026241177
|
||||
#define POLY2 037620515
|
||||
#define K 24
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
// OT-24
|
||||
// Massey k=24 optimally truncatable code
|
||||
#elif defined(OT24)
|
||||
#define POLY1 062650457
|
||||
#define POLY2 062650455
|
||||
#define K 24
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
// MCQLI-48
|
||||
// Massey-Costelli QLI code k=48
|
||||
#elif defined(MCQLI48)
|
||||
#define POLY1 06556767373665667LL
|
||||
#define POLY2 06556767373665665LL
|
||||
#define K 48
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
// JQLIODP-48
|
||||
// Johannesson QLI ODP code with k=48
|
||||
#elif defined(JQLIODP48)
|
||||
#define POLY1 05634247020121017LL
|
||||
#define POLY2 05634247020121015LL
|
||||
#define K 48
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
//BLLF-47
|
||||
// Bussgang, Lin, Lynn, Forney k=47
|
||||
// Systematic
|
||||
#elif defined(BLLF47)
|
||||
#define POLY1 1
|
||||
#define POLY2 0531746407671547LL
|
||||
#define K 45
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
// JSODP-47
|
||||
// Johannesson's ODP k=47
|
||||
// Systematic
|
||||
#elif defined(JSODP47)
|
||||
#define POLY1 1
|
||||
#define POLY2 03331355751514473LL
|
||||
#define K 47
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
// JP-24
|
||||
// Mentioned in addendum to Massey
|
||||
// Non-QLI, non-systematic
|
||||
#elif defined (JP24)
|
||||
#define POLY1 052431655
|
||||
#define POLY2 061411757
|
||||
#define K 24
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
// Monster k=60 Johannesson systematic
|
||||
#elif defined (J60)
|
||||
#define POLY1 1
|
||||
#define POLY2 073607331355751514473LL
|
||||
#define K 60
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
// Monster k=50 Johannesson QLI
|
||||
#elif defined (J50)
|
||||
#define POLY1 075634247020121017
|
||||
#define POLY2 075634247020121015
|
||||
#define K 50
|
||||
#define G1FLIP 0
|
||||
#define G2FLIP 0
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
int encode(
|
||||
unsigned char *symbols, // Output buffer, 2*8*nbytes
|
||||
const unsigned char *data, // Input buffer, nbytes
|
||||
unsigned int nbytes); // Number of bytes in data
|
||||
Reference in New Issue
Block a user