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

📄 datamodulation.cpp

📁 在vc上做的802.16d ofdm phy的仿真
💻 CPP
字号:
//#include "dlTxBurstData.h"
#include "stdio.h"  
#include "datamodulation.h"
#include "global_var.h"

void dataModulation(Uint8 subChannelIndex,Uint8 *pModulationIn , 
					Uint16 modulationInLength,Uint8	modulationType,
					Int16 qamAve,PilotParam *pPilotParam,
					Int16 *pModulationOut,Uint16  modulationOutLength)
{


	Int16 i;
	Uint8 outBit;
	Uint16 wk;
//	qamAve =(Int16)qamAve * 1.41421;
	qamAve = 2896;
	if(subChannelIndex == 16)
	{
		
	if(pPilotParam->ofdmSymIndex == 0)
	{
		pPilotParam->registers = pPilotParam->encodePoly;
	}
	wk = (pPilotParam->registers & 1);
	outBit = wk ^ ((pPilotParam->registers >> 2) & 1);
	pPilotParam->registers >>= 1;
	outBit <<= 10;
	pPilotParam->registers |= outBit;
	pPilotParam->ofdmSymIndex ++;
		
	switch (modulationType)
	{
	case BPSK:
		for(i = 0; i < 28; i++)
		{
        	*pModulationOut++ = 0;
			*pModulationOut++ = 0;
        } 
		for (i = 0; i < 201; i++)
		{
			switch(i)
			{
				case 12:
				case 62:
				case 163:
				case 188:	

					*pModulationOut++ = (1 - 2*wk) *  qamAve;
					*pModulationOut++ = 0;
					break;

				case 37:
				case 87:
				case 113:
				case 138:

					*pModulationOut++ = (1 - 2*(~wk&1)) * qamAve;
					*pModulationOut++ = 0;
					break;

				case 100:	

					*pModulationOut++ = 0;
					*pModulationOut++ = 0;
					break;

				default:

					*pModulationOut++ = bpskCoordinates[pModulationIn[0]];
           			*pModulationOut++ = 0;
					pModulationIn += 1;
           				break;
			}
		}
			
        for(i = 0; i < 27; i++)
		{
        	*pModulationOut++ = 0;
			*pModulationOut++ = 0;
        } 
	//	*modulationOutLength = 256;

		break;

	case QPSK:
	
		for(i = 0; i < 28; i++)
		{
        	*pModulationOut++ = 0;
			*pModulationOut++ = 0;
        } 

		for (i = 0; i < 201; i++)
		{
			switch(i)
			{
				case 12:
				case 62:
				case 163:
				case 188:
					
					*pModulationOut++ = (1 - 2*wk) *  qamAve;
					*pModulationOut++ = 0;
					break;

				case 37:
				case 87:
				case 113:
				case 138:
					
					*pModulationOut++ = (1 - 2*(~wk&1)) * qamAve;
					*pModulationOut++ = 0;
					break;

				case 100:	

					*pModulationOut++ = 0;
					*pModulationOut++ = 0;
					break;

				default:	

					*pModulationOut++ = qpskCoordinates[pModulationIn[0]];
					*pModulationOut++ = qpskCoordinates[pModulationIn[1]];
					pModulationIn +=2;
           			break;
			}
		}
		
        for(i = 0; i < 27; i++)
		{
        	*pModulationOut++ = 0;
			*pModulationOut++ = 0;				
       	} 
	//	*modulationOutLength = 256;
		break;

	case QAM16:

		for(i = 0; i < 28; i++)
		{
        	*pModulationOut++ = 0;
			*pModulationOut++ = 0;
       	} 
        	
       	for (i = 0; i < 201;i++)
		{
			switch(i)
			{
				case 12:
				case 62:
				case 163:
				case 188:
					
					*pModulationOut++ = (1 - 2*wk) *  qamAve;
					*pModulationOut++ = 0;
					break;

				case 37:
				case 87:
				case 113:
				case 138:
					
					*pModulationOut++ = (1 - 2*(~wk&1)) * qamAve;
					*pModulationOut++ = 0;
					break;

				case 100:	

					*pModulationOut++ = 0;
					*pModulationOut++ = 0;
					break;

				default:
					
					*pModulationOut++ =
		   	    				qam16Coordinates[(pModulationIn[0]<<1)^pModulationIn[1]];
					*pModulationOut++ =
		   	    				qam16Coordinates[(pModulationIn[2]<<1)^pModulationIn[3]];
					pModulationIn += 4;
           			break;
			}
		}
		
       	for(i = 0; i < 27; i++)
		{
        	*pModulationOut++ = 0;
			*pModulationOut++ = 0;
				
       	} 	
	//	*modulationOutLength = 256;
		break;

	case QAM64:
		for(i = 0; i < 28; i++)
		{
        	*pModulationOut++ = 0;
			*pModulationOut++ = 0;
        } 
        	
        for (i = 0; i < 201;i++)
		{
			switch(i)
			{
				case 12:
				case 62:
				case 163:
				case 188:
					
					*pModulationOut++ = (1 - 2*wk) *  qamAve;
					*pModulationOut++ = 0;
					break;

				case 37:
				case 87:
				case 113:
				case 138:
					
					*pModulationOut++ = (1 - 2*(~wk&1)) * qamAve;
					*pModulationOut++ = 0;
					break;

				case 100:	

					*pModulationOut++ = 0;
					*pModulationOut++ = 0;
					break;

				default:	
					*pModulationOut++ =
		   	    				qam64Coordinates[(pModulationIn[0]<<2)^(pModulationIn[1]<<1)^pModulationIn[2]];
		    		*pModulationOut++ =
		   	    				qam64Coordinates[(pModulationIn[3]<<2)^(pModulationIn[4]<<1)^pModulationIn[5]];
		    				
					pModulationIn += 6;
           			break;
			}
		}
        	
       	for(i = 0; i < 27; i++)
		{
        	*pModulationOut++ = 0;	
			*pModulationOut++ = 0;
       	} 	
	//	*modulationOutLength = 256;
		
		break;

	default:

		printf("the modulation type is not available! \n");

		break;
	}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -