?? 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 + -