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

📄 transfunctions.cpp

📁 扩展的直序扩频系统
💻 CPP
字号:
#include "Common.h"


void Modulation(IN int *DataBin, complex *TxSymbol)
{
	//!!! 0 map to -1 and 1 map to 1
	
	#if (BPS == 1)      //BPSK
		TxSymbol.real = (float)(2*DataBin[0] - 1);
		TxSymbol.imag = 0;
	#endif

	#if (BPS == 2)      //QPSK
		TxSymbol[0].real = (float)(2*DataBin[0] - 1);
		TxSymbol[0].imag = (float)(2*DataBin[1] - 1);
	#endif

}	

void Gen_Fuction(float *GenerateFunction)
{
	float GenerateFunction_1[1] = {1.f};
	
	float GenerateFunction_3[3] = {1.f,1.f,-1.f};
	
	float GenerateFunction_11[11] = {1.f, 1.f, 1.f, -1.f, -1.f, -1.f, 1.f, -1.f, -1.f, 1.f, -1.f};
	
	float GenerateFunction_13[13]	= {1.f, 1.f, 1.f, 1.f, 1.f, -1.f, -1.f, 1.f, 1.f, -1.f, 1.f, -1.f, 1.f};
	
	switch(Ns)
	{
	case 1:
		memcpy(GenerateFunction, GenerateFunction_1, Ns*sizeof(float));
		break;
	case 3:
		memcpy(GenerateFunction, GenerateFunction_3, Ns*sizeof(float));
		break;
	case 11:
		memcpy(GenerateFunction, GenerateFunction_11, Ns*sizeof(float));
		break;
	case 13:
		memcpy(GenerateFunction, GenerateFunction_13, Ns*sizeof(float));
		break;
		
	default :
		printf("Can not support this BarkerCode!\n");		
	}
}

void Gen_msequence(complex *mseq)
{
	complex msequence15[15] = 
	{
		{-1.f, -1.f}, {1.f, 1.f}, {-1.f, -1.f}, {-1.f, -1.f}, 
		{1.f, 1.f}, {1.f, 1.f}, {-1.f, -1.f}, {1.f, 1.f},  
		{-1.f, -1.f}, {1.f, 1.f}, {1.f, 1.f}, {1.f, 1.f}, 
		{1.f, 1.f}, {-1.f, -1.f}, {-1.f, -1.f}
	}; 
/*	complex msequence15[15] = 
	{
		{-1.f, 1.f}, {1.f, 1.f}, {-1.f, 1.f}, {-1.f, 1.f}, 
		{1.f, 1.f}, {1.f, 1.f}, {-1.f, 1.f}, {1.f, 1.f},  
		{-1.f, 1.f}, {1.f, 1.f}, {1.f, 1.f}, {1.f, 1.f}, 
		{1.f, 1.f}, {-1.f, 1.f}, {-1.f, 1.f}
	};  */

	complex msequence16[16] = 
	{
		{-1.f, -1.f}, {1.f, 1.f}, {-1.f, -1.f}, {-1.f, -1.f}, 
		{1.f, 1.f}, {1.f, 1.f}, {-1.f, -1.f}, {1.f, 1.f},  
		{-1.f, -1.f}, {1.f, 1.f}, {1.f, 1.f}, {1.f, 1.f}, 
		{1.f, 1.f}, {-1.f, -1.f}, {-1.f, -1.f}, {-1.f, -1.f}
	};
	
	switch(PREAMBLE_LENGTH)
	{
	    case 15:
			memcpy(mseq, msequence15, PREAMBLE_LENGTH*sizeof(complex));
			break;
			
		case 16:
			memcpy(mseq, msequence16, PREAMBLE_LENGTH*sizeof(complex));
			break;
			
		default :
			printf("Can not support this m_sequence!\n");		
	}
}

void SpreadSprectrum(IN complex *TxSymbol, OUT complex *SpreadSignal)
{
	int i=0;
	float *BarkerCode;

	BarkerCode = (float *)calloc(Ns, sizeof(float));    //可当作数组使用!
	memset(BarkerCode, 0, Ns*sizeof(float));
	Gen_Fuction(BarkerCode);    

	for (i=0; i<Ns; i++)
	{
		SpreadSignal[i] = ComplexMulR(TxSymbol[0], BarkerCode[i]);
	}

	free(BarkerCode);
}

void Gen_Pulse(float *Pulse)
{
	float Pulse_1[1] = {1.f};
	
	float Pulse_4[4] = {0.00018697f, 0.11575f, 0.98651f, 0.11575f};
	
	float Pulse_8[8] = {0.00014482f, 0.0061567f, 0.089655f, 0.44721f, 0.76411f, 0.44721f, 0.089655f, 0.0061567f};
	
	switch(PULSE_SIZE)
	{
	case 1:
		memcpy(Pulse, Pulse_1, PULSE_SIZE*sizeof(float));
		break;
	case 4:
		memcpy(Pulse, Pulse_4, PULSE_SIZE*sizeof(float));
		break;
	case 8:
		memcpy(Pulse, Pulse_4, PULSE_SIZE*sizeof(float));
		break;
		
	default :
		printf("Can not support this Sampling rate!\n");		
	}	
}

void PulseShaping(IN complex *SpreadSignal, OUT complex *TxSignal)
{
	int i=0, j=0;
	float Pulse[PULSE_SIZE] = {0.f};

	Gen_Pulse(Pulse);

	for (i=0; i<Ns; i++)
	{
		for (j=0; j<PULSE_SIZE; j++)
		{
			TxSignal[i*PULSE_SIZE +j] = ComplexMulR(SpreadSignal[i], Pulse[j]);
		}
	}	
}

⌨️ 快捷键说明

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