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

📄 updating.cpp

📁 这个是数据打孔重传程序的源代码
💻 CPP
字号:
#include "parameter_sets.h"

double * Updating1F(struct BasicParaS * ctrl,  double * input)
{

	int i;
	double * output;
	
	output = new double[ctrl->numOutBits];
	for (i=0; i<ctrl->numOutBits; i++)
	{
		*(output+i)= *(input+i);
	}

	return output;
}

//初始化第一级译码输入
//input1 为上一次译码后的似然比信息
//input2 为新得到的校验位信息
//numRetrans 为当前的重传数
double * Updating2F(struct BasicParaS * ctrl,  double * input1, double * input2, int numRetrans)
{
	int i, j, k;
	double * output;
	output = new double[ctrl->numOutBits];
	
	for (i=0; i<ctrl->numChk; i++)
	{
		* (output + i + ctrl->numInBits) = * (input2+i);
	}

	k=ctrl->codeK/ctrl->maxRetrans;
#ifdef DP1
	for (i=1; i<=ctrl->maxRetrans; i++)
	{
		if(i == numRetrans)
		{
			for (j=0; j<k; j++)
			{
				* (output+(i-1)*k + j) = *(input1 + (i-1)*k + j);
			}
			continue;
		}	
		if (ctrl->typeDecode==0)	//spa
		{
			for (j=0; j<k; j++)
			{
				* (output+(i-1)*k + j) = 0;
			}
		}
		else		//LSPA and SMA
		{
			for (j=0; j<k; j++)
			{
				* (output+(i-1)*k + j) = 10000.0;
			}
		}
	}

#endif

#ifdef DP2
	if (ctrl->typeDecode==0)
	{
		for (i=0; i<ctrl->numInBits; i++ )
			*(output+i) = 0;
	}
	else
	{
		for (i=0; i<ctrl->numInBits; i++)
			*(output+i) = 10000.0;
	}
	j=ctrl->maxRetrans-numRetrans;
	for (i=0; i<k; i++)
	{
		*(output+j*k+i) = *(input1+j*k +i);
	}
		
#endif
	
	return output;
}

//初始化第一级译码输入
//input1 为上一次译码后的似然比信息
//input2 为第一级译码后的似然比信息
//numRetrans 为当前的重传数
double * UpdatingF(struct BasicParaS * ctrl,  double * input1, double * input2, int numRetrans)
{
	int i,k;
	double * output;
	output = new double[ctrl->numOutBits];

	for (i=0; i<ctrl->numOutBits; i++)		//首先把所有上一次留下来的似然比赋值给输出
	{
		* (output+i) = *(input1+i) ;
	}

	k=ctrl->codeK/ctrl->maxRetrans;
	
#ifdef DP1
	for (i=0; i<k; i++)					//更新新的信息位
	{
		* (output+ (numRetrans-1)*k + i) = *(input2+ (numRetrans-1)*k + i);
	}
#endif

#ifdef DP2
	for (i=0; i<k; i++)					//更新新的信息位
	{
		* (output+ (ctrl->maxRetrans-numRetrans)*k + i) = *(input2+ (ctrl->maxRetrans-numRetrans)*k + i);
	}

#endif

	return output;
}

//根据输入判决
int * DecidingF(struct BasicParaS * ctrl,  double * input)
{
	int i;
	int * output;
	output= new int[ctrl->codeK];
	
	if (ctrl->typeDecode==0)		//SPA
	{
		for (i=0; i<ctrl->codeK; i++)
		{
			if ((*(input+i)) > 0.5)
				* (output+i) = 1;
			else
				* (output+i) = 0;
		}
	}
	else	//LSPA and SMA
	{
		for (i=0; i<ctrl->codeK; i++)
		{
			if ((*(input+i)) > 0)
				* (output+i) = 0;
			else
				* (output+i) = 1;
		}
	}
//	for (i=0; i<ctrl->codeK; i++)
//	{
//		* (output+i) = 0;
//	}


	return output;
}

⌨️ 快捷键说明

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