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