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

📄 encode.c

📁 RCPC编码
💻 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 + -