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

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

?? rscode.cpp

?? reed solomon編碼/解碼工具
?? CPP
字號:
#include "common.h"

extern int parityNum;
extern Mapping erasures, errors;

/* Maximum number of parity bytes */
#define NPAR 20
/* Maximum degree of various polynomials. */
#define MAXDEG (NPAR*2)

#define DEBUG FALSE

/* galois arithmetic tables */
int gexp[512];
int glog[256];

/* generator polynomial */
int genPoly[MAXDEG*2];

/* Encoder parity bytes */
int pBytes[MAXDEG];

/* Decoder syndrome bytes */
int synBytes[MAXDEG];

/* error locations */
int ErrorLocs[256];
int NErrors;

/* The Error Locator Polynomial, Lambda[0] == 1 */
int Lambda[MAXDEG];

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

/* 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]]);
}

void zero_poly (int poly[]) 
{
	int i;
	int n = parityNum*2;
	for (i = 0; i < n; i++) 
		poly[i] = 0;
}

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

/* polynomial multiplication */
void mult_polys (int dst[], int p1[], int p2[])
{
	int i, j;
	int tmp1[MAXDEG*2];
	
	for (i=0; i < (parityNum*4); i++) dst[i] = 0;
	
	for (i = 0; i < (parityNum*2); i++) {
		for(j=(parityNum*2); j<(parityNum*4); j++) tmp1[j]=0;
		
		for(j=0; j<(parityNum*2); j++) tmp1[j]=gmult(p2[j], p1[i]);
		
		for (j = ((parityNum*4)-1); j >= i; j--) tmp1[j] = tmp1[j-i];
		for (j = 0; j < i; j++) tmp1[j] = 0;
		
		for(j=0; j < (parityNum*4); j++) dst[j] ^= tmp1[j];
	}
}

/* This is one of 14 irreducible polynomials
* of degree 8 and cycle length 255.
* The high order 1 bit is implicit */
/* x^8 + x^4 + x^3 + x^2 + 1 */

static void init_exp_table (void)
{
	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;			
	
	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;
			}
		}
	}
}

void init_galois_tables (void)
{	
	init_exp_table();
}

/* Create a generator polynomial for an n byte RS code. 
* The coefficients are returned in the genPoly arg.
*/

static void compute_genpoly (int nbytes, int genpoly[])
{
	int i, tp[256], tp1[256];
	
	zero_poly(tp1);
	tp1[0] = 1;
	
	for (i = 1; i <= nbytes; i++) {
		zero_poly(tp);
		tp[0] = gexp[i];		
		tp[1] = 1;
		
		mult_polys(genpoly, tp, tp1);
		copy_poly(tp1, genpoly);
	}
}

/* Initialize lookup tables, polynomials, etc. */
void initialize_ecc ()
{
	/* Initialize the galois field arithmetic tables */
    init_galois_tables();
	
    /* Compute the encoder generator polynomial */
    compute_genpoly(parityNum, genPoly);
}

/* Append the parity bytes */
void build_codeword (unsigned char msg[], int nbytes, unsigned char dst[])
{
	int i;
	
	for (i = 0; i < nbytes; i++) dst[i] = msg[i];
	
	for (i = 0; i < parityNum; i++) {
		dst[i+nbytes] = pBytes[parityNum-1-i];
	}
}


void encode_data (unsigned char msg[], int nbytes, unsigned char dst[])
{
	int i, LFSR[NPAR+1],dbyte, j;
	
	for(i=0; i < parityNum+1; i++) LFSR[i]=0;
	
	for (i = 0; i < nbytes; i++) {
		dbyte = msg[i] ^ LFSR[parityNum-1];
		for (j = parityNum-1; j > 0; j--) {
			LFSR[j] = LFSR[j-1] ^ gmult(genPoly[j], dbyte);
		}
		LFSR[0] = gmult(genPoly[0], dbyte);
	}
	
	for (i = 0; i < parityNum; i++) 
		pBytes[i] = LFSR[i];
	
	build_codeword(msg, nbytes, dst);
}

/* Computes the syndrome of a codeword. Puts the results
 * into the synBytes[] array.
 */
void decode_data(unsigned char data[], int nbytes)
{
  int i, j, sum;
  for (j = 0; j < parityNum;  j++) {
    sum	= 0;
    for (i = 0; i < nbytes; i++) {
      sum = data[i] ^ gmult(gexp[j+1], sum);
    }
    synBytes[j]  = sum;
  }
}

/* Check if the syndrome is zero */
int check_syndrome (void)
{
	int i, nz = 0;
	for (i =0 ; i < parityNum; i++) {
		if (synBytes[i] != 0) nz = 1;
	}
	return nz;
}

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

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

void mul_z_poly (int src[])
{
	int i;
	for (i = parityNum*2-1; i > 0; i--) src[i] = src[i-1];
	src[0] = 0;
}

/* gamma = product (1-z*a^Ij) for erasure locs Ij */
void init_gamma (int gamma[])
{
	int e, tmp[MAXDEG];
	
	zero_poly(gamma);
	zero_poly(tmp);
	gamma[0] = 1;
	
	int size = erasures.Count();
	for (e = 0; e < size; e++) {
		copy_poly(tmp, gamma);
		scale_poly(gexp[erasures.getKey(e)], tmp);
		mul_z_poly(tmp);
		add_polys(gamma, tmp);
	}
}

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);
}

void compute_modified_omega ()
{
	int i;
	int product[MAXDEG*2];
	
	mult_polys(product, Lambda, synBytes);	
	zero_poly(Omega);
	for(i = 0; i < parityNum; i++) 
		Omega[i] = product[i];	
}

void Find_Position (void)
{	
	int n, L, L2, k, d, i;
	int psi[MAXDEG], psi2[MAXDEG], D[MAXDEG];
	int gamma[MAXDEG];
	
	/* initialize Gamma, the erasure locator polynomial */
	init_gamma(gamma);
	
	copy_poly(D, gamma);
	mul_z_poly(D);
	
	copy_poly(psi, gamma);	
	k = -1; L = erasures.Count();
	
	for (n = erasures.Count(); n < parityNum; n++) {
		
		d = compute_discrepancy(psi, synBytes, L, n);
		
		if (d != 0) {
			
			for (i = 0; i < parityNum*2; i++) psi2[i] = psi[i] ^ gmult(d, D[i]);
			
			if (L < (n-k)) {
				L2 = n-k;
				k = n-L;
				
				for (i = 0; i < parityNum*2; i++) D[i] = gmult(psi[i], ginv(d));
				L = L2;
			}
			
			for (i = 0; i < parityNum*2; i++) psi[i] = psi2[i];
		}
		
		mul_z_poly(D);
	}
	
	for(i = 0; i < parityNum*2; i++) 
		Lambda[i] = psi[i];
	compute_modified_omega();	
}

void Find_Roots (void)
{
	int sum, r, k;	
	NErrors = 0;
	
	for (r = 1; r < 256; r++) {
		sum = 0;
		
		for (k = 0; k < parityNum+1; k++) {
			sum ^= gmult(gexp[(k*r)%255], Lambda[k]);
		}
		if (sum == 0) 
		{ 
			ErrorLocs[NErrors] = (255-r); 
			NErrors++; 
			if (DEBUG) {
				CString stemp;
				stemp.Format("Root found at r = %d, (255-r) = %d\n", r, (255-r));
				AfxMessageBox(stemp);
			}
		}
	}
}

/* 
* Pass in the codeword, its size in bytes, as well as
* an array of any known erasure locations, along the number
* of these erasures.
* 
* Returns 1 if everything ok, or 0 if an out-of-bounds error is found
*
*/
int correct_errors_erasures (unsigned char codeword[], int csize)
{
	int r, i, j, err;
	
	Find_Position();
	Find_Roots();
	
	if ((NErrors <= parityNum) && NErrors > 0) { 
		
		/* first check for illegal error locs */
		for (r = 0; r < NErrors; r++) {
			if (ErrorLocs[r] >= csize) {
				if (DEBUG) {
					CString stemp;
					stemp.Format("Error loc i=%d outside of codeword length %d\n", ErrorLocs[r], csize);
					AfxMessageBox(stemp);
				}
				return(0);
			}
		}
		
		for (r = 0; r < NErrors; r++) {
			int num, denom;
			i = ErrorLocs[r];
						
			num = 0;
			for (j = 0; j < parityNum*2; j++) 
				num ^= gmult(Omega[j], gexp[((255-i)*j)%255]);
			
			denom = 0;
			for (j = 1; j < parityNum*2; j += 2) {
				denom ^= gmult(Lambda[j], gexp[((255-i)*(j-1)) % 255]);
			}
			
			err = gmult(num, ginv(denom));
			if (DEBUG) {
				CString stemp;
				stemp.Format("Error magnitude %#x at loc %d\n", err, csize-i);
				AfxMessageBox(stemp);
			}
			
			codeword[csize-i-1] ^= err;
		}
		return(1);
	}
	else {
		if (DEBUG && NErrors) {
			CString stemp;
			stemp.Format("Uncorrectable codeword");
			AfxMessageBox(stemp);
		}
		return(0);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕在线不卡一区| 欧美日韩久久不卡| 国产精品欧美久久久久一区二区| 国内精品久久久久影院薰衣草| 精品国产欧美一区二区| 国产精品资源在线| 国产精品拍天天在线| 色综合久久中文综合久久牛| 亚洲五月六月丁香激情| 在线不卡中文字幕播放| 久久成人久久鬼色| 欧美国产日韩亚洲一区| 色一区在线观看| 日韩中文字幕区一区有砖一区 | 国产亚洲综合av| 国产馆精品极品| 亚洲欧洲日韩在线| 欧美日韩二区三区| 国内精品在线播放| 日韩毛片视频在线看| 欧美高清视频不卡网| 国产老肥熟一区二区三区| 中日韩av电影| 欧美肥妇bbw| 成人在线综合网| 亚洲1区2区3区4区| 国产亚洲一区字幕| 欧美视频一区二区| 国产剧情一区在线| 亚洲自拍偷拍av| 久久久亚洲精品石原莉奈| 99久久er热在这里只有精品66| 三级欧美在线一区| 国产精品麻豆久久久| 在线成人免费观看| 9人人澡人人爽人人精品| 午夜精品爽啪视频| 国产亚洲自拍一区| 欧美猛男男办公室激情| 丁香亚洲综合激情啪啪综合| 亚洲1区2区3区4区| 国产精品久久99| 精品国产伦一区二区三区观看方式 | 欧美日韩一区二区在线视频| 国产主播一区二区| 午夜精品久久久久久| 国产精品福利电影一区二区三区四区 | 中文字幕一区视频| 日韩精品一区二区三区视频| 91福利在线导航| 国产不卡视频在线观看| 奇米888四色在线精品| 夜夜精品视频一区二区| 国产欧美一区二区精品性| 91精品国产一区二区三区蜜臀| www.欧美精品一二区| 久久99精品国产| 调教+趴+乳夹+国产+精品| 1000部国产精品成人观看| 国产亚洲欧美一级| 精品国产乱码久久久久久图片| 69堂成人精品免费视频| 在线观看视频欧美| 99国产欧美另类久久久精品 | 亚洲人成网站精品片在线观看| 精品电影一区二区| 欧美大片日本大片免费观看| 欧美狂野另类xxxxoooo| 欧美日韩国产首页| 欧美怡红院视频| 欧美性受xxxx黑人xyx性爽| 91视频.com| 色综合天天综合网国产成人综合天 | 3d动漫精品啪啪一区二区竹菊| 日本二三区不卡| 色婷婷综合久色| 91日韩一区二区三区| 色哟哟日韩精品| 色婷婷综合中文久久一本| 99综合影院在线| 97久久超碰国产精品| 91在线观看一区二区| 99视频一区二区三区| 99久久精品国产精品久久| 99视频一区二区| 日本丶国产丶欧美色综合| 欧美自拍偷拍午夜视频| 欧美亚洲丝袜传媒另类| 欧美精品色一区二区三区| 欧美一区二区三区视频在线观看| 91精品中文字幕一区二区三区| 7777精品伊人久久久大香线蕉完整版 | 日本欧美一区二区三区| 日本91福利区| 老司机精品视频导航| 久久精品噜噜噜成人av农村| 国产一区二区不卡| 不卡视频一二三| 欧美日韩视频不卡| 日韩免费视频线观看| 久久久777精品电影网影网| 国产欧美1区2区3区| 亚洲日本护士毛茸茸| 亚洲成人精品一区| 精品亚洲欧美一区| www.性欧美| 欧美一区二区三区视频免费播放| 欧美videos大乳护士334| 国产精品大尺度| 性久久久久久久久久久久| 看片网站欧美日韩| www.亚洲色图.com| 69av一区二区三区| 久久精品人人做人人爽97| 一卡二卡三卡日韩欧美| 美女网站色91| 成人免费av资源| 欧美日韩不卡在线| 国产女主播在线一区二区| 亚洲成人精品一区| 国产高清精品在线| 色婷婷亚洲精品| 日韩欧美的一区| 一级日本不卡的影视| 久久精品国产精品青草| 91婷婷韩国欧美一区二区| 欧美一级日韩免费不卡| 成人免费在线观看入口| 激情六月婷婷综合| 欧美日韩精品免费| 日本一区二区成人| 美女国产一区二区三区| 91美女视频网站| 国产日韩欧美综合在线| 偷拍日韩校园综合在线| 国产一区二区免费在线| 欧美精品丝袜中出| 亚洲天堂av老司机| 国产乱码精品1区2区3区| 欧美嫩在线观看| 中文字幕一区二区三区色视频| 精品一区二区精品| 91麻豆精品国产91久久久久久| 亚洲国产精华液网站w| 精品一区二区三区免费毛片爱| 欧美日韩高清一区二区不卡| |精品福利一区二区三区| 国产一区二区三区免费看| 欧美丰满少妇xxxxx高潮对白 | 国产乱码精品一区二区三区五月婷 | 日本不卡一区二区三区| 色香蕉久久蜜桃| 亚洲欧洲99久久| 高清shemale亚洲人妖| 久久嫩草精品久久久精品一| 蜜臀久久99精品久久久久宅男| 欧美日韩国产精品自在自线| 亚洲男人的天堂在线观看| 大尺度一区二区| 国产婷婷精品av在线| 国产一区二区福利| 久久精品欧美一区二区三区不卡| 精彩视频一区二区三区| 日韩欧美视频在线| 美女国产一区二区三区| 欧美一卡2卡3卡4卡| 日本一区中文字幕| 日韩欧美中文字幕公布| 另类小说一区二区三区| 精品国产乱码91久久久久久网站| 免费成人深夜小野草| 日韩美女一区二区三区| 国产一区美女在线| 国产视频911| proumb性欧美在线观看| 亚洲六月丁香色婷婷综合久久| 在线国产电影不卡| 亚洲国产视频一区| 91 com成人网| 九九九精品视频| 久久精品人人爽人人爽| 国产91精品在线观看| 日韩久久一区二区| 欧美日韩一区精品| 蜜桃视频第一区免费观看| 久久综合狠狠综合| 成人午夜视频免费看| 一区二区三区日韩欧美| 欧美精品九九99久久| 精品无人码麻豆乱码1区2区| 国产欧美精品一区aⅴ影院 | 欧美日韩一级视频| 日精品一区二区三区| 久久综合色8888| caoporn国产精品| 亚洲第一激情av| 日韩精品在线一区| 97久久精品人人做人人爽| 天堂在线亚洲视频| 久久精品一级爱片|