Statistics
| Branch: | Tag: | Revision:

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
}