183 lines
4.3 KiB
C
183 lines
4.3 KiB
C
|
|
#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
|