📄 turbo_code.cpp
字号:
//**PCCC型Turbo码编码,由约束长度为3,**//
//**生成矩阵为(7,5)的两个相同的递归系统卷积码作为分量码**//
#include<stdio.h>
#include<math.h>
#define SIZE 9
#define L 3
int RSC(int a,int *t1,int *t2) //分量编码器//
{int b,c;
b=a^*t1^*t2;
c=b^*t2;
*t2=*t1;
*t1=b;
return(c);
}
void main()
{int u[SIZE],u1[SIZE],c0[SIZE],c1[SIZE],c2[SIZE],c[SIZE][2];
int i,j,*p1,*p2,k,k1,k2;
k1=0;k2=0;
p1=&k1;p2=&k2; k=0;
printf("input the information stream:\n");
for (i=0;i<SIZE;i++)
scanf("%d",&u[i]);
printf("\n");
for(i=0;i<SIZE;i++) //未经交织的信息序列经分量编码器后的系统输出和校验输出//
{c0[i]=u[i];
c1[i]=RSC(u[i],p1,p2);
}
int interlace[L][L]; //以下为交织器//
for(i=0;i<L;i++)
for(j=0;j<L;j++)
{interlace[i][j]=u[k];
k++;
}
k=0;
for(j=0;j<L;j++)
for(i=0;i<L;i++)
{u1[k]= interlace[i][j];
k++;
}
p1=&k1;p2=&k2; //移位寄存器置零//
for(i=0;i<SIZE;i++) //交织后的信息序列经分量编码器后的校验输出//
c2[i]=RSC(u1[i],p1,p2);
for(i=0;i<SIZE;i++) //经删余矩阵复接//
for(j=0;j<2;j++)
if(j==0)
c[i][j]=c0[i];
else
{if(i%2==0)
c[i][j]=c1[i];
else
c[i][j]=c2[i];
}
for(i=0;i<SIZE;i++) //输出编码后的码字//
{for(j=0;j<2;j++)
printf("%d",c[i][j]);
printf("\t");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -