www.pudn.com > xunhuanma.rar > xunhuanma.cpp
//**************************************************************** //该程序实现循环码的两种编码方式,K级和N-K级编码器的仿真程序 //同时实现能纠正一位错误的循环码的译码; //**************************************************************** //通信与信息系统专业 詹锐鑫 07212439 2008年1月24日 //**************************************************************** #includeconst 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