亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rs.c

?? Reed-Solomn code 編譯碼(含CCSDS鞋譯) 算法
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * Reed-Solomon coding and decoding
 * Phil Karn (karn@ka9q.ampr.org) September 1996
 * Separate CCSDS version create Dec 1998, merged into this version May 1999
 * 
 * This file is derived from my generic RS encoder/decoder, which is
 * in turn based on the program "new_rs_erasures.c" by Robert
 * Morelos-Zaragoza (robert@spectra.eng.hawaii.edu) and Hari Thirumoorthy
 * (harit@spectra.eng.hawaii.edu), Aug 1995
 
 * Copyright 1999 Phil Karn, KA9Q
 * May be used under the terms of the GNU public license
 */
#include <stdio.h>
#include "rs.h"

#ifdef CCSDS
/* CCSDS field generator polynomial: 1+x+x^2+x^7+x^8 */
int Pp[MM+1] = { 1, 1, 1, 0, 0, 0, 0, 1, 1 };

#else /* not CCSDS */
/* MM, KK, B0, PRIM are user-defined in rs.h */

/* Primitive polynomials - see Lin & Costello, Appendix A,
 * and  Lee & Messerschmitt, p. 453.
 */
#if(MM == 2)/* Admittedly silly */
int Pp[MM+1] = { 1, 1, 1 };

#elif(MM == 3)
/* 1 + x + x^3 */
int Pp[MM+1] = { 1, 1, 0, 1 };

#elif(MM == 4)
/* 1 + x + x^4 */
int Pp[MM+1] = { 1, 1, 0, 0, 1 };

#elif(MM == 5)
/* 1 + x^2 + x^5 */
int Pp[MM+1] = { 1, 0, 1, 0, 0, 1 };

#elif(MM == 6)
/* 1 + x + x^6 */
int Pp[MM+1] = { 1, 1, 0, 0, 0, 0, 1 };

#elif(MM == 7)
/* 1 + x^3 + x^7 */
int Pp[MM+1] = { 1, 0, 0, 1, 0, 0, 0, 1 };

#elif(MM == 8)
/* 1+x^2+x^3+x^4+x^8 */
int Pp[MM+1] = { 1, 0, 1, 1, 1, 0, 0, 0, 1 };

#elif(MM == 9)
/* 1+x^4+x^9 */
int Pp[MM+1] = { 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 };

#elif(MM == 10)
/* 1+x^3+x^10 */
int Pp[MM+1] = { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 };

#elif(MM == 11)
/* 1+x^2+x^11 */
int Pp[MM+1] = { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 };

#elif(MM == 12)
/* 1+x+x^4+x^6+x^12 */
int Pp[MM+1] = { 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1 };

#elif(MM == 13)
/* 1+x+x^3+x^4+x^13 */
int Pp[MM+1] = { 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 };

#elif(MM == 14)
/* 1+x+x^6+x^10+x^14 */
int Pp[MM+1] = { 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 };

#elif(MM == 15)
/* 1+x+x^15 */
int Pp[MM+1] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };

#elif(MM == 16)
/* 1+x+x^3+x^12+x^16 */
int Pp[MM+1] = { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1 };

#else
#error "Either CCSDS must be defined, or MM must be set in range 2-16"
#endif

#endif


/* This defines the type used to store an element of the Galois Field
 * used by the code. Make sure this is something larger than a char if
 * if anything larger than GF(256) is used.
 *
 * Note: unsigned char will work up to GF(256) but int seems to run
 * faster on the Pentium.
 */
typedef int gf;

/* index->polynomial form conversion table */
static gf Alpha_to[NN + 1];

/* Polynomial->index form conversion table */
static gf Index_of[NN + 1];

/* No legal value in index form represents zero, so
 * we need a special value for this purpose
 */
#define A0	(NN)

/* Generator polynomial g(x) in index form */
static gf Gg[NN - KK + 1];

static int RS_init; /* Initialization flag */

/* Compute x % NN, where NN is 2**MM - 1,
 * without a slow divide
 */
static inline gf
modnn(int x)
{
  while (x >= NN) {
    x -= NN;
    x = (x >> MM) + (x & NN);
  }
  return x;
}

#define	min(a,b)	((a) < (b) ? (a) : (b))

#define	CLEAR(a,n) {\
int ci;\
for(ci=(n)-1;ci >=0;ci--)\
(a)[ci] = 0;\
}

#define	COPY(a,b,n) {\
int ci;\
for(ci=(n)-1;ci >=0;ci--)\
(a)[ci] = (b)[ci];\
}

#define	COPYDOWN(a,b,n) {\
int ci;\
for(ci=(n)-1;ci >=0;ci--)\
(a)[ci] = (b)[ci];\
}

static void init_rs(void);

#ifdef CCSDS
/* Conversion lookup tables from conventional alpha to Berlekamp's
 * dual-basis representation. Used in the CCSDS version only.
 * taltab[] -- convert conventional to dual basis
 * tal1tab[] -- convert dual basis to conventional

 * Note: the actual RS encoder/decoder works with the conventional basis.
 * So data is converted from dual to conventional basis before either
 * encoding or decoding and then converted back.
 */
static unsigned char taltab[NN+1],tal1tab[NN+1];

static unsigned char tal[] = { 0x8d, 0xef, 0xec, 0x86, 0xfa, 0x99, 0xaf, 0x7b };

/* Generate conversion lookup tables between conventional alpha representation
 * (@**7, @**6, ...@**0)
 *  and Berlekamp's dual basis representation
 * (l0, l1, ...l7)
 */
static void
gen_ltab(void)
{
  int i,j,k;

  for(i=0;i<256;i++){/* For each value of input */
    taltab[i] = 0;
    for(j=0;j<8;j++) /* for each column of matrix */
      for(k=0;k<8;k++){ /* for each row of matrix */
	if(i & (1<<k))
	   taltab[i] ^= tal[7-k] & (1<<j);
      }
    tal1tab[taltab[i]] = i;
  }
}
#endif /* CCSDS */

#if PRIM != 1
static int Ldec;/* Decrement for aux location variable in Chien search */

static void
gen_ldec(void)
{
  for(Ldec=1;(Ldec % PRIM) != 0;Ldec+= NN)
    ;
  Ldec /= PRIM;
}
#else
#define Ldec 1
#endif

/* generate GF(2**m) from the irreducible polynomial p(X) in Pp[0]..Pp[m]
   lookup tables:  index->polynomial form   alpha_to[] contains j=alpha**i;
                   polynomial form -> index form  index_of[j=alpha**i] = i
   alpha=2 is the primitive element of GF(2**m)
   HARI's COMMENT: (4/13/94) alpha_to[] can be used as follows:
        Let @ represent the primitive element commonly called "alpha" that
   is the root of the primitive polynomial p(x). Then in GF(2^m), for any
   0 <= i <= 2^m-2,
        @^i = a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1)
   where the binary vector (a(0),a(1),a(2),...,a(m-1)) is the representation
   of the integer "alpha_to[i]" with a(0) being the LSB and a(m-1) the MSB. Thus for
   example the polynomial representation of @^5 would be given by the binary
   representation of the integer "alpha_to[5]".
                   Similarily, index_of[] can be used as follows:
        As above, let @ represent the primitive element of GF(2^m) that is
   the root of the primitive polynomial p(x). In order to find the power
   of @ (alpha) that has the polynomial representation
        a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1)
   we consider the integer "i" whose binary representation with a(0) being LSB
   and a(m-1) MSB is (a(0),a(1),...,a(m-1)) and locate the entry
   "index_of[i]". Now, @^index_of[i] is that element whose polynomial 
    representation is (a(0),a(1),a(2),...,a(m-1)).
   NOTE:
        The element alpha_to[2^m-1] = 0 always signifying that the
   representation of "@^infinity" = 0 is (0,0,0,...,0).
        Similarily, the element index_of[0] = A0 always signifying
   that the power of alpha which has the polynomial representation
   (0,0,...,0) is "infinity".
 
*/

static void
generate_gf(void)
{
  register int i, mask;

  mask = 1;
  Alpha_to[MM] = 0;
  for (i = 0; i < MM; i++) {
    Alpha_to[i] = mask;
    Index_of[Alpha_to[i]] = i;
    /* If Pp[i] == 1 then, term @^i occurs in poly-repr of @^MM */
    if (Pp[i] != 0)
      Alpha_to[MM] ^= mask;	/* Bit-wise EXOR operation */
    mask <<= 1;	/* single left-shift */
  }
  Index_of[Alpha_to[MM]] = MM;
  /*
   * Have obtained poly-repr of @^MM. Poly-repr of @^(i+1) is given by
   * poly-repr of @^i shifted left one-bit and accounting for any @^MM
   * term that may occur when poly-repr of @^i is shifted.
   */
  mask >>= 1;
  for (i = MM + 1; i < NN; i++) {
    if (Alpha_to[i - 1] >= mask)
      Alpha_to[i] = Alpha_to[MM] ^ ((Alpha_to[i - 1] ^ mask) << 1);
    else
      Alpha_to[i] = Alpha_to[i - 1] << 1;
    Index_of[Alpha_to[i]] = i;
  }
  Index_of[0] = A0;
  Alpha_to[NN] = 0;
}

/*
 * Obtain the generator polynomial of the TT-error correcting, length
 * NN=(2**MM -1) Reed Solomon code from the product of (X+@**(B0+i)), i = 0,
 * ... ,(2*TT-1)
 *
 * Examples:
 *
 * If B0 = 1, TT = 1. deg(g(x)) = 2*TT = 2.
 * g(x) = (x+@) (x+@**2)
 *
 * If B0 = 0, TT = 2. deg(g(x)) = 2*TT = 4.
 * g(x) = (x+1) (x+@) (x+@**2) (x+@**3)
 */
static void
gen_poly(void)
{
  register int i, j;

  Gg[0] = 1;
  for (i = 0; i < NN - KK; i++) {
    Gg[i+1] = 1;
    /*
     * Below multiply (Gg[0]+Gg[1]*x + ... +Gg[i]x^i) by
     * (@**(B0+i)*PRIM + x)
     */
    for (j = i; j > 0; j--)
      if (Gg[j] != 0)
	Gg[j] = Gg[j - 1] ^ Alpha_to[modnn((Index_of[Gg[j]]) + (B0 + i) *PRIM)];
      else
	Gg[j] = Gg[j - 1];
    /* Gg[0] can never be zero */
    Gg[0] = Alpha_to[modnn(Index_of[Gg[0]] + (B0 + i) * PRIM)];
  }
  /* convert Gg[] to index form for quicker encoding */
  for (i = 0; i <= NN - KK; i++)
    Gg[i] = Index_of[Gg[i]];
}


/*
 * take the string of symbols in data[i], i=0..(k-1) and encode
 * systematically to produce NN-KK parity symbols in bb[0]..bb[NN-KK-1] data[]
 * is input and bb[] is output in polynomial form. Encoding is done by using
 * a feedback shift register with appropriate connections specified by the
 * elements of Gg[], which was generated above. Codeword is   c(X) =
 * data(X)*X**(NN-KK)+ b(X)
 */
int
encode_rs(dtype data[KK], dtype bb[NN-KK])
{
  register int i, j;
  gf feedback;

#if DEBUG >= 1 && MM != 8
  /* Check for illegal input values */
  for(i=0;i<KK;i++)
    if(data[i] > NN)
      return -1;
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文文精品字幕一区二区| 在线中文字幕一区| 亚洲精品在线一区二区| 精品午夜一区二区三区在线观看| 日韩三级在线免费观看| 精品一区二区在线播放| 国产欧美一区二区三区在线看蜜臀| 国产精品资源网| 日韩美女视频一区二区| 欧美午夜宅男影院| 久久国产麻豆精品| 中文字幕av一区二区三区高| 91在线国产观看| 日本欧美在线观看| 国产无人区一区二区三区| 91片在线免费观看| 三级在线观看一区二区| 精品黑人一区二区三区久久| 成人综合激情网| 亚洲第一久久影院| 国产亚洲制服色| 一本色道**综合亚洲精品蜜桃冫| 亚洲.国产.中文慕字在线| 精品国产电影一区二区| 波多野结衣在线aⅴ中文字幕不卡| 一区二区免费在线| 久久伊人中文字幕| 在线视频国产一区| 国产麻豆精品视频| 亚洲一区二区精品3399| 26uuu欧美日本| 在线精品视频一区二区三四| 六月丁香婷婷色狠狠久久| 中文字幕一区二区不卡| 日韩视频在线你懂得| 99re66热这里只有精品3直播 | 一区二区三区在线视频免费观看 | 欧美精品18+| 国产盗摄一区二区| 性做久久久久久久久| 中文一区二区在线观看| 欧美日韩一区视频| 成人福利电影精品一区二区在线观看| 视频一区视频二区中文| 国产精品乱码一区二区三区软件| 日韩欧美在线综合网| 91免费版在线| 国产成人av一区二区三区在线观看| 亚洲午夜av在线| 亚洲欧洲在线观看av| 日韩欧美黄色影院| 欧美日韩国产美女| 99视频一区二区| 国产精品资源站在线| 视频在线观看91| 亚洲一区二区在线播放相泽| 日本一区二区三区在线观看| 欧美一级生活片| 91黄色激情网站| 91在线一区二区| 懂色一区二区三区免费观看| 美女www一区二区| 污片在线观看一区二区| 亚洲在线视频一区| 亚洲品质自拍视频| 亚洲视频资源在线| 中文字幕不卡在线| 亚洲国产精品ⅴa在线观看| 日韩欧美久久久| 日韩视频中午一区| 日韩三级在线免费观看| 欧美一区二区久久| 日韩一级片在线播放| 欧美一区二区三区视频免费| 欧美日本一区二区三区四区| 欧美中文字幕久久| 欧美三级电影在线看| 欧美视频在线观看一区二区| 在线欧美日韩精品| 欧美日韩在线三级| 欧美日韩高清一区二区不卡| 欧美午夜精品久久久久久超碰| 色94色欧美sute亚洲13| 在线欧美一区二区| 欧美日韩激情在线| 日韩午夜三级在线| 亚洲精品一区二区精华| 国产偷国产偷亚洲高清人白洁| 久久久天堂av| 国产精品网站在线观看| 国产精品久久久久久久午夜片 | 美女任你摸久久| 免费在线观看视频一区| 狠狠色狠狠色综合| 粉嫩欧美一区二区三区高清影视| 粉嫩绯色av一区二区在线观看| av一区二区三区黑人| 色狠狠一区二区| 欧美人牲a欧美精品| 欧美成人精品高清在线播放| 精品国产乱码久久久久久免费| 国产亚洲一区二区三区| 国产精品久久一级| 亚洲图片一区二区| 精品一区二区久久久| 成人av电影免费在线播放| 91九色最新地址| 欧美videossexotv100| 中文字幕不卡三区| 性久久久久久久| 国产一区二区免费视频| 色吧成人激情小说| 精品理论电影在线观看| 亚洲私人黄色宅男| 免费成人在线观看| 成人av免费在线观看| 在线不卡免费欧美| 中文字幕国产一区| 日韩精品乱码av一区二区| 国产aⅴ综合色| 正在播放一区二区| 1024成人网| 美女www一区二区| 91豆麻精品91久久久久久| 欧美不卡123| 亚洲与欧洲av电影| 国产91精品一区二区| 欧美精品久久一区二区三区| 久久久久国产成人精品亚洲午夜| 伊人性伊人情综合网| 国产真实乱偷精品视频免| 在线观看网站黄不卡| 国产亲近乱来精品视频| 亚洲成人av免费| 97久久精品人人澡人人爽| 精品国产伦一区二区三区观看体验| 亚洲伦理在线免费看| 韩国成人福利片在线播放| 欧美日本韩国一区二区三区视频| 中文字幕日韩精品一区| 激情深爱一区二区| 555www色欧美视频| 尤物视频一区二区| 本田岬高潮一区二区三区| 精品国产百合女同互慰| 亚洲成在人线免费| 91蝌蚪porny九色| 国产精品网友自拍| 国产伦精品一区二区三区免费 | 亚洲乱码一区二区三区在线观看| 国产一区二区三区高清播放| 538在线一区二区精品国产| 亚洲综合色视频| 色狠狠av一区二区三区| 中国av一区二区三区| 国产在线看一区| 精品欧美久久久| 日韩福利视频网| 欧美福利视频一区| 婷婷丁香激情综合| 欧美日韩一区中文字幕| 亚洲一区二区偷拍精品| 在线观看日韩毛片| 一区二区三区中文字幕精品精品| 成人av动漫网站| 最新高清无码专区| 91色综合久久久久婷婷| 亚洲视频图片小说| 在线精品视频免费播放| 亚洲一区二区四区蜜桃| 欧美综合天天夜夜久久| 亚洲综合视频网| 欧美精品123区| 免费成人在线观看| 亚洲色图视频免费播放| 99久久99久久精品国产片果冻| 综合久久一区二区三区| 91免费观看视频| 亚洲妇熟xx妇色黄| 日韩午夜激情免费电影| 久久精品国产99国产| 久久久久久日产精品| 丰满岳乱妇一区二区三区| 亚洲欧洲99久久| 欧美日韩亚洲丝袜制服| 青青草伊人久久| 国产亚洲一区二区在线观看| kk眼镜猥琐国模调教系列一区二区| 国产精品天美传媒| 色综合久久中文综合久久97| 亚洲一区免费在线观看| 欧美一区二区三区性视频| 久久99国产精品免费| 国产日韩欧美亚洲| 在线观看亚洲a| 久久成人综合网| 国产精品素人一区二区| 欧美日韩在线综合| 国产一区二区美女诱惑| 亚洲欧美激情在线|