⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c8_3_4.c

📁 dsp入门与实践一书的源代码
💻 C
字号:
void forney_cn( const unsigned char *restrict s,
				unsigned char *restrict lambda,
				int lam_deg,
				unsigned char *restrict zeros,
				unsigned char *restrict byte_i,
				int *fail,
				const unsigned char *restrict *restrict tables,
				int T,
				int RS_N,
				unsigned char *restrict scratch )

	{
			int i,j,k;	
			unsigned char *omega = scratch;
			unsigned char *syn = omega + 3*T;
			unsigned char *numerator = syn + 4*T;
			unsigned char *denominator = numerator + T;
			unsigned char *poly = denominator + T;
			unsigned char err_pos_i, err_mag_i, a, b;
			int RS_T = T;
			int RS_2T = 2*T;
			int t0;
	

			const unsigned char *div_inv_table = tables[1];
			const unsigned char *log_table = tables[2];

			for (i= 0; i< RS_T; i++) syn[i] = 0;
			for (i= RS_T; i < (RS_2T + RS_T); i++) syn[i] = s[i-RS_T];
			for (i= RS_2T + RS_T; i<(RS_2T + RS_2T); i++) syn[i] = 0;
			for (j = RS_2T - 1; j >= 0; j--)
				{
					omega[j]= 0;
					for (i = 0; i <= RS_T; i++)
					{
						t0 = _gmpy4(lambda[i],syn[RS_T+j-i]);
						omega[j]^= t0;
					}
				}

			for (i = RS_T; i< RS_2T; i++) poly[i] = 0;
			for (i = 0; i < RS_T;i++)
				{
					poly[i] = lambda[i];
					if (i%2 == 0) poly[i] = 0;
				}

			for (i=0; i< RS_T; i++)
				{
					denominator[i] = 0;
					numerator[i] = 0;
				}
			for (j = RS_T - 1; j >= 0; j--)
				{
					for (i = 0; i< RS_T; i++)
						{
							t0 = _gmpy4(zeros[i], log_table[denominator[i]]);
							denominator[i] = t0;
							denominator[i]^= poly[1+j];
							t0 = _gmpy4(zeros[i],numerator[i]);
							numerator[i] = t0;
							numerator[i]^= omega[j];
						}
				}
			for (i = 0; i < RS_T; i++)
				{
					t0 = _gmpy4(denominator[i], zeros[i]);
					denominator[i] = t0;
				}
	
				
			for (i = 0; i < RS_T; i++)
				{
					err_pos_i = 0;
					err_mag_i = 0;
					b = div_inv_table[denominator[i]];
					a = div_inv_table[zeros[i]];
					if (i < lam_deg)
						{
							t0 = _gmpy4(numerator[i], b);
							err_mag_i = t0;
							err_pos_i = log_table[a];
							if (!denominator[i])
								{
									*fail = 4;
								}
							if (err_pos_i > RS_N - 1)
								{
									*fail = 5;
								}
						}
					k = RS_N-1 - err_pos_i; /* subtract the error from r(x) */
					if (*fail == 0)
						{
							byte_i[k] = byte_i[k] ^ err_mag_i;
						}
				}
			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -