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

📄 dlccencoding.cpp

📁 在vc上做的802.16d ofdm phy的仿真
💻 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 + -