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

📄 fec码.cpp

📁 FEC2/3加解码
💻 CPP
字号:
# include "stdio.h"

void main()
{  int code_in;
   int i,j,a;
   int code_out[15];
   int mid[15];

/* 编码  */

   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}  */

   printf("输入原始信息数据(OX):");

   scanf("%x",&code_in);if (code_in>1023) 
   {printf("输入数据溢出:");}
   else

   {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译码器输入数据(OX):");
  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++)    
	 {
	   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]; 
  }


  i=0; errorflag=0;
   do 
   {
      if (check_out[i]==1) { errorflag=1; i=5;}
      else i++;
   }
   while (i<5);    

  if (errorflag==1)
  {   i=0;  matchbit=100;    
      do  
	  { 
		    j=0; matchflag=1;
	        do 
			{ 
				comparebit=(check[j]>>i)&1; 
	    	    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("译码后的信息比特为:");
  for (i=9;i>=0;i--)                   
   printf("%d",code_out[i]);

}




⌨️ 快捷键说明

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