root / gnuradio-core / src / lib / reed-solomon / encode_rs.c @ 8e8335e2
History | View | Annotate | Download (1.1 kB)
| 1 | 5d69a524 | jcorgan | /* Reed-Solomon encoder
|
|---|---|---|---|
| 2 | 5d69a524 | jcorgan | * Copyright 2002, Phil Karn, KA9Q |
| 3 | 5d69a524 | jcorgan | * May be used under the terms of the GNU General Public License (GPL) |
| 4 | 5d69a524 | jcorgan | */ |
| 5 | 5d69a524 | jcorgan | #include <string.h> |
| 6 | 5d69a524 | jcorgan | |
| 7 | 5d69a524 | jcorgan | #ifdef FIXED
|
| 8 | 5d69a524 | jcorgan | #include "fixed.h" |
| 9 | 5d69a524 | jcorgan | #elif defined(BIGSYM)
|
| 10 | 5d69a524 | jcorgan | #include "int.h" |
| 11 | 5d69a524 | jcorgan | #else
|
| 12 | 5d69a524 | jcorgan | #include "char.h" |
| 13 | 5d69a524 | jcorgan | #endif
|
| 14 | 5d69a524 | jcorgan | |
| 15 | 5d69a524 | jcorgan | void ENCODE_RS(
|
| 16 | 5d69a524 | jcorgan | #ifndef FIXED
|
| 17 | 5d69a524 | jcorgan | void *p,
|
| 18 | 5d69a524 | jcorgan | #endif
|
| 19 | 5d69a524 | jcorgan | DTYPE *data, DTYPE *bb){
|
| 20 | 5d69a524 | jcorgan | #ifndef FIXED
|
| 21 | 5d69a524 | jcorgan | struct rs *rs = (struct rs *)p; |
| 22 | 5d69a524 | jcorgan | #endif
|
| 23 | 9c853b96 | Tom Rondeau | unsigned int i, j; |
| 24 | 5d69a524 | jcorgan | DTYPE feedback; |
| 25 | 5d69a524 | jcorgan | |
| 26 | 5d69a524 | jcorgan | memset(bb,0,NROOTS*sizeof(DTYPE)); |
| 27 | 5d69a524 | jcorgan | |
| 28 | 5d69a524 | jcorgan | for(i=0;i<NN-NROOTS;i++){ |
| 29 | 5d69a524 | jcorgan | feedback = INDEX_OF[data[i] ^ bb[0]];
|
| 30 | 5d69a524 | jcorgan | if(feedback != A0){ /* feedback term is non-zero */ |
| 31 | 5d69a524 | jcorgan | #ifdef UNNORMALIZED
|
| 32 | 5d69a524 | jcorgan | /* This line is unnecessary when GENPOLY[NROOTS] is unity, as it must
|
| 33 | 5d69a524 | jcorgan | * always be for the polynomials constructed by init_rs() |
| 34 | 5d69a524 | jcorgan | */ |
| 35 | 5d69a524 | jcorgan | feedback = MODNN(NN - GENPOLY[NROOTS] + feedback); |
| 36 | 5d69a524 | jcorgan | #endif
|
| 37 | 5d69a524 | jcorgan | for(j=1;j<NROOTS;j++) |
| 38 | 5d69a524 | jcorgan | bb[j] ^= ALPHA_TO[MODNN(feedback + GENPOLY[NROOTS-j])]; |
| 39 | 5d69a524 | jcorgan | } |
| 40 | 5d69a524 | jcorgan | /* Shift */
|
| 41 | 5d69a524 | jcorgan | memmove(&bb[0],&bb[1],sizeof(DTYPE)*(NROOTS-1)); |
| 42 | 5d69a524 | jcorgan | if(feedback != A0)
|
| 43 | 5d69a524 | jcorgan | bb[NROOTS-1] = ALPHA_TO[MODNN(feedback + GENPOLY[0])]; |
| 44 | 5d69a524 | jcorgan | else
|
| 45 | 5d69a524 | jcorgan | bb[NROOTS-1] = 0; |
| 46 | 5d69a524 | jcorgan | } |
| 47 | 5d69a524 | jcorgan | } |