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

📄 symbol_mapping.c

📁 本程序为通信系统中的数据调制
💻 C
字号:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <windows.h>
#include "wimax.h"

//Symbol Mapping/De_Mapping

void QPSKmapping(int* input, int* output, int counter)
{
int i;
for (i=0; i<counter; i++)
	{
	if (input[i] == 0)
		output[i] = -1;
	else
		output[i] = 1;
	}
}

void QPSKdemapping(int* input, int* output, int counter)
{
int i;
for (i=0; i<counter; i++)
	{
	if (input[i] < -0.5)
		output[i] = 0;
	else if (input[i] >= -0.5 && input[i] <= 0.5)
		if(DEBUG_FLAG>3)printf("\nQPSK undeterminable at location %d",i);
	else	
	output[i] = 1;
	}
}

void QAM16mapping(int* input, int* output, int* counter)
{
	int i;	
	if ((*counter % 2) != 0)
		{
		*counter += 1;
		input[*counter+1] = 0;
		if(DEBUG_FLAG>3)printf("\nTo form 2-bit sets across the input stream, a '0' was added as the last bit.");	
		}
	for (i=0; i<*counter; i++)
	output[i] = (-2*input[2*i]+1)*(2*input[2*i+1]+1);
}

void QAM16demapping(double* input, int* output, int counter)
{
int i;
for (i=0; i<counter; i++)
	{
	if (input[i] <= -2)
		{
		output[2*i] = 1;
		output[2*i+1] = 1;
		}
	else if (input[i] > -2 && input[i] < -0.5)
		{
		output[2*i] = 1;
		output[2*i+1] = 0;
		}
	else if (input[i] >= -0.5 && input[i] <= 0.5)
		if(DEBUG_FLAG>3)printf("\n16QAM undeterminable at location %d",i);
	else if (input[i] > 0.5 && input[i] < 2)
		{
		output[2*i] = 0;
		output[2*i+1] = 0;
		}
	else
		{
		output[2*i] = 0;
		output[2*i+1] = 1;
		}
	}
}

void QAM64mapping(int* input, int* output, int* counter)
{
	int i;	
	if ((*counter % 3) != 0)
	{
		(*counter) += 1;
		if ((*counter % 3) != 0)
			{
			*counter += 1;
			if(DEBUG_FLAG>3)printf("\nTo form 3-bit sets across the input stream, 2 '0's were added as the last bits.");	
			}
		else
			if(DEBUG_FLAG>3)
printf("\nTo form 3-bit sets across the input stream, a '0' was added as the last bit.");	
	}
	for (i=0; i<*counter; i++)
	output[i] = ((-2)*input[3*i]+1)*(4+((-2)*input[3*i+1]+1)*((-2)*input[3*i+2]+3));
}

void QAM64demapping(int* input, int* output, int counter)
{
int i;
for (i=0; i<counter; i++)
	{
	if (input[i] < -6)
		{
		output[3*i] = 1;
		output[3*i+1] = 0;
		output[3*i+2] = 0;
		}
	else if (input[i] >= -6 && input[i] < -4)
		{
		output[3*i] = 1;
		output[3*i+1] = 0;
		output[3*i+2] = 1;
		}
	else if (input[i] >= -4 && input[i] < -2)
		{
		output[3*i] = 1;
		output[3*i+1] = 1;
		output[3*i+2] = 1;
		}
	else if (input[i] >= -2 && input[i] < -0.5)
		{
		output[3*i] = 1;
		output[3*i+1] = 1;
		output[3*i+2] = 0;
		}
	else if (input[i] >= -0.5 && input[i] <= 0.5)
		if(DEBUG_FLAG>3)printf("\n64QAM undeterminable at location %d",i);
	else if (input[i] > 0.5 && input[i] < 2)
		{
		output[3*i] = 0;
		output[3*i+1] = 1;
		output[3*i+2] = 0;
		}
	else if (input[i] >= 2 && input[i] < 4)
		{
		output[3*i] = 0;
		output[3*i+1] = 1;
		output[3*i+2] = 1;
		}
	else if (input[i] >= 4 && input[i] < 6)
		{
		output[3*i] = 0;
		output[3*i+1] = 0;
		output[3*i+2] = 1;
		}
	else
		{
		output[3*i] = 0;
		output[3*i+1] = 0;
		output[3*i+2] = 0;
		}
	}
}

⌨️ 快捷键说明

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