📄 dispinitpara.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 + -