www.pudn.com > xunhuanma.rar > xunhuanma.cpp


//**************************************************************** 
//该程序实现循环码的两种编码方式,K级和N-K级编码器的仿真程序 
//同时实现能纠正一位错误的循环码的译码; 
//**************************************************************** 
//通信与信息系统专业    詹锐鑫   07212439	2008年1月24日 
//**************************************************************** 
 
#include  
 
const int n=7,k=4,r=n-k;				//循环码的n,k值 
										//可以改变这两个值,实现对不同的循环码进行仿真; 
 
void encodeh(int m[],int h[],int c[]); 
void encodeg(int m[],int g[],int c[]); 
void decode_1err(int r[],int g[],int c[]);  
void main() 
{ 
	int g[r+1]={1,0,1,1};			//循环码的生成多项式,高次方在左边位元上; 
	int h[k+1]={1,0,1,1,1};			//循环码的校验多项式,高次方在左边位元上; 
 
	int m[k]={1,0,0,1};				//循环码的编码器输入; 
	int c[n]={0};					//编码器的输出; 
	int i=0; 
	 
	cout<<"(n,k)="<=1;l--) 
		{ 
			w[l]=w[l-1]; 
		} 
		w[0]=s; 
	} 
 
} 
 
void encodeg(int m[],int g[],int c[]) 
{ 
	int w[r+1]={0};				//registers clear to 0; 
	int i=0; 
	int m_temp=0; 
	for(i=0;i<=k-1;i++) 
	{ 
		c[i]=m[i]; 
		m_temp=(w[n-k-1]+m[i])%2; 
		for(int j=0;j<=n-k-1;j++) 
		{ 
			if(j==n-k-1) 
			{ 
				w[0]=m_temp; 
			} 
			else{ 
			w[n-k-1-j]=(m_temp*g[1+j]+w[n-k-1-j-1])%2;						 
			} 
		} 
	} 
	 
   	for(i=0;i<=n-k-1;i++) 
	{ 
		c[k+i]=w[n-k-1-i];		 
	} 
} 
 
 
void decode_1err(int r[],int g[],int c[]) 
{ 
	int m[k]={0}; 
	m[0]=1; 
	int c1[n]={0}; 
	encodeg(m,g,c1); 
 
	int s[n-k]={0}; 
	for(int index=0;index