kopia lustrzana https://github.com/rs1729/RS
ecc: RS(15,11)
rodzic
456108ea15
commit
4abdc6d4a5
|
@ -104,8 +104,8 @@ static RS_t RS256 = { 255, 12, 24, 231, 0, 1, 1, {0}};
|
||||||
static RS_t RS256ccsds = { 255, 16, 32, 223, 112, 11, 116, {0}};
|
static RS_t RS256ccsds = { 255, 16, 32, 223, 112, 11, 116, {0}};
|
||||||
static RS_t BCH64 = { 63, 2, 12, 51, 1, 1, 1, {0}};
|
static RS_t BCH64 = { 63, 2, 12, 51, 1, 1, 1, {0}};
|
||||||
|
|
||||||
static RS_t RS16_0 = { 15, 3, 6, 9, 0, 1, 1, {0}};
|
// static RS_t RS16_0 = { 15, 3, 6, 9, 0, 1, 1, {0}};
|
||||||
//static RS_t RS16_1 = { 15, 3, 6, 9, 1, 1, 1, {0}};
|
static RS_t RS16ccsds = { 15, 2, 4, 11, 6, 1, 1, {0}};
|
||||||
|
|
||||||
|
|
||||||
static GF_t GF;
|
static GF_t GF;
|
||||||
|
@ -813,15 +813,15 @@ int rs_init_BCH64() {
|
||||||
return check_gen;
|
return check_gen;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rs_init_RS15() {
|
int rs_init_RS15ccsds() {
|
||||||
int i, check_gen;
|
int i, check_gen;
|
||||||
ui8_t Xalp[MAX_DEG+1];
|
ui8_t Xalp[MAX_DEG+1];
|
||||||
|
|
||||||
GF = GF16RS;
|
GF = GF16RS;
|
||||||
check_gen = GF_genTab( GF, exp_a, log_a);
|
check_gen = GF_genTab( GF, exp_a, log_a);
|
||||||
|
|
||||||
RS = RS16_0; // N=15, t=3, b=0, p=1
|
//RS = RS16_0; // N=15, t=3, b=0, p=1
|
||||||
//RS = RS16_1; // N=15, t=3, b=1, p=1
|
RS = RS16ccsds; // N=15, t=2, b=6, p=1
|
||||||
for (i = 0; i <= MAX_DEG; i++) RS.g[i] = 0;
|
for (i = 0; i <= MAX_DEG; i++) RS.g[i] = 0;
|
||||||
for (i = 0; i <= MAX_DEG; i++) Xalp[i] = 0;
|
for (i = 0; i <= MAX_DEG; i++) Xalp[i] = 0;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
GF(2^4) - RS(15,9)
|
GF(2^4) - RS(15,11)
|
||||||
(no bit-packing, i.e. 1 nibble <-> 1 byte)
|
(no bit-packing, i.e. 1 nibble <-> 1 byte)
|
||||||
|
|
||||||
a)
|
a)
|
||||||
|
@ -9,10 +9,10 @@ a)
|
||||||
gcc -c encode_rs_char.c
|
gcc -c encode_rs_char.c
|
||||||
gcc -c decode_rs_char.c
|
gcc -c decode_rs_char.c
|
||||||
|
|
||||||
gcc -DKA9Q ecc-rs_gf16.c init_rs_char.o encode_rs_char.o decode_rs_char.o -o ecc-rs15
|
gcc -DKA9Q ecc-rs_gf16.c init_rs_char.o encode_rs_char.o decode_rs_char.o -o ecc-rs15ccsds
|
||||||
|
|
||||||
b)
|
b)
|
||||||
gcc ecc-rs_gf16.c -o ecc-rs15
|
gcc ecc-rs_gf16.c -o ecc-rs15ccsds
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ typedef unsigned int ui32_t;
|
||||||
|
|
||||||
#define BFSIZE 512
|
#define BFSIZE 512
|
||||||
#define rs_N 15
|
#define rs_N 15
|
||||||
#define rs_R 6
|
#define rs_R 4
|
||||||
#define rs_K (rs_N-rs_R)
|
#define rs_K (rs_N-rs_R)
|
||||||
|
|
||||||
ui8_t data[BFSIZE];
|
ui8_t data[BFSIZE];
|
||||||
|
@ -58,11 +58,11 @@ int main(int argc, char *argv[]) {
|
||||||
*str2 = NULL;
|
*str2 = NULL;
|
||||||
|
|
||||||
|
|
||||||
rs_init_RS15(); // 0x13: X^4 + X + 1
|
rs_init_RS15ccsds(); // 0x13: X^4 + X + 1, t=2, b=6
|
||||||
|
|
||||||
#ifdef KA9Q
|
#ifdef KA9Q
|
||||||
rs = init_rs_char( 4, 0x13, 0, 1, 6, 0); // RS16_0
|
//rs = init_rs_char( 4, 0x13, 0, 1, 6, 0); // RS16_0
|
||||||
//rs = init_rs_char( 4, 0x13, 1, 1, 6, 0); // RS16_1
|
rs = init_rs_char( 4, 0x13, 6, 1, 4, 0); // RS16ccsds
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (argv[0] == NULL) return -1;
|
if (argv[0] == NULL) return -1;
|
||||||
|
@ -121,11 +121,17 @@ int main(int argc, char *argv[]) {
|
||||||
for (i = 0; i < rs_N; i++) codeword[rs_N-1-i] = cw[i];
|
for (i = 0; i < rs_N; i++) codeword[rs_N-1-i] = cw[i];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
printf("(received)\n");
|
||||||
printf("msg: ");
|
printf("msg: ");
|
||||||
for (i = rs_R; i < rs_N; i++) printf("%1X", cw[i]); // dbg: printf("%02X", cw[i]);
|
for (i = rs_R; i < rs_N; i++) printf("%1X", cw[i]); // dbg: printf("%02X", cw[i]);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("par: ");
|
printf("par: ");
|
||||||
for (i = 0; i < rs_R; i++) printf("%1X", cw[i]); printf("\n");
|
for (i = 0; i < rs_R; i++) printf("%1X", cw[i]);
|
||||||
|
printf("\n");
|
||||||
|
printf("msg+par:\n");
|
||||||
|
for (i = 0; i < rs_N; i++) printf("%1X", cw[i]);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
|
@ -213,14 +219,14 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
RS(15,9):
|
RS(15,11):
|
||||||
codeword length 15
|
codeword length 15
|
||||||
message length 9
|
message length 11
|
||||||
parity length 6
|
parity length 4
|
||||||
|
|
||||||
./ecc-rs15 msg [par]
|
./ecc-rs15 msg [par]
|
||||||
msg: 9 nibbles
|
msg: 11 nibbles
|
||||||
par: 6 nibbles
|
par: 4 nibbles
|
||||||
|
|
||||||
ecc-rs15 input/output: nibbles
|
ecc-rs15 input/output: nibbles
|
||||||
cw[]: 1 byte / 1 nibble
|
cw[]: 1 byte / 1 nibble
|
||||||
|
@ -228,33 +234,54 @@ cw[]: 1 byte / 1 nibble
|
||||||
|
|
||||||
examples:
|
examples:
|
||||||
|
|
||||||
$ ./ecc-rs15 000000001
|
$ ./ecc-rs15ccsds 00000000001
|
||||||
|
|
||||||
msg: 000000001
|
msg: 00000000001
|
||||||
|
|
||||||
cw
|
cw
|
||||||
par: 342FA1
|
par: 8281
|
||||||
cw-enc:
|
cw-enc:
|
||||||
342FA1000000001
|
828100000000001
|
||||||
|
|
||||||
codeword
|
codeword
|
||||||
message: 100000000
|
message: 10000000000
|
||||||
parity : 1af243
|
parity : 1828
|
||||||
codeword:
|
codeword:
|
||||||
1000000001af243
|
100000000001828
|
||||||
|
|
||||||
$ ./ecc-rs15 000000001 342FA1
|
$ ./ecc-rs15ccsds 00000000001 8281
|
||||||
|
|
||||||
msg: 000000001
|
(received)
|
||||||
par: 342FA1
|
msg: 00000000001
|
||||||
|
par: 8281
|
||||||
|
msg+par:
|
||||||
|
828100000000001
|
||||||
|
|
||||||
cw
|
cw
|
||||||
errs: 0
|
errs: 0
|
||||||
342FA1000000001
|
828100000000001
|
||||||
|
|
||||||
codeword
|
codeword
|
||||||
errors: 0
|
errors: 0
|
||||||
1000000001af243
|
100000000001828
|
||||||
|
|
||||||
|
$ ./ecc-rs15ccsds 00000000001 8283
|
||||||
|
|
||||||
|
(received)
|
||||||
|
msg: 00000000001
|
||||||
|
par: 8283
|
||||||
|
msg+par:
|
||||||
|
828300000000001
|
||||||
|
|
||||||
|
cw
|
||||||
|
errs: 1
|
||||||
|
pos: 3
|
||||||
|
828100000000001
|
||||||
|
|
||||||
|
codeword
|
||||||
|
errors: 1
|
||||||
|
pos: 11
|
||||||
|
100000000001828
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue