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

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

?? reedsolomon.java

?? QRcode二維碼生成源代碼,一個做條形碼的代碼
?? JAVA
字號:

/* 
 * 偙偺僋儔僗僼傽僀儖乽ReedSolomon.java乿偼丄Henry Minsky巵偑
 * 嶌惉偟偨僾儘僌儔儉乽RSCODE乿傪偺堦晹傪Java岦偗偵夵曄偟偨傕偺偱偡丅
 * 娭楢忣曬丗 https://sourceforge.net/projects/rscode/
 */

package jp.sourceforge.qrcode.codec.ecc;



public class ReedSolomon {
	//G(x)=兛^8+兛^4+兛^3+兛^2+1
	int[] y;

	int[] gexp = new int[512];
	int[] glog = new int[256];
	final int NPAR = 4;
	final int MAXDEG = NPAR*2;
	int[] synBytes = new int[MAXDEG];
	
	/* The Error Locator Polynomial, also known as Lambda or Sigma. Lambda[0] == 1 */
	 int[] Lambda = new int[MAXDEG];

	/* The Error Evaluator Polynomial */
	 int[] Omega = new int[MAXDEG];

	/* local ANSI declarations */

	/* error locations found using Chien's search*/
	 int[] ErrorLocs = new int[256];
	 int NErrors;

	/* erasure flags */
	 int[] ErasureLocs = new int[256];
	 int NErasures = 0;
	
	
	void initializeGaloisTables() {
	  int i, z;
	  int pinit,p1,p2,p3,p4,p5,p6,p7,p8;

	  pinit = p2 = p3 = p4 = p5 = p6 = p7 = p8 = 0;
	  p1 = 1;
		
	  gexp[0] = 1;
	  gexp[255] = gexp[0];
	  glog[0] = 0;			/* shouldn't log[0] be an error? */
		
	  for (i = 1; i < 256; i++) {
	    pinit = p8;
	    p8 = p7;
	    p7 = p6;
	    p6 = p5;
	    p5 = p4 ^ pinit;
	    p4 = p3 ^ pinit;
	    p3 = p2 ^ pinit;
	    p2 = p1;
	    p1 = pinit;
	    gexp[i] = p1 + p2*2 + p3*4 + p4*8 + p5*16 + p6*32 + p7*64 + p8*128;
	    gexp[i+255] = gexp[i];
	  }
		
	  for (i = 1; i < 256; i++) {
	    for (z = 0; z < 256; z++) {
	      if (gexp[z] == i) {
				glog[i] = z;
				break;
	      }
	    }
	  }
	}
	
	/* multiplication using logarithms */
	int gmult(int a, int b)
	{
	  int i,j;
	  if (a==0 || b == 0) return (0);
	  i = glog[a];
	  j = glog[b];
	  return (gexp[i+j]);
	}
			

	int ginv (int elt) 
	{ 
	  return (gexp[255-glog[elt]]);
	}

	
	public ReedSolomon(int[] source) {
		initializeGaloisTables();
		y = source;
	}
	
	void decode_data(int[] data)
	{
	  int i, j, sum;
	  for (j = 0; j < 8;  j++) {
	    sum	= 0;
	    for (i = 0; i < data.length; i++) {
	      sum = data[i] ^ gmult(gexp[j+1], sum);
	    }
	    synBytes[j]  = sum;
	  }
	}
	
	public void correct() {
//		return;
		decode_data(y);
		boolean hasError = false;
		for (int i = 0; i < synBytes.length; i++) {
			//System.out.println("SyndromeS"+String.valueOf(i) + " = " + synBytes[i]);
			if (synBytes[i] != 0)
				hasError = true;
		}
		if (hasError)
			correct_errors_erasures (y, y.length, 0, new int[1]);
	}
	
	public int getNumCorrectedErrors() {
		return NErrors;
	}


	/* From  Cain, Clark, "Error-Correction Coding For Digital Communications", pp. 216. */
	void
	Modified_Berlekamp_Massey ()
	{	
	  int n, L, L2, k, d, i;
	  int[] psi = new int[MAXDEG];
	  int[] psi2 = new int[MAXDEG];
		int[] D = new int[MAXDEG];
	  int[] gamma = new int[MAXDEG];
		
	  /* initialize Gamma, the erasure locator polynomial */
	  init_gamma(gamma);

	  /* initialize to z */
	  copy_poly(D, gamma);
	  mul_z_poly(D);
		
	  copy_poly(psi, gamma);	
	  k = -1; L = NErasures;
		
	  for (n = NErasures; n < 8; n++) {
		
	    d = compute_discrepancy(psi, synBytes, L, n);
			
	    if (d != 0) {
			
	      /* psi2 = psi - d*D */
	      for (i = 0; i < MAXDEG; i++) psi2[i] = psi[i] ^ gmult(d, D[i]);
			
			
	      if (L < (n-k)) {
		L2 = n-k;
		k = n-L;
		/* D = scale_poly(ginv(d), psi); */
		for (i = 0; i < MAXDEG; i++) D[i] = gmult(psi[i], ginv(d));
		L = L2;
	      }
				
	      /* psi = psi2 */
	      for (i = 0; i < MAXDEG; i++) psi[i] = psi2[i];
	    }
			
	    mul_z_poly(D);
	  }
		
	  for(i = 0; i < MAXDEG; i++) Lambda[i] = psi[i];
	  compute_modified_omega();

		
	}

	/* given Psi (called Lambda in Modified_Berlekamp_Massey) and synBytes,
	   compute the combined erasure/error evaluator polynomial as 
	   Psi*S mod z^4
	  */
	void
	compute_modified_omega ()
	{
	  int i;
	  int[] product = new int[MAXDEG*2];
		
	  mult_polys(product, Lambda, synBytes);	
	  zero_poly(Omega);
	  for(i = 0; i < NPAR; i++) Omega[i] = product[i];

	}

	/* polynomial multiplication */
	void
	mult_polys (int[] dst, int[] p1, int[] p2)
	{
	  int i, j;
	  int[] tmp1 = new int[MAXDEG*2];
		
	  for (i=0; i < (MAXDEG*2); i++) dst[i] = 0;
		
	  for (i = 0; i < MAXDEG; i++) {
	    for(j=MAXDEG; j<(MAXDEG*2); j++) tmp1[j]=0;
			
	    /* scale tmp1 by p1[i] */
	    for(j=0; j<MAXDEG; j++) tmp1[j]=gmult(p2[j], p1[i]);
	    /* and mult (shift) tmp1 right by i */
	    for (j = (MAXDEG*2)-1; j >= i; j--) tmp1[j] = tmp1[j-i];
	    for (j = 0; j < i; j++) tmp1[j] = 0;
			
	    /* add into partial product */
	    for(j=0; j < (MAXDEG*2); j++) dst[j] ^= tmp1[j];
	  }
	}


		
	/* gamma = product (1-z*a^Ij) for erasure locs Ij */
	void
	init_gamma (int[] gamma)
	{
	  int e;
	  int[] tmp = new int[MAXDEG];
		
	  zero_poly(gamma);
	  zero_poly(tmp);
	  gamma[0] = 1;
		
	  for (e = 0; e < NErasures; e++) {
	    copy_poly(tmp, gamma);
	    scale_poly(gexp[ErasureLocs[e]], tmp);
	    mul_z_poly(tmp);
	    add_polys(gamma, tmp);
	  }
	}
		
		
		
	void 
	compute_next_omega (int d, int[] A, int[] dst, int[] src)
	{
	  int i;
	  for ( i = 0; i < MAXDEG;  i++) {
	    dst[i] = src[i] ^ gmult(d, A[i]);
	  }
	}
		


	int
	compute_discrepancy (int[] lambda, int[] S, int L, int n)
	{
	  int i, sum=0;
		
	  for (i = 0; i <= L; i++) 
	    sum ^= gmult(lambda[i], S[n-i]);
	  return (sum);
	}

	/********** polynomial arithmetic *******************/

	void add_polys (int[] dst, int[] src) 
	{
	  int i;
	  for (i = 0; i < MAXDEG; i++) dst[i] ^= src[i];
	}

	void copy_poly (int[] dst, int[] src) 
	{
	  int i;
	  for (i = 0; i < MAXDEG; i++) dst[i] = src[i];
	}

	void scale_poly (int k, int[] poly) 
	{	
	  int i;
	  for (i = 0; i < MAXDEG; i++) poly[i] = gmult(k, poly[i]);
	}


	void zero_poly (int[] poly) 
	{
	  int i;
	  for (i = 0; i < MAXDEG; i++) poly[i] = 0;
	}


	/* multiply by z, i.e., shift right by 1 */
	void mul_z_poly (int[] src)
	{
	  int i;
	  for (i = MAXDEG-1; i > 0; i--) src[i] = src[i-1];
	  src[0] = 0;
	}


	/* Finds all the roots of an error-locator polynomial with coefficients
	 * Lambda[j] by evaluating Lambda at successive values of alpha. 
	 * 
	 * This can be tested with the decoder's equations case.
	 */


	void Find_Roots ()
	{
	  int sum, r, k;	
	  NErrors = 0;
	  
	  for (r = 1; r < 256; r++) {
	    sum = 0;
	    /* evaluate lambda at r */
	    for (k = 0; k < NPAR+1; k++) {
	      sum ^= gmult(gexp[(k*r)%255], Lambda[k]);
	    }
	    if (sum == 0) 
	      { 
		ErrorLocs[NErrors] = (255-r); NErrors++; 
		//if (DEBUG) fprintf(stderr, "Root found at r = %d, (255-r) = %d\n", r, (255-r));
	      }
	  }
	}

	/* Combined Erasure And Error Magnitude Computation 
	 * 
	 * Pass in the codeword, its size in bytes, as well as
	 * an array of any known erasure locations, along the number
	 * of these erasures.
	 * 
	 * Evaluate Omega(actually Psi)/Lambda' at the roots
	 * alpha^(-i) for error locs i. 
	 *
	 * Returns 1 if everything ok, or 0 if an out-of-bounds error is found
	 *
	 */

	int correct_errors_erasures (int[] codeword, 
				 int csize,
				 int nerasures,
				 int[] erasures)
	{
	  int r, i, j, err;

	  /* If you want to take advantage of erasure correction, be sure to
	     set NErasures and ErasureLocs[] with the locations of erasures. 
	     */
	  NErasures = nerasures;
	  for (i = 0; i < NErasures; i++) ErasureLocs[i] = erasures[i];

	  Modified_Berlekamp_Massey();
	  Find_Roots();
	  

	  if ((NErrors <= NPAR) && NErrors > 0) { 

	    /* first check for illegal error locs */
	    for (r = 0; r < NErrors; r++) {
	      if (ErrorLocs[r] >= csize) {
		//if (DEBUG) fprintf(stderr, "Error loc i=%d outside of codeword length %d\n", i, csize);
		return(0);
	      }
	    }

	    for (r = 0; r < NErrors; r++) {
	      int num, denom;
	      i = ErrorLocs[r];
	      /* evaluate Omega at alpha^(-i) */

	      num = 0;
	      for (j = 0; j < MAXDEG; j++) 
		num ^= gmult(Omega[j], gexp[((255-i)*j)%255]);
	      
	      /* evaluate Lambda' (derivative) at alpha^(-i) ; all odd powers disappear */
	      denom = 0;
	      for (j = 1; j < MAXDEG; j += 2) {
		denom ^= gmult(Lambda[j], gexp[((255-i)*(j-1)) % 255]);
	      }
	      
	      err = gmult(num, ginv(denom));
	      //if (DEBUG) fprintf(stderr, "Error magnitude %#x at loc %d\n", err, csize-i);
	      
	      codeword[csize-i-1] ^= err;
	    }
	    //for (int p = 0; p < codeword.length; p++)
	    //	System.out.println(codeword[p]);
	    return(1);
	  }
	  else {
	    //if (DEBUG && NErrors) fprintf(stderr, "Uncorrectable codeword\n");
	    return(0);
	  }
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区在线播放| 亚洲一区中文在线| 日韩一区二区三区av| 91国产丝袜在线播放| 日本高清免费不卡视频| 在线看国产一区二区| 欧美日韩一级黄| 日韩一区二区三区四区五区六区| 91精品中文字幕一区二区三区| 欧美精品tushy高清| 3atv一区二区三区| 国产情人综合久久777777| 日本韩国精品在线| 国产真实精品久久二三区| 国产成人自拍在线| av毛片久久久久**hd| 欧美色综合久久| 精品黑人一区二区三区久久| 国产亚洲欧洲997久久综合| 最新国产成人在线观看| 亚洲成人av一区| 国产九色sp调教91| 在线视频一区二区三| 91精品国产一区二区三区| 国产欧美日韩激情| 亚洲国产综合91精品麻豆| 久久成人久久鬼色| 一本一道久久a久久精品| 欧美日韩国产色站一区二区三区| 精品久久久久一区二区国产| 国产精品久久毛片a| 日本aⅴ亚洲精品中文乱码| 成人精品免费网站| 91精品久久久久久蜜臀| 亚洲国产精品成人久久综合一区 | 舔着乳尖日韩一区| 国产精品中文字幕欧美| 精品污污网站免费看| 国产午夜亚洲精品不卡| 亚洲一区成人在线| 国产精品白丝jk白祙喷水网站| 欧美色网一区二区| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲美女视频一区| 成人综合婷婷国产精品久久| 91精品国产色综合久久不卡电影 | 国产成人免费xxxxxxxx| 欧美日韩精品高清| 中文字幕亚洲不卡| 国产精品一区二区无线| 制服丝袜在线91| 亚洲欧美日韩中文字幕一区二区三区| 久久精品国内一区二区三区| 欧美色偷偷大香| 亚洲免费在线观看视频| 国产91丝袜在线观看| 精品国产乱码久久| 美腿丝袜亚洲一区| 国产精品天美传媒| 国产精品毛片大码女人| 97久久精品人人澡人人爽| 欧美一区二区三区免费观看视频| 日韩久久一区二区| 国产东北露脸精品视频| 亚洲精品一区二区三区在线观看| 亚洲亚洲人成综合网络| 91成人看片片| 一区二区三区四区在线播放 | 亚洲色图制服丝袜| av一区二区三区四区| 亚洲国产精品国自产拍av| 国产一区二区三区黄视频 | 亚洲一区二区三区四区五区黄| 不卡的av电影| 国产精品毛片高清在线完整版| 高清国产一区二区三区| 国产精品久久久久久久久免费丝袜| 久国产精品韩国三级视频| 欧美成人午夜电影| 黄色精品一二区| 国产精品免费视频观看| 91小视频在线| 亚洲香肠在线观看| 91麻豆精品久久久久蜜臀| 免费欧美在线视频| 久久久久久久免费视频了| 国产a区久久久| 亚洲人午夜精品天堂一二香蕉| 91黄色免费版| 琪琪久久久久日韩精品| 久久精品夜色噜噜亚洲a∨ | 亚洲丝袜美腿综合| 欧美中文字幕一区二区三区亚洲| 亚洲成人高清在线| www国产亚洲精品久久麻豆| 成人国产在线观看| 亚洲一区二区精品3399| 精品理论电影在线观看| 成人黄色大片在线观看| 日日夜夜免费精品视频| 久久婷婷一区二区三区| 91黄色小视频| 韩国精品在线观看| 夜夜嗨av一区二区三区网页| 精品乱码亚洲一区二区不卡| 95精品视频在线| 日本不卡一区二区| 国产精品进线69影院| 3d动漫精品啪啪| 成人动漫av在线| 日韩有码一区二区三区| 国产精品水嫩水嫩| 日韩一级黄色大片| 99久久国产免费看| 国产在线乱码一区二区三区| 亚洲日本在线a| 久久综合九色综合97婷婷 | 久久综合国产精品| 欧美午夜精品理论片a级按摩| 国产一区二区三区久久悠悠色av| 一个色综合av| 国产精品久久久久影院色老大| 欧美精品一级二级三级| 91毛片在线观看| 国产成人免费xxxxxxxx| 麻豆久久久久久| 婷婷开心久久网| 亚洲午夜精品一区二区三区他趣| 久久久久久亚洲综合影院红桃| 欧美裸体bbwbbwbbw| 色视频成人在线观看免| 懂色av中文字幕一区二区三区| 六月丁香婷婷色狠狠久久| 亚洲国产精品麻豆| 亚洲人成精品久久久久| 中文字幕日韩欧美一区二区三区| 欧美成人激情免费网| 欧美日韩1234| 欧美三级中文字| 91国产免费看| 欧美亚洲综合在线| 在线视频你懂得一区二区三区| 成人教育av在线| 成人黄色网址在线观看| 岛国一区二区在线观看| 国产成人aaa| 不卡的av在线播放| 99久久综合色| 日本精品一区二区三区四区的功能| 高清免费成人av| 99国产精品视频免费观看| 成人免费黄色在线| 99在线精品免费| 在线视频一区二区三区| 欧美私人免费视频| 91精品国产乱| 2022国产精品视频| 国产免费观看久久| 一区二区中文视频| 夜夜嗨av一区二区三区网页| 亚洲123区在线观看| 日本免费新一区视频| 极品销魂美女一区二区三区| 国内成+人亚洲+欧美+综合在线| 国产精品一区免费视频| heyzo一本久久综合| 欧美三区在线观看| 欧美电影免费观看高清完整版在线 | 5858s免费视频成人| 精品卡一卡二卡三卡四在线| 久久久久国产精品麻豆ai换脸| 国产精品久久久久久久久快鸭| 综合色中文字幕| 日韩影院免费视频| 国产精选一区二区三区| 色婷婷综合视频在线观看| 91精品国产高清一区二区三区 | 17c精品麻豆一区二区免费| 亚洲精品国久久99热| 视频一区视频二区中文字幕| 久久99在线观看| 99r精品视频| 欧美精品777| 国产精品无码永久免费888| 午夜亚洲国产au精品一区二区| 韩国成人在线视频| 色婷婷av一区二区三区大白胸 | 久久久777精品电影网影网 | 99re亚洲国产精品| 日韩三级在线观看| 亚洲欧美日韩系列| 国产乱对白刺激视频不卡| 欧美在线看片a免费观看| 久久久99免费| 免费成人av在线播放| 99精品国产99久久久久久白柏 | 日本韩国欧美三级| 久久久精品日韩欧美| 日精品一区二区三区| av电影天堂一区二区在线观看|