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

📄 main.c

📁 BCH编码与译码程序
💻 C
📖 第 1 页 / 共 2 页
字号:
                (((voice_data_down_line_g729d[i][6] & BIT4) >> 4) << 9)|
                (((voice_data_down_line_g729d[i][6] & BIT3) >> 3) << 10)| //a6.3
                (((voice_data_down_line_g729d[i][6] & BIT2) >> 2) << 11)|  //a6.2
                (((voice_data_down_line_g729d[i][7] & BIT1) >> 1) << 12)|  //a7.0
                (((voice_data_down_line_g729d[i][7] & BIT0) >> 0) << 13)|
                (((voice_data_down_line_g729d[i][8] & BIT8) >> 8) << 14);  //a8.0
//Buffer_data[5]=0;
Buffer_data[5]= (((voice_data_down_line_g729d[i][8] & BIT7) >> 7) << 0)|   //a8.7
                (((voice_data_down_line_g729d[i][8] & BIT6) >> 6) << 1)|
                (((voice_data_down_line_g729d[i][8] & BIT5) >> 5) << 2)|  //a8.5
                (((voice_data_down_line_g729d[i][8] & BIT4) >> 4) << 3)| //a8.4
                (((voice_data_down_line_g729d[i][8] & BIT3) >> 3) << 4)| //a8.3
                (((voice_data_down_line_g729d[i][8] & BIT2) >> 2) << 5)|
                (((voice_data_down_line_g729d[i][8] & BIT1) >> 1) << 6)|
                (((voice_data_down_line_g729d[i][8] & BIT0) >> 0) << 7)| //a8.0
                (((voice_data_down_line_g729d[i][9] & BIT1) >> 1) << 8)|  //a9.1
                (((voice_data_down_line_g729d[i][9] & BIT0) >> 0) << 9)|  //a9.0
                (((voice_data_down_line_g729d[i][10] & BIT5) >> 5)<< 10)|
                (((voice_data_down_line_g729d[i][10] & BIT4) >> 4) <<11)|
                (((voice_data_down_line_g729d[i][10] & BIT3) >> 3) <<12)|
                (((voice_data_down_line_g729d[i][10] & BIT2) >> 2) <<13)|  //a10.2
                ( 0<<14);
 //以上是对从G729D拿出数据进行BCH编码后,然后把90bit的数据流,打包成6个word.
 //dengbing for test 20060403
   for (t=0;t<6;t++)
       Receive_Buffer_data[i][t]=Buffer_data[t];
 //dengbing for test 20060403
 //下面是通过BCH的接收到90个bit,然后根据BCH解码,得到64个bit,然后打包成为12个word的数据。          
        for (t=0;t<6;t++)
          { Receive_Buffer_Temp=Receive_Buffer_data[i][t];
            for (j=0;j<15;j++)
               {
                if((Receive_Buffer_Temp & 0x01)==0)
                  channel_out_bit[t*15+j]=0;
                else
                  channel_out_bit[t*15+j]=1;
                  Receive_Buffer_Temp=Receive_Buffer_Temp>>1;
               }
          }
  
   //以上的程序是通过对6个word中15个bit转换为90bit,分别存储在Channel_out_bit[]中。              
 */
 
 /*  
    for (j=10;j<25;j++)
         word_tran_bit[j-10]=channel_out_bit[j];
    for(j=0;j<10;j++)
         word_tran_bit[15+j]=channel_out_bit[j];
    for(j=25;j<31;j++)
         word_tran_bit[j]=channel_out_bit[j];
  //以上的程序摘取BCH译码的数据,进行如下的译码的过程。  
  */
 // TEST for programm the dengbing 2006-4-4
     Receive_Buffer_Temp=BCH1_CRC;
  for(j=14;j>=0;j--)
     {
      if((Receive_Buffer_Temp&0x01)==0)
         channel_out_bit[j]=0;
       else
       channel_out_bit[j]=1;
       Receive_Buffer_Temp=(Receive_Buffer_Temp>>1);
     }
     Receive_Buffer_Temp=BCH1_data;
  for(j=15;j>=0;j--)
     {
      if((Receive_Buffer_Temp&0x01)==0)
         channel_out_bit[15+j]=0;
       else
       channel_out_bit[15+j]=1;
       Receive_Buffer_Temp=(Receive_Buffer_Temp>>1);
     }
   for(j=0;j<31;j++)
       word_tran_bit[j]=channel_out_bit[j];  
          
  //TEST for grogramm the dengbing 2006-4-4.
    flag=decode_bch(word_tran_bit,3); 
 
    for(j=33;j<43;j++)
        word1_tran_bit[j-33]=channel_out_bit[j];
    for(j=31;j<33;j++)
        word1_tran_bit[10+j-31]=channel_out_bit[j];
    word1_tran_bit[12]=channel_out_bit[37];
    word1_tran_bit[13]=channel_out_bit[59];
    word1_tran_bit[14]=channel_out_bit[38];
    word1_tran_bit[15]=channel_out_bit[58];
    word1_tran_bit[16]=channel_out_bit[44];
    word1_tran_bit[17]=channel_out_bit[11];
    word1_tran_bit[18]=channel_out_bit[47];
    word1_tran_bit[19]=channel_out_bit[54];
    word1_tran_bit[20]=channel_out_bit[10];
    for(j=21;j<31;j++)
    word1_tran_bit[j]=0;
    flag1=decode_bch(word1_tran_bit,2);                                        
// 以上的程序进行对接收到信号进行BCH解码的过程。
    for(j=0;j<16;j++)
       serial_bit_channel[j]=word_tran_bit[15+j];
    for(j=10;j<12;j++)
       serial_bit_channel[6+j]=word1_tran_bit[j]; // 次敏感比特的头两个比特。   
       //对次敏感比特的通过BCH译码后的比特,取改变channel_out_bit中的值。
            channel_out_bit[66]= word1_tran_bit[12];
			channel_out_bit[84]= word1_tran_bit[13];
			channel_out_bit[67]= word1_tran_bit[14];
			channel_out_bit[83]= word1_tran_bit[15];
			channel_out_bit[44]= word1_tran_bit[16];
			channel_out_bit[46]= word1_tran_bit[17];
			channel_out_bit[55]= word1_tran_bit[18];
			channel_out_bit[49]= word1_tran_bit[19];
			channel_out_bit[48]= word1_tran_bit[20];
			channel_out_bit[72]= word1_tran_bit[21];
			channel_out_bit[79]= word1_tran_bit[22];
			channel_out_bit[45]= word1_tran_bit[23];
     //把剩余的比特也赋值到serial_bit_channel中。
     for(j=0;j<46;j++)
			serial_bit_channel[j+18]=channel_out_bit[j+43]; 
//把64个比特语音打成12个word中。
  for(j=0;j<64;j++)
	    BCH_decode_data[table[j]-1]=serial_bit_channel[j];
	    
	   

/*
	voice_data_up_line_g729d[i][1]=((serial_bit_channel[18]&BIT0)<<7)|
	                               ((serial_bit_channel[7]&BIT0)<<6)|
	                               ((serial_bit_channel[19]&BIT0)<<5)|
	                               ((serial_bit_channel[4]&BIT0)<<4)|
	                               ((serial_bit_channel[10]&BIT0)<<3)|
	                               ((serial_bit_channel[12]&BIT0)<<2)|
	                               ((serial_bit_channel[17]&BIT0)<<1)|
	                               ((serial_bit_channel[6]&BIT0)<<0);  
	                               
	voice_data_up_line_g729d[i][2]=((serial_bit_channel[20]&BIT0)<<9)| //a2.9
	                               ((serial_bit_channel[21]&BIT0)<<8)|
	                               ((serial_bit_channel[22]&BIT0)<<7)|
	                               ((serial_bit_channel[23]&BIT0)<<6)|
	                               ((serial_bit_channel[24]&BIT0)<<5)|
	                               ((serial_bit_channel[25]&BIT0)<<4)|
	                               ((serial_bit_channel[26]&BIT0)<<3)|
	                               ((serial_bit_channel[27]&BIT0)<<2)|
	                               ((serial_bit_channel[28]&BIT0)<<1)|
	                               ((serial_bit_channel[29]&BIT0)<<0);
                                  
	voice_data_up_line_g729d[i][3]=((serial_bit_channel[3]&BIT0)<<7)| //a3.7
	                               ((serial_bit_channel[1]&BIT0)<<6)|
	                               ((serial_bit_channel[0]&BIT0)<<5)|
	                               ((serial_bit_channel[2]&BIT0)<<4)|
	                               ((serial_bit_channel[5]&BIT0)<<3)|
	                               ((serial_bit_channel[15]&BIT0)<<2)|
	                               ((serial_bit_channel[30]&BIT0)<<1)|
	                               ((serial_bit_channel[31]&BIT0)<<0);  //a3.0  //26
	                              
	 voice_data_up_line_g729d[i][4]((serial_bit_channel[32]&BIT0)<<8)| //a3.7
	                               ((serial_bit_channel[33]&BIT0)<<7)|
	                               ((serial_bit_channel[34]&BIT0)<<6)|
	                               ((serial_bit_channel[35]&BIT0)<<5)|
	                               ((serial_bit_channel[36]&BIT0)<<4)|
	                               ((serial_bit_channel[37]&BIT0)<<3)|
	                               ((serial_bit_channel[38]&BIT0)<<2)|
	                               ((serial_bit_channel[39]&BIT0)<<1)|
	                               ((serial_bit_channel[40]&BIT0)<<0);
	                               
	 /*i=1;                           
	 for(j=0;j<8;j++)
	    {
	     voice_data_up_line_g729d[i][3]=^(serial_bit_channel[32+j]);
	     voice_data_up_line_g729d[i][3]<<1;
	    }
	    */
	 /*   
	 voice_data_up_line_g729d[i][5]=0;
	 for(j=0;j<2;j++)
	     {
	     voice_data_up_line_g729d[i][3]=^(serial_bit_channel[40+j]);
	     voice_data_up_line_g729d[i][3]<<1;
	     } 
    voice_data_up_line_g729d[i][6]=((serial_bit_channel[14]&BIT0)<<2)| //a6.2  //42
	                               ((serial_bit_channel[9]&BIT0)<<1)|
	                               ((serial_bit_channel[11]&BIT0)<<0);         //44
	                               
	voice_data_up_line_g729d[i][7]=((serial_bit_channel[16]&BIT0)<<3)| //a6.2  //45
	                               ((serial_bit_channel[47]&BIT0)<<2)|
	                               ((serial_bit_channel[48]&BIT0)<<1)|
	                               ((serial_bit_channel[49]&BIT0)<<0);    //  48                              
	                                   
	voice_data_up_line_g729d[i][8]=0;
	for(j=49;j<57;j++)
	   {
	     voice_data_up_line_g729d[i][8]=^serial_bit_channel(j);
	     voice_data_up_line_g729d[i][8]<<1;
	    }
	  voice_data_up_line_g729d[i][9]=((serial_bit_channel[57]&BIT0)<<1)| //a6.2  //42
	                                 ((serial_bit_channel[58]&BIT0)<<0);
	                                 
	 voice_data_up_line_g729d[i][10]=((serial_bit_channel[59]&BIT0)<<5)| //a6.2  //45
	                                ((serial_bit_channel[60]&BIT0)<<4)|
	                                ((serial_bit_channel[61]&BIT0)<<3)|
	                                ((serial_bit_channel[62]&BIT0)<<2)|    //  48                                                             	 	 	            
	                                ((serial_bit_channel[13]&BIT0)<<1)|
	                                ((serial_bit_channel[8]&BIT0)<<0);     
//上述程序是把BCH解出的64个bit,分别放到12word中,供G729D用。
*/	                                 
     point_org=BCH1_data;
    for (j=0;j<16;j++)
         {//test_db=(*point_org);
         word_tran_bit[j]=(point_org&0x8000)>>15;
         point_org=(point_org)<<1;
         }
         //point_org++;
   
    point_crc=BCH1_CRC;
for(j=16;j<32;j++)
     {
       word_tran_bit[j]=(point_crc&0x4000)>>14;
       point_crc=(point_crc)<<1;
     }
for (j=0;j<32;j++)
   {
   	if(j%20==0) error_tran_bit[j]=word_tran_bit[j]^1;
   	else error_tran_bit[j]=word_tran_bit[j];
   }
flag1=decode_bch(error_tran_bit,3);   


}

⌨️ 快捷键说明

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