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

📄 mtrxgen.c

📁 4.8kcelp语音压缩编码程序
💻 C
字号:
/**************************************************************************** ROUTINE*		matrixgen** FUNCTION*		 *		This routine is used to generate the H matrix and *		syndrome table necessary for Hamming encode and decode.  *		This routine should be called once before calling*	 	encodeham and decodeham.** SYNOPSIS*		subroutine matrixgen(codelength1,codelength2,*					hmatrix,syndrometable)**   formal **                       data    I/O*       name            type    type    function*       -------------------------------------------------------------------*	codelength1	int	i	number of data bits (63)*	codelength2	int	i	number of information bits (57)*	hmatrix		int	o	vector to encode and decode by*	syndrometable 	int	o	table containing error masks****************************************************************************** DESCRIPTION**	This subroutine is part of a set of subroutines which perform*	a Generalized Hamming Code.  As you know, Hamming codes are perfect*	codes and can only detect and correct one error.  We added an overall* 	parity checkbit, which allows us to detect 2 errors.  When 2 errors *	are detected, (in subroutine decodeham) no correction attempt is*	made.  This would most likely result in more errors.  Instead, a flag*	is sent to the calling program notifying it of multiple errors so*	that smoothing may be attempted.  The Hamming codes presently *	supported by the routines are (63,57), (31,26), (15,11), and* 	shortened variations thereof.  It could be made even more general *	by making minor modifications to the decimal to binary output vector *	code in the encodeham procedure.  This routine at present will *	calculate a maximum of 6 bits.**	Hamming routines consist of the following files:**		matrixgen - generates the hmatrix and sydrometable.*		encodeham - generates the codeword and overall paritybit.*		decodeham - recovers infobits, checks for errors, corrects 1*			    error, and sends out flag for smoothing.**	This routine initializes all of the tables necessary to perform*	the Hamming code (G Matrix, Syndrome Table) .  ****************************************************************************** CALLED BY**	celp** CALLS******************************************************************************	* REFERENCES**	Lin and Costello:  Error Control Coding*	Berlekamp:  Algebraic Coding Theory***************************************************************************/matrixgen(codelength1, codelength2, hmatrix, syndrometable)int codelength1, codelength2, hmatrix[], syndrometable[];{  int i, temp1;  /*	This is the data necessary to construct the G Matrix and the         Syndrome Table.  If a larger code is desired, this table can         be easily added to.  All other routines, except the syndrome         table construction,  are general enough to calculate any size         Hamming Code.							*/  static int itemplate[] = { 1,  2,  4,  8, 16, 32};  static int ptemplate[] =       { 3,  5,  6,  7,  9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20,       21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36,       37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,       52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63};  /*	Construct the parity portion of the hmatrix			*/    for (i = 0; i < codelength2; i++)    hmatrix[i] = ptemplate[i];  /*	Construct the identity portion of the hmatrix.			*/  for (i = 0; i < codelength1 - codelength2; i++)    hmatrix[codelength2 + i] = itemplate[i];      /*	Construct the syndrometable.  This routine is rather simple because	I chose to arrange my G matrix sequentially (Berlekamp method).  	I placed the parity bits in front in ascending order then added the 	bits left over in ascending order.  Since our code is linear I can	get away with this.  If a larger Hamming code is needed, then a new 	exception must be generated for each parity bit.  		*/  temp1 = 1;  for (i = 1; i <= codelength1; i++)  {    switch (i)    {      case 1:        syndrometable[i - 1] = codelength2 + 1;        break;      case 2:        syndrometable[i - 1] = codelength2 + 2;        break;      case 4:        syndrometable[i - 1] = codelength2 + 3;        break;      case 8:        syndrometable[i - 1] = codelength2 + 4;        break;      case 16:        syndrometable[i - 1] = codelength2 + 5;        break;      case 32:        syndrometable[i - 1] = codelength2 + 6;        break;      default:        syndrometable[i - 1] = temp1++;    };  }}

⌨️ 快捷键说明

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