📄 spc_encoder.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 + -