📄 main.c
字号:
#include "time.h"
#include "LDPC.h"
#include "random.h"
void main()
{
FILE *fpLDPC;
double SNR;
double N0;
short *msg, *code, *dec;
double *llr_in, *llr_all;
int msgLen, codeLen;
int errors;
double ber;
int i, k;
double snr_min=0.0;
double snr_max=3.5;
double step=0.5;
int FrameNum=1;
//s1 = 32768; s2 = 131237;
srand((unsigned)time(NULL));
s1=rand();
s2=rand();
// LPDC initilization
fpLDPC = fopen("816.1A4.843.txt", "rb");
if (fpLDPC == NULL)
{
printf("can not open the LDPC data file\n");
exit(1);
}
LDPC_init(&ldpc_param, fpLDPC);
fclose(fpLDPC);
msgLen = ldpc_param.mat_param[0] - ldpc_param.mat_param[1];
codeLen = ldpc_param.mat_param[0];
msg = (short*) malloc(msgLen*sizeof(short));
code = (short*) malloc(codeLen*sizeof(short));
dec = (short*) malloc(codeLen*sizeof(short));
llr_in = (double*) malloc(codeLen*sizeof(double));
llr_all = (double*) malloc(codeLen*sizeof(double));
for(SNR=snr_min;SNR<snr_max;SNR+=step)
{
N0 = pow(10, -SNR/10)/2*codeLen/msgLen;
errors = 0;
if(SNR>1.5)
FrameNum=10000;
for(k=0; k<FrameNum; k++)
{
for(i=0; i<msgLen; i++)
{
msg[i] = generate_binary_source();
}
LDPC_encode(ldpc_param.GMatrix, msg, code, ldpc_param.mat_param);
for(i=0; i<codeLen; i++)
{
llr_in[i] = 2*code[i]-1 + generate_gaussian_source(N0);
llr_in[i] = 2*llr_in[i]/N0;
}
BP_decoding(llr_in, llr_all, dec, ldpc_param.MatCol, ldpc_param.MatRow, ldpc_param.mat_param, ldpc_param.iterC);
for(i=0; i<msgLen; i++)
{
if (dec[i] != msg[i])
{
errors++;
}
}
}
ber = (double) errors/FrameNum/msgLen;
printf("snr=%f\t errors=%d\t ber=%e\n",SNR,errors, ber);
}
free(ldpc_param.GMatrix);
free(ldpc_param.MatCol);
free(ldpc_param.MatRow);
free(msg);
free(code);
free(dec);
free(llr_all);
free(llr_in);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -