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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bch_global.c

?? 鎂光的ECC編碼方案和解碼方案
?? C
字號:
/*******************************************************************************
*
*    File Name:  bch_global.c
*     Revision:  1.0
*         Date:  August, 2006
*        Email:  nandsupport@micron.com
*      Company:  Micron Technology, Inc.
*
*  Description:  Micron NAND BCH Global Package
*
*     Function:   1. Create Galois Field
*		  2. Create Generator Polynomial
*		  3. Create Parallel Generator Polynomial 
*
*   References: 
* 		  1. Error Control Coding, Lin & Costello, 2nd Ed., 2004
* 		  2. Error Control Codes, Blahut, 1983
* 		  3. Parallel CRC, Shieh, 2001
*
**
*   Disclaimer   This software code and all associated documentation, comments or other 
*  of Warranty:  information (collectively "Software") is provided "AS IS" without 
*                warranty of any kind. MICRON TECHNOLOGY, INC. ("MTI") EXPRESSLY 
*                DISCLAIMS ALL WARRANTIES EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 
*                TO, NONINFRINGEMENT OF THIRD PARTY RIGHTS, AND ANY IMPLIED WARRANTIES 
*                OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. MTI DOES NOT 
*                WARRANT THAT THE SOFTWARE WILL MEET YOUR REQUIREMENTS, OR THAT THE 
*                OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE. 
*                FURTHERMORE, MTI DOES NOT MAKE ANY REPRESENTATIONS REGARDING THE USE OR 
*                THE RESULTS OF THE USE OF THE SOFTWARE IN TERMS OF ITS CORRECTNESS, 
*                ACCURACY, RELIABILITY, OR OTHERWISE. THE ENTIRE RISK ARISING OUT OF USE 
*                OR PERFORMANCE OF THE SOFTWARE REMAINS WITH YOU. IN NO EVENT SHALL MTI, 
*                ITS AFFILIATED COMPANIES OR THEIR SUPPLIERS BE LIABLE FOR ANY DIRECT, 
*                INDIRECT, CONSEQUENTIAL, INCIDENTAL, OR SPECIAL DAMAGES (INCLUDING, 
*                WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, BUSINESS INTERRUPTION, 
*                OR LOSS OF INFORMATION) ARISING OUT OF YOUR USE OF OR INABILITY TO USE 
*                THE SOFTWARE, EVEN IF MTI HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 
*                DAMAGES. Because some jurisdictions prohibit the exclusion or 
*                limitation of liability for consequential or incidental damages, the 
*                above limitation may not apply to you.
*
*                Copyright 2006 Micron Technology, Inc. All rights reserved.
*
*
* Rev  Author		Date		Changes
* ---  ---------------	----------	-------------------------------
* 1.0  ZS		08/07/2006	Initial release
* 2.0  PF		03/05/2007	Expanded constants to allow 
* 					larger fields
* 
* 
/*******************************************************************************/

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

#define mm_max  15         	/* Dimension of Galoise Field */
#define nn_max  32768        	/* Length of codeword, n = 2**m - 1 */
#define tt_max  20          	/* Number of errors that can be corrected */
#define kk_max  32768        	/* Length of information bit, kk = nn - rr  */
#define rr_max  1000		/* Number of parity checks, rr = deg[g(x)] */
#define parallel_max  32	/* Number of parallel encoding/syndrome computations */
#define DEBUG  0

/* Default values */
int df_m = 13;              	// BCH code over GF(2**mm)
int df_t = 4;              	// Number of errors that can be corrected
int df_p = 8;              	// Number of substreams to calculate in parallel

int mm, nn, kk, tt, rr;		// BCH code parameters
int nn_shorten, kk_shorten;	// Shortened BCH code
int Parallel ;			// Parallel processing
int Verbose ;			// Mode indicator
int p[mm_max + 1], alpha_to[nn_max], index_of[nn_max] ;	// Galois field
int gg[rr_max] ;		// Generator polynomial
int T_G[rr_max][rr_max], T_G_R[rr_max][rr_max];		// Parallel lookahead table
int T_G_R_Temp[rr_max][rr_max] ; 
int data[kk_max], data_p[parallel_max][kk_max], recd[nn_max] ;	// Information data and received data

int hextoint(char hex)
// Convert HEX number to Integer
{	int r, h;
	r = -1;
	h = (int)hex;
	if ((h >= 97) && (h <= 102)) 
		r = h - 87;
	else if ((h >= 65) && (h <= 70)) 
		r = h - 55;
	else if ((h >= 48) && (h <= 57)) 
		r = h - 48;
	return r;
}

char inttohex(int i)
// Convert Integer number to HEX
{	char r;
	if (i > 9)
		r = (char)(55 + i);
	else
		r = (char)(48 + i);
	return r;
}

void print_hex(int length, int Binary_data[length], FILE *std)
// Print the binary data in HEX form
// 1100 1010 = 5 3
{	int i, j, l, v;
	l = ceil((double)length / 4);
	
	for (j = l - 1; j >= 0; j--) 
	{	v = 0;
		for(i = 3; i >= 0; i--)
			v = v + (int)Binary_data[j * 4 + i] * (int)pow(2, i);
		fprintf(std, " %c", inttohex(v));
	}
}

void print_hex_low(int length, int Binary_data[length], FILE *std)
// Print the binary data in HEX form from low to high order
// 1100 1010 = C A
{	int i, j, l, v;
	l = ceil((double)length / 4);
	
	for (j = 0; j < l; j++) 
	{	v = 0;
		for(i = 0; i <= 3; i++)
			v = v + (int)Binary_data[j * 4 + i] * (int)pow(2, 3-i);
		fprintf(std, "%c", inttohex(v));
	}
}

void generate_gf()
/* Generate GF(2**mm) from the primitive polynomial p(X) in p[0]..p[mm]
   The lookup table looks like:  
   index -> polynomial form:   alpha_to[ ] contains j = alpha**i;
   polynomial form -> index form:  index_of[j = alpha**i] = i
   alpha_to[1] = 2 is the primitive element of GF(2**mm)
 */
{	int i;
	int mask ;	// Register states
	
	// Primitive polynomials
   	for (i = 1; i < mm; i++)
		p[i] = 0;
	p[0] = p[mm] = 1;
	if (mm == 2)		p[1] = 1;
	else if (mm == 3)	p[1] = 1;
	else if (mm == 4)	p[1] = 1;
	else if (mm == 5)	p[2] = 1;
	else if (mm == 6)	p[1] = 1;
	else if (mm == 7)	p[1] = 1;
	else if (mm == 8)	p[4] = p[5] = p[6] = 1;
	else if (mm == 9)	p[4] = 1;
	else if (mm == 10)	p[3] = 1;
	else if (mm == 11)	p[2] = 1;
	else if (mm == 12)	p[3] = p[4] = p[7] = 1;
	else if (mm == 13)	p[1] = p[2] = p[3] = p[5] = p[7] = p[8] = p[10] = 1;	// 25AF
	// else if (mm == 13)	p[1] = p[3] = p[4] = 1;
	else if (mm == 14)	p[2] = p[4] = p[6] = p[7] = p[8] = 1;	// 41D5
	// else if (mm == 14)	p[1] = p[11] = p[12] = 1;
	else if (mm == 15)	p[1] = 1;
	else if (mm == 16)	p[2] = p[3] = p[5] = 1;
	else if (mm == 17)	p[3] = 1;
	else if (mm == 18)	p[7] = 1;
	else if (mm == 19)	p[1] = p[5] = p[6] = 1;
	else if (mm == 20)	p[3] = 1;
	
	if (Verbose)
	{	fprintf(stderr, "# The Galois field is GF(2**%d);\n\n", mm);
		fprintf(stderr, "# The primitive polynomial is: p(x) = ");
		for (i = 0; i <= mm; i++) 
		{	fprintf(stderr, " %d", p[i]);
		}
		fprintf(stderr, "\n\n");
	}
	
	// Galois field implementation with shift registers
	// Ref: L&C, Chapter 6.7, pp. 217
	mask = 1 ;
	alpha_to[mm] = 0 ;
	for (i = 0; i < mm; i++)
	{ 	alpha_to[i] = mask ;
		index_of[alpha_to[i]] = i ;
		if (p[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 ;
	
	// Print out the Galois Field
	if (Verbose)
	{	fprintf(stderr, "# Look-up tables for GF(2**%2d)\n", mm) ;
		fprintf(stderr, "  i   alpha_to[i]  index_of[i]\n") ;
		for (i=0; i<=nn; i++)
			fprintf(stderr, "%3d      %3d          %3d\n", i, alpha_to[i], index_of[i]) ;
		fprintf(stderr, "\n") ;
	}
}


void gen_poly()
/* Compute generator polynomial of the tt-error correcting Binary BCH code 
 * g(x) = LCM{M_1(x), M_2(x), ..., M_2t(x)},
 * where M_i(x) is the minimal polynomial of alpha^i by cyclotomic cosets
 */
{	int gen_roots[nn + 1], gen_roots_true[nn + 1] ; 	// Roots of generator polynomial
	int i, j, iii, jjj, Temp ;
		
	// Initialization of gen_roots
	for (i = 0; i <= nn; i++) 
	{	gen_roots_true[i] = 0;
		gen_roots[i] = 0;
	}

	// Cyclotomic cosets of gen_roots
   	for (i = 1; i <= 2*tt ; i++)
	{	for (j = 0; j < mm; j++) 
		{	Temp = ((int)pow(2, j) * i) % nn;
			gen_roots_true[Temp] = 1;
		}
	}
	
   	rr = 0;		// Count the number of parity check bits
   	for (i = 0; i < nn; i++) 
	{	if (gen_roots_true[i] == 1) 
		{	rr++;
			gen_roots[rr] = i;
		}
	}
	kk = nn - rr;
	
	// Compute generator polynomial based on its roots
	gg[0] = 2 ;	// g(x) = (X + alpha) initially
	gg[1] = 1 ;
	for (i = 2; i <= rr; 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]] + index_of[alpha_to[gen_roots[i]]]) % nn] ;
		else 
			gg[j] = gg[j-1] ;
		gg[0] = alpha_to[(index_of[gg[0]] + index_of[alpha_to[gen_roots[i]]]) % nn] ;
	}
	
	if (Verbose)
	{	fprintf(stderr, "# The Generator Polynomial is:\n") ;
		for (i=0; i <= rr; i++)  
			fprintf(stderr, " %d", gg[i]) ;
		fprintf(stderr, "\n\n") ;
	}
	
	// for parallel encoding and syndrome computation
	// Max parallalism is rr
	if (Parallel > rr)
		Parallel = rr ;
	
	// Construct parallel lookahead matrix T_g, and T_g**r from gg(x)
	// Ref: Parallel CRC, Shieh, 2001
	for (i = 0; i < rr; i++)
	{	for (j = 0; j < rr; j++)
			T_G[i][j] = 0;
	}
	
	for (i = 1; i < rr; i++)
		T_G[i][i-1] = 1 ;

	for (i = 0; i < rr; i++)
		T_G[i][rr - 1] = gg[i] ;
	
	for (i = 0; i < rr; i++)
	{	for (j = 0; j < rr; j++)
			T_G_R[i][j] = T_G[i][j];
	}
	
	// Compute T_G**R Matrix
	for (iii = 1; iii < Parallel; iii++)
	{	for (i = 0; i < rr; i++)
		{	for (j = 0; j < rr; j++)
			{	Temp = 0;
				for (jjj = 0; jjj < rr; jjj++)
					Temp = Temp ^ T_G_R[i][jjj] * T_G[jjj][j];
				
				T_G_R_Temp[i][j] = Temp;
			}
		}
		
		for (i = 0; i < rr; i++)
		{	for (j = 0; j < rr; j++)
				T_G_R[i][j] = T_G_R_Temp[i][j];
		}
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美丰满少妇xxxxx高潮对白| 成人av资源站| 亚洲图片欧美激情| 中文字幕乱码日本亚洲一区二区| 2023国产精品| 26uuu欧美| 国产精品视频观看| 国产精品热久久久久夜色精品三区 | 激情都市一区二区| 久久se精品一区精品二区| 狂野欧美性猛交blacked| 久久成人18免费观看| 激情久久五月天| 成人一区二区三区视频在线观看| 国产91精品入口| 99久久精品国产网站| 在线观看网站黄不卡| 91精品久久久久久久91蜜桃| 欧美一区二区观看视频| 精品国产一二三| 国产精品久久久久精k8| 亚洲国产精品久久久男人的天堂| 日本一不卡视频| 国产麻豆欧美日韩一区| 99国产精品久久久久久久久久| 在线免费观看一区| 日韩免费观看高清完整版| 国产精品天美传媒| 亚洲国产人成综合网站| 激情欧美一区二区| 色婷婷综合激情| 精品国内二区三区| 亚洲欧美日韩久久| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产一区二区三区免费看| 91福利国产成人精品照片| 日韩欧美综合在线| 自拍偷拍国产精品| 国模少妇一区二区三区| 欧美日韩专区在线| 久久精品欧美日韩精品| 亚洲一区二区三区国产| 国产成人在线视频播放| 欧美精品久久天天躁| 国产精品乱码人人做人人爱 | 九九国产精品视频| 色呦呦日韩精品| 欧美国产综合一区二区| 男女性色大片免费观看一区二区| 99久久精品免费看国产| 国产亚洲欧美日韩俺去了| 视频一区在线视频| 99国产精品久久久久久久久久 | 国产日韩欧美精品电影三级在线| 亚洲自拍另类综合| 97se亚洲国产综合自在线不卡| 精品动漫一区二区三区在线观看| 亚洲v日本v欧美v久久精品| 91在线视频观看| 国产精品欧美一区喷水| 韩国女主播一区二区三区| 欧美日韩国产一区| 亚洲一区在线视频| 色婷婷亚洲婷婷| 自拍偷拍国产精品| 91视频精品在这里| 亚洲欧洲韩国日本视频 | 国产精品国产三级国产普通话99 | 国产精品毛片高清在线完整版 | 国产精品色噜噜| 国产激情视频一区二区三区欧美 | 欧美激情一区二区在线| 国产一区二区视频在线播放| 日韩欧美国产综合一区| 另类欧美日韩国产在线| 欧美一区二区私人影院日本| 日韩主播视频在线| 日韩一卡二卡三卡| 久久er精品视频| 国产日韩亚洲欧美综合| 国产精品一级二级三级| 欧美激情在线看| 丁香一区二区三区| 亚洲欧洲中文日韩久久av乱码| 99久久99久久精品免费观看| 亚洲蜜臀av乱码久久精品蜜桃| 色悠久久久久综合欧美99| 亚洲无线码一区二区三区| 欧美日韩亚州综合| 捆绑调教美女网站视频一区| 精品国产乱码久久久久久牛牛 | 自拍偷在线精品自拍偷无码专区| 91在线一区二区三区| 亚洲一区在线观看视频| 欧美一二三区精品| 国产99一区视频免费| 亚洲女人****多毛耸耸8| 欧美日韩国产一区| 国产又粗又猛又爽又黄91精品| 国产亚洲一二三区| 欧美综合色免费| 免费在线看成人av| 国产精品美日韩| 欧美日韩成人高清| 国产成人精品免费视频网站| 亚洲精品国产a久久久久久| 欧美精品成人一区二区三区四区| 久久精品二区亚洲w码| 国产精品久久久久久久蜜臀| 欧美日韩午夜影院| 丁香婷婷综合五月| 日韩精品免费视频人成| 国产欧美日韩精品一区| 91麻豆精品国产自产在线 | 欧美日韩在线免费视频| 麻豆精品视频在线| 亚洲黄色小说网站| 久久久不卡网国产精品一区| 欧美性一二三区| 国产精品一区二区三区网站| 亚洲大片免费看| 国产精品久久看| 欧美电影免费观看高清完整版在线| 99精品黄色片免费大全| 精品午夜一区二区三区在线观看| 一区二区三区中文在线| 日本一区二区三区在线不卡| 日韩欧美亚洲另类制服综合在线| 色诱亚洲精品久久久久久| 国产一区二区三区免费播放| 免费成人在线网站| 亚洲一区在线播放| 亚洲女同女同女同女同女同69| 久久久久久久性| 日韩精品一区二区三区视频| 欧美日韩精品福利| 91精品1区2区| 91在线国产观看| 福利视频网站一区二区三区| 韩国女主播一区| 老司机精品视频线观看86| 日本一道高清亚洲日美韩| 亚洲一卡二卡三卡四卡五卡| 夜色激情一区二区| 一区二区三区国产精品| 一区二区三区中文字幕精品精品 | 亚洲小少妇裸体bbw| 亚洲色图视频免费播放| 国产精品狼人久久影院观看方式| 久久综合99re88久久爱| 日韩欧美激情一区| 日韩欧美一二区| 欧美精品一区二区三区蜜桃视频| 日韩美女一区二区三区| 欧美电影免费观看高清完整版在线观看| 欧美精品99久久久**| 欧美一区二区三区播放老司机| 欧美老女人第四色| 欧美一区二区视频在线观看2022| 4hu四虎永久在线影院成人| 欧美日韩成人激情| 日韩女优av电影| 26uuu亚洲综合色| 欧美国产精品劲爆| 亚洲欧美日韩国产另类专区| 精油按摩中文字幕久久| 国产毛片精品一区| 成人免费视频免费观看| 成人v精品蜜桃久久一区| 色天使色偷偷av一区二区| 欧美性感一区二区三区| 日韩三级视频在线看| 国产日产欧美一区二区视频| 最近日韩中文字幕| 亚洲午夜电影在线观看| 精品一区中文字幕| www.爱久久.com| 精品视频在线免费看| 欧美成人精品二区三区99精品| 久久久电影一区二区三区| 亚洲黄色小视频| 久久国产欧美日韩精品| av一区二区不卡| 欧美丰满少妇xxxbbb| 中文av字幕一区| 日本亚洲三级在线| 成人免费毛片嘿嘿连载视频| 欧美日韩综合在线| 久久久久综合网| 亚洲韩国精品一区| 国产 欧美在线| 欧美日韩另类一区| 日本一区二区高清| 日本欧美大码aⅴ在线播放| 成人一级黄色片| 日韩欧美精品在线| 亚洲免费资源在线播放| 国产专区综合网| 欧美日韩国产一级二级| 国产精品女上位|