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

📄 main.c

📁 介绍了ldpc编码相关的设计与实现
💻 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 + -