📄 dlccencoding.cpp
字号:
//#include "dlTxBurstData.h"
#include "stdio.h"
#include "typedef.h"
void ccCoreEncoding(Uint8 *pCcEncBitOut, Uint8 *pCcEncBitIn,
Uint16 ccEncBitInLength,Uint8 *pStateRegister)
{
/* unsigned short workBench = 0;
for (int i = 0; i < ccEncBitInLength; i++)
{
workBench ^= ccEncodingPoly * *pCcEncBitIn++;
for (int j = 0; j < ccCodeRate; j++)
{
*pCcEncBitOut++ = workBench & 1;
workBench >>= 1;
}
}*/
Uint16 i;
Uint8 xOut = 0;
Uint8 yOut = 0;
for( i = 0; i < ccEncBitInLength; i++)
{
*pStateRegister <<= 1;
*pStateRegister |= *pCcEncBitIn++;
xOut = (*pStateRegister & 1) ^ (*pStateRegister >> 1 & 1)
^ (*pStateRegister >> 2 & 1) ^ (*pStateRegister >> 3 & 1)
^ (*pStateRegister >> 6 & 1);
yOut = (*pStateRegister & 1) ^ (*pStateRegister >> 2 & 1)
^ (*pStateRegister >> 3 & 1) ^ (*pStateRegister >> 5 & 1)
^ (*pStateRegister >> 6 & 1);
*pCcEncBitOut++ = xOut;
*pCcEncBitOut++ = yOut;
}
}
/********************************************************************************
* Function : ccEncoding()
*
* Functionality : convolutional encoding for rate 1/2 2/3 3/4 5/6
*
* input :
* *ccEncodingIn
* ccEncodingInLength : in bytes
*
* output :
* *ccEncodingOut
* ccEncodingOutLength : in bits
*******************************************************************************/
void dlCcEncoding (Uint8 mode,
Uint8 *pCcEncodingIn,
Uint16 ccEncodingInLength,
Uint8 ccRate,
Uint8 *pCcEncodingOut,
Uint16 ccEncodingOutLength,
Uint8 *pStateRegister)
{
Uint16 i;
Uint16 j;
Uint8 ccBitIn[1920];
Uint16 ccBitInLength;
Uint8 *pCcBitIn;
pCcBitIn = ccBitIn;
for (i = 0; i < ccEncodingInLength; i++)
{
for (j = 0; j < 8; j++)
{
*pCcBitIn++ = (*pCcEncodingIn >> (7 - j)) & 1;
}
pCcEncodingIn++;
}
pCcBitIn = ccBitIn;
ccBitInLength = ccEncodingInLength * 8;
ccCoreEncoding(pCcEncodingOut,pCcBitIn,ccBitInLength,pStateRegister);
switch(ccRate)
{
case ONE_HALF:
// ccEncodingOutLength = 2 * ccBitInLength;
break;
case TWO_THIRDS:
for (i = 0; i < ccBitInLength/2; i++)
{
pCcEncodingOut[3*i] = pCcEncodingOut[4*i];
pCcEncodingOut[3*i+1] = pCcEncodingOut[4*i+1];
pCcEncodingOut[3*i+2] = pCcEncodingOut[4*i+3];
}
// ccEncodingOutLength = 3 * ccBitInLength/2;
break;
case THREE_FOURTHS:
for (i = 0; i < ccBitInLength/3; i++)
{
pCcEncodingOut[4*i] = pCcEncodingOut[6*i];
pCcEncodingOut[4*i+1] = pCcEncodingOut[6*i+1];
pCcEncodingOut[4*i+2] = pCcEncodingOut[6*i+3];
pCcEncodingOut[4*i+3] = pCcEncodingOut[6*i+4];
}
// ccEncodingOutLength = 4 * ccBitInLength/3;
break;
case FIVE_SIXTHS:
for (i = 0; i < ccBitInLength/5; i++)
{
pCcEncodingOut[6*i] = pCcEncodingOut[10*i];
pCcEncodingOut[6*i+1] = pCcEncodingOut[10*i+1];
pCcEncodingOut[6*i+2] = pCcEncodingOut[10*i+3];
pCcEncodingOut[6*i+3] = pCcEncodingOut[10*i+4];
pCcEncodingOut[6*i+4] = pCcEncodingOut[10*i+7];
pCcEncodingOut[6*i+5] = pCcEncodingOut[10*i+8];
}
// ccEncodingOutLength = 6 * ccBitInLength/5;
break;
default:
printf("the code rate for convolutional coding is available!");
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -