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

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

?? rs.c

?? RS(15,9)上的C語言糾錯源碼.在VC++6.0平臺上調試通過
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*             rs.c        */ 
/* This program is an encoder/decoder for Reed-Solomon codes. Encoding is in 
 
   systematic form, decoding via the Berlekamp iterative algorithm. 
   In the present form , the constants mm, nn, tt, and kk=nn-2tt must be 
   specified  (the double letters are used simply to avoid clashes with 
   other n,k,t used in other programs into which this was incorporated!) 
   Also, the irreducible polynomial used to generate GF(2**mm) must also be 
   entered -- these can be found in Lin and Costello, and also Clark and Cai 
n. 
   The representation of the elements of GF(2**m) is either in index form, 
   where the number is the power of the primitive element alpha, which is 
   convenient for multiplication (add the powers modulo 2**m-1) or in 
   polynomial form, where the bits represent the coefficients of the 
   polynomial representation of the number, which is the most convenient for 
m 
   for addition.  The two forms are swapped between via lookup tables. 
   This leads to fairly messy looking expressions, but unfortunately, there 
   is no easy alternative when working with Galois arithmetic. 
   The code is not written in the most elegant way, but to the best 
   of my knowledge, (no absolute guarantees!), it works. 
   However, when including it into a simulation program, you may want to do 
   some conversion of global variables (used here because I am lazy!) to 
   local variables where appropriate, and passing parameters (eg array 
   addresses) to the functions  may be a sensible move to reduce the number 
   of global variables and thus decrease the chance of a bug being introduce 
d. 
   This program does not handle erasures at present, but should not be hard 
   to adapt to do this, as it is just an adjustment to the Berlekamp-Massey 
   algorithm. It also does not attempt to decode past the BCH bound -- see 
   Blahut "Theory and practice of error control codes" for how to do this. 
              Simon Rockliff, University of Adelaide   21/9/89 
   26/6/91 Slight modifications to remove a compiler dependent bug which had 
n't 
           previously surfaced. A few extra comments added for clarity. 
           Appears to all work fine, ready for posting to net! 
                  Notice 
                 -------- 
   This program may be freely modified and/or given to whoever wants it. 
   A condition of such distribution is that the author's contribution be 
   acknowledged by his name being left in the comments heading the program, 
   however no responsibility is accepted for any financial or other loss whi 
ch 
   may result from some unforseen errors or malfunctioning of the program 
   during use. 
                                 Simon Rockliff, 26th June 1991 
*/ 
#include <math.h> 
#include <stdio.h> 

#define mm  4           /* RS code over GF(2**4) - change to suit */ 
#define nn  15          /* nn=2**mm -1   length of codeword */ 
#define tt  3           /* number of errors that can be corrected */ 
#define kk  9           /* kk = nn-2*tt  */ 
int pp [mm+1] = { 1, 1, 0, 0, 1} ; /* specify irreducible polynomial coeffts */ 
// The G(x)	=	x^4  + x  + 1 

//#define mm  3           /* RS code over GF(2**4) - change to suit */ 
//#define nn  7         /* nn=2**mm -1   length of codeword */ 
//#define tt  2          /* number of errors that can be corrected */ 
//#define kk  3           /* kk = nn-2*tt  */ 
//int pp [mm+1] = { 1, 1, 0, 1} ; /* specify irreducible polynomial coeffts */ 



int alpha_to [nn+1], index_of [nn+1], gg [nn-kk+1] ; 
int recd [nn], data [kk], bb [nn-kk] ; 
void generate_gf() 
/* generate GF(2**mm) from the irreducible polynomial p(X) in pp[0]..pp[mm] 
   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**mm) 
*/ 
 { 
   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]!=0) 
	 {
       alpha_to[mm] ^= mask ; 
	 }
     mask <<= 1 ; 
  } 
  index_of[alpha_to[mm]] = mm ; 
  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] = -1 ; 
  for(i=0;i<5;i++)printf("gf%d is : %d\n",i,alpha_to[i]); 
 } 
void gen_poly() 
/* Obtain the generator polynomial of the tt-error correcting, length 
  nn=(2**mm -1) Reed Solomon code  from the product of (X+alpha**i), i=1..2* tt 
*/ 
 { 
   register int i,j ; 
   gg[0] = 2 ;    /* primitive element alpha = 2  for GF(2**mm)  */ 
   gg[1] = 1 ;    /* g(x) = (X+alpha) initially */  
   for (i=2; i<=nn-kk; i++) 
   {
	   gg[i] = 1 ; 
	   for (j=i-1; j>0; j--) 
	   {
			if (gg[j] != 0) 
			{
				gg[j] = gg[j-1]^ alpha_to[(index_of[gg[j]]+i)%nn] ; 
			} 
			else
			{
				gg[j] = gg[j-1] ; 
			}
	   }
       gg[0] = alpha_to[(index_of[gg[0]]+i)%nn] ;     /* gg[0] can never be z ero */ 
   } 
   /* convert gg[] to index form for quicker encoding */ 
   for (i=0; i<=nn-kk; i++)  gg[i] = index_of[gg[i]] ; 
 } 
void encode_rs() 
/* take the string of symbols in data[i], i=0..(k-1) and encode systematically 
   to produce 2*tt parity symbols in bb[0]..bb[2*tt-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) 
*/ 
{ 
   register int i,j ; 
   int feedback ; 
   for (i=0; i<nn-kk; i++)   
   {
	   bb[i] = 0 ; 
   }
   for (i=kk-1; i>=0; i--) 
   {  
	   feedback = index_of[data[i]^bb[nn-kk-1]] ; 
       if (feedback != -1) 
       { 
		   for (j=nn-kk-1; j>0; j--) 
		   {
				if (gg[j] != -1) 
				{
					bb[j] = bb[j-1]^alpha_to[(gg[j]+feedback)%nn] ; 
				}
				else 
				{
					bb[j] = bb[j-1] ; 
				}
		   }
           bb[0] = alpha_to[(gg[0]+feedback)%nn] ; 
       } 
       else 
       {
		   for (j=nn-kk-1; j>0; j--) 
		   {
				bb[j] = bb[j-1] ; 
		   }
           bb[0] = 0 ; 
       } 
   }  
}  
void decode_rs() 
/* assume we have received bits grouped into mm-bit symbols in recd[i], 
   i=0..(nn-1),  and recd[i] is index form (ie as powers of alpha). 
   We first compute the 2*tt syndromes by substituting alpha**i into rec(X)  
and 
   evaluating, storing the syndromes in s[i], i=1..2tt (leave s[0] zero) . 
   Then we use the Berlekamp iteration to find the error location polynomial 
 
   elp[i].   If the degree of the elp is >tt, we cannot correct all the erro 
rs 
   and hence just put out the information symbols uncorrected. If the degree 
 of 
   elp is <=tt, we substitute alpha**i , i=1..n into the elp to get the root 
s, 
   hence the inverse roots, the error location numbers. If the number of err 
ors 
   located does not equal the degree of the elp, we have more than tt errors 
 
   and cannot correct them.  Otherwise, we then solve for the error value at 
 
   the error location and correct the error.  The procedure is that found in 
 
   Lin and Costello. For the cases where the number of errors is known to be 
 too 
   large to correct, the information symbols as received are output (the 
   advantage of systematic encoding is that hopefully some of the informatio 
n 
   symbols will be okay and that if we are in luck, the errors are in the 
   parity part of the transmitted codeword).  Of course, these insoluble cas 
es 
   can be returned as error flags to the calling routine if desired. 
*/ 
 { 
   register int i,j,u,q ; 
   int elp[nn-kk+2][nn-kk], d[nn-kk+2], l[nn-kk+2], u_lu[nn-kk+2], s[nn-kk+1 ] ; 
   int count=0, syn_error=0, root[tt], loc[tt], z[tt+1], err[nn], reg[tt+1]  ; 
/* first form the syndromes */ 
   for (i=1; i<=nn-kk; i++) 
    { 
	   s[i] = 0 ; 
       for (j=0; j<nn; j++) 
	   {
			if (recd[j]!=-1) 
			{
				s[i] ^= alpha_to[(recd[j]+i*j)%nn] ;      /* recd[j] in index form */ 
			}
	   }
/* convert syndrome from polynomial form to index form  */ 
      if (s[i]!=0) 
	  {
		  syn_error=1 ;        /* set flag if non-zero syndrome => error */ 
	  }
      s[i] = index_of[s[i]] ; 
    } /////////; 
   if (syn_error)       /* if errors, try and correct */ 
    { 
/* compute the error location polynomial via the Berlekamp iterative algorithm, 
   following the terminology of Lin and Costello :   d[u] is the 'mu'th 
   discrepancy, where u='mu'+1 and 'mu' (the Greek letter!) is the step number 
   ranging from -1 to 2*tt (see L&C),  l[u] is the 
   degree of the elp at that step, and u_l[u] is the difference between the 
   step number and the degree of the elp. */ 
/* initialise table entries */ 
      d[0] = 0 ;           /* index form */ 
      d[1] = s[1] ;        /* index form */ 
      elp[0][0] = 0 ;      /* index form */ 
      elp[1][0] = 1 ;      /* polynomial form */ 
      for (i=1; i<nn-kk; i++) 
      { elp[0][i] = -1 ;   /* index form */ 
          elp[1][i] = 0 ;   /* polynomial form */ 
      } 
      l[0] = 0 ; 
      l[1] = 0 ; 
      u_lu[0] = -1 ; 
      u_lu[1] = 0 ; 
      u = 0 ; 
      do 
      { 
        u++ ; 
        if (d[u]==-1) 
        { 
			l[u+1] = l[u] ; 
            for (i=0; i<=l[u]; i++) 
             { 
					elp[u+1][i] = elp[u][i] ; 
					elp[u][i] = index_of[elp[u][i]] ; 
             } 
        } 
        else 
/* search for words with greatest u_lu[q] for which d[q]!=0 */ 
        { 
			q = u-1 ; 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一二三四在线| 欧美一卡在线观看| 精品亚洲成a人在线观看| 亚洲综合av网| 午夜精品影院在线观看| 艳妇臀荡乳欲伦亚洲一区| 亚洲码国产岛国毛片在线| 亚洲日本va午夜在线影院| 国产精品成人免费| 悠悠色在线精品| 午夜国产精品影院在线观看| 视频在线观看一区二区三区| 日韩精品色哟哟| 激情综合网最新| 成人av网站在线观看| 日本韩国欧美国产| 91精品免费观看| 欧美国产精品劲爆| 亚洲蜜桃精久久久久久久| 日韩**一区毛片| 成人av在线一区二区三区| 日本韩国欧美一区二区三区| 91精品国产美女浴室洗澡无遮挡| 欧美xxxx在线观看| 亚洲欧美在线aaa| 免费欧美高清视频| 成人性生交大片| 欧美精品第1页| 国产精品毛片久久久久久| 亚洲男人的天堂一区二区| 青青草原综合久久大伊人精品 | 国产精品午夜免费| 亚洲综合激情另类小说区| 久久99精品国产麻豆婷婷洗澡| 国产精品一区二区在线观看不卡| 91亚洲精品一区二区乱码| 欧美精三区欧美精三区| 中文字幕第一区综合| 亚洲成av人片| 91女人视频在线观看| 精品国精品国产| 亚洲一区av在线| 国产成人在线看| 欧美一区二区三区的| 1区2区3区精品视频| 国产一区二三区好的| 欧美日韩高清一区二区| 国产免费观看久久| 久久精品久久99精品久久| 91在线观看一区二区| 久久综合狠狠综合久久激情| 亚洲成人黄色影院| 99久久国产综合精品色伊| 国产亚洲成av人在线观看导航 | 国产欧美一区二区三区在线看蜜臀| 亚洲三级电影网站| 粉嫩一区二区三区在线看| 欧美成人一区二区三区在线观看 | 久久伊人蜜桃av一区二区| 亚洲成人一区在线| 91视频免费看| 中文字幕免费一区| 国产高清亚洲一区| 久久一区二区三区四区| 麻豆国产91在线播放| 欧美一级xxx| 日本伊人色综合网| 欧美高清激情brazzers| 亚洲国产一区二区三区| 日本韩国欧美国产| 亚洲综合成人在线视频| 在线免费观看不卡av| 亚洲男同性视频| 91黄色小视频| 亚洲一区欧美一区| 欧美二区在线观看| 轻轻草成人在线| 亚洲精品一区二区三区香蕉 | 91无套直看片红桃| 亚洲欧美怡红院| 色网综合在线观看| 亚洲一区在线视频| 91精品国产色综合久久ai换脸 | 成av人片一区二区| 亚洲三级小视频| 欧美日本韩国一区| 精品一二三四区| 国产日韩欧美a| 99这里只有精品| 亚洲成a人在线观看| 日韩欧美国产系列| 国产麻豆精品95视频| 国产精品色噜噜| 欧美日韩一区不卡| 裸体健美xxxx欧美裸体表演| 久久在线观看免费| 色网站国产精品| 另类人妖一区二区av| 国产日韩欧美一区二区三区乱码| 不卡一区中文字幕| 午夜a成v人精品| 久久久精品国产免大香伊| 99久久伊人网影院| 偷拍日韩校园综合在线| 久久久久99精品国产片| 色婷婷av一区| 精品一区二区日韩| 亚洲欧美乱综合| 欧美精品一区二区三区视频| 国产成a人亚洲精品| 亚洲综合成人在线| 久久精品无码一区二区三区| 日本道在线观看一区二区| 麻豆91免费看| 亚洲与欧洲av电影| 久久久蜜桃精品| 欧美日本乱大交xxxxx| 成人三级伦理片| 久久精品免费观看| 一区二区三区四区蜜桃| 久久久青草青青国产亚洲免观| 欧美性生交片4| 成人看片黄a免费看在线| 日韩中文字幕麻豆| 亚洲靠逼com| 国产精品天美传媒| 久久久精品人体av艺术| 91精品久久久久久久99蜜桃| 91亚洲午夜精品久久久久久| 国产精品18久久久久久久网站| 日韩精品视频网站| 亚洲国产精品久久艾草纯爱| 国产精品不卡在线| 国产日韩高清在线| 精品久久久久久综合日本欧美| 欧美在线短视频| 色悠悠亚洲一区二区| 成人av电影在线播放| 精品一区二区三区香蕉蜜桃| 婷婷六月综合亚洲| 亚洲成av人片| 五月天国产精品| 亚洲国产精品精华液网站| 亚洲精选视频在线| 亚洲男人天堂一区| 亚洲资源在线观看| 亚洲一区国产视频| 亚洲久本草在线中文字幕| 亚洲欧美国产毛片在线| 亚洲丝袜另类动漫二区| 亚洲国产成人午夜在线一区| 欧美精彩视频一区二区三区| 国产欧美久久久精品影院| 国产午夜三级一区二区三| 精品国产精品一区二区夜夜嗨| 欧美va亚洲va在线观看蝴蝶网| 精品久久久久久无| 精品国产乱码久久久久久老虎| 日韩欧美专区在线| 久久久精品免费观看| 欧美激情艳妇裸体舞| 国产精品久久网站| 中文字幕一区免费在线观看| 1000精品久久久久久久久| 尤物视频一区二区| 日本亚洲电影天堂| 黑人巨大精品欧美黑白配亚洲| 国产在线精品免费| 波多野结衣中文字幕一区| 色婷婷综合久久久中文一区二区| 欧美综合亚洲图片综合区| 91精品国产91综合久久蜜臀| 精品国产免费人成在线观看| 中文字幕av一区二区三区免费看| 综合久久综合久久| 亚洲成a人片在线观看中文| 免费国产亚洲视频| 粉嫩绯色av一区二区在线观看| 97成人超碰视| 欧美久久免费观看| 欧美国产精品中文字幕| 亚洲国产日韩在线一区模特| 久草这里只有精品视频| 91免费版pro下载短视频| 91精品一区二区三区在线观看| 久久综合九色综合97婷婷女人| 亚洲人成在线观看一区二区| 免费高清不卡av| 色综合久久久久久久| 欧美一二区视频| 一区二区在线电影| 国产成人午夜精品影院观看视频 | 欧美性淫爽ww久久久久无| 日韩一级免费观看| 亚洲视频在线一区| 国产一区二区三区观看| 欧美亚洲国产怡红院影院| 国产日本欧洲亚洲| 欧美bbbbb| 欧美三级韩国三级日本一级|