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

📄 dispinitpara.cpp

📁 这是校验位打孔重传的源程序
💻 CPP
字号:
#include "parameter_sets.h"

int DispInitParaF(struct BasicParaS * ctrl) 
{

	// Declaration
	FILE * fpInitPara;
	char buffer[120];
	int i;
	float temp = 0;
	const char * Mode[2] = {"normal", "debug"};
	const char * Modulation_Type_S[4] = {"BPSK", "QPSK", "16QAM", "64QAM"};
	const char * Decoding_Type_S[3] = {"Sum-Product", "Log-Sum-Product", "Min-Sum"};
	const char * Noise_Mode_S[2] = {"Eb/No", "SNR"};
	const char * CodeRate[6] = {"1/4", "1/3", "1/2", "2/3", "3/4", "5/6"};
	double coderated[6] = {4, 3, 2, 1.5, 4.0/3, 1.2};

	// Initialization
	if ((fpInitPara = fopen("InitPara.ini", "r")) == NULL)
		exit(EXIT_FAILURE);

	fgets(buffer, 120, fpInitPara);				//读取现在状态是debug还是normal,存放在ctrl->mode中
	fgets(buffer, 120, fpInitPara);
	fgets(buffer, 120, fpInitPara);
	fgets(buffer, 120, fpInitPara);
	fscanf(fpInitPara, "%s", &buffer);
	printf("The current mode is %s ..\n", buffer);
	for (i=0; i<2; i++) 
	{
		if (strcmp(buffer, Mode[i]) == 0) 
		{
			ctrl->mode = i;
			break;
		}
	}

	fgets(buffer, 120, fpInitPara);				//读取信息位长度,存放在ctrl->codeK
	fgets(buffer, 120, fpInitPara);
	fscanf(fpInitPara, "%d", &ctrl->codeK);
	printf("The length of info bits is %d ..\n", ctrl->codeK);

	fgets(buffer, 120, fpInitPara);				//读取码率,并将其倒数存放在ctrl->r中
	fgets(buffer, 120, fpInitPara);
	fscanf(fpInitPara, "%s", &buffer);
	printf("The code rate is %s ..\n", buffer);
	for (i=0; i<6; i++)
	{
		if (strcmp(buffer, CodeRate[i]) == 0) 
		{
			ctrl->r = coderated[i];
			break;
		}
	}

	fgets(buffer, 120, fpInitPara);				//读取调制方式,并存放在ctrl->typeModu中
	fgets(buffer, 120, fpInitPara);
	fscanf(fpInitPara, "%s", &buffer);
	printf("The type of modulation is %s ..\n", buffer);
  	for (i=0; i<4; i++) 
	{
		if (strcmp(buffer, Modulation_Type_S[i]) == 0) 
		{
			ctrl->typeModu = i;
			break;
		}
	}

	fgets(buffer, 120, fpInitPara);				//读取译码算法,并存放在typeDecode中
	fgets(buffer, 120, fpInitPara);
	fscanf(fpInitPara, "%s", &buffer);
	printf("The type of decoding algorithm is %s ..\n", buffer);
 	for (i=0; i<3; i++) 
	{
		if (strcmp(buffer, Decoding_Type_S[i]) == 0) 
		{
			ctrl->typeDecode = i;
			break;
		}
	}
  	
	fgets(buffer, 120, fpInitPara);				//读取迭代次数,并存放在ctrl->maxIter中
	fgets(buffer, 120, fpInitPara);
	fscanf(fpInitPara, "%d", &ctrl->maxIter);
	if (ctrl->maxIter > 100) 
	{
		printf("Too many times !!! \n");
		return 1;
	} 
	else 
	{
		printf("The maximum time of iteration of decoding is %d ..\n", ctrl->maxIter);
	}
  	
	fgets(buffer, 120, fpInitPara);				//读取信噪比的方式并存放在ctrl->noiseMode中
	fgets(buffer, 120, fpInitPara);
	fscanf(fpInitPara, "%s", &buffer);
	printf("The relation between signal and noise is %s ..\n", buffer);
  	for (i=0; i<2; i++) 
	{
		if (strcmp(buffer, Noise_Mode_S[i]) == 0) 
		{
			ctrl->noiseMode = i;
			break;
		}
	}
  	
	fgets(buffer, 120, fpInitPara);
	fgets(buffer, 120, fpInitPara);
	fscanf(fpInitPara, "%d", &ctrl->totalNumFrames);
	if (ctrl->totalNumFrames >= 20) 
	{
		printf("Too many points !!! \n");
		return 1;
	} 
	else 
	{
		printf("The number of points of Eb/No is %d ..\n", ctrl->totalNumFrames);
	}

	fgets(buffer, 120, fpInitPara);				//存放每个Eb/No的值在ctrl->Eb_No[i]中
	fgets(buffer, 120, fpInitPara);
	printf("The range of Eb/No is: ");
	for (i=0; i<ctrl->totalNumFrames; i++) 
	{
		fscanf(fpInitPara, "%f", &temp);
		ctrl->Eb_No[i] = temp;
		printf("%.2f ", temp);
	}
	printf("\n");

	fgets(buffer, 120, fpInitPara);				//存放每个Eb/No要跑的帧数在ctrl->numFrames[i]中
	fgets(buffer, 120, fpInitPara);
	printf("The number of frames per Eb/No is: ");
	for (i=0; i<ctrl->totalNumFrames; i++) 
	{
		fscanf(fpInitPara, "%d", &ctrl->numFrames[i]);
		printf("%d ", ctrl->numFrames[i]);
	}
	printf("\n");

	// Generate some basic parameters
	ctrl->codeN = (int)(ctrl->r*ctrl->codeK);	//码长=码率的倒数*码长
	ctrl->numRows = 16;							//校验矩阵行数
	ctrl->numCols = 32;							//校验矩阵列数
	ctrl->zfactor = CalcZfactorF(ctrl->codeK, ctrl->codeN);	//
	ctrl->numOutBits = ctrl->numCols*ctrl->zfactor;
	ctrl->codeM = ctrl->codeN - ctrl->codeK;	//校验位个数
	ctrl->numVar = ctrl->numOutBits;			
	ctrl->numChk = ctrl->numRows*ctrl->zfactor;
	ctrl->numInBits = ctrl->numOutBits - ctrl->numChk;

	
	fclose(fpInitPara);

	return 0;
}

⌨️ 快捷键说明

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