📄 encode.c
字号:
/*************************************************************************
函数名:code_conv
功能:实现卷积编码,生成式为:0x79,0x75,Ox5B;
输入:data[length]
输出:encode[size_rcpc]
说明:
RCPC的编码是在卷积码编码的基础上,根据删除图形来确定三个加法器的输出
是否删除。
本程序设计时,采用以下准则:
当a[][]为0时,加法器对输入信息不进行编码
当a[][]为1时,加法器对输入信息按卷积码编码方式进行编码,
**************************************************************************/
//#define TEST
#include <stdio.h>
#include "config.h"
#define Mask 0x7f//用来取出input的后7位
extern unsigned short int data[length]; //引用在main函数中写入的原信息序列。
extern unsigned short int a[3][period];//引用一个选取的删除图形
void encode()
{unsigned short int input=0;//将当前输入和之前输入的6个bit都保存在一个整型数中
//定义了一个长度为length的数据块,每个数组元素为需要编码的信息比特。
//编码顺序为从数组下标为0开始直至最后一个数组元素
//注意编码前的信息比特最后已经是包括了6个值为0的尾比特,这些尾比特是用于译码时收敛路径。
unsigned short int encode[size_rcpc]={0};//RCPC的编码输出
unsigned short int i; //using for loop
unsigned short int *p;
/*===========================以下用于测试=================================*/
#ifdef TEST
unsigned short int encode_VA[3*length]={0};//这个是不使用RCPC时卷积码的输出
unsigned short int *q;
q=encode_VA;
printf("this is the decode of convolutional:\n");
for(i=0;i<length;i++)
{input=((input<<1)&Mask)+data[i];
*q=(input&0x40)>>6^(input&0x8)>>3^(input&0x4)>>2^(input&0x2)>>1^data[i];
printf("%d,",*q);
q++;
*q=(input&0x40)>>6^(input&0x10)>>4^(input&0x4)>>2^(input&0x2)>>1^data[i];
printf("%d,",*q);
q++;
*q=(input&0x40)>>6^(input&0x20)>>5^(input&0x8)>>3^(input&0x4)>>2^data[i];
printf("%d,",*q);
q++;
}
printf("\n");
#endif
/*========================================================================*/
p=encode;
printf("this is the RCPC encode:\n");
for(i=0;i<length;i++)
{input=((input<<1)&Mask)+data[i];//把输入寄存器左移一位后与当前输入重新组成一个7位
/******************************************************************************************
以下为按照生成多项式而产生的输出,这个输出是考虑了RCPC的删除图形的。
由于删除图形中,第一个加法器的输出全部保留,所以不需要判断。
第二个和第三个加法器依据删除图形,若删除,则不再编码,若不删除,卷积码编码
*******************************************************************************************/
*p=(input&0x40)>>6^(input&0x8)>>3^(input&0x4)>>2^(input&0x2)>>1^data[i];
printf("%d,",*p);
p++;
if(a[1][i%period]==1)
{*p=(input&0x40)>>6^(input&0x10)>>4^(input&0x4)>>2^(input&0x2)>>1^data[i];
printf("%d,",*p);
p++;}
if(a[2][i%period]==1)
{*p=(input&0x40)>>6^(input&0x20)>>5^(input&0x8)>>3^(input&0x4)>>2^data[i];
printf("%d,",*p);
p++;}
}
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -