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

📄 cpp1.cpp

📁 通信实验的编码和译码及纠错程序
💻 CPP
字号:
# include "stdio.h"

void main()
{  int code_in;
   int i,j,a;
   int code_out[15];
   int mid[15];
   int count=0;
/*  代码  */

   int g[15]={0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x100,0x200,0x365,0x1AF,0x35E,0x1D9,0x3B2};
/* int g[15]={0000000001b,  */
/*	          0000000010b,  */
/*	          0000000100b,  */
/*	          0000001000b,  */
/*	          0000010000b,  */
/*	          0000100000b,  */
/*	          0001000000b,  */
/*	          0010000000b,  */
/*	          0100000000b,  */
/*	          1000000000b,  */
/*	          1101100101b,  */
/*	          0110101111b,  */
/*	          1101011110b,  */
/*            0111011001b,  */
/*	          1110110010b}  */


   while(count != 10)
 { 

	printf("请输入原始信息数据(0~3ff):");
    scanf("%x",&code_in);

   for(i=0;i<15;i++)
   {
      a=code_in&g[i];
      for(j=0;j<10;j++)
	  {
         mid[j]=a&1;
         a=a>>1;
	  }
      code_out[i]=mid[0];
      for(j=1;j<10;j++)
      code_out[i]=code_out[i]^mid[j];
   }

   printf("纠错编码后的输出比特流: ");
   for(i=14;i>=0;i--)
    printf("%d",code_out[i]);

/* 解码及纠错 */
   
  for (i=0;i<15;i++)
  { 
	 code_out[i]=0;
     mid[i]=0;
  }
  code_in=0;
  i=0;j=0;a=0;
  
  int check_out[5];
  int errorflag,matchbit,matchflag,comparebit;

  int check[5]={0x765,0x9AF,0x135E,0x21D9,0x43B2};  /*纠错数组*/
/* int check[5]={000011101100101b,    */
/*	             000100110101111b,    */
/*      	     001001101011110b,    */
/*	             010000111011001b,    */
/*	             100001110110010b }   */

  printf("\n输入接收端收到的原始数据(16进制):");
  scanf("%x",&code_in);    /*输入接收端收到的原始数据*/

  a=code_in;
  for (i=0;i<15;i++)      /*将接收到的数据转换为比特流*/
  { 
	 code_out[i]=a&1;
     a=a>>1;
  }


  for(i=0;i<5;i++)        /*计算校验和*/
  {  
	 a=code_in&check[i];
     for(j=0;j<15;j++)    /*获得a的每一个比特 */
	 {
	   mid[j]=a&1;
	   a=a>>1;
	 }
     check_out[i]=mid[0];
     for(j=1;j<15;j++)
      check_out[i]=check_out[i]^mid[j]; /*所有的比特模2加*/
  }


  i=0; errorflag=0;
   do 
   {
      if (check_out[i]==1) { errorflag=1; i=5;}
      else i++;
   }
   while (i<5);     /* 检查是否所有的check值均为0 */

  if (errorflag==1)
  {   i=0;  matchbit=100;      /* 在同一行中查找*/
      do  
	  { 
		    j=0; matchflag=1;
	        do 
			{ 
				comparebit=(check[j]>>i)&1; /* 得到数组的 [j][i]比特 */
	    	    if (check_out[j]!=comparebit) 
				{
				 j=5;matchflag=0;
				}                /*如果未找到合适的比特,立即跳出*/
                else j++;
			} 
           while (j<5);
	       
		   if (matchflag==1) 
		   {
			   matchbit=i;i=15;
		   }               /*如果找到合适的比特,立即跳出*/
	       else i++;
	 }
     while (i<15);
     
	 if (matchbit<=14)
     {
	   code_out[matchbit]=code_out[matchbit]^1;    /*纠正错误的比特*/
	   printf("第%d位数据出错!\n",matchbit+1);
     }
      else printf("错误但不可纠!\n");

  }
  else printf("传输正确或错误不可检!\n");

  printf("还原的信息比特为:\n");
  for (i=9;i>=0;i--)                     /*仅打印信息比特*/
   printf("%d",code_out[i]);
	printf("\n");
  printf("/********************************************************/\n");
  printf("请输入count的值决定是否继续程序\n");
  printf("如果你输入10,程序将停止 :");
  scanf("%d",&count);
 printf("/********************************************************/\n");	
  if(count == 10)
	printf("你选择了退出,再见!");
	}
}

⌨️ 快捷键说明

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