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

📄 spc_encoder.cpp

📁 Turbo 码的logmap算法实现。用于通信系统仿真
💻 CPP
字号:
//Author NiuKai
//Date February, 22th 2003
//Function generate recursive single parity convolutional code with encode rate = 1

#include "PCCC_para.h"
void SPC_Encoder(int Gen_polynomial_numerator[],int  Gen_polynomial_denominator[],
                                      int source_stream[],float encode_stream[],
                                      int RSC_Rate, int RSC_Constrain_Len, int Input_Len)
{     int i,j,k;
      int *RSC_Register;
      int Mem_Len;
      int temp1,temp2;
      
      Mem_Len=RSC_Constrain_Len-1;
      RSC_Register=(int *)calloc(Mem_Len,sizeof(int));
      
      //initialization 
	  for(i=0;i<Mem_Len;i++)
	  	    RSC_Register[i]=0;
      //normal encoding process
	  for(i=0;i<Input_Len;i++)
      {    
                   
            temp1=source_stream[i];
            for(j=0;j<Mem_Len;j++)
                   temp1^=Gen_polynomial_denominator[j+1]*RSC_Register[j];
            temp2=temp1;
			for(j=0;j<Mem_Len;j++)
			       temp2^=Gen_polynomial_numerator[j+1]*RSC_Register[j];
			  
            if(temp2==0)
			      encode_stream[i]=1;
			else
			      encode_stream[i]=-1;
            
          	for(j=Mem_Len-1;j>=1;j--)
				  RSC_Register[j]=RSC_Register[j-1];
			RSC_Register[0]=temp1;
	  }     
      //tail bit process 
	  for(i=0;i<Mem_Len;i++)
      {     
            temp1=0;
            for(j=0;j<Mem_Len;j++)
                  temp1^=Gen_polynomial_denominator[j+1]*RSC_Register[j];
            if(temp1==0)
                encode_stream[Input_Len+i*RSC_Rate]=1;
            else
                encode_stream[Input_Len+i*RSC_Rate]=-1;
            
		    for(j=1;j<RSC_Rate;j++)
			{      
                   temp2=0;
			       for(k=0;k<Mem_Len;k++)
				   	     temp2^=Gen_polynomial_numerator[k+1]*RSC_Register[k];
				   
                   if(temp2==0)
				      encode_stream[Input_Len+i*RSC_Rate+j]=1;
				   else
				      encode_stream[Input_Len+i*RSC_Rate+j]=-1;
 
            }
	        
			for(j=Mem_Len-1;j>=1;j--)
				  RSC_Register[j]=RSC_Register[j-1];
			RSC_Register[0]=0;
      }
      free(RSC_Register);
}

⌨️ 快捷键说明

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